pion-5.0.4+dfsg.orig/0000755000372000001440000000000012215647143013742 5ustar robertouserspion-5.0.4+dfsg.orig/pion.xcodeproj/0000755000372000001440000000000012215647065016706 5ustar robertouserspion-5.0.4+dfsg.orig/pion.xcodeproj/project.pbxproj0000644000372000001440000036477612215647065022011 0ustar robertousers// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 6140E4F516111BED0052E5A0 /* decompressor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F216111BED0052E5A0 /* decompressor.hpp */; }; 6140E4F616111BED0052E5A0 /* parser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F316111BED0052E5A0 /* parser.hpp */; }; 6140E4F716111BED0052E5A0 /* types.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F416111BED0052E5A0 /* types.hpp */; }; 61AECCA0161268B300BF2B16 /* spdy_decompressor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61AECC9E161268B300BF2B16 /* spdy_decompressor.cpp */; }; 61AECCA1161268B300BF2B16 /* spdy_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61AECC9F161268B300BF2B16 /* spdy_parser.cpp */; }; 61AECCA4161269BF00BF2B16 /* spdy_parser_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61AECCA21612699D00BF2B16 /* spdy_parser_tests.cpp */; }; E31BC82715C1D24600168895 /* error.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E31BC82615C1D24600168895 /* error.hpp */; }; E3474E66162E0D99003AA5ED /* admin_rights.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5815BF2D0E00D76F6C /* admin_rights.hpp */; }; E3474E67162E0D99003AA5ED /* algorithm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5915BF2D0E00D76F6C /* algorithm.hpp */; }; E3474E68162E0D99003AA5ED /* config.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5A15BF2D0E00D76F6C /* config.hpp */; }; E3474E69162E0D99003AA5ED /* hash_map.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5C15BF2D0E00D76F6C /* hash_map.hpp */; }; E3474E6A162E0D99003AA5ED /* logger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5D15BF2D0E00D76F6C /* logger.hpp */; }; E3474E6B162E0D99003AA5ED /* plugin_manager.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5E15BF2D0E00D76F6C /* plugin_manager.hpp */; }; E3474E6C162E0D99003AA5ED /* plugin.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5F15BF2D0E00D76F6C /* plugin.hpp */; }; E3474E6D162E0D99003AA5ED /* process.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE6015BF2D0E00D76F6C /* process.hpp */; }; E3474E6E162E0D99003AA5ED /* scheduler.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE6115BF2D0E00D76F6C /* scheduler.hpp */; }; E3474E6F162E0D99003AA5ED /* connection.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7015BF2D4700D76F6C /* connection.hpp */; }; E3474E70162E0D99003AA5ED /* server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7115BF2D4700D76F6C /* server.hpp */; }; E3474E71162E0D99003AA5ED /* stream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7215BF2D4700D76F6C /* stream.hpp */; }; E3474E72162E0D99003AA5ED /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7315BF2D4700D76F6C /* timer.hpp */; }; E3474E73162E0D99003AA5ED /* auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7815BF2D5B00D76F6C /* auth.hpp */; }; E3474E74162E0D99003AA5ED /* basic_auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7915BF2D5B00D76F6C /* basic_auth.hpp */; }; E3474E75162E0D99003AA5ED /* cookie_auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7A15BF2D5B00D76F6C /* cookie_auth.hpp */; }; E3474E76162E0D99003AA5ED /* message.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7B15BF2D5B00D76F6C /* message.hpp */; }; E3474E77162E0D99003AA5ED /* parser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7C15BF2D5B00D76F6C /* parser.hpp */; }; E3474E78162E0D99003AA5ED /* plugin_server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7D15BF2D5B00D76F6C /* plugin_server.hpp */; }; E3474E79162E0D99003AA5ED /* plugin_service.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7E15BF2D5B00D76F6C /* plugin_service.hpp */; }; E3474E7A162E0D99003AA5ED /* reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7F15BF2D5B00D76F6C /* reader.hpp */; }; E3474E7B162E0D99003AA5ED /* request_reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8015BF2D5B00D76F6C /* request_reader.hpp */; }; E3474E7C162E0D99003AA5ED /* request_writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8115BF2D5B00D76F6C /* request_writer.hpp */; }; E3474E7D162E0D99003AA5ED /* request.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8215BF2D5B00D76F6C /* request.hpp */; }; E3474E7E162E0D99003AA5ED /* response_reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8315BF2D5B00D76F6C /* response_reader.hpp */; }; E3474E7F162E0D99003AA5ED /* response_writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8415BF2D5B00D76F6C /* response_writer.hpp */; }; E3474E80162E0D99003AA5ED /* response.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8515BF2D5B00D76F6C /* response.hpp */; }; E3474E81162E0D99003AA5ED /* server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8615BF2D5B00D76F6C /* server.hpp */; }; E3474E82162E0D99003AA5ED /* types.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8715BF2D5B00D76F6C /* types.hpp */; }; E3474E83162E0D99003AA5ED /* writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8915BF2D5B00D76F6C /* writer.hpp */; }; E3474E84162E0D99003AA5ED /* error.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E31BC82615C1D24600168895 /* error.hpp */; }; E3474E85162E0D99003AA5ED /* user.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E3A00AE915CC740A00F79569 /* user.hpp */; }; E3474E86162E0D99003AA5ED /* decompressor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F216111BED0052E5A0 /* decompressor.hpp */; }; E3474E87162E0D99003AA5ED /* parser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F316111BED0052E5A0 /* parser.hpp */; }; E3474E88162E0D99003AA5ED /* types.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F416111BED0052E5A0 /* types.hpp */; }; E3474E8A162E0D99003AA5ED /* admin_rights.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9C15BF2D8A00D76F6C /* admin_rights.cpp */; }; E3474E8B162E0D99003AA5ED /* algorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9D15BF2D8A00D76F6C /* algorithm.cpp */; }; E3474E8C162E0D99003AA5ED /* http_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9E15BF2D8A00D76F6C /* http_auth.cpp */; }; E3474E8D162E0D99003AA5ED /* http_basic_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9F15BF2D8A00D76F6C /* http_basic_auth.cpp */; }; E3474E8E162E0D99003AA5ED /* http_cookie_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA015BF2D8A00D76F6C /* http_cookie_auth.cpp */; }; E3474E8F162E0D99003AA5ED /* http_message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA115BF2D8A00D76F6C /* http_message.cpp */; }; E3474E90162E0D99003AA5ED /* http_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA215BF2D8A00D76F6C /* http_parser.cpp */; }; E3474E91162E0D99003AA5ED /* http_plugin_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA315BF2D8A00D76F6C /* http_plugin_server.cpp */; }; E3474E92162E0D99003AA5ED /* http_reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA415BF2D8A00D76F6C /* http_reader.cpp */; }; E3474E93162E0D99003AA5ED /* http_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA515BF2D8A00D76F6C /* http_server.cpp */; }; E3474E94162E0D99003AA5ED /* http_types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA615BF2D8A00D76F6C /* http_types.cpp */; }; E3474E95162E0D99003AA5ED /* http_writer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA715BF2D8A00D76F6C /* http_writer.cpp */; }; E3474E96162E0D99003AA5ED /* logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA815BF2D8A00D76F6C /* logger.cpp */; }; E3474E97162E0D99003AA5ED /* plugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA915BF2D8A00D76F6C /* plugin.cpp */; }; E3474E98162E0D99003AA5ED /* process.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAA15BF2D8A00D76F6C /* process.cpp */; }; E3474E99162E0D99003AA5ED /* scheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAB15BF2D8A00D76F6C /* scheduler.cpp */; }; E3474E9A162E0D99003AA5ED /* tcp_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAC15BF2D8A00D76F6C /* tcp_server.cpp */; }; E3474E9B162E0D99003AA5ED /* tcp_timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAD15BF2D8A00D76F6C /* tcp_timer.cpp */; }; E3474E9C162E0D99003AA5ED /* spdy_decompressor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61AECC9E161268B300BF2B16 /* spdy_decompressor.cpp */; }; E3474E9D162E0D99003AA5ED /* spdy_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61AECC9F161268B300BF2B16 /* spdy_parser.cpp */; }; E3474EE7162E1053003AA5ED /* admin_rights.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5815BF2D0E00D76F6C /* admin_rights.hpp */; }; E3474EE8162E1053003AA5ED /* algorithm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5915BF2D0E00D76F6C /* algorithm.hpp */; }; E3474EE9162E1053003AA5ED /* config.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5A15BF2D0E00D76F6C /* config.hpp */; }; E3474EEA162E1053003AA5ED /* hash_map.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5C15BF2D0E00D76F6C /* hash_map.hpp */; }; E3474EEB162E1053003AA5ED /* logger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5D15BF2D0E00D76F6C /* logger.hpp */; }; E3474EEC162E1053003AA5ED /* plugin_manager.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5E15BF2D0E00D76F6C /* plugin_manager.hpp */; }; E3474EED162E1053003AA5ED /* plugin.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5F15BF2D0E00D76F6C /* plugin.hpp */; }; E3474EEE162E1053003AA5ED /* process.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE6015BF2D0E00D76F6C /* process.hpp */; }; E3474EEF162E1053003AA5ED /* scheduler.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE6115BF2D0E00D76F6C /* scheduler.hpp */; }; E3474EF0162E1053003AA5ED /* connection.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7015BF2D4700D76F6C /* connection.hpp */; }; E3474EF1162E1053003AA5ED /* server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7115BF2D4700D76F6C /* server.hpp */; }; E3474EF2162E1053003AA5ED /* stream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7215BF2D4700D76F6C /* stream.hpp */; }; E3474EF3162E1053003AA5ED /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7315BF2D4700D76F6C /* timer.hpp */; }; E3474EF4162E1053003AA5ED /* auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7815BF2D5B00D76F6C /* auth.hpp */; }; E3474EF5162E1053003AA5ED /* basic_auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7915BF2D5B00D76F6C /* basic_auth.hpp */; }; E3474EF6162E1053003AA5ED /* cookie_auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7A15BF2D5B00D76F6C /* cookie_auth.hpp */; }; E3474EF7162E1053003AA5ED /* message.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7B15BF2D5B00D76F6C /* message.hpp */; }; E3474EF8162E1053003AA5ED /* parser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7C15BF2D5B00D76F6C /* parser.hpp */; }; E3474EF9162E1053003AA5ED /* plugin_server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7D15BF2D5B00D76F6C /* plugin_server.hpp */; }; E3474EFA162E1053003AA5ED /* plugin_service.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7E15BF2D5B00D76F6C /* plugin_service.hpp */; }; E3474EFB162E1053003AA5ED /* reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7F15BF2D5B00D76F6C /* reader.hpp */; }; E3474EFC162E1053003AA5ED /* request_reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8015BF2D5B00D76F6C /* request_reader.hpp */; }; E3474EFD162E1053003AA5ED /* request_writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8115BF2D5B00D76F6C /* request_writer.hpp */; }; E3474EFE162E1053003AA5ED /* request.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8215BF2D5B00D76F6C /* request.hpp */; }; E3474EFF162E1053003AA5ED /* response_reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8315BF2D5B00D76F6C /* response_reader.hpp */; }; E3474F00162E1053003AA5ED /* response_writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8415BF2D5B00D76F6C /* response_writer.hpp */; }; E3474F01162E1053003AA5ED /* response.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8515BF2D5B00D76F6C /* response.hpp */; }; E3474F02162E1053003AA5ED /* server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8615BF2D5B00D76F6C /* server.hpp */; }; E3474F03162E1053003AA5ED /* types.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8715BF2D5B00D76F6C /* types.hpp */; }; E3474F04162E1053003AA5ED /* writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8915BF2D5B00D76F6C /* writer.hpp */; }; E3474F05162E1053003AA5ED /* error.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E31BC82615C1D24600168895 /* error.hpp */; }; E3474F06162E1053003AA5ED /* user.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E3A00AE915CC740A00F79569 /* user.hpp */; }; E3474F07162E1053003AA5ED /* decompressor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F216111BED0052E5A0 /* decompressor.hpp */; }; E3474F08162E1053003AA5ED /* parser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F316111BED0052E5A0 /* parser.hpp */; }; E3474F09162E1053003AA5ED /* types.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F416111BED0052E5A0 /* types.hpp */; }; E3474F0B162E1053003AA5ED /* admin_rights.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9C15BF2D8A00D76F6C /* admin_rights.cpp */; }; E3474F0C162E1053003AA5ED /* algorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9D15BF2D8A00D76F6C /* algorithm.cpp */; }; E3474F0D162E1053003AA5ED /* http_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9E15BF2D8A00D76F6C /* http_auth.cpp */; }; E3474F0E162E1053003AA5ED /* http_basic_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9F15BF2D8A00D76F6C /* http_basic_auth.cpp */; }; E3474F0F162E1053003AA5ED /* http_cookie_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA015BF2D8A00D76F6C /* http_cookie_auth.cpp */; }; E3474F10162E1053003AA5ED /* http_message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA115BF2D8A00D76F6C /* http_message.cpp */; }; E3474F11162E1053003AA5ED /* http_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA215BF2D8A00D76F6C /* http_parser.cpp */; }; E3474F12162E1053003AA5ED /* http_plugin_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA315BF2D8A00D76F6C /* http_plugin_server.cpp */; }; E3474F13162E1053003AA5ED /* http_reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA415BF2D8A00D76F6C /* http_reader.cpp */; }; E3474F14162E1053003AA5ED /* http_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA515BF2D8A00D76F6C /* http_server.cpp */; }; E3474F15162E1053003AA5ED /* http_types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA615BF2D8A00D76F6C /* http_types.cpp */; }; E3474F16162E1053003AA5ED /* http_writer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA715BF2D8A00D76F6C /* http_writer.cpp */; }; E3474F17162E1053003AA5ED /* logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA815BF2D8A00D76F6C /* logger.cpp */; }; E3474F18162E1053003AA5ED /* plugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA915BF2D8A00D76F6C /* plugin.cpp */; }; E3474F19162E1053003AA5ED /* process.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAA15BF2D8A00D76F6C /* process.cpp */; }; E3474F1A162E1053003AA5ED /* scheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAB15BF2D8A00D76F6C /* scheduler.cpp */; }; E3474F1B162E1053003AA5ED /* tcp_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAC15BF2D8A00D76F6C /* tcp_server.cpp */; }; E3474F1C162E1053003AA5ED /* tcp_timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAD15BF2D8A00D76F6C /* tcp_timer.cpp */; }; E3474F1D162E1053003AA5ED /* spdy_decompressor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61AECC9E161268B300BF2B16 /* spdy_decompressor.cpp */; }; E3474F1E162E1053003AA5ED /* spdy_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61AECC9F161268B300BF2B16 /* spdy_parser.cpp */; }; E35CCE6315BF2D0E00D76F6C /* admin_rights.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5815BF2D0E00D76F6C /* admin_rights.hpp */; }; E35CCE6415BF2D0E00D76F6C /* algorithm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5915BF2D0E00D76F6C /* algorithm.hpp */; }; E35CCE6515BF2D0E00D76F6C /* config.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5A15BF2D0E00D76F6C /* config.hpp */; }; E35CCE6715BF2D0E00D76F6C /* hash_map.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5C15BF2D0E00D76F6C /* hash_map.hpp */; }; E35CCE6815BF2D0E00D76F6C /* logger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5D15BF2D0E00D76F6C /* logger.hpp */; }; E35CCE6915BF2D0E00D76F6C /* plugin_manager.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5E15BF2D0E00D76F6C /* plugin_manager.hpp */; }; E35CCE6A15BF2D0E00D76F6C /* plugin.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5F15BF2D0E00D76F6C /* plugin.hpp */; }; E35CCE6B15BF2D0E00D76F6C /* process.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE6015BF2D0E00D76F6C /* process.hpp */; }; E35CCE6C15BF2D0E00D76F6C /* scheduler.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE6115BF2D0E00D76F6C /* scheduler.hpp */; }; E35CCE7415BF2D4700D76F6C /* connection.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7015BF2D4700D76F6C /* connection.hpp */; }; E35CCE7515BF2D4700D76F6C /* server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7115BF2D4700D76F6C /* server.hpp */; }; E35CCE7615BF2D4700D76F6C /* stream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7215BF2D4700D76F6C /* stream.hpp */; }; E35CCE7715BF2D4700D76F6C /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7315BF2D4700D76F6C /* timer.hpp */; }; E35CCE8A15BF2D5B00D76F6C /* auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7815BF2D5B00D76F6C /* auth.hpp */; }; E35CCE8B15BF2D5B00D76F6C /* basic_auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7915BF2D5B00D76F6C /* basic_auth.hpp */; }; E35CCE8C15BF2D5B00D76F6C /* cookie_auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7A15BF2D5B00D76F6C /* cookie_auth.hpp */; }; E35CCE8D15BF2D5B00D76F6C /* message.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7B15BF2D5B00D76F6C /* message.hpp */; }; E35CCE8E15BF2D5B00D76F6C /* parser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7C15BF2D5B00D76F6C /* parser.hpp */; }; E35CCE8F15BF2D5B00D76F6C /* plugin_server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7D15BF2D5B00D76F6C /* plugin_server.hpp */; }; E35CCE9015BF2D5B00D76F6C /* plugin_service.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7E15BF2D5B00D76F6C /* plugin_service.hpp */; }; E35CCE9115BF2D5B00D76F6C /* reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7F15BF2D5B00D76F6C /* reader.hpp */; }; E35CCE9215BF2D5B00D76F6C /* request_reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8015BF2D5B00D76F6C /* request_reader.hpp */; }; E35CCE9315BF2D5B00D76F6C /* request_writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8115BF2D5B00D76F6C /* request_writer.hpp */; }; E35CCE9415BF2D5B00D76F6C /* request.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8215BF2D5B00D76F6C /* request.hpp */; }; E35CCE9515BF2D5B00D76F6C /* response_reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8315BF2D5B00D76F6C /* response_reader.hpp */; }; E35CCE9615BF2D5B00D76F6C /* response_writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8415BF2D5B00D76F6C /* response_writer.hpp */; }; E35CCE9715BF2D5B00D76F6C /* response.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8515BF2D5B00D76F6C /* response.hpp */; }; E35CCE9815BF2D5B00D76F6C /* server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8615BF2D5B00D76F6C /* server.hpp */; }; E35CCE9915BF2D5B00D76F6C /* types.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8715BF2D5B00D76F6C /* types.hpp */; }; E35CCE9B15BF2D5B00D76F6C /* writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8915BF2D5B00D76F6C /* writer.hpp */; }; E35CCEAE15BF2D8A00D76F6C /* admin_rights.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9C15BF2D8A00D76F6C /* admin_rights.cpp */; }; E35CCEAF15BF2D8A00D76F6C /* algorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9D15BF2D8A00D76F6C /* algorithm.cpp */; }; E35CCEB015BF2D8A00D76F6C /* http_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9E15BF2D8A00D76F6C /* http_auth.cpp */; }; E35CCEB115BF2D8A00D76F6C /* http_basic_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9F15BF2D8A00D76F6C /* http_basic_auth.cpp */; }; E35CCEB215BF2D8A00D76F6C /* http_cookie_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA015BF2D8A00D76F6C /* http_cookie_auth.cpp */; }; E35CCEB315BF2D8A00D76F6C /* http_message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA115BF2D8A00D76F6C /* http_message.cpp */; }; E35CCEB415BF2D8A00D76F6C /* http_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA215BF2D8A00D76F6C /* http_parser.cpp */; }; E35CCEB515BF2D8A00D76F6C /* http_plugin_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA315BF2D8A00D76F6C /* http_plugin_server.cpp */; }; E35CCEB615BF2D8A00D76F6C /* http_reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA415BF2D8A00D76F6C /* http_reader.cpp */; }; E35CCEB715BF2D8A00D76F6C /* http_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA515BF2D8A00D76F6C /* http_server.cpp */; }; E35CCEB815BF2D8A00D76F6C /* http_types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA615BF2D8A00D76F6C /* http_types.cpp */; }; E35CCEB915BF2D8A00D76F6C /* http_writer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA715BF2D8A00D76F6C /* http_writer.cpp */; }; E35CCEBA15BF2D8A00D76F6C /* logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA815BF2D8A00D76F6C /* logger.cpp */; }; E35CCEBB15BF2D8A00D76F6C /* plugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA915BF2D8A00D76F6C /* plugin.cpp */; }; E35CCEBC15BF2D8A00D76F6C /* process.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAA15BF2D8A00D76F6C /* process.cpp */; }; E35CCEBD15BF2D8A00D76F6C /* scheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAB15BF2D8A00D76F6C /* scheduler.cpp */; }; E35CCEBE15BF2D8A00D76F6C /* tcp_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAC15BF2D8A00D76F6C /* tcp_server.cpp */; }; E35CCEBF15BF2D8A00D76F6C /* tcp_timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAD15BF2D8A00D76F6C /* tcp_timer.cpp */; }; E35CCF2315BF2F9300D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3615BF2FBA00D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3715BF2FBD00D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3815BF2FC000D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3915BF2FC400D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3A15BF2FC800D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3B15BF2FCB00D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3C15BF2FCE00D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3D15BF2FD100D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3E15BF2FFA00D76F6C /* hasCreateAndDestroy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEDC15BF2E4100D76F6C /* hasCreateAndDestroy.cpp */; }; E35CCF3F15BF2FFF00D76F6C /* hasCreateAndDestroy.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEDD15BF2E4100D76F6C /* hasCreateAndDestroy.hpp */; }; E35CCF4015BF300600D76F6C /* hasCreateButNoDestroy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEDE15BF2E4100D76F6C /* hasCreateButNoDestroy.cpp */; }; E35CCF4115BF301700D76F6C /* hasCreateButNoDestroy.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEDF15BF2E4100D76F6C /* hasCreateButNoDestroy.hpp */; }; E35CCF4215BF302200D76F6C /* hasNoCreate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEE015BF2E4100D76F6C /* hasNoCreate.cpp */; }; E35CCF4315BF302300D76F6C /* hasNoCreate.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEE115BF2E4100D76F6C /* hasNoCreate.hpp */; }; E35CCF4415BF303F00D76F6C /* InterfaceStub.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEE215BF2E4100D76F6C /* InterfaceStub.hpp */; }; E35CCF4515BF304300D76F6C /* InterfaceStub.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEE215BF2E4100D76F6C /* InterfaceStub.hpp */; }; E35CCF4615BF304700D76F6C /* InterfaceStub.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEE215BF2E4100D76F6C /* InterfaceStub.hpp */; }; E35CCF4715BF304C00D76F6C /* AllowNothingService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEC015BF2DB500D76F6C /* AllowNothingService.cpp */; }; E35CCF4815BF304E00D76F6C /* AllowNothingService.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEC115BF2DB500D76F6C /* AllowNothingService.hpp */; }; E35CCF4915BF305100D76F6C /* CookieService.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEC315BF2DB500D76F6C /* CookieService.hpp */; }; E35CCF4A15BF305200D76F6C /* CookieService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEC215BF2DB500D76F6C /* CookieService.cpp */; }; E35CCF4B15BF305800D76F6C /* EchoService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEC415BF2DB500D76F6C /* EchoService.cpp */; }; E35CCF4C15BF305A00D76F6C /* EchoService.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEC515BF2DB500D76F6C /* EchoService.hpp */; }; E35CCF4D15BF305D00D76F6C /* FileService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEC615BF2DB500D76F6C /* FileService.cpp */; }; E35CCF4E15BF305E00D76F6C /* FileService.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEC715BF2DB500D76F6C /* FileService.hpp */; }; E35CCF4F15BF306200D76F6C /* HelloService.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEC915BF2DB500D76F6C /* HelloService.hpp */; }; E35CCF5015BF306400D76F6C /* HelloService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEC815BF2DB500D76F6C /* HelloService.cpp */; }; E35CCF5115BF307100D76F6C /* LogService.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCECB15BF2DB500D76F6C /* LogService.hpp */; }; E35CCF5215BF307400D76F6C /* LogService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCECA15BF2DB500D76F6C /* LogService.cpp */; }; E35CCF5315BF307B00D76F6C /* piond.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCECD15BF2DC800D76F6C /* piond.cpp */; }; E35CCF5B15BF30A300D76F6C /* http_types_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED515BF2DE500D76F6C /* http_types_tests.cpp */; }; E35CCF6715BF30AA00D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF6D15BF30BE00D76F6C /* helloserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCECC15BF2DC800D76F6C /* helloserver.cpp */; }; E36D8BF40D29D72200B4C134 /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E370CF3B158E700F00E46EE9 /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E3A00AEA15CC740A00F79569 /* user.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E3A00AE915CC740A00F79569 /* user.hpp */; }; E3A1AE3215C878E100FFE9E3 /* piontests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED615BF2DE500D76F6C /* piontests.cpp */; }; E3A1AE3315C87FD500FFE9E3 /* algorithm_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCECE15BF2DE500D76F6C /* algorithm_tests.cpp */; }; E3A1AE3415C87FD500FFE9E3 /* file_service_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCECF15BF2DE500D76F6C /* file_service_tests.cpp */; }; E3A1AE3515C87FD500FFE9E3 /* http_message_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED015BF2DE500D76F6C /* http_message_tests.cpp */; }; E3A1AE3615C87FD500FFE9E3 /* http_parser_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED115BF2DE500D76F6C /* http_parser_tests.cpp */; }; E3A1AE3715C87FD500FFE9E3 /* http_plugin_server_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED215BF2DE500D76F6C /* http_plugin_server_tests.cpp */; }; E3A1AE3815C87FD500FFE9E3 /* http_request_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED315BF2DE500D76F6C /* http_request_tests.cpp */; }; E3A1AE3915C87FD500FFE9E3 /* http_response_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED415BF2DE500D76F6C /* http_response_tests.cpp */; }; E3A1AE3A15C87FD500FFE9E3 /* plugin_manager_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED715BF2DE500D76F6C /* plugin_manager_tests.cpp */; }; E3A1AE3B15C87FD500FFE9E3 /* plugin_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED815BF2DE500D76F6C /* plugin_tests.cpp */; }; E3A1AE3C15C87FD500FFE9E3 /* tcp_server_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED915BF2DE500D76F6C /* tcp_server_tests.cpp */; }; E3A1AE3D15C87FD500FFE9E3 /* tcp_stream_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEDA15BF2DE500D76F6C /* tcp_stream_tests.cpp */; }; E3B5EA9A15C896050023988F /* unit_test.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E3B5EA9915C896050023988F /* unit_test.hpp */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ E35CCF2415BF2F9A00D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF2615BF2F9F00D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF2815BF2FA200D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF2A15BF2FA500D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF2C15BF2FA800D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF2E15BF2FAB00D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF3015BF2FAE00D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF3215BF2FB100D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF3415BF2FB300D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF6315BF30AA00D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion-net: dynamic"; }; E36D8BED0D29D6F200B4C134 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion-net: dynamic"; }; E370CE7E158D962700E46EE9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion-net: dynamic"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 6140E4F216111BED0052E5A0 /* decompressor.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = decompressor.hpp; sourceTree = ""; }; 6140E4F316111BED0052E5A0 /* parser.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = parser.hpp; sourceTree = ""; }; 6140E4F416111BED0052E5A0 /* types.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = types.hpp; sourceTree = ""; }; 61AECC9E161268B300BF2B16 /* spdy_decompressor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = spdy_decompressor.cpp; path = src/spdy_decompressor.cpp; sourceTree = ""; }; 61AECC9F161268B300BF2B16 /* spdy_parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = spdy_parser.cpp; path = src/spdy_parser.cpp; sourceTree = ""; }; 61AECCA21612699D00BF2B16 /* spdy_parser_tests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = spdy_parser_tests.cpp; path = tests/spdy_parser_tests.cpp; sourceTree = ""; }; E31BC82615C1D24600168895 /* error.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = error.hpp; path = include/pion/error.hpp; sourceTree = ""; }; E3474EA2162E0D99003AA5ED /* libpion-pic.a */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = "libpion-pic.a"; sourceTree = BUILT_PRODUCTS_DIR; }; E3474F23162E1053003AA5ED /* libpion.a */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libpion.a; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCE5815BF2D0E00D76F6C /* admin_rights.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = admin_rights.hpp; path = include/pion/admin_rights.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE5915BF2D0E00D76F6C /* algorithm.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = algorithm.hpp; path = include/pion/algorithm.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE5A15BF2D0E00D76F6C /* config.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = config.hpp; path = include/pion/config.hpp; sourceTree = ""; }; E35CCE5C15BF2D0E00D76F6C /* hash_map.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = hash_map.hpp; path = include/pion/hash_map.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE5D15BF2D0E00D76F6C /* logger.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = logger.hpp; path = include/pion/logger.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE5E15BF2D0E00D76F6C /* plugin_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = plugin_manager.hpp; path = include/pion/plugin_manager.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE5F15BF2D0E00D76F6C /* plugin.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = plugin.hpp; path = include/pion/plugin.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE6015BF2D0E00D76F6C /* process.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = process.hpp; path = include/pion/process.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE6115BF2D0E00D76F6C /* scheduler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = scheduler.hpp; path = include/pion/scheduler.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7015BF2D4700D76F6C /* connection.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = connection.hpp; path = include/pion/tcp/connection.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7115BF2D4700D76F6C /* server.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = server.hpp; path = include/pion/tcp/server.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7215BF2D4700D76F6C /* stream.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = stream.hpp; path = include/pion/tcp/stream.hpp; sourceTree = ""; }; E35CCE7315BF2D4700D76F6C /* timer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = timer.hpp; path = include/pion/tcp/timer.hpp; sourceTree = ""; }; E35CCE7815BF2D5B00D76F6C /* auth.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = auth.hpp; path = include/pion/http/auth.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7915BF2D5B00D76F6C /* basic_auth.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = basic_auth.hpp; path = include/pion/http/basic_auth.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7A15BF2D5B00D76F6C /* cookie_auth.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = cookie_auth.hpp; path = include/pion/http/cookie_auth.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7B15BF2D5B00D76F6C /* message.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = message.hpp; path = include/pion/http/message.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7C15BF2D5B00D76F6C /* parser.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = parser.hpp; path = include/pion/http/parser.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7D15BF2D5B00D76F6C /* plugin_server.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = plugin_server.hpp; path = include/pion/http/plugin_server.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7E15BF2D5B00D76F6C /* plugin_service.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = plugin_service.hpp; path = include/pion/http/plugin_service.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7F15BF2D5B00D76F6C /* reader.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = reader.hpp; path = include/pion/http/reader.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8015BF2D5B00D76F6C /* request_reader.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = request_reader.hpp; path = include/pion/http/request_reader.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8115BF2D5B00D76F6C /* request_writer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = request_writer.hpp; path = include/pion/http/request_writer.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8215BF2D5B00D76F6C /* request.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = request.hpp; path = include/pion/http/request.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8315BF2D5B00D76F6C /* response_reader.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = response_reader.hpp; path = include/pion/http/response_reader.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8415BF2D5B00D76F6C /* response_writer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = response_writer.hpp; path = include/pion/http/response_writer.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8515BF2D5B00D76F6C /* response.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = response.hpp; path = include/pion/http/response.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8615BF2D5B00D76F6C /* server.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = server.hpp; path = include/pion/http/server.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8715BF2D5B00D76F6C /* types.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = types.hpp; path = include/pion/http/types.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8915BF2D5B00D76F6C /* writer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = writer.hpp; path = include/pion/http/writer.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE9C15BF2D8A00D76F6C /* admin_rights.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = admin_rights.cpp; path = src/admin_rights.cpp; sourceTree = ""; }; E35CCE9D15BF2D8A00D76F6C /* algorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = algorithm.cpp; path = src/algorithm.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE9E15BF2D8A00D76F6C /* http_auth.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_auth.cpp; path = src/http_auth.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE9F15BF2D8A00D76F6C /* http_basic_auth.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_basic_auth.cpp; path = src/http_basic_auth.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA015BF2D8A00D76F6C /* http_cookie_auth.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_cookie_auth.cpp; path = src/http_cookie_auth.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA115BF2D8A00D76F6C /* http_message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_message.cpp; path = src/http_message.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA215BF2D8A00D76F6C /* http_parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_parser.cpp; path = src/http_parser.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA315BF2D8A00D76F6C /* http_plugin_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_plugin_server.cpp; path = src/http_plugin_server.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA415BF2D8A00D76F6C /* http_reader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_reader.cpp; path = src/http_reader.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA515BF2D8A00D76F6C /* http_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_server.cpp; path = src/http_server.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA615BF2D8A00D76F6C /* http_types.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_types.cpp; path = src/http_types.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA715BF2D8A00D76F6C /* http_writer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_writer.cpp; path = src/http_writer.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA815BF2D8A00D76F6C /* logger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = logger.cpp; path = src/logger.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA915BF2D8A00D76F6C /* plugin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = plugin.cpp; path = src/plugin.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEAA15BF2D8A00D76F6C /* process.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = process.cpp; path = src/process.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEAB15BF2D8A00D76F6C /* scheduler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = scheduler.cpp; path = src/scheduler.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEAC15BF2D8A00D76F6C /* tcp_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = tcp_server.cpp; path = src/tcp_server.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEAD15BF2D8A00D76F6C /* tcp_timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tcp_timer.cpp; path = src/tcp_timer.cpp; sourceTree = ""; }; E35CCEC015BF2DB500D76F6C /* AllowNothingService.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = AllowNothingService.cpp; path = services/AllowNothingService.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC115BF2DB500D76F6C /* AllowNothingService.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = AllowNothingService.hpp; path = services/AllowNothingService.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC215BF2DB500D76F6C /* CookieService.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = CookieService.cpp; path = services/CookieService.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC315BF2DB500D76F6C /* CookieService.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = CookieService.hpp; path = services/CookieService.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC415BF2DB500D76F6C /* EchoService.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = EchoService.cpp; path = services/EchoService.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC515BF2DB500D76F6C /* EchoService.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = EchoService.hpp; path = services/EchoService.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC615BF2DB500D76F6C /* FileService.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = FileService.cpp; path = services/FileService.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC715BF2DB500D76F6C /* FileService.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = FileService.hpp; path = services/FileService.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC815BF2DB500D76F6C /* HelloService.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = HelloService.cpp; path = services/HelloService.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC915BF2DB500D76F6C /* HelloService.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = HelloService.hpp; path = services/HelloService.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCECA15BF2DB500D76F6C /* LogService.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = LogService.cpp; path = services/LogService.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCECB15BF2DB500D76F6C /* LogService.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = LogService.hpp; path = services/LogService.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCECC15BF2DC800D76F6C /* helloserver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = helloserver.cpp; path = utils/helloserver.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCECD15BF2DC800D76F6C /* piond.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = piond.cpp; path = utils/piond.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCECE15BF2DE500D76F6C /* algorithm_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = algorithm_tests.cpp; path = tests/algorithm_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCECF15BF2DE500D76F6C /* file_service_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = file_service_tests.cpp; path = tests/file_service_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED015BF2DE500D76F6C /* http_message_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_message_tests.cpp; path = tests/http_message_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED115BF2DE500D76F6C /* http_parser_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_parser_tests.cpp; path = tests/http_parser_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED215BF2DE500D76F6C /* http_plugin_server_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_plugin_server_tests.cpp; path = tests/http_plugin_server_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED315BF2DE500D76F6C /* http_request_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_request_tests.cpp; path = tests/http_request_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED415BF2DE500D76F6C /* http_response_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_response_tests.cpp; path = tests/http_response_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED515BF2DE500D76F6C /* http_types_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_types_tests.cpp; path = tests/http_types_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED615BF2DE500D76F6C /* piontests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = piontests.cpp; path = tests/piontests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED715BF2DE500D76F6C /* plugin_manager_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = plugin_manager_tests.cpp; path = tests/plugin_manager_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED815BF2DE500D76F6C /* plugin_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = plugin_tests.cpp; path = tests/plugin_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED915BF2DE500D76F6C /* tcp_server_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = tcp_server_tests.cpp; path = tests/tcp_server_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEDA15BF2DE500D76F6C /* tcp_stream_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = tcp_stream_tests.cpp; path = tests/tcp_stream_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEDC15BF2E4100D76F6C /* hasCreateAndDestroy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = hasCreateAndDestroy.cpp; path = tests/plugins/hasCreateAndDestroy.cpp; sourceTree = ""; }; E35CCEDD15BF2E4100D76F6C /* hasCreateAndDestroy.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = hasCreateAndDestroy.hpp; path = tests/plugins/hasCreateAndDestroy.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEDE15BF2E4100D76F6C /* hasCreateButNoDestroy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = hasCreateButNoDestroy.cpp; path = tests/plugins/hasCreateButNoDestroy.cpp; sourceTree = ""; }; E35CCEDF15BF2E4100D76F6C /* hasCreateButNoDestroy.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = hasCreateButNoDestroy.hpp; path = tests/plugins/hasCreateButNoDestroy.hpp; sourceTree = ""; }; E35CCEE015BF2E4100D76F6C /* hasNoCreate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = hasNoCreate.cpp; path = tests/plugins/hasNoCreate.cpp; sourceTree = ""; }; E35CCEE115BF2E4100D76F6C /* hasNoCreate.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = hasNoCreate.hpp; path = tests/plugins/hasNoCreate.hpp; sourceTree = ""; }; E35CCEE215BF2E4100D76F6C /* InterfaceStub.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = InterfaceStub.hpp; path = tests/plugins/InterfaceStub.hpp; sourceTree = ""; }; E35CCEEA15BF2EE100D76F6C /* AllowNothingService.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = AllowNothingService.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCEF215BF2EFB00D76F6C /* CookieService.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = CookieService.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCEFA15BF2F0800D76F6C /* EchoService.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = EchoService.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCF0215BF2F1300D76F6C /* FileService.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = FileService.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCF0A15BF2F1E00D76F6C /* HelloService.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = HelloService.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCF1215BF2F2900D76F6C /* LogService.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = LogService.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCF1A15BF2F5700D76F6C /* hasCreateAndDestroy.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = hasCreateAndDestroy.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCF2215BF2F6F00D76F6C /* hasNoCreate.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = hasNoCreate.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCF6B15BF30AA00D76F6C /* helloserver */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = helloserver; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCFB115BF3AB600D76F6C /* testservices.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = testservices.conf; path = tests/config/testservices.conf; sourceTree = ""; }; E36D8A5F0D29C9D800B4C134 /* libpion.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libpion.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; E36D8BE70D29D6DC00B4C134 /* piond */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = piond; sourceTree = BUILT_PRODUCTS_DIR; }; E370CEC0158D962700E46EE9 /* piontests */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = piontests; sourceTree = BUILT_PRODUCTS_DIR; }; E370CF30158E6C1A00E46EE9 /* hasCreateButNoDestroy.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = hasCreateButNoDestroy.so; sourceTree = BUILT_PRODUCTS_DIR; }; E3A00AE915CC740A00F79569 /* user.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = user.hpp; path = include/pion/user.hpp; sourceTree = ""; }; E3B5EA9915C896050023988F /* unit_test.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = unit_test.hpp; path = include/pion/test/unit_test.hpp; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ E3474E9E162E0D99003AA5ED /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; E3474F1F162E1053003AA5ED /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEE615BF2EE100D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3815BF2FC000D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEEE15BF2EFB00D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3915BF2FC400D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEF615BF2F0800D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3A15BF2FC800D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEFE15BF2F1300D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3B15BF2FCB00D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF0615BF2F1E00D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3C15BF2FCE00D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF0E15BF2F2900D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3D15BF2FD100D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF1615BF2F5700D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF2315BF2F9300D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF1E15BF2F6F00D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3715BF2FBD00D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF6615BF30AA00D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF6715BF30AA00D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E36D8A5D0D29C9D800B4C134 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; E36D8BE50D29D6DC00B4C134 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E36D8BF40D29D72200B4C134 /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E370CEB8158D962700E46EE9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E370CF3B158E700F00E46EE9 /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E370CF2A158E6C1A00E46EE9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3615BF2FBA00D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 08FB7794FE84155DC02AAC07 /* libpion */ = { isa = PBXGroup; children = ( E35CCE5315BF2CAF00D76F6C /* include */, E35CCE5415BF2CB400D76F6C /* src */, E35CCE5515BF2CB800D76F6C /* services */, E35CCE5615BF2CC000D76F6C /* utils */, E35CCE5715BF2CC600D76F6C /* tests */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = libpion; sourceTree = ""; }; 1AB674ADFE9D54B511CA2CBB /* Products */ = { isa = PBXGroup; children = ( E36D8A5F0D29C9D800B4C134 /* libpion.dylib */, E36D8BE70D29D6DC00B4C134 /* piond */, E370CEC0158D962700E46EE9 /* piontests */, E370CF30158E6C1A00E46EE9 /* hasCreateButNoDestroy.so */, E35CCEEA15BF2EE100D76F6C /* AllowNothingService.so */, E35CCEF215BF2EFB00D76F6C /* CookieService.so */, E35CCEFA15BF2F0800D76F6C /* EchoService.so */, E35CCF0215BF2F1300D76F6C /* FileService.so */, E35CCF0A15BF2F1E00D76F6C /* HelloService.so */, E35CCF1215BF2F2900D76F6C /* LogService.so */, E35CCF1A15BF2F5700D76F6C /* hasCreateAndDestroy.so */, E35CCF2215BF2F6F00D76F6C /* hasNoCreate.so */, E35CCF6B15BF30AA00D76F6C /* helloserver */, E3474EA2162E0D99003AA5ED /* libpion-pic.a */, E3474F23162E1053003AA5ED /* libpion.a */, ); name = Products; sourceTree = ""; }; 6140E4F116111BED0052E5A0 /* spdy */ = { isa = PBXGroup; children = ( 6140E4F216111BED0052E5A0 /* decompressor.hpp */, 6140E4F316111BED0052E5A0 /* parser.hpp */, 6140E4F416111BED0052E5A0 /* types.hpp */, ); name = spdy; path = include/pion/spdy; sourceTree = ""; }; E35CCE5315BF2CAF00D76F6C /* include */ = { isa = PBXGroup; children = ( 6140E4F116111BED0052E5A0 /* spdy */, E35CCE6E15BF2D1300D76F6C /* tcp */, E35CCE6F15BF2D1800D76F6C /* http */, E3B5EA9715C895E00023988F /* test */, E35CCE5815BF2D0E00D76F6C /* admin_rights.hpp */, E35CCE5915BF2D0E00D76F6C /* algorithm.hpp */, E35CCE5A15BF2D0E00D76F6C /* config.hpp */, E31BC82615C1D24600168895 /* error.hpp */, E35CCE5C15BF2D0E00D76F6C /* hash_map.hpp */, E35CCE5D15BF2D0E00D76F6C /* logger.hpp */, E35CCE5F15BF2D0E00D76F6C /* plugin.hpp */, E35CCE5E15BF2D0E00D76F6C /* plugin_manager.hpp */, E35CCE6015BF2D0E00D76F6C /* process.hpp */, E35CCE6115BF2D0E00D76F6C /* scheduler.hpp */, E3A00AE915CC740A00F79569 /* user.hpp */, ); name = include; sourceTree = ""; }; E35CCE5415BF2CB400D76F6C /* src */ = { isa = PBXGroup; children = ( E35CCE9C15BF2D8A00D76F6C /* admin_rights.cpp */, E35CCE9D15BF2D8A00D76F6C /* algorithm.cpp */, E35CCE9E15BF2D8A00D76F6C /* http_auth.cpp */, E35CCE9F15BF2D8A00D76F6C /* http_basic_auth.cpp */, E35CCEA015BF2D8A00D76F6C /* http_cookie_auth.cpp */, E35CCEA115BF2D8A00D76F6C /* http_message.cpp */, E35CCEA215BF2D8A00D76F6C /* http_parser.cpp */, E35CCEA315BF2D8A00D76F6C /* http_plugin_server.cpp */, E35CCEA415BF2D8A00D76F6C /* http_reader.cpp */, E35CCEA515BF2D8A00D76F6C /* http_server.cpp */, E35CCEA615BF2D8A00D76F6C /* http_types.cpp */, E35CCEA715BF2D8A00D76F6C /* http_writer.cpp */, E35CCEA815BF2D8A00D76F6C /* logger.cpp */, E35CCEA915BF2D8A00D76F6C /* plugin.cpp */, E35CCEAA15BF2D8A00D76F6C /* process.cpp */, E35CCEAB15BF2D8A00D76F6C /* scheduler.cpp */, 61AECC9E161268B300BF2B16 /* spdy_decompressor.cpp */, 61AECC9F161268B300BF2B16 /* spdy_parser.cpp */, E35CCEAC15BF2D8A00D76F6C /* tcp_server.cpp */, E35CCEAD15BF2D8A00D76F6C /* tcp_timer.cpp */, ); name = src; sourceTree = ""; }; E35CCE5515BF2CB800D76F6C /* services */ = { isa = PBXGroup; children = ( E35CCEC015BF2DB500D76F6C /* AllowNothingService.cpp */, E35CCEC115BF2DB500D76F6C /* AllowNothingService.hpp */, E35CCEC215BF2DB500D76F6C /* CookieService.cpp */, E35CCEC315BF2DB500D76F6C /* CookieService.hpp */, E35CCEC415BF2DB500D76F6C /* EchoService.cpp */, E35CCEC515BF2DB500D76F6C /* EchoService.hpp */, E35CCEC615BF2DB500D76F6C /* FileService.cpp */, E35CCEC715BF2DB500D76F6C /* FileService.hpp */, E35CCEC815BF2DB500D76F6C /* HelloService.cpp */, E35CCEC915BF2DB500D76F6C /* HelloService.hpp */, E35CCECA15BF2DB500D76F6C /* LogService.cpp */, E35CCECB15BF2DB500D76F6C /* LogService.hpp */, ); name = services; sourceTree = ""; }; E35CCE5615BF2CC000D76F6C /* utils */ = { isa = PBXGroup; children = ( E35CCECC15BF2DC800D76F6C /* helloserver.cpp */, E35CCECD15BF2DC800D76F6C /* piond.cpp */, ); name = utils; sourceTree = ""; }; E35CCE5715BF2CC600D76F6C /* tests */ = { isa = PBXGroup; children = ( E35CCFB015BF3AAF00D76F6C /* config */, E35CCEDB15BF2E1F00D76F6C /* plugins */, E35CCECE15BF2DE500D76F6C /* algorithm_tests.cpp */, E35CCECF15BF2DE500D76F6C /* file_service_tests.cpp */, E35CCED015BF2DE500D76F6C /* http_message_tests.cpp */, E35CCED115BF2DE500D76F6C /* http_parser_tests.cpp */, E35CCED215BF2DE500D76F6C /* http_plugin_server_tests.cpp */, E35CCED315BF2DE500D76F6C /* http_request_tests.cpp */, E35CCED415BF2DE500D76F6C /* http_response_tests.cpp */, E35CCED515BF2DE500D76F6C /* http_types_tests.cpp */, E35CCED615BF2DE500D76F6C /* piontests.cpp */, E35CCED715BF2DE500D76F6C /* plugin_manager_tests.cpp */, E35CCED815BF2DE500D76F6C /* plugin_tests.cpp */, 61AECCA21612699D00BF2B16 /* spdy_parser_tests.cpp */, E35CCED915BF2DE500D76F6C /* tcp_server_tests.cpp */, E35CCEDA15BF2DE500D76F6C /* tcp_stream_tests.cpp */, ); name = tests; sourceTree = ""; }; E35CCE6E15BF2D1300D76F6C /* tcp */ = { isa = PBXGroup; children = ( E35CCE7015BF2D4700D76F6C /* connection.hpp */, E35CCE7115BF2D4700D76F6C /* server.hpp */, E35CCE7215BF2D4700D76F6C /* stream.hpp */, E35CCE7315BF2D4700D76F6C /* timer.hpp */, ); name = tcp; sourceTree = ""; }; E35CCE6F15BF2D1800D76F6C /* http */ = { isa = PBXGroup; children = ( E35CCE7815BF2D5B00D76F6C /* auth.hpp */, E35CCE7915BF2D5B00D76F6C /* basic_auth.hpp */, E35CCE7A15BF2D5B00D76F6C /* cookie_auth.hpp */, E35CCE7B15BF2D5B00D76F6C /* message.hpp */, E35CCE7C15BF2D5B00D76F6C /* parser.hpp */, E35CCE7D15BF2D5B00D76F6C /* plugin_server.hpp */, E35CCE7E15BF2D5B00D76F6C /* plugin_service.hpp */, E35CCE7F15BF2D5B00D76F6C /* reader.hpp */, E35CCE8015BF2D5B00D76F6C /* request_reader.hpp */, E35CCE8115BF2D5B00D76F6C /* request_writer.hpp */, E35CCE8215BF2D5B00D76F6C /* request.hpp */, E35CCE8315BF2D5B00D76F6C /* response_reader.hpp */, E35CCE8415BF2D5B00D76F6C /* response_writer.hpp */, E35CCE8515BF2D5B00D76F6C /* response.hpp */, E35CCE8615BF2D5B00D76F6C /* server.hpp */, E35CCE8715BF2D5B00D76F6C /* types.hpp */, E35CCE8915BF2D5B00D76F6C /* writer.hpp */, ); name = http; sourceTree = ""; }; E35CCEDB15BF2E1F00D76F6C /* plugins */ = { isa = PBXGroup; children = ( E35CCEDC15BF2E4100D76F6C /* hasCreateAndDestroy.cpp */, E35CCEDD15BF2E4100D76F6C /* hasCreateAndDestroy.hpp */, E35CCEDE15BF2E4100D76F6C /* hasCreateButNoDestroy.cpp */, E35CCEDF15BF2E4100D76F6C /* hasCreateButNoDestroy.hpp */, E35CCEE015BF2E4100D76F6C /* hasNoCreate.cpp */, E35CCEE115BF2E4100D76F6C /* hasNoCreate.hpp */, E35CCEE215BF2E4100D76F6C /* InterfaceStub.hpp */, ); name = plugins; sourceTree = ""; }; E35CCFB015BF3AAF00D76F6C /* config */ = { isa = PBXGroup; children = ( E35CCFB115BF3AB600D76F6C /* testservices.conf */, ); name = config; sourceTree = ""; }; E3B5EA9715C895E00023988F /* test */ = { isa = PBXGroup; children = ( E3B5EA9915C896050023988F /* unit_test.hpp */, ); name = test; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ E3474E65162E0D99003AA5ED /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E3474E66162E0D99003AA5ED /* admin_rights.hpp in Headers */, E3474E67162E0D99003AA5ED /* algorithm.hpp in Headers */, E3474E68162E0D99003AA5ED /* config.hpp in Headers */, E3474E69162E0D99003AA5ED /* hash_map.hpp in Headers */, E3474E6A162E0D99003AA5ED /* logger.hpp in Headers */, E3474E6B162E0D99003AA5ED /* plugin_manager.hpp in Headers */, E3474E6C162E0D99003AA5ED /* plugin.hpp in Headers */, E3474E6D162E0D99003AA5ED /* process.hpp in Headers */, E3474E6E162E0D99003AA5ED /* scheduler.hpp in Headers */, E3474E6F162E0D99003AA5ED /* connection.hpp in Headers */, E3474E70162E0D99003AA5ED /* server.hpp in Headers */, E3474E71162E0D99003AA5ED /* stream.hpp in Headers */, E3474E72162E0D99003AA5ED /* timer.hpp in Headers */, E3474E73162E0D99003AA5ED /* auth.hpp in Headers */, E3474E74162E0D99003AA5ED /* basic_auth.hpp in Headers */, E3474E75162E0D99003AA5ED /* cookie_auth.hpp in Headers */, E3474E76162E0D99003AA5ED /* message.hpp in Headers */, E3474E77162E0D99003AA5ED /* parser.hpp in Headers */, E3474E78162E0D99003AA5ED /* plugin_server.hpp in Headers */, E3474E79162E0D99003AA5ED /* plugin_service.hpp in Headers */, E3474E7A162E0D99003AA5ED /* reader.hpp in Headers */, E3474E7B162E0D99003AA5ED /* request_reader.hpp in Headers */, E3474E7C162E0D99003AA5ED /* request_writer.hpp in Headers */, E3474E7D162E0D99003AA5ED /* request.hpp in Headers */, E3474E7E162E0D99003AA5ED /* response_reader.hpp in Headers */, E3474E7F162E0D99003AA5ED /* response_writer.hpp in Headers */, E3474E80162E0D99003AA5ED /* response.hpp in Headers */, E3474E81162E0D99003AA5ED /* server.hpp in Headers */, E3474E82162E0D99003AA5ED /* types.hpp in Headers */, E3474E83162E0D99003AA5ED /* writer.hpp in Headers */, E3474E84162E0D99003AA5ED /* error.hpp in Headers */, E3474E85162E0D99003AA5ED /* user.hpp in Headers */, E3474E86162E0D99003AA5ED /* decompressor.hpp in Headers */, E3474E87162E0D99003AA5ED /* parser.hpp in Headers */, E3474E88162E0D99003AA5ED /* types.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E3474EE6162E1053003AA5ED /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E3474EE7162E1053003AA5ED /* admin_rights.hpp in Headers */, E3474EE8162E1053003AA5ED /* algorithm.hpp in Headers */, E3474EE9162E1053003AA5ED /* config.hpp in Headers */, E3474EEA162E1053003AA5ED /* hash_map.hpp in Headers */, E3474EEB162E1053003AA5ED /* logger.hpp in Headers */, E3474EEC162E1053003AA5ED /* plugin_manager.hpp in Headers */, E3474EED162E1053003AA5ED /* plugin.hpp in Headers */, E3474EEE162E1053003AA5ED /* process.hpp in Headers */, E3474EEF162E1053003AA5ED /* scheduler.hpp in Headers */, E3474EF0162E1053003AA5ED /* connection.hpp in Headers */, E3474EF1162E1053003AA5ED /* server.hpp in Headers */, E3474EF2162E1053003AA5ED /* stream.hpp in Headers */, E3474EF3162E1053003AA5ED /* timer.hpp in Headers */, E3474EF4162E1053003AA5ED /* auth.hpp in Headers */, E3474EF5162E1053003AA5ED /* basic_auth.hpp in Headers */, E3474EF6162E1053003AA5ED /* cookie_auth.hpp in Headers */, E3474EF7162E1053003AA5ED /* message.hpp in Headers */, E3474EF8162E1053003AA5ED /* parser.hpp in Headers */, E3474EF9162E1053003AA5ED /* plugin_server.hpp in Headers */, E3474EFA162E1053003AA5ED /* plugin_service.hpp in Headers */, E3474EFB162E1053003AA5ED /* reader.hpp in Headers */, E3474EFC162E1053003AA5ED /* request_reader.hpp in Headers */, E3474EFD162E1053003AA5ED /* request_writer.hpp in Headers */, E3474EFE162E1053003AA5ED /* request.hpp in Headers */, E3474EFF162E1053003AA5ED /* response_reader.hpp in Headers */, E3474F00162E1053003AA5ED /* response_writer.hpp in Headers */, E3474F01162E1053003AA5ED /* response.hpp in Headers */, E3474F02162E1053003AA5ED /* server.hpp in Headers */, E3474F03162E1053003AA5ED /* types.hpp in Headers */, E3474F04162E1053003AA5ED /* writer.hpp in Headers */, E3474F05162E1053003AA5ED /* error.hpp in Headers */, E3474F06162E1053003AA5ED /* user.hpp in Headers */, E3474F07162E1053003AA5ED /* decompressor.hpp in Headers */, E3474F08162E1053003AA5ED /* parser.hpp in Headers */, E3474F09162E1053003AA5ED /* types.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEE415BF2EE100D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4815BF304E00D76F6C /* AllowNothingService.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEEC15BF2EFB00D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4915BF305100D76F6C /* CookieService.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEF415BF2F0800D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4C15BF305A00D76F6C /* EchoService.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEFC15BF2F1300D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4E15BF305E00D76F6C /* FileService.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF0415BF2F1E00D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4F15BF306200D76F6C /* HelloService.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF0C15BF2F2900D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF5115BF307100D76F6C /* LogService.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF1415BF2F5700D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3F15BF2FFF00D76F6C /* hasCreateAndDestroy.hpp in Headers */, E35CCF4415BF303F00D76F6C /* InterfaceStub.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF1C15BF2F6F00D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4315BF302300D76F6C /* hasNoCreate.hpp in Headers */, E35CCF4615BF304700D76F6C /* InterfaceStub.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E36D8A5B0D29C9D800B4C134 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCE6315BF2D0E00D76F6C /* admin_rights.hpp in Headers */, E35CCE6415BF2D0E00D76F6C /* algorithm.hpp in Headers */, E35CCE6515BF2D0E00D76F6C /* config.hpp in Headers */, E35CCE6715BF2D0E00D76F6C /* hash_map.hpp in Headers */, E35CCE6815BF2D0E00D76F6C /* logger.hpp in Headers */, E35CCE6915BF2D0E00D76F6C /* plugin_manager.hpp in Headers */, E35CCE6A15BF2D0E00D76F6C /* plugin.hpp in Headers */, E35CCE6B15BF2D0E00D76F6C /* process.hpp in Headers */, E35CCE6C15BF2D0E00D76F6C /* scheduler.hpp in Headers */, E35CCE7415BF2D4700D76F6C /* connection.hpp in Headers */, E35CCE7515BF2D4700D76F6C /* server.hpp in Headers */, E35CCE7615BF2D4700D76F6C /* stream.hpp in Headers */, E35CCE7715BF2D4700D76F6C /* timer.hpp in Headers */, E35CCE8A15BF2D5B00D76F6C /* auth.hpp in Headers */, E35CCE8B15BF2D5B00D76F6C /* basic_auth.hpp in Headers */, E35CCE8C15BF2D5B00D76F6C /* cookie_auth.hpp in Headers */, E35CCE8D15BF2D5B00D76F6C /* message.hpp in Headers */, E35CCE8E15BF2D5B00D76F6C /* parser.hpp in Headers */, E35CCE8F15BF2D5B00D76F6C /* plugin_server.hpp in Headers */, E35CCE9015BF2D5B00D76F6C /* plugin_service.hpp in Headers */, E35CCE9115BF2D5B00D76F6C /* reader.hpp in Headers */, E35CCE9215BF2D5B00D76F6C /* request_reader.hpp in Headers */, E35CCE9315BF2D5B00D76F6C /* request_writer.hpp in Headers */, E35CCE9415BF2D5B00D76F6C /* request.hpp in Headers */, E35CCE9515BF2D5B00D76F6C /* response_reader.hpp in Headers */, E35CCE9615BF2D5B00D76F6C /* response_writer.hpp in Headers */, E35CCE9715BF2D5B00D76F6C /* response.hpp in Headers */, E35CCE9815BF2D5B00D76F6C /* server.hpp in Headers */, E35CCE9915BF2D5B00D76F6C /* types.hpp in Headers */, E35CCE9B15BF2D5B00D76F6C /* writer.hpp in Headers */, E31BC82715C1D24600168895 /* error.hpp in Headers */, E3A00AEA15CC740A00F79569 /* user.hpp in Headers */, 6140E4F516111BED0052E5A0 /* decompressor.hpp in Headers */, 6140E4F616111BED0052E5A0 /* parser.hpp in Headers */, 6140E4F716111BED0052E5A0 /* types.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E370CF13158E6BAB00E46EE9 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E3B5EA9A15C896050023988F /* unit_test.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E370CF26158E6C1A00E46EE9 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4115BF301700D76F6C /* hasCreateButNoDestroy.hpp in Headers */, E35CCF4515BF304300D76F6C /* InterfaceStub.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ E3474E63162E0D99003AA5ED /* pion: static pic */ = { isa = PBXNativeTarget; buildConfigurationList = E3474E9F162E0D99003AA5ED /* Build configuration list for PBXNativeTarget "pion: static pic" */; buildPhases = ( E3474E64162E0D99003AA5ED /* ShellScript */, E3474E65162E0D99003AA5ED /* Headers */, E3474E89162E0D99003AA5ED /* Sources */, E3474E9E162E0D99003AA5ED /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = "pion: static pic"; productName = "pion-net: dynamic"; productReference = E3474EA2162E0D99003AA5ED /* libpion-pic.a */; productType = "com.apple.product-type.library.dynamic"; }; E3474EE4162E1053003AA5ED /* pion: static */ = { isa = PBXNativeTarget; buildConfigurationList = E3474F20162E1053003AA5ED /* Build configuration list for PBXNativeTarget "pion: static" */; buildPhases = ( E3474EE5162E1053003AA5ED /* ShellScript */, E3474EE6162E1053003AA5ED /* Headers */, E3474F0A162E1053003AA5ED /* Sources */, E3474F1F162E1053003AA5ED /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = "pion: static"; productName = "pion-net: dynamic"; productReference = E3474F23162E1053003AA5ED /* libpion.a */; productType = "com.apple.product-type.library.dynamic"; }; E35CCEE315BF2EE100D76F6C /* AllowNothingService */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCEE715BF2EE100D76F6C /* Build configuration list for PBXNativeTarget "AllowNothingService" */; buildPhases = ( E35CCEE415BF2EE100D76F6C /* Headers */, E35CCEE515BF2EE100D76F6C /* Sources */, E35CCEE615BF2EE100D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF2B15BF2FA500D76F6C /* PBXTargetDependency */, ); name = AllowNothingService; productName = ELFCodec; productReference = E35CCEEA15BF2EE100D76F6C /* AllowNothingService.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCEEB15BF2EFB00D76F6C /* CookieService */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCEEF15BF2EFB00D76F6C /* Build configuration list for PBXNativeTarget "CookieService" */; buildPhases = ( E35CCEEC15BF2EFB00D76F6C /* Headers */, E35CCEED15BF2EFB00D76F6C /* Sources */, E35CCEEE15BF2EFB00D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF2D15BF2FA800D76F6C /* PBXTargetDependency */, ); name = CookieService; productName = ELFCodec; productReference = E35CCEF215BF2EFB00D76F6C /* CookieService.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCEF315BF2F0800D76F6C /* EchoService */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCEF715BF2F0800D76F6C /* Build configuration list for PBXNativeTarget "EchoService" */; buildPhases = ( E35CCEF415BF2F0800D76F6C /* Headers */, E35CCEF515BF2F0800D76F6C /* Sources */, E35CCEF615BF2F0800D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF2F15BF2FAB00D76F6C /* PBXTargetDependency */, ); name = EchoService; productName = ELFCodec; productReference = E35CCEFA15BF2F0800D76F6C /* EchoService.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCEFB15BF2F1300D76F6C /* FileService */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCEFF15BF2F1300D76F6C /* Build configuration list for PBXNativeTarget "FileService" */; buildPhases = ( E35CCEFC15BF2F1300D76F6C /* Headers */, E35CCEFD15BF2F1300D76F6C /* Sources */, E35CCEFE15BF2F1300D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF3115BF2FAE00D76F6C /* PBXTargetDependency */, ); name = FileService; productName = ELFCodec; productReference = E35CCF0215BF2F1300D76F6C /* FileService.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCF0315BF2F1E00D76F6C /* HelloService */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCF0715BF2F1E00D76F6C /* Build configuration list for PBXNativeTarget "HelloService" */; buildPhases = ( E35CCF0415BF2F1E00D76F6C /* Headers */, E35CCF0515BF2F1E00D76F6C /* Sources */, E35CCF0615BF2F1E00D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF3315BF2FB100D76F6C /* PBXTargetDependency */, ); name = HelloService; productName = ELFCodec; productReference = E35CCF0A15BF2F1E00D76F6C /* HelloService.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCF0B15BF2F2900D76F6C /* LogService */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCF0F15BF2F2900D76F6C /* Build configuration list for PBXNativeTarget "LogService" */; buildPhases = ( E35CCF0C15BF2F2900D76F6C /* Headers */, E35CCF0D15BF2F2900D76F6C /* Sources */, E35CCF0E15BF2F2900D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF3515BF2FB300D76F6C /* PBXTargetDependency */, ); name = LogService; productName = ELFCodec; productReference = E35CCF1215BF2F2900D76F6C /* LogService.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCF1315BF2F5700D76F6C /* hasCreateAndDestroy */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCF1715BF2F5700D76F6C /* Build configuration list for PBXNativeTarget "hasCreateAndDestroy" */; buildPhases = ( E35CCF1415BF2F5700D76F6C /* Headers */, E35CCF1515BF2F5700D76F6C /* Sources */, E35CCF1615BF2F5700D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF2515BF2F9A00D76F6C /* PBXTargetDependency */, ); name = hasCreateAndDestroy; productName = ELFCodec; productReference = E35CCF1A15BF2F5700D76F6C /* hasCreateAndDestroy.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCF1B15BF2F6F00D76F6C /* hasNoCreate */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCF1F15BF2F6F00D76F6C /* Build configuration list for PBXNativeTarget "hasNoCreate" */; buildPhases = ( E35CCF1C15BF2F6F00D76F6C /* Headers */, E35CCF1D15BF2F6F00D76F6C /* Sources */, E35CCF1E15BF2F6F00D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF2915BF2FA200D76F6C /* PBXTargetDependency */, ); name = hasNoCreate; productName = ELFCodec; productReference = E35CCF2215BF2F6F00D76F6C /* hasNoCreate.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCF6115BF30AA00D76F6C /* helloserver */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCF6815BF30AA00D76F6C /* Build configuration list for PBXNativeTarget "helloserver" */; buildPhases = ( E35CCF6415BF30AA00D76F6C /* Sources */, E35CCF6615BF30AA00D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF6215BF30AA00D76F6C /* PBXTargetDependency */, ); name = helloserver; productName = piond; productReference = E35CCF6B15BF30AA00D76F6C /* helloserver */; productType = "com.apple.product-type.tool"; }; E36D8A5E0D29C9D800B4C134 /* pion: dynamic */ = { isa = PBXNativeTarget; buildConfigurationList = E36D8A9F0D29CB0F00B4C134 /* Build configuration list for PBXNativeTarget "pion: dynamic" */; buildPhases = ( E374024E15CEF78A00208977 /* ShellScript */, E36D8A5B0D29C9D800B4C134 /* Headers */, E36D8A5C0D29C9D800B4C134 /* Sources */, E36D8A5D0D29C9D800B4C134 /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = "pion: dynamic"; productName = "pion-net: dynamic"; productReference = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; productType = "com.apple.product-type.library.dynamic"; }; E36D8BE60D29D6DC00B4C134 /* piond */ = { isa = PBXNativeTarget; buildConfigurationList = E36D8C0A0D29D75C00B4C134 /* Build configuration list for PBXNativeTarget "piond" */; buildPhases = ( E36D8BE40D29D6DC00B4C134 /* Sources */, E36D8BE50D29D6DC00B4C134 /* Frameworks */, ); buildRules = ( ); dependencies = ( E36D8BEE0D29D6F200B4C134 /* PBXTargetDependency */, ); name = piond; productName = piond; productReference = E36D8BE70D29D6DC00B4C134 /* piond */; productType = "com.apple.product-type.tool"; }; E370CE78158D962700E46EE9 /* piontests */ = { isa = PBXNativeTarget; buildConfigurationList = E370CEBD158D962700E46EE9 /* Build configuration list for PBXNativeTarget "piontests" */; buildPhases = ( E370CF13158E6BAB00E46EE9 /* Headers */, E370CEA5158D962700E46EE9 /* Sources */, E370CEB8158D962700E46EE9 /* Frameworks */, ); buildRules = ( ); dependencies = ( E370CE7D158D962700E46EE9 /* PBXTargetDependency */, ); name = piontests; productName = PionReactorUnitTests; productReference = E370CEC0158D962700E46EE9 /* piontests */; productType = "com.apple.product-type.tool"; }; E370CF23158E6C1A00E46EE9 /* hasCreateButNoDestroy */ = { isa = PBXNativeTarget; buildConfigurationList = E370CF2D158E6C1A00E46EE9 /* Build configuration list for PBXNativeTarget "hasCreateButNoDestroy" */; buildPhases = ( E370CF26158E6C1A00E46EE9 /* Headers */, E370CF28158E6C1A00E46EE9 /* Sources */, E370CF2A158E6C1A00E46EE9 /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF2715BF2F9F00D76F6C /* PBXTargetDependency */, ); name = hasCreateButNoDestroy; productName = ELFCodec; productReference = E370CF30158E6C1A00E46EE9 /* hasCreateButNoDestroy.so */; productType = "com.apple.product-type.library.dynamic"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0450; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "pion" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( en, ); mainGroup = 08FB7794FE84155DC02AAC07 /* libpion */; projectDirPath = ""; projectRoot = ""; targets = ( E36D8A5E0D29C9D800B4C134 /* pion: dynamic */, E3474EE4162E1053003AA5ED /* pion: static */, E3474E63162E0D99003AA5ED /* pion: static pic */, E35CCF1315BF2F5700D76F6C /* hasCreateAndDestroy */, E370CF23158E6C1A00E46EE9 /* hasCreateButNoDestroy */, E35CCF1B15BF2F6F00D76F6C /* hasNoCreate */, E35CCEE315BF2EE100D76F6C /* AllowNothingService */, E35CCEEB15BF2EFB00D76F6C /* CookieService */, E35CCEF315BF2F0800D76F6C /* EchoService */, E35CCEFB15BF2F1300D76F6C /* FileService */, E35CCF0315BF2F1E00D76F6C /* HelloService */, E35CCF0B15BF2F2900D76F6C /* LogService */, E35CCF6115BF30AA00D76F6C /* helloserver */, E36D8BE60D29D6DC00B4C134 /* piond */, E370CE78158D962700E46EE9 /* piontests */, ); }; /* End PBXProject section */ /* Begin PBXShellScriptBuildPhase section */ E3474E64162E0D99003AA5ED /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "if [ ! -f \"${PROJECT_DIR}/include/pion/config.hpp\" ]; then\n cp ${PROJECT_DIR}/include/pion/config.hpp.xcode ${PROJECT_DIR}/include/pion/config.hpp\nfi"; }; E3474EE5162E1053003AA5ED /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "if [ ! -f \"${PROJECT_DIR}/include/pion/config.hpp\" ]; then\n cp ${PROJECT_DIR}/include/pion/config.hpp.xcode ${PROJECT_DIR}/include/pion/config.hpp\nfi"; }; E374024E15CEF78A00208977 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "if [ ! -f \"${PROJECT_DIR}/include/pion/config.hpp\" ]; then\n cp ${PROJECT_DIR}/include/pion/config.hpp.xcode ${PROJECT_DIR}/include/pion/config.hpp\nfi"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ E3474E89162E0D99003AA5ED /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E3474E8A162E0D99003AA5ED /* admin_rights.cpp in Sources */, E3474E8B162E0D99003AA5ED /* algorithm.cpp in Sources */, E3474E8C162E0D99003AA5ED /* http_auth.cpp in Sources */, E3474E8D162E0D99003AA5ED /* http_basic_auth.cpp in Sources */, E3474E8E162E0D99003AA5ED /* http_cookie_auth.cpp in Sources */, E3474E8F162E0D99003AA5ED /* http_message.cpp in Sources */, E3474E90162E0D99003AA5ED /* http_parser.cpp in Sources */, E3474E91162E0D99003AA5ED /* http_plugin_server.cpp in Sources */, E3474E92162E0D99003AA5ED /* http_reader.cpp in Sources */, E3474E93162E0D99003AA5ED /* http_server.cpp in Sources */, E3474E94162E0D99003AA5ED /* http_types.cpp in Sources */, E3474E95162E0D99003AA5ED /* http_writer.cpp in Sources */, E3474E96162E0D99003AA5ED /* logger.cpp in Sources */, E3474E97162E0D99003AA5ED /* plugin.cpp in Sources */, E3474E98162E0D99003AA5ED /* process.cpp in Sources */, E3474E99162E0D99003AA5ED /* scheduler.cpp in Sources */, E3474E9A162E0D99003AA5ED /* tcp_server.cpp in Sources */, E3474E9B162E0D99003AA5ED /* tcp_timer.cpp in Sources */, E3474E9C162E0D99003AA5ED /* spdy_decompressor.cpp in Sources */, E3474E9D162E0D99003AA5ED /* spdy_parser.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E3474F0A162E1053003AA5ED /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E3474F0B162E1053003AA5ED /* admin_rights.cpp in Sources */, E3474F0C162E1053003AA5ED /* algorithm.cpp in Sources */, E3474F0D162E1053003AA5ED /* http_auth.cpp in Sources */, E3474F0E162E1053003AA5ED /* http_basic_auth.cpp in Sources */, E3474F0F162E1053003AA5ED /* http_cookie_auth.cpp in Sources */, E3474F10162E1053003AA5ED /* http_message.cpp in Sources */, E3474F11162E1053003AA5ED /* http_parser.cpp in Sources */, E3474F12162E1053003AA5ED /* http_plugin_server.cpp in Sources */, E3474F13162E1053003AA5ED /* http_reader.cpp in Sources */, E3474F14162E1053003AA5ED /* http_server.cpp in Sources */, E3474F15162E1053003AA5ED /* http_types.cpp in Sources */, E3474F16162E1053003AA5ED /* http_writer.cpp in Sources */, E3474F17162E1053003AA5ED /* logger.cpp in Sources */, E3474F18162E1053003AA5ED /* plugin.cpp in Sources */, E3474F19162E1053003AA5ED /* process.cpp in Sources */, E3474F1A162E1053003AA5ED /* scheduler.cpp in Sources */, E3474F1B162E1053003AA5ED /* tcp_server.cpp in Sources */, E3474F1C162E1053003AA5ED /* tcp_timer.cpp in Sources */, E3474F1D162E1053003AA5ED /* spdy_decompressor.cpp in Sources */, E3474F1E162E1053003AA5ED /* spdy_parser.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEE515BF2EE100D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4715BF304C00D76F6C /* AllowNothingService.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEED15BF2EFB00D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4A15BF305200D76F6C /* CookieService.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEF515BF2F0800D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4B15BF305800D76F6C /* EchoService.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEFD15BF2F1300D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4D15BF305D00D76F6C /* FileService.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF0515BF2F1E00D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF5015BF306400D76F6C /* HelloService.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF0D15BF2F2900D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF5215BF307400D76F6C /* LogService.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF1515BF2F5700D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3E15BF2FFA00D76F6C /* hasCreateAndDestroy.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF1D15BF2F6F00D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4215BF302200D76F6C /* hasNoCreate.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF6415BF30AA00D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF6D15BF30BE00D76F6C /* helloserver.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E36D8A5C0D29C9D800B4C134 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCEAE15BF2D8A00D76F6C /* admin_rights.cpp in Sources */, E35CCEAF15BF2D8A00D76F6C /* algorithm.cpp in Sources */, E35CCEB015BF2D8A00D76F6C /* http_auth.cpp in Sources */, E35CCEB115BF2D8A00D76F6C /* http_basic_auth.cpp in Sources */, E35CCEB215BF2D8A00D76F6C /* http_cookie_auth.cpp in Sources */, E35CCEB315BF2D8A00D76F6C /* http_message.cpp in Sources */, E35CCEB415BF2D8A00D76F6C /* http_parser.cpp in Sources */, E35CCEB515BF2D8A00D76F6C /* http_plugin_server.cpp in Sources */, E35CCEB615BF2D8A00D76F6C /* http_reader.cpp in Sources */, E35CCEB715BF2D8A00D76F6C /* http_server.cpp in Sources */, E35CCEB815BF2D8A00D76F6C /* http_types.cpp in Sources */, E35CCEB915BF2D8A00D76F6C /* http_writer.cpp in Sources */, E35CCEBA15BF2D8A00D76F6C /* logger.cpp in Sources */, E35CCEBB15BF2D8A00D76F6C /* plugin.cpp in Sources */, E35CCEBC15BF2D8A00D76F6C /* process.cpp in Sources */, E35CCEBD15BF2D8A00D76F6C /* scheduler.cpp in Sources */, E35CCEBE15BF2D8A00D76F6C /* tcp_server.cpp in Sources */, E35CCEBF15BF2D8A00D76F6C /* tcp_timer.cpp in Sources */, 61AECCA0161268B300BF2B16 /* spdy_decompressor.cpp in Sources */, 61AECCA1161268B300BF2B16 /* spdy_parser.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E36D8BE40D29D6DC00B4C134 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF5315BF307B00D76F6C /* piond.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E370CEA5158D962700E46EE9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E3A1AE3315C87FD500FFE9E3 /* algorithm_tests.cpp in Sources */, E3A1AE3415C87FD500FFE9E3 /* file_service_tests.cpp in Sources */, E3A1AE3515C87FD500FFE9E3 /* http_message_tests.cpp in Sources */, E3A1AE3615C87FD500FFE9E3 /* http_parser_tests.cpp in Sources */, E3A1AE3715C87FD500FFE9E3 /* http_plugin_server_tests.cpp in Sources */, E3A1AE3815C87FD500FFE9E3 /* http_request_tests.cpp in Sources */, E3A1AE3915C87FD500FFE9E3 /* http_response_tests.cpp in Sources */, E3A1AE3A15C87FD500FFE9E3 /* plugin_manager_tests.cpp in Sources */, E3A1AE3B15C87FD500FFE9E3 /* plugin_tests.cpp in Sources */, E3A1AE3C15C87FD500FFE9E3 /* tcp_server_tests.cpp in Sources */, E3A1AE3D15C87FD500FFE9E3 /* tcp_stream_tests.cpp in Sources */, E3A1AE3215C878E100FFE9E3 /* piontests.cpp in Sources */, E35CCF5B15BF30A300D76F6C /* http_types_tests.cpp in Sources */, 61AECCA4161269BF00BF2B16 /* spdy_parser_tests.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E370CF28158E6C1A00E46EE9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4015BF300600D76F6C /* hasCreateButNoDestroy.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ E35CCF2515BF2F9A00D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF2415BF2F9A00D76F6C /* PBXContainerItemProxy */; }; E35CCF2715BF2F9F00D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF2615BF2F9F00D76F6C /* PBXContainerItemProxy */; }; E35CCF2915BF2FA200D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF2815BF2FA200D76F6C /* PBXContainerItemProxy */; }; E35CCF2B15BF2FA500D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF2A15BF2FA500D76F6C /* PBXContainerItemProxy */; }; E35CCF2D15BF2FA800D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF2C15BF2FA800D76F6C /* PBXContainerItemProxy */; }; E35CCF2F15BF2FAB00D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF2E15BF2FAB00D76F6C /* PBXContainerItemProxy */; }; E35CCF3115BF2FAE00D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF3015BF2FAE00D76F6C /* PBXContainerItemProxy */; }; E35CCF3315BF2FB100D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF3215BF2FB100D76F6C /* PBXContainerItemProxy */; }; E35CCF3515BF2FB300D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF3415BF2FB300D76F6C /* PBXContainerItemProxy */; }; E35CCF6215BF30AA00D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF6315BF30AA00D76F6C /* PBXContainerItemProxy */; }; E36D8BEE0D29D6F200B4C134 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E36D8BED0D29D6F200B4C134 /* PBXContainerItemProxy */; }; E370CE7D158D962700E46EE9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E370CE7E158D962700E46EE9 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 1DEB923608733DC60010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; BOOST_VERSION = 1.51.0; DEP_PATH = "/Users/$(USER)/.cloudmeter"; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( _REENTRANT, PION_XCODE, ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; ICU_VERSION = 49.1.2; LIBRARY_SEARCH_PATHS = "$(CONFIGURATION_BUILD_DIR)"; LOG4CPLUS_VERSION = 1.0.4.1; OBJROOT = "$(PROJECT_DIR)/bin/tmp"; OTHER_CFLAGS = ( "-fkeep-inline-functions", "-isystem", "$(DEP_PATH)/openssl-$(SSL_VERSION)/include", ); OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-isystem", "$(DEP_PATH)/log4cplus-$(LOG4CPLUS_VERSION)/include", "-isystem", "$(DEP_PATH)/boost-$(BOOST_VERSION)/include", ); OTHER_LDFLAGS = ( "-lz", "-lbz2", ); SDKROOT = macosx10.7; SSL_VERSION = 1.0.1c; SYMROOT = "$(PROJECT_DIR)/bin"; USER_HEADER_SEARCH_PATHS = "${PROJECT_DIR}/include"; VALID_ARCHS = "ppc64 ppc7400 ppc970 i386 x86_64 ppc"; }; name = Debug; }; 1DEB923708733DC60010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; BOOST_VERSION = 1.51.0; DEP_PATH = "/Users/$(USER)/.cloudmeter"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_OPTIMIZATION_LEVEL = 3; GCC_PREPROCESSOR_DEFINITIONS = ( _REENTRANT, PION_XCODE, NDEBUG, ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; ICU_VERSION = 49.1.2; LIBRARY_SEARCH_PATHS = "$(CONFIGURATION_BUILD_DIR)"; LOG4CPLUS_VERSION = 1.0.4.1; OBJROOT = "$(PROJECT_DIR)/bin/tmp"; OTHER_CFLAGS = ( "-isystem", "$(DEP_PATH)/openssl-$(SSL_VERSION)/include", ); OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-isystem", "$(DEP_PATH)/log4cplus-$(LOG4CPLUS_VERSION)/include", "-isystem", "$(DEP_PATH)/boost-$(BOOST_VERSION)/include", ); OTHER_LDFLAGS = ( "-lz", "-lbz2", ); SDKROOT = macosx10.7; SSL_VERSION = 1.0.1c; SYMROOT = "$(PROJECT_DIR)/bin"; USER_HEADER_SEARCH_PATHS = "${PROJECT_DIR}/include"; VALID_ARCHS = "ppc64 ppc7400 ppc970 i386 x86_64 ppc"; }; name = Release; }; E3474EA0162E0D99003AA5ED /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = lib; INSTALL_PATH = /usr/local/lib; MACH_O_TYPE = staticlib; OTHER_LDFLAGS = ""; PRODUCT_NAME = "pion-pic"; }; name = Debug; }; E3474EA1162E0D99003AA5ED /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = lib; INSTALL_PATH = /usr/local/lib; MACH_O_TYPE = staticlib; OTHER_LDFLAGS = ""; PRODUCT_NAME = "pion-pic"; }; name = Release; }; E3474F21162E1053003AA5ED /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = lib; GCC_DYNAMIC_NO_PIC = YES; INSTALL_PATH = /usr/local/lib; MACH_O_TYPE = staticlib; OTHER_LDFLAGS = ""; PRODUCT_NAME = pion; }; name = Debug; }; E3474F22162E1053003AA5ED /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = lib; GCC_DYNAMIC_NO_PIC = YES; INSTALL_PATH = /usr/local/lib; MACH_O_TYPE = staticlib; OTHER_LDFLAGS = ""; PRODUCT_NAME = pion; }; name = Release; }; E35CCEE815BF2EE100D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = AllowNothingService; }; name = Debug; }; E35CCEE915BF2EE100D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = AllowNothingService; }; name = Release; }; E35CCEF015BF2EFB00D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = CookieService; }; name = Debug; }; E35CCEF115BF2EFB00D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = CookieService; }; name = Release; }; E35CCEF815BF2F0800D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = EchoService; }; name = Debug; }; E35CCEF915BF2F0800D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = EchoService; }; name = Release; }; E35CCF0015BF2F1300D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = FileService; }; name = Debug; }; E35CCF0115BF2F1300D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = FileService; }; name = Release; }; E35CCF0815BF2F1E00D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = HelloService; }; name = Debug; }; E35CCF0915BF2F1E00D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = HelloService; }; name = Release; }; E35CCF1015BF2F2900D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = LogService; }; name = Debug; }; E35CCF1115BF2F2900D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = LogService; }; name = Release; }; E35CCF1815BF2F5700D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = hasCreateAndDestroy; }; name = Debug; }; E35CCF1915BF2F5700D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = hasCreateAndDestroy; }; name = Release; }; E35CCF2015BF2F6F00D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = hasNoCreate; }; name = Debug; }; E35CCF2115BF2F6F00D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = hasNoCreate; }; name = Release; }; E35CCF6915BF30AA00D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = helloserver; }; name = Debug; }; E35CCF6A15BF30AA00D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = helloserver; }; name = Release; }; E36D8A600D29C9D900B4C134 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = lib; INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ( "-Wl,-force_load", "-Wl,$(DEP_PATH)/openssl-$(SSL_VERSION)/lib/libssl-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/openssl-$(SSL_VERSION)/lib/libcrypto-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicudata-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicui18n-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicutu-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicuuc-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_chrono-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_date_time-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_filesystem-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_iostreams-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_regex-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_signals-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_system-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_thread-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/log4cplus-$(LOG4CPLUS_VERSION)/lib/liblog4cplus-pic.a", "$(OTHER_LDFLAGS)", ); PRODUCT_NAME = pion; }; name = Debug; }; E36D8A610D29C9D900B4C134 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = lib; INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ( "-Wl,-force_load", "-Wl,$(DEP_PATH)/openssl-$(SSL_VERSION)/lib/libssl-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/openssl-$(SSL_VERSION)/lib/libcrypto-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicudata-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicui18n-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicutu-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicuuc-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_chrono-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_date_time-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_filesystem-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_iostreams-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_regex-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_signals-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_system-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_thread-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/log4cplus-$(LOG4CPLUS_VERSION)/lib/liblog4cplus-pic.a", "$(OTHER_LDFLAGS)", ); PRODUCT_NAME = pion; }; name = Release; }; E36D8BE90D29D6DC00B4C134 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = piond; }; name = Debug; }; E36D8BEA0D29D6DC00B4C134 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = piond; }; name = Release; }; E370CEBE158D962700E46EE9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/bin; OTHER_LDFLAGS = ( "$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_unit_test_framework.a", "$(OTHER_LDFLAGS)", ); PRODUCT_NAME = piontests; }; name = Debug; }; E370CEBF158D962700E46EE9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/bin; OTHER_LDFLAGS = ( "$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_unit_test_framework.a", "$(OTHER_LDFLAGS)", ); PRODUCT_NAME = piontests; }; name = Release; }; E370CF2E158E6C1A00E46EE9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = hasCreateButNoDestroy; }; name = Debug; }; E370CF2F158E6C1A00E46EE9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = hasCreateButNoDestroy; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "pion" */ = { isa = XCConfigurationList; buildConfigurations = ( 1DEB923608733DC60010E9CD /* Debug */, 1DEB923708733DC60010E9CD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E3474E9F162E0D99003AA5ED /* Build configuration list for PBXNativeTarget "pion: static pic" */ = { isa = XCConfigurationList; buildConfigurations = ( E3474EA0162E0D99003AA5ED /* Debug */, E3474EA1162E0D99003AA5ED /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E3474F20162E1053003AA5ED /* Build configuration list for PBXNativeTarget "pion: static" */ = { isa = XCConfigurationList; buildConfigurations = ( E3474F21162E1053003AA5ED /* Debug */, E3474F22162E1053003AA5ED /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCEE715BF2EE100D76F6C /* Build configuration list for PBXNativeTarget "AllowNothingService" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCEE815BF2EE100D76F6C /* Debug */, E35CCEE915BF2EE100D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCEEF15BF2EFB00D76F6C /* Build configuration list for PBXNativeTarget "CookieService" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCEF015BF2EFB00D76F6C /* Debug */, E35CCEF115BF2EFB00D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCEF715BF2F0800D76F6C /* Build configuration list for PBXNativeTarget "EchoService" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCEF815BF2F0800D76F6C /* Debug */, E35CCEF915BF2F0800D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCEFF15BF2F1300D76F6C /* Build configuration list for PBXNativeTarget "FileService" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCF0015BF2F1300D76F6C /* Debug */, E35CCF0115BF2F1300D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCF0715BF2F1E00D76F6C /* Build configuration list for PBXNativeTarget "HelloService" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCF0815BF2F1E00D76F6C /* Debug */, E35CCF0915BF2F1E00D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCF0F15BF2F2900D76F6C /* Build configuration list for PBXNativeTarget "LogService" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCF1015BF2F2900D76F6C /* Debug */, E35CCF1115BF2F2900D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCF1715BF2F5700D76F6C /* Build configuration list for PBXNativeTarget "hasCreateAndDestroy" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCF1815BF2F5700D76F6C /* Debug */, E35CCF1915BF2F5700D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCF1F15BF2F6F00D76F6C /* Build configuration list for PBXNativeTarget "hasNoCreate" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCF2015BF2F6F00D76F6C /* Debug */, E35CCF2115BF2F6F00D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCF6815BF30AA00D76F6C /* Build configuration list for PBXNativeTarget "helloserver" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCF6915BF30AA00D76F6C /* Debug */, E35CCF6A15BF30AA00D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E36D8A9F0D29CB0F00B4C134 /* Build configuration list for PBXNativeTarget "pion: dynamic" */ = { isa = XCConfigurationList; buildConfigurations = ( E36D8A600D29C9D900B4C134 /* Debug */, E36D8A610D29C9D900B4C134 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E36D8C0A0D29D75C00B4C134 /* Build configuration list for PBXNativeTarget "piond" */ = { isa = XCConfigurationList; buildConfigurations = ( E36D8BE90D29D6DC00B4C134 /* Debug */, E36D8BEA0D29D6DC00B4C134 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E370CEBD158D962700E46EE9 /* Build configuration list for PBXNativeTarget "piontests" */ = { isa = XCConfigurationList; buildConfigurations = ( E370CEBE158D962700E46EE9 /* Debug */, E370CEBF158D962700E46EE9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E370CF2D158E6C1A00E46EE9 /* Build configuration list for PBXNativeTarget "hasCreateButNoDestroy" */ = { isa = XCConfigurationList; buildConfigurations = ( E370CF2E158E6C1A00E46EE9 /* Debug */, E370CF2F158E6C1A00E46EE9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; /* End XCConfigurationList section */ }; rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; } pion-5.0.4+dfsg.orig/pion.xcodeproj/xcshareddata/0000755000372000001440000000000012215647065021341 5ustar robertouserspion-5.0.4+dfsg.orig/pion.xcodeproj/xcshareddata/xcschemes/0000755000372000001440000000000012215647065023323 5ustar robertouserspion-5.0.4+dfsg.orig/pion.xcodeproj/xcshareddata/xcschemes/pion - library.xcscheme0000644000372000001440000000506312215647065027557 0ustar robertousers pion-5.0.4+dfsg.orig/pion.xcodeproj/xcshareddata/xcschemes/pion - piond server.xcscheme0000644000372000001440000001737512215647065030524 0ustar robertousers pion-5.0.4+dfsg.orig/pion.xcodeproj/xcshareddata/xcschemes/pion - service plugins.xcscheme0000644000372000001440000001151212215647065031211 0ustar robertousers pion-5.0.4+dfsg.orig/pion.xcodeproj/xcshareddata/xcschemes/pion - hello server.xcscheme0000644000372000001440000000610312215647065030501 0ustar robertousers pion-5.0.4+dfsg.orig/pion.xcodeproj/xcshareddata/xcschemes/pion - unit tests.xcscheme0000644000372000001440000002036412215647065030216 0ustar robertousers pion-5.0.4+dfsg.orig/pion.xcodeproj/project.xcworkspace/0000755000372000001440000000000012215647065022704 5ustar robertouserspion-5.0.4+dfsg.orig/pion.xcodeproj/project.xcworkspace/xcshareddata/0000755000372000001440000000000012215647065025337 5ustar robertouserspion-5.0.4+dfsg.orig/pion.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings0000644000372000001440000000041012215647065033126 0ustar robertousers IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded pion-5.0.4+dfsg.orig/pion.xcodeproj/project.xcworkspace/contents.xcworkspacedata0000644000372000001440000000022512215647065027645 0ustar robertousers pion-5.0.4+dfsg.orig/tests/0000755000372000001440000000000012215647145015106 5ustar robertouserspion-5.0.4+dfsg.orig/tests/http_message_tests.cpp0000644000372000001440000004777212215647065021541 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include #include #include #include #include #include using namespace pion; BOOST_AUTO_TEST_CASE(checkHTTPRequestCopyConstructor) { http::request req1; req1.add_header("Test", "HTTPMessage"); req1.set_method("GET"); http::request req2(req1); BOOST_CHECK_EQUAL(req1.get_method(), "GET"); BOOST_CHECK_EQUAL(req1.get_method(), req2.get_method()); BOOST_CHECK_EQUAL(req1.get_header("Test"), "HTTPMessage"); BOOST_CHECK_EQUAL(req1.get_header("Test"), req2.get_header("Test")); } BOOST_AUTO_TEST_CASE(checkHTTPRequestAssignmentOperator) { http::request req1, req2; req1.set_method("GET"); req1.add_header("Test", "HTTPMessage"); req2 = req1; BOOST_CHECK_EQUAL(req1.get_method(), "GET"); BOOST_CHECK_EQUAL(req1.get_method(), req2.get_method()); BOOST_CHECK_EQUAL(req1.get_header("Test"), "HTTPMessage"); BOOST_CHECK_EQUAL(req1.get_header("Test"), req2.get_header("Test")); } BOOST_AUTO_TEST_CASE(checkHTTPResponseCopyConstructor) { http::response rsp1; rsp1.add_header("Test", "HTTPMessage"); rsp1.set_status_code(199); http::response rsp2(rsp1); BOOST_CHECK_EQUAL(rsp1.get_status_code(), 199U); BOOST_CHECK_EQUAL(rsp1.get_status_code(), rsp2.get_status_code()); BOOST_CHECK_EQUAL(rsp1.get_header("Test"), "HTTPMessage"); BOOST_CHECK_EQUAL(rsp1.get_header("Test"), rsp2.get_header("Test")); } BOOST_AUTO_TEST_CASE(checkHTTPResponseAssignmentOperator) { http::response rsp1, rsp2; rsp1.add_header("Test", "HTTPMessage"); rsp1.set_status_code(199); rsp2 = rsp1; BOOST_CHECK_EQUAL(rsp1.get_status_code(), 199U); BOOST_CHECK_EQUAL(rsp1.get_status_code(), rsp2.get_status_code()); BOOST_CHECK_EQUAL(rsp1.get_header("Test"), "HTTPMessage"); BOOST_CHECK_EQUAL(rsp1.get_header("Test"), rsp2.get_header("Test")); } BOOST_AUTO_TEST_CASE(checkGetFirstLineForRequest) { http::request http_request; http_request.set_method("GET"); http_request.set_resource("/"); BOOST_CHECK_EQUAL(http_request.get_first_line(), "GET / HTTP/1.1"); http_request.set_method("POST"); BOOST_CHECK_EQUAL(http_request.get_first_line(), "POST / HTTP/1.1"); http_request.set_resource("/index.html"); BOOST_CHECK_EQUAL(http_request.get_first_line(), "POST /index.html HTTP/1.1"); http_request.set_version_major(1); http_request.set_version_minor(0); BOOST_CHECK_EQUAL(http_request.get_first_line(), "POST /index.html HTTP/1.0"); } BOOST_AUTO_TEST_CASE(checkGetFirstLineForResponse) { http::response http_response; http_response.set_status_code(http::types::RESPONSE_CODE_OK); http_response.set_status_message(http::types::RESPONSE_MESSAGE_OK); BOOST_CHECK_EQUAL(http_response.get_first_line(), "HTTP/1.1 200 OK"); http_response.set_status_code(http::types::RESPONSE_CODE_NOT_FOUND); BOOST_CHECK_EQUAL(http_response.get_first_line(), "HTTP/1.1 404 OK"); http_response.set_status_message(http::types::RESPONSE_MESSAGE_NOT_FOUND); BOOST_CHECK_EQUAL(http_response.get_first_line(), "HTTP/1.1 404 Not Found"); } #define FIXTURE_TYPE_LIST(F) boost::mpl::list, F > template class NewHTTPMessage_F : public ConcreteMessageType { public: NewHTTPMessage_F() { } ~NewHTTPMessage_F() { } }; BOOST_AUTO_TEST_SUITE_FIXTURE_TEMPLATE(NewHTTPMessage_S, FIXTURE_TYPE_LIST(NewHTTPMessage_F)) BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkGetContentLengthReturnsZero) { BOOST_CHECK_EQUAL(F::get_content_length(), static_cast(0)); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkSetContentLengthDoesntThrow) { BOOST_CHECK_NO_THROW(F::set_content_length(10)); BOOST_CHECK_NO_THROW(F::set_content_length(0)); } // Is this what we want? Note that the length is zero here. BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkCreateContentBufferReturnsPointer) { BOOST_CHECK(F::create_content_buffer() != NULL); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkGetContentReturnsEmptyString) { BOOST_CHECK(F::get_content() != NULL); BOOST_CHECK_EQUAL(strcmp(F::get_content(), ""), 0); BOOST_CHECK(!F::is_content_buffer_allocated()); } // Is this what we want? Note that the length is zero here. BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkGetContentReturnsPointerAfterCreatingContentBuffer) { F::create_content_buffer(); BOOST_CHECK(F::get_content() != NULL); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkIsValidReturnsFalse) { BOOST_CHECK(!F::is_valid()); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(testChunksSupportedAccessors) { BOOST_CHECK(!F::get_chunks_supported()); F::set_chunks_supported(true); BOOST_CHECK(F::get_chunks_supported()); F::set_chunks_supported(false); BOOST_CHECK(!F::get_chunks_supported()); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(testHeaderCaseIsIgnored) { const std::string xml_content_type("text/xml"); F::add_header(http::types::HEADER_CONTENT_TYPE, xml_content_type); BOOST_CHECK_EQUAL(F::get_header("CoNTenT-TYPe"), xml_content_type); F::add_header("content-length", "10"); BOOST_CHECK_EQUAL(F::get_header(http::types::HEADER_CONTENT_LENGTH), "10"); } BOOST_AUTO_TEST_SUITE_END() template class HTTPMessageWithContentLengthSet_F : public ConcreteMessageType { public: HTTPMessageWithContentLengthSet_F() { this->set_content_length(20); } ~HTTPMessageWithContentLengthSet_F() { } }; BOOST_AUTO_TEST_SUITE_FIXTURE_TEMPLATE(HTTPMessageWithContentLengthSet_S, FIXTURE_TYPE_LIST(HTTPMessageWithContentLengthSet_F)) BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkGetContentLengthReturnsCorrectLength) { BOOST_CHECK_EQUAL(F::get_content_length(), static_cast(20)); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkGetContentLengthAfterSettingLengthAgain) { F::set_content_length(30); BOOST_CHECK_EQUAL(F::get_content_length(), static_cast(30)); F::set_content_length(0); BOOST_CHECK_EQUAL(F::get_content_length(), static_cast(0)); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkCreateContentBufferVarious) { char *ptr = F::create_content_buffer(); BOOST_CHECK(ptr != NULL); BOOST_CHECK_EQUAL(ptr, F::get_content()); BOOST_CHECK_EQUAL(F::get_content_buffer_size(), 20U); BOOST_CHECK(F::is_content_buffer_allocated()); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkGetContentReturnsEmptyString) { BOOST_CHECK(F::get_content() != NULL); BOOST_CHECK_EQUAL(strcmp(F::get_content(), ""), 0); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkIsValidReturnsFalse) { BOOST_CHECK(!F::is_valid()); } BOOST_AUTO_TEST_SUITE_END() template class HTTPMessageWithContentBufferCreated_F : public ConcreteMessageType { public: HTTPMessageWithContentBufferCreated_F() { m_len = 10; this->set_content_length(m_len); m_content_buffer = this->create_content_buffer(); } ~HTTPMessageWithContentBufferCreated_F() { } int m_len; char* m_content_buffer; }; BOOST_AUTO_TEST_SUITE_FIXTURE_TEMPLATE(HTTPMessageWithContentBufferCreated_S, FIXTURE_TYPE_LIST(HTTPMessageWithContentBufferCreated_F)) // ??? BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkCreateContentBufferAgainReturnsPointer) { BOOST_CHECK(F::create_content_buffer() != NULL); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkGetContentReturnsPointer) { BOOST_CHECK(F::get_content() != NULL); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkGetContentReturnsWhatWasWrittenToBuffer) { char buf[] = {0, 1, 2, 3, 127, 0, -1, -2, -3, -128}; BOOST_CHECK_EQUAL(sizeof(buf), static_cast(F::m_len)); memcpy(F::m_content_buffer, buf, F::m_len); BOOST_CHECK(memcmp(buf, F::get_content(), F::m_len) == 0); } BOOST_AUTO_TEST_SUITE_END() static const char TEXT_STRING_1[] = "0123456789"; static const char TEXT_STRING_2[] = "9876543210"; static const char TEXT_STRING_3[] = "0123456789abcde"; template class HTTPMessageWithTextOnlyContent_F : public ConcreteMessageType { public: HTTPMessageWithTextOnlyContent_F() { m_len = strlen(TEXT_STRING_1); this->set_content_length(m_len); m_content_buffer = this->create_content_buffer(); memcpy(m_content_buffer, TEXT_STRING_1, m_len); } ~HTTPMessageWithTextOnlyContent_F() { } size_t m_len; char* m_content_buffer; }; BOOST_AUTO_TEST_SUITE_FIXTURE_TEMPLATE(HTTPMessageWithTextOnlyContent_S, FIXTURE_TYPE_LIST(HTTPMessageWithTextOnlyContent_F)) BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkGetContentReturnsPointer) { BOOST_CHECK(F::get_content() != NULL); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkGetContentReturnsWhatWasWrittenToBuffer) { BOOST_CHECK(memcmp(TEXT_STRING_1, F::get_content(), F::m_len) == 0); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkGetContentAfterChangingContent) { BOOST_CHECK_EQUAL(strlen(TEXT_STRING_2), static_cast(F::m_len)); memcpy(F::m_content_buffer, TEXT_STRING_2, F::m_len); BOOST_CHECK(memcmp(TEXT_STRING_2, F::get_content(), F::m_len) == 0); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkGetContentAfterChangingSizeAndContent) { F::m_len = strlen(TEXT_STRING_3); F::set_content_length(F::m_len); F::m_content_buffer = F::create_content_buffer(); memcpy(F::m_content_buffer, TEXT_STRING_3, F::m_len); BOOST_CHECK(memcmp(TEXT_STRING_3, F::get_content(), F::m_len) == 0); } // This is just for convenience for text-only post content. // Strictly speaking, get_content() guarantees nothing beyond the buffer. BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkGetContentReturnsZeroTerminatedBuffer) { // This crashes due to bug in Boost.Test if m_content_buffer[m_len] is negative, so use workaround. //BOOST_CHECK_EQUAL(m_content_buffer[m_len], static_cast(0)); // Illustration of bug: //char c1 = -2; //char c2 = -2; //BOOST_CHECK_EQUAL(c1, c2); BOOST_CHECK_EQUAL(static_cast(F::m_content_buffer[F::m_len]), static_cast(0)); } // See comments for checkGetContentReturnsZeroTerminatedBuffer. BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkContentPointerUsableAsString) { const std::string s1 = TEXT_STRING_1; std::string s2 = F::get_content(); BOOST_CHECK_EQUAL(s1, s2); } BOOST_AUTO_TEST_SUITE_END() /// simple fixture for testing read() and write() methods class HTTPMessageReadWrite_F { public: HTTPMessageReadWrite_F() : m_filename("output.tmp") { openNewFile(); } ~HTTPMessageReadWrite_F() { m_file.close(); boost::filesystem::remove(m_filename); } void openNewFile(void) { if (m_file.is_open()) { m_file.close(); m_file.clear(); } m_file.open(m_filename.c_str(), std::ios::in | std::ios::out | std::ios::trunc | std::ios::binary); BOOST_REQUIRE(m_file.is_open()); } std::string getFileContents(void) { // if only it were this easy... unfortunately order of headers can vary //std::stringstream ss; //m_file.seekg(0); //ss << m_file.rdbuf(); //return ss.str(); char line[256]; std::stringstream ss; std::vector lines; bool is_first_line = true; m_file.clear(); m_file.seekg(0); while (m_file.getline(line, 255)) { std::size_t len = strlen(line); if (len > 0 && line[len-1]=='\r') line[len-1] = '\0'; if (is_first_line) { ss << line << "\r\n"; lines.clear(); is_first_line = false; } else if (line[0] == '\0') { std::sort(lines.begin(), lines.end()); BOOST_FOREACH(const std::string& l, lines) { ss << l << "\r\n"; } ss << "\r\n"; lines.clear(); is_first_line = true; } else { lines.push_back(line); } } std::sort(lines.begin(), lines.end()); BOOST_FOREACH(const std::string& l, lines) { ss << l << "\r\n"; } return ss.str(); } std::string m_filename; std::fstream m_file; }; BOOST_FIXTURE_TEST_SUITE(HTTPMessageReadWrite_S, HTTPMessageReadWrite_F) BOOST_AUTO_TEST_CASE(checkWriteReadHTTPRequestNoContent) { // build a request http::request req; req.set_resource("/test.html"); req.add_header("Test", "Something"); // write to file boost::system::error_code ec; req.write(m_file, ec); BOOST_REQUIRE(! ec); m_file.flush(); // read from file http::request req2; m_file.clear(); m_file.seekg(0); req2.read(m_file, ec); BOOST_REQUIRE(! ec); // make sure we're now at EOF http::request req3; req3.read(m_file, ec); BOOST_CHECK_EQUAL(ec.value(), boost::system::errc::io_error); // check request read from file BOOST_CHECK_EQUAL(req2.get_resource(), "/test.html"); BOOST_CHECK_EQUAL(req2.get_header("Test"), "Something"); BOOST_CHECK_EQUAL(req2.get_content_length(), 0U); // validate file contents std::string req_contents = getFileContents(); BOOST_CHECK_EQUAL(req_contents, "GET /test.html HTTP/1.1\r\nConnection: Keep-Alive\r\nContent-Length: 0\r\nTest: Something\r\n\r\n"); // create a new file for req2 openNewFile(); req2.write(m_file, ec); BOOST_REQUIRE(! ec); m_file.flush(); // make sure file matches original (no loss/change from read/write cycle) std::string req2_contents = getFileContents(); BOOST_CHECK_EQUAL(req_contents, req2_contents); } BOOST_AUTO_TEST_CASE(checkWriteReadHTTPResponseNoContent) { // build a response http::response rsp; rsp.set_status_code(202); rsp.set_status_message("Hi There"); rsp.add_header("HeaderA", "a value"); // write to file boost::system::error_code ec; rsp.write(m_file, ec); BOOST_REQUIRE(! ec); m_file.flush(); // read from file http::response rsp2; m_file.clear(); m_file.seekg(0); rsp2.read(m_file, ec); BOOST_REQUIRE(! ec); // make sure we're now at EOF http::response rsp3; rsp3.read(m_file, ec); BOOST_CHECK_EQUAL(ec.value(), boost::system::errc::io_error); // check response read from file BOOST_CHECK_EQUAL(rsp2.get_status_code(), 202U); BOOST_CHECK_EQUAL(rsp2.get_status_message(), "Hi There"); BOOST_CHECK_EQUAL(rsp2.get_header("HeaderA"), "a value"); BOOST_CHECK_EQUAL(rsp2.get_content_length(), 0U); // validate file contents std::string rsp_contents = getFileContents(); BOOST_CHECK_EQUAL(rsp_contents, "HTTP/1.1 202 Hi There\r\nConnection: Keep-Alive\r\nContent-Length: 0\r\nHeaderA: a value\r\n\r\n"); // create a new file for rsp2 openNewFile(); rsp2.write(m_file, ec); BOOST_REQUIRE(! ec); m_file.flush(); // make sure file matches original (no loss/change from read/write cycle) std::string rsp2_contents = getFileContents(); BOOST_CHECK_EQUAL(rsp_contents, rsp2_contents); } BOOST_AUTO_TEST_CASE(checkWriteReadMixedMessages) { boost::system::error_code ec; http::request req; http::response rsp; // build a request & write to file req.set_resource("/test.html"); req.add_header("Test", "Something"); req.write(m_file, ec); BOOST_REQUIRE(! ec); // build a response & write to file rsp.set_status_code(202); rsp.set_status_message("Hi There"); rsp.add_header("HeaderA", "a value"); rsp.set_content("My message content"); rsp.write(m_file, ec); BOOST_REQUIRE(! ec); // another request req.set_resource("/blah.html"); req.add_header("HeaderA", "a value"); req.set_content("My request content"); req.write(m_file, ec); BOOST_REQUIRE(! ec); // another response rsp.set_status_code(302); rsp.set_status_message("Hello There"); rsp.add_header("HeaderB", "another value"); rsp.clear_content(); rsp.write(m_file, ec); BOOST_REQUIRE(! ec); // one last request req.set_resource("/last.html"); req.add_header("HeaderB", "Bvalue"); req.clear_content(); req.write(m_file, ec); BOOST_REQUIRE(! ec); // flush file output m_file.flush(); // validate file contents std::string contents = getFileContents(); BOOST_CHECK_EQUAL(contents, "GET /test.html HTTP/1.1\r\nConnection: Keep-Alive\r\nContent-Length: 0\r\nTest: Something\r\n\r\n" "HTTP/1.1 202 Hi There\r\nConnection: Keep-Alive\r\nContent-Length: 18\r\nHeaderA: a value\r\n\r\nMy message content" "GET /blah.html HTTP/1.1\r\nConnection: Keep-Alive\r\nContent-Length: 18\r\nHeaderA: a value\r\nTest: Something\r\n\r\nMy request content" "HTTP/1.1 302 Hello There\r\nConnection: Keep-Alive\r\nContent-Length: 0\r\nHeaderA: a value\r\nHeaderB: another value\r\n\r\n" "GET /last.html HTTP/1.1\r\nConnection: Keep-Alive\r\nContent-Length: 0\r\nHeaderA: a value\r\nHeaderB: Bvalue\r\nTest: Something\r\n\r\n"); m_file.clear(); m_file.seekg(0); // read first request http::request req1; req1.read(m_file, ec); BOOST_REQUIRE(! ec); // read first response http::response rsp1; rsp1.read(m_file, ec); BOOST_REQUIRE(! ec); // read second request http::request req2; req2.read(m_file, ec); BOOST_REQUIRE(! ec); // read second response http::response rsp2; rsp2.read(m_file, ec); BOOST_REQUIRE(! ec); BOOST_CHECK_EQUAL(rsp2.get_status_code(), 302U); BOOST_CHECK_EQUAL(rsp2.get_status_message(), "Hello There"); // read third request http::request req3; req3.read(m_file, ec); BOOST_REQUIRE(! ec); // write everything back to new file openNewFile(); req1.write(m_file, ec); BOOST_REQUIRE(! ec); rsp1.write(m_file, ec); BOOST_REQUIRE(! ec); req2.write(m_file, ec); BOOST_REQUIRE(! ec); rsp2.write(m_file, ec); BOOST_REQUIRE(! ec); req3.write(m_file, ec); BOOST_REQUIRE(! ec); // flush file output m_file.flush(); // make sure file matches original (no loss/change from read/write cycle) std::string new_contents = getFileContents(); BOOST_CHECK_EQUAL(contents, new_contents); } BOOST_AUTO_TEST_CASE(checkWriteHTTPRequestWithCookies) { // build a request http::request req; req.set_resource("/test.html"); req.add_cookie("a", "value"); // write to file boost::system::error_code ec; req.write(m_file, ec); BOOST_REQUIRE(! ec); m_file.flush(); // validate file contents std::string req_contents = getFileContents(); BOOST_CHECK_EQUAL(req_contents, "GET /test.html HTTP/1.1\r\nConnection: Keep-Alive\r\nContent-Length: 0\r\nCookie: a=value\r\n\r\n"); } BOOST_AUTO_TEST_CASE(checkWriteHTTPResponseWithCookies) { // build a request http::response rsp; rsp.set_status_code(200); rsp.set_status_message("OK"); rsp.add_cookie("a", "value"); // write to file boost::system::error_code ec; rsp.write(m_file, ec); BOOST_REQUIRE(! ec); m_file.flush(); // validate file contents std::string rsp_contents = getFileContents(); BOOST_CHECK_EQUAL(rsp_contents, "HTTP/1.1 200 OK\r\nConnection: Keep-Alive\r\nContent-Length: 0\r\nSet-Cookie: a=\"value\"; Version=1; Path=/\r\n\r\n"); } BOOST_AUTO_TEST_SUITE_END() pion-5.0.4+dfsg.orig/tests/TestPlugins.vcxproj0000644000372000001440000003363012215647065021012 0ustar robertousers Debug_DLL_full Win32 Debug_DLL_full x64 Debug_static Win32 Debug_static x64 Release_DLL_full Win32 Release_DLL_full x64 Release_static Win32 Release_static x64 TestPluigins {7080E9F1-318F-4152-9E36-9F427F5CE9B7} TestPluigins Utility Utility Utility Utility Utility Utility Utility Utility <_ProjectFileVersion>10.0.40219.1 $(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ $(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ $(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ $(Configuration)_$(PlatformName)\ $(Configuration)_$(PlatformName)\ $(Configuration)_$(PlatformName)\ $(Configuration)_$(PlatformName)\ $(Configuration)_$(PlatformName)\ Remove all files from plugins\.libs if exist $(ProjectDir)plugins\.libs del /Q $(ProjectDir)plugins\.libs\*.* Copy the plugin DLLs for the current configuration into plugins\.libs if not exist $(ProjectDir)plugins\.libs md $(ProjectDir)plugins\.libs copy $(ProjectDir)plugins\$(Configuration)_$(PlatformName)\*.dll $(ProjectDir)plugins\.libs Remove all files from plugins\.libs if exist $(ProjectDir)plugins\.libs del /Q $(ProjectDir)plugins\.libs\*.* X64 Copy the plugin DLLs for the current configuration into plugins\.libs if not exist $(ProjectDir)plugins\.libs md $(ProjectDir)plugins\.libs copy $(ProjectDir)plugins\$(Configuration)_$(PlatformName)\*.dll $(ProjectDir)plugins\.libs Remove all files from plugins\.libs if exist $(ProjectDir)plugins\.libs del /Q $(ProjectDir)plugins\.libs\*.* Copy the plugin DLLs for the current configuration into plugins\.libs if not exist $(ProjectDir)plugins\.libs md $(ProjectDir)plugins\.libs copy $(ProjectDir)plugins\$(Configuration)_$(PlatformName)\*.dll $(ProjectDir)plugins\.libs Remove all files from plugins\.libs if exist $(ProjectDir)plugins\.libs del /Q $(ProjectDir)plugins\.libs\*.* X64 Copy the plugin DLLs for the current configuration into plugins\.libs if not exist $(ProjectDir)plugins\.libs md $(ProjectDir)plugins\.libs copy $(ProjectDir)plugins\$(Configuration)_$(PlatformName)\*.dll $(ProjectDir)plugins\.libs if exist $(ProjectDir)plugins\.libs del /Q $(ProjectDir)plugins\.libs\*.* Copy the plugin DLLs for the current configuration into plugins\.libs if not exist $(ProjectDir)plugins\.libs md $(ProjectDir)plugins\.libs copy $(ProjectDir)plugins\$(Configuration)_$(PlatformName)\*.dll $(ProjectDir)plugins\.libs if exist $(ProjectDir)plugins\.libs del /Q $(ProjectDir)plugins\.libs\*.* X64 Copy the plugin DLLs for the current configuration into plugins\.libs if not exist $(ProjectDir)plugins\.libs md $(ProjectDir)plugins\.libs copy $(ProjectDir)plugins\$(Configuration)_$(PlatformName)\*.dll $(ProjectDir)plugins\.libs if exist $(ProjectDir)plugins\.libs del /Q $(ProjectDir)plugins\.libs\*.* Copy the plugin DLLs for the current configuration into plugins\.libs if not exist $(ProjectDir)plugins\.libs md $(ProjectDir)plugins\.libs copy $(ProjectDir)plugins\$(Configuration)_$(PlatformName)\*.dll $(ProjectDir)plugins\.libs if exist $(ProjectDir)plugins\.libs del /Q $(ProjectDir)plugins\.libs\*.* X64 Copy the plugin DLLs for the current configuration into plugins\.libs if not exist $(ProjectDir)plugins\.libs md $(ProjectDir)plugins\.libs copy $(ProjectDir)plugins\$(Configuration)_$(PlatformName)\*.dll $(ProjectDir)plugins\.libs {cd11b3d6-1296-45f4-b924-034cc103d626} false {2deab99f-2617-4235-8ef7-653f36efac83} false {33deab53-40e1-42ff-9c17-7a9956102052} false pion-5.0.4+dfsg.orig/tests/http_types_tests.cpp0000644000372000001440000000406312215647065021243 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include using namespace pion; BOOST_FIXTURE_TEST_SUITE(types_S, http::types) BOOST_AUTO_TEST_CASE(ihashTests) { std::string val1 = "Content-Type"; std::string val2 = "Content-type"; ihash hasher; BOOST_CHECK_EQUAL(hasher(val1), hasher(val2)); } BOOST_AUTO_TEST_CASE(testCaseInsensitiveHeaders) { ihash_multimap h; std::string key1("Content-Length"); std::string key2("Content-length"); std::string value("123"); h.insert(std::make_pair(key1, value)); ihash_multimap::const_iterator it = h.find(key2); BOOST_REQUIRE(it != h.end()); BOOST_CHECK_EQUAL(it->second, value); } BOOST_AUTO_TEST_CASE(testMultipleHeaderValues) { ihash_multimap h; std::string key1("Content-Length"); std::string key2("Content-length"); std::string key3("content-length"); std::string value1("123"); std::string value2("456"); h.insert(std::make_pair(key1, value1)); h.insert(std::make_pair(key2, value2)); std::pair hp = h.equal_range(key3); ihash_multimap::const_iterator it = hp.first; BOOST_REQUIRE(it != h.end()); BOOST_CHECK(it->second == value1 || it->second == value2); if (it->second == value1) { ++it; BOOST_REQUIRE(it != h.end()); BOOST_CHECK_EQUAL(it->second, value2); } else { ++it; BOOST_REQUIRE(it != h.end()); BOOST_CHECK_EQUAL(it->second, value1); } ++it; BOOST_CHECK(it == h.end()); } BOOST_AUTO_TEST_SUITE_END() pion-5.0.4+dfsg.orig/tests/plugins/0000755000372000001440000000000012215647145016567 5ustar robertouserspion-5.0.4+dfsg.orig/tests/plugins/hasCreateButNoDestroy.cpp0000644000372000001440000000120712215647065023515 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include "hasCreateButNoDestroy.hpp" #include /// creates new hasCreateButNoDestroy objects extern "C" PION_PLUGIN hasCreateButNoDestroy *pion_create_hasCreateButNoDestroy(void) { return new hasCreateButNoDestroy(); } pion-5.0.4+dfsg.orig/tests/plugins/hasCreateButNoDestroy.vcxproj0000644000372000001440000002525112215647065024433 0ustar robertousers Release_DLL_full Win32 Release_DLL_full x64 Release_Static Win32 Release_Static x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83} hasCreateButNoDestroy Win32Proj DynamicLibrary NotSet true DynamicLibrary NotSet true DynamicLibrary NotSet true DynamicLibrary NotSet true <_ProjectFileVersion>10.0.40219.1 false false $(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ false $(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset WIN32;NDEBUG;_WINDOWS;_USRDLL;TESTPLUGIN1_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase true Windows true true false MachineX86 X64 WIN32;NDEBUG;_WINDOWS;_USRDLL;TESTPLUGIN1_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase true Windows true true false MachineX64 WIN32;NDEBUG;_WINDOWS;_USRDLL;TESTPLUGIN1_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase true Windows true true false MachineX86 X64 WIN32;NDEBUG;_WINDOWS;_USRDLL;TESTPLUGIN1_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase true Windows true true false MachineX64 pion-5.0.4+dfsg.orig/tests/plugins/hasNoCreate.cpp0000644000372000001440000000106212215647065021467 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include "hasNoCreate.hpp" #include /// arbitrary function for the library to export extern "C" PION_PLUGIN int f(void) { return 4; } pion-5.0.4+dfsg.orig/tests/plugins/Makefile.am0000644000372000001440000000251312215647065020625 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- AM_CPPFLAGS = -I../../include # Note: For some reason, libtool does not build shared libs when check_LTLIBRARIES... pion_pluginsdir = @PION_PLUGINS_DIRECTORY@ pion_plugins_LTLIBRARIES = hasCreateAndDestroy.la hasCreateButNoDestroy.la hasNoCreate.la #check_LTLIBRARIES = hasCreateAndDestroy.la hasCreateButNoDestroy.la hasNoCreate.la hasCreateAndDestroy_la_SOURCES = InterfaceStub.hpp hasCreateAndDestroy.hpp hasCreateAndDestroy.cpp hasCreateAndDestroy_la_LDFLAGS = -no-undefined -module -avoid-version hasCreateAndDestroy_la_LIBADD = ../../src/libpion.la @PION_EXTERNAL_LIBS@ hasCreateAndDestroy_la_DEPENDENCIES = ../../src/libpion.la hasCreateButNoDestroy_la_SOURCES = InterfaceStub.hpp hasCreateButNoDestroy.hpp hasCreateButNoDestroy.cpp hasCreateButNoDestroy_la_LDFLAGS = -no-undefined -module -avoid-version hasCreateButNoDestroy_la_LIBADD = ../../src/libpion.la @PION_EXTERNAL_LIBS@ hasCreateButNoDestroy_la_DEPENDENCIES = ../../src/libpion.la hasNoCreate_la_SOURCES = InterfaceStub.hpp hasNoCreate.hpp hasNoCreate.cpp hasNoCreate_la_LDFLAGS = -no-undefined -module -avoid-version hasNoCreate_la_LIBADD = ../../src/libpion.la @PION_EXTERNAL_LIBS@ hasNoCreate_la_DEPENDENCIES = ../../src/libpion.la EXTRA_DIST = *.vcxproj *.vcxproj.filters pion-5.0.4+dfsg.orig/tests/plugins/hasNoCreate.vcxproj0000644000372000001440000002521312215647065022404 0ustar robertousers Release_DLL_full Win32 Release_DLL_full x64 Release_Static Win32 Release_Static x64 {33DEAB53-40E1-42FF-9C17-7A9956102052} hasNoCreate Win32Proj DynamicLibrary NotSet true DynamicLibrary NotSet true DynamicLibrary NotSet true DynamicLibrary NotSet true <_ProjectFileVersion>10.0.40219.1 false false $(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ false $(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset WIN32;NDEBUG;_WINDOWS;_USRDLL;TESTPLUGIN1_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase true Windows true true false MachineX86 X64 WIN32;NDEBUG;_WINDOWS;_USRDLL;TESTPLUGIN1_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase true Windows true true false MachineX64 WIN32;NDEBUG;_WINDOWS;_USRDLL;TESTPLUGIN1_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase true Windows true true false MachineX86 X64 WIN32;NDEBUG;_WINDOWS;_USRDLL;TESTPLUGIN1_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase true Windows true true false MachineX64 pion-5.0.4+dfsg.orig/tests/plugins/hasCreateAndDestroy.vcxproj.filters0000644000372000001440000000205212215647065025547 0ustar robertousers {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Header Files pion-5.0.4+dfsg.orig/tests/plugins/hasNoCreate.vcxproj.filters0000644000372000001440000000203212215647065024045 0ustar robertousers {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Header Files pion-5.0.4+dfsg.orig/tests/plugins/Makefile.in0000644000372000001440000005447312215647102020642 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tests/plugins DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pion_pluginsdir)" LTLIBRARIES = $(pion_plugins_LTLIBRARIES) am_hasCreateAndDestroy_la_OBJECTS = hasCreateAndDestroy.lo hasCreateAndDestroy_la_OBJECTS = $(am_hasCreateAndDestroy_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent hasCreateAndDestroy_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(hasCreateAndDestroy_la_LDFLAGS) \ $(LDFLAGS) -o $@ am_hasCreateButNoDestroy_la_OBJECTS = hasCreateButNoDestroy.lo hasCreateButNoDestroy_la_OBJECTS = \ $(am_hasCreateButNoDestroy_la_OBJECTS) hasCreateButNoDestroy_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(hasCreateButNoDestroy_la_LDFLAGS) \ $(LDFLAGS) -o $@ am_hasNoCreate_la_OBJECTS = hasNoCreate.lo hasNoCreate_la_OBJECTS = $(am_hasNoCreate_la_OBJECTS) hasNoCreate_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(hasNoCreate_la_LDFLAGS) \ $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/pion depcomp = $(SHELL) $(top_srcdir)/m4/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_$(V)) am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_$(V)) am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(hasCreateAndDestroy_la_SOURCES) \ $(hasCreateButNoDestroy_la_SOURCES) $(hasNoCreate_la_SOURCES) DIST_SOURCES = $(hasCreateAndDestroy_la_SOURCES) \ $(hasCreateButNoDestroy_la_SOURCES) $(hasNoCreate_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I../../include # Note: For some reason, libtool does not build shared libs when check_LTLIBRARIES... pion_pluginsdir = @PION_PLUGINS_DIRECTORY@ pion_plugins_LTLIBRARIES = hasCreateAndDestroy.la hasCreateButNoDestroy.la hasNoCreate.la #check_LTLIBRARIES = hasCreateAndDestroy.la hasCreateButNoDestroy.la hasNoCreate.la hasCreateAndDestroy_la_SOURCES = InterfaceStub.hpp hasCreateAndDestroy.hpp hasCreateAndDestroy.cpp hasCreateAndDestroy_la_LDFLAGS = -no-undefined -module -avoid-version hasCreateAndDestroy_la_LIBADD = ../../src/libpion.la @PION_EXTERNAL_LIBS@ hasCreateAndDestroy_la_DEPENDENCIES = ../../src/libpion.la hasCreateButNoDestroy_la_SOURCES = InterfaceStub.hpp hasCreateButNoDestroy.hpp hasCreateButNoDestroy.cpp hasCreateButNoDestroy_la_LDFLAGS = -no-undefined -module -avoid-version hasCreateButNoDestroy_la_LIBADD = ../../src/libpion.la @PION_EXTERNAL_LIBS@ hasCreateButNoDestroy_la_DEPENDENCIES = ../../src/libpion.la hasNoCreate_la_SOURCES = InterfaceStub.hpp hasNoCreate.hpp hasNoCreate.cpp hasNoCreate_la_LDFLAGS = -no-undefined -module -avoid-version hasNoCreate_la_LIBADD = ../../src/libpion.la @PION_EXTERNAL_LIBS@ hasNoCreate_la_DEPENDENCIES = ../../src/libpion.la EXTRA_DIST = *.vcxproj *.vcxproj.filters all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/plugins/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/plugins/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-pion_pluginsLTLIBRARIES: $(pion_plugins_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(pion_pluginsdir)" || $(MKDIR_P) "$(DESTDIR)$(pion_pluginsdir)" @list='$(pion_plugins_LTLIBRARIES)'; test -n "$(pion_pluginsdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pion_pluginsdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pion_pluginsdir)"; \ } uninstall-pion_pluginsLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pion_plugins_LTLIBRARIES)'; test -n "$(pion_pluginsdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pion_pluginsdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pion_pluginsdir)/$$f"; \ done clean-pion_pluginsLTLIBRARIES: -test -z "$(pion_plugins_LTLIBRARIES)" || rm -f $(pion_plugins_LTLIBRARIES) @list='$(pion_plugins_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done hasCreateAndDestroy.la: $(hasCreateAndDestroy_la_OBJECTS) $(hasCreateAndDestroy_la_DEPENDENCIES) $(AM_V_CXXLD)$(hasCreateAndDestroy_la_LINK) -rpath $(pion_pluginsdir) $(hasCreateAndDestroy_la_OBJECTS) $(hasCreateAndDestroy_la_LIBADD) $(LIBS) hasCreateButNoDestroy.la: $(hasCreateButNoDestroy_la_OBJECTS) $(hasCreateButNoDestroy_la_DEPENDENCIES) $(AM_V_CXXLD)$(hasCreateButNoDestroy_la_LINK) -rpath $(pion_pluginsdir) $(hasCreateButNoDestroy_la_OBJECTS) $(hasCreateButNoDestroy_la_LIBADD) $(LIBS) hasNoCreate.la: $(hasNoCreate_la_OBJECTS) $(hasNoCreate_la_DEPENDENCIES) $(AM_V_CXXLD)$(hasNoCreate_la_LINK) -rpath $(pion_pluginsdir) $(hasNoCreate_la_OBJECTS) $(hasNoCreate_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hasCreateAndDestroy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hasCreateButNoDestroy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hasNoCreate.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(pion_pluginsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-pion_pluginsLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pion_pluginsLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pion_pluginsLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-pion_pluginsLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pion_pluginsLTLIBRARIES \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-pion_pluginsLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.4+dfsg.orig/tests/plugins/hasNoCreate.hpp0000644000372000001440000000127712215647065021504 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HAS_NO_CREATE_HEADER__ #define __PION_HAS_NO_CREATE_HEADER__ #include "InterfaceStub.hpp" /// /// This class has no corresponding create function or destroy function. /// class hasNoCreate : public InterfaceStub { public: hasNoCreate(void) {} ~hasNoCreate() {} }; #endif pion-5.0.4+dfsg.orig/tests/plugins/InterfaceStub.hpp0000644000372000001440000000133412215647065022040 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_INTERFACE_STUB_HEADER__ #define __PION_INTERFACE_STUB_HEADER__ /// /// Simple interface stub class for other unit test plugins /// class InterfaceStub { public: InterfaceStub(void) {} virtual ~InterfaceStub() {} virtual void method(void) {} virtual void const_method(void) const {} }; #endif pion-5.0.4+dfsg.orig/tests/plugins/hasCreateAndDestroy.hpp0000644000372000001440000000152112215647065023174 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HAS_CREATE_AND_DESTROY_HEADER__ #define __PION_HAS_CREATE_AND_DESTROY_HEADER__ #include "InterfaceStub.hpp" /// /// This class has a corresponding create function (pion_create_hasCreateAndDestroy) and /// destroy function (pion_destroy_hasCreateAndDestroy), as required for use by plugin. /// class hasCreateAndDestroy : public InterfaceStub { public: hasCreateAndDestroy(void) {} ~hasCreateAndDestroy() {} }; #endif pion-5.0.4+dfsg.orig/tests/plugins/hasCreateAndDestroy.vcxproj0000644000372000001440000002524312215647065024107 0ustar robertousers Release_DLL_Full Win32 Release_DLL_Full x64 Release_Static Win32 Release_Static x64 {CD11B3D6-1296-45F4-B924-034CC103D626} hasCreateAndDestroy Win32Proj DynamicLibrary NotSet true DynamicLibrary NotSet true DynamicLibrary NotSet true DynamicLibrary NotSet true <_ProjectFileVersion>10.0.40219.1 false false $(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ false $(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset WIN32;NDEBUG;_WINDOWS;_USRDLL;TESTPLUGIN1_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase true Windows true true false MachineX86 X64 WIN32;NDEBUG;_WINDOWS;_USRDLL;TESTPLUGIN1_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase true Windows true true false MachineX64 WIN32;NDEBUG;_WINDOWS;_USRDLL;TESTPLUGIN1_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase true Windows true true false MachineX86 X64 WIN32;NDEBUG;_WINDOWS;_USRDLL;TESTPLUGIN1_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase true Windows true true false MachineX64 pion-5.0.4+dfsg.orig/tests/plugins/hasCreateButNoDestroy.hpp0000644000372000001440000000145212215647065023524 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HAS_CREATE_BUT_NO_DESTROY_HEADER__ #define __PION_HAS_CREATE_BUT_NO_DESTROY_HEADER__ #include "InterfaceStub.hpp" /// /// This class has a corresponding create function (pion_create_hasCreateButNoDestroy) but no corresponding destroy function. /// class hasCreateButNoDestroy : public InterfaceStub { public: hasCreateButNoDestroy(void) {} ~hasCreateButNoDestroy() {} }; #endif pion-5.0.4+dfsg.orig/tests/plugins/hasCreateButNoDestroy.vcxproj.filters0000644000372000001440000000205612215647065026100 0ustar robertousers {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Header Files pion-5.0.4+dfsg.orig/tests/plugins/hasCreateAndDestroy.cpp0000644000372000001440000000144112215647065023170 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include "hasCreateAndDestroy.hpp" #include /// creates new hasCreateAndDestroy objects extern "C" PION_PLUGIN hasCreateAndDestroy *pion_create_hasCreateAndDestroy(void) { return new hasCreateAndDestroy(); } /// destroys hasCreateAndDestroy objects extern "C" PION_PLUGIN void pion_destroy_hasCreateAndDestroy(hasCreateAndDestroy *service_ptr) { delete service_ptr; } pion-5.0.4+dfsg.orig/tests/Makefile.am0000644000372000001440000000161412215647065017145 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- SUBDIRS = plugins AM_CPPFLAGS = -I../include @PION_TESTS_CPPFLAGS@ check_PROGRAMS = piontests TESTS = $(check_PROGRAMS) piontests_SOURCES = piontests.cpp \ algorithm_tests.cpp file_service_tests.cpp http_message_tests.cpp \ http_parser_tests.cpp http_plugin_server_tests.cpp http_request_tests.cpp \ http_response_tests.cpp http_types_tests.cpp plugin_manager_tests.cpp \ plugin_tests.cpp spdy_parser_tests.cpp tcp_server_tests.cpp tcp_stream_tests.cpp piontests_LDADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ @BOOST_TEST_LIB@ piontests_DEPENDENCIES = ../src/libpion.la \ plugins/hasCreateAndDestroy.la plugins/hasCreateButNoDestroy.la \ plugins/hasNoCreate.la EXTRA_DIST = *.vcxproj *.vcxproj.filters boost*.xsd boost*.xsl config doc \ http_parser_tests_data.inc spdy_parser_tests_data.inc pion-5.0.4+dfsg.orig/tests/plugin_tests.cpp0000644000372000001440000003244112215647065020337 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef PION_STATIC_LINKING #include #include #include #include #include #include #include #include "plugins/InterfaceStub.hpp" using namespace pion; #if defined(PION_WIN32) static const std::string directoryOfPluginsForTests = "plugins/.libs"; static const std::string sharedLibExt = ".dll"; #else #if defined(PION_XCODE) static const std::string directoryOfPluginsForTests = "../bin/Debug"; #else static const std::string directoryOfPluginsForTests = "plugins/.libs"; #endif static const std::string sharedLibExt = ".so"; #endif class EmptyPluginPtr_F : public plugin_ptr { public: EmptyPluginPtr_F() { BOOST_REQUIRE(GET_DIRECTORY(m_old_cwd, DIRECTORY_MAX_SIZE) != NULL); BOOST_REQUIRE(CHANGE_DIRECTORY(directoryOfPluginsForTests.c_str()) == 0); } ~EmptyPluginPtr_F() { BOOST_CHECK(CHANGE_DIRECTORY(m_old_cwd) == 0); } private: char m_old_cwd[DIRECTORY_MAX_SIZE+1]; }; BOOST_FIXTURE_TEST_SUITE(EmptyPluginPtr_S, EmptyPluginPtr_F) BOOST_AUTO_TEST_CASE(checkIsOpenReturnsFalse) { BOOST_CHECK(!is_open()); } BOOST_AUTO_TEST_CASE(checkCreateThrowsException) { BOOST_CHECK_THROW(create(), error::plugin_undefined); } BOOST_AUTO_TEST_CASE(checkDestroyThrowsException) { InterfaceStub* s = NULL; BOOST_CHECK_THROW(destroy(s), error::plugin_undefined); } BOOST_AUTO_TEST_CASE(checkOpenThrowsExceptionForNonExistentPlugin) { BOOST_REQUIRE(!boost::filesystem::exists("NoSuchPlugin" + sharedLibExt)); BOOST_CHECK_THROW(open("NoSuchPlugin"), error::plugin_not_found); } BOOST_AUTO_TEST_CASE(checkGetPluginNameReturnsEmptyString) { BOOST_CHECK_EQUAL(get_plugin_name(), ""); } BOOST_AUTO_TEST_CASE(checkPluginInstancePtrCreate) { plugin_instance_ptr m_instance_ptr; BOOST_CHECK(m_instance_ptr.empty()); BOOST_CHECK(m_instance_ptr.get() == NULL); BOOST_REQUIRE(boost::filesystem::exists("hasCreateAndDestroy" + sharedLibExt)); BOOST_CHECK_NO_THROW(m_instance_ptr.create("hasCreateAndDestroy")); BOOST_CHECK(! m_instance_ptr.empty()); BOOST_CHECK(m_instance_ptr.get() != NULL); } BOOST_AUTO_TEST_CASE(checkPluginInstancePtrDereferencing) { plugin_instance_ptr m_instance_ptr; BOOST_CHECK_NO_THROW(m_instance_ptr.create("hasCreateAndDestroy")); const plugin_instance_ptr& const_ref = m_instance_ptr; InterfaceStub &a = *m_instance_ptr; const InterfaceStub &b = *const_ref; a.method(); b.const_method(); m_instance_ptr->method(); const_ref->const_method(); } BOOST_AUTO_TEST_CASE(checkOpenThrowsExceptionForNonPluginDll) { BOOST_REQUIRE(boost::filesystem::exists("hasNoCreate" + sharedLibExt)); BOOST_CHECK_THROW(open("hasNoCreate"), error::plugin_missing_symbol); } BOOST_AUTO_TEST_CASE(checkOpenThrowsExceptionForPluginWithoutDestroy) { BOOST_REQUIRE(boost::filesystem::exists("hasCreateButNoDestroy" + sharedLibExt)); BOOST_CHECK_THROW(open("hasCreateButNoDestroy"), error::plugin_missing_symbol); } BOOST_AUTO_TEST_CASE(checkOpenDoesntThrowExceptionForValidPlugin) { BOOST_REQUIRE(boost::filesystem::exists("hasCreateAndDestroy" + sharedLibExt)); BOOST_CHECK_NO_THROW(open("hasCreateAndDestroy")); } BOOST_AUTO_TEST_CASE(checkOpenFileDoesntThrowExceptionForValidPlugin) { BOOST_REQUIRE(boost::filesystem::exists("hasCreateAndDestroy" + sharedLibExt)); BOOST_CHECK_NO_THROW(open_file("hasCreateAndDestroy" + sharedLibExt)); } BOOST_AUTO_TEST_SUITE_END() class EmptyPluginPtrWithPluginInSubdirectory_F : public EmptyPluginPtr_F { public: EmptyPluginPtrWithPluginInSubdirectory_F() { boost::filesystem::remove_all("dir1"); boost::filesystem::create_directory("dir1"); boost::filesystem::create_directory("dir1/dir2"); boost::filesystem::rename("hasCreateAndDestroy" + sharedLibExt, "dir1/dir2/hasCreateAndDestroy" + sharedLibExt); } ~EmptyPluginPtrWithPluginInSubdirectory_F() { boost::filesystem::rename("dir1/dir2/hasCreateAndDestroy" + sharedLibExt, "hasCreateAndDestroy" + sharedLibExt); boost::filesystem::remove_all("dir1"); } }; BOOST_FIXTURE_TEST_SUITE(EmptyPluginPtrWithPluginInSubdirectory_S, EmptyPluginPtrWithPluginInSubdirectory_F) BOOST_AUTO_TEST_CASE(checkOpenFileWithPathWithForwardSlashes) { BOOST_CHECK_NO_THROW(open_file("dir1/dir2/hasCreateAndDestroy" + sharedLibExt)); } #ifdef PION_WIN32 BOOST_AUTO_TEST_CASE(checkOpenFileWithPathWithBackslashes) { BOOST_CHECK_NO_THROW(open_file("dir1\\dir2\\hasCreateAndDestroy" + sharedLibExt)); } #endif #ifdef PION_WIN32 BOOST_AUTO_TEST_CASE(checkOpenFileWithPathWithMixedSlashes) { BOOST_CHECK_NO_THROW(open_file("dir1\\dir2/hasCreateAndDestroy" + sharedLibExt)); } #endif BOOST_AUTO_TEST_SUITE_END() /* This is an example of a slightly different style of tests, where the object being tested is included in the fixture, rather than inherited by the fixture. These tests are a subset of those in the previous suite, for comparison purposes. */ struct EmptyPluginPtr2_F { EmptyPluginPtr2_F() : m_pluginPtr() { BOOST_REQUIRE(GET_DIRECTORY(m_old_cwd, DIRECTORY_MAX_SIZE) != NULL); BOOST_REQUIRE(CHANGE_DIRECTORY(directoryOfPluginsForTests.c_str()) == 0); } ~EmptyPluginPtr2_F() { BOOST_CHECK(CHANGE_DIRECTORY(m_old_cwd) == 0); } char m_old_cwd[DIRECTORY_MAX_SIZE+1]; plugin_ptr m_pluginPtr; }; BOOST_FIXTURE_TEST_SUITE(EmptyPluginPtr2_S, EmptyPluginPtr2_F) BOOST_AUTO_TEST_CASE(checkIsOpenReturnsFalse) { BOOST_CHECK(!m_pluginPtr.is_open()); } BOOST_AUTO_TEST_CASE(checkCreateThrowsException) { BOOST_CHECK_THROW(m_pluginPtr.create(), error::plugin_undefined); } BOOST_AUTO_TEST_CASE(checkDestroyThrowsException) { InterfaceStub* s = NULL; BOOST_CHECK_THROW(m_pluginPtr.destroy(s), error::plugin_undefined); } BOOST_AUTO_TEST_CASE(checkOpenThrowsExceptionForNonExistentPlugin) { BOOST_CHECK_THROW(m_pluginPtr.open("NoSuchPlugin"), error::plugin_not_found); } BOOST_AUTO_TEST_CASE(checkGetPluginNameReturnsEmptyString) { BOOST_CHECK_EQUAL(m_pluginPtr.get_plugin_name(), ""); } BOOST_AUTO_TEST_CASE(checkOpenDoesntThrowExceptionForValidPlugin) { BOOST_REQUIRE(boost::filesystem::exists("hasCreateAndDestroy" + sharedLibExt)); BOOST_CHECK_NO_THROW(m_pluginPtr.open("hasCreateAndDestroy")); } BOOST_AUTO_TEST_SUITE_END() struct PluginPtrWithPluginLoaded_F : EmptyPluginPtr_F { PluginPtrWithPluginLoaded_F() { s = NULL; open("hasCreateAndDestroy"); } ~PluginPtrWithPluginLoaded_F() { if (s) destroy(s); } InterfaceStub* s; }; BOOST_FIXTURE_TEST_SUITE(PluginPtrWithPluginLoaded_S, PluginPtrWithPluginLoaded_F) BOOST_AUTO_TEST_CASE(checkIsOpenReturnsTrue) { BOOST_CHECK(is_open()); } BOOST_AUTO_TEST_CASE(checkGetPluginNameReturnsPluginName) { BOOST_CHECK_EQUAL(get_plugin_name(), "hasCreateAndDestroy"); } BOOST_AUTO_TEST_CASE(checkCreateReturnsSomething) { BOOST_CHECK((s = create()) != NULL); } BOOST_AUTO_TEST_CASE(checkDestroyDoesntThrowExceptionAfterCreate) { s = create(); BOOST_CHECK_NO_THROW(destroy(s)); s = NULL; } BOOST_AUTO_TEST_SUITE_END() #ifdef PION_WIN32 static const std::string fakePluginInSandboxWithExt = "sandbox/fakePlugin.dll"; #else static const std::string fakePluginInSandboxWithExt = "sandbox/fakePlugin.so"; #endif static const std::string fakeConfigFileInSandboxWithExt = "sandbox/fakeConfigFile.conf"; class Sandbox_F { public: Sandbox_F() { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 m_cwd = boost::filesystem::current_path().string(); #else m_cwd = boost::filesystem::current_path().directory_string(); #endif boost::filesystem::remove_all("sandbox"); BOOST_REQUIRE(boost::filesystem::create_directory("sandbox")); BOOST_REQUIRE(boost::filesystem::create_directory("sandbox/dir1")); BOOST_REQUIRE(boost::filesystem::create_directory("sandbox/dir1/dir1A")); BOOST_REQUIRE(boost::filesystem::create_directory("sandbox/dir2")); boost::filesystem::ofstream emptyFile(fakePluginInSandboxWithExt.c_str()); emptyFile.close(); boost::filesystem::ofstream emptyFile2(fakeConfigFileInSandboxWithExt.c_str()); emptyFile2.close(); m_path_to_file = "arbitraryString"; } ~Sandbox_F() { BOOST_REQUIRE(CHANGE_DIRECTORY(m_cwd.c_str()) == 0); boost::filesystem::remove_all("sandbox"); } std::string m_path_to_file; private: std::string m_cwd; }; BOOST_FIXTURE_TEST_SUITE(Sandbox_S, Sandbox_F) BOOST_AUTO_TEST_CASE(checkFindPluginFileReturnsFalseForNonexistentPlugin) { BOOST_CHECK(!plugin::find_plugin_file(m_path_to_file, "nonexistentPlugin")); } BOOST_AUTO_TEST_CASE(checkFindPluginFileReturnsFalseForExistingDirectory) { BOOST_CHECK(!plugin::find_plugin_file(m_path_to_file, "sandbox")); } BOOST_AUTO_TEST_CASE(checkFindPluginFileLeavesPathUnchangedForNonexistentPlugin) { BOOST_CHECK(!plugin::find_plugin_file(m_path_to_file, "nonexistentPlugin")); BOOST_CHECK_EQUAL(m_path_to_file, "arbitraryString"); } BOOST_AUTO_TEST_CASE(checkFindPluginFileReturnsTrueForExistingPlugin) { BOOST_CHECK(plugin::find_plugin_file(m_path_to_file, "sandbox/fakePlugin")); } BOOST_AUTO_TEST_CASE(checkFindPluginFileReturnsCorrectPathForExistingPlugin) { BOOST_CHECK(plugin::find_plugin_file(m_path_to_file, "sandbox/fakePlugin")); BOOST_CHECK_EQUAL(m_path_to_file, fakePluginInSandboxWithExt); } BOOST_AUTO_TEST_CASE(checkFindPluginFileReturnsFalseForPluginNotOnSearchPath) { BOOST_CHECK(!plugin::find_plugin_file(m_path_to_file, "fakePlugin")); } BOOST_AUTO_TEST_CASE(checkFindConfigFileReturnsFalseForNonexistentConfigFile) { BOOST_CHECK(!plugin::find_config_file(m_path_to_file, "nonexistentConfigFile")); } BOOST_AUTO_TEST_CASE(checkFindConfigFileReturnsFalseForExistingDirectory) { BOOST_CHECK(!plugin::find_config_file(m_path_to_file, "sandbox")); } BOOST_AUTO_TEST_CASE(checkFindConfigFileReturnsTrueForExistingConfigFile) { BOOST_CHECK(plugin::find_config_file(m_path_to_file, "sandbox/fakeConfigFile")); } BOOST_AUTO_TEST_CASE(checkFindConfigFileReturnsCorrectPathForExistingConfigFile) { BOOST_CHECK(plugin::find_config_file(m_path_to_file, "sandbox/fakeConfigFile")); BOOST_CHECK(boost::filesystem::equivalent(m_path_to_file, fakeConfigFileInSandboxWithExt)); } BOOST_AUTO_TEST_CASE(checkAddPluginDirectoryThrowsExceptionForNonexistentDirectory) { BOOST_CHECK_THROW(plugin::add_plugin_directory("nonexistentDir"), error::directory_not_found); } BOOST_AUTO_TEST_CASE(checkAddPluginDirectoryWithCurrentDirectory) { BOOST_CHECK_NO_THROW(plugin::add_plugin_directory(".")); } BOOST_AUTO_TEST_CASE(checkAddPluginDirectoryWithExistingDirectory) { BOOST_CHECK_NO_THROW(plugin::add_plugin_directory("sandbox")); } BOOST_AUTO_TEST_CASE(checkAddPluginDirectoryOneLevelUp) { BOOST_REQUIRE(CHANGE_DIRECTORY("sandbox/dir1") == 0); BOOST_CHECK_NO_THROW(plugin::add_plugin_directory("..")); } // this test only works in Windows #ifdef PION_WIN32 BOOST_AUTO_TEST_CASE(checkAddPluginDirectoryWithBackslashes) { BOOST_CHECK_NO_THROW(plugin::add_plugin_directory("sandbox\\dir1\\dir1A")); } #endif BOOST_AUTO_TEST_CASE(checkAddPluginDirectoryWithUpAndDownPath) { BOOST_REQUIRE(CHANGE_DIRECTORY("sandbox/dir1/dir1A") == 0); BOOST_CHECK_NO_THROW(plugin::add_plugin_directory("../../dir2")); } BOOST_AUTO_TEST_CASE(checkAddPluginDirectoryThrowsExceptionForInvalidDirectory) { BOOST_CHECK_THROW(plugin::add_plugin_directory("x:y"), error::directory_not_found); } BOOST_AUTO_TEST_CASE(checkResetPluginDirectoriesDoesntThrowException) { BOOST_CHECK_NO_THROW(plugin::reset_plugin_directories()); } BOOST_AUTO_TEST_SUITE_END() class SandboxAddedAsPluginDirectory_F : public Sandbox_F { public: SandboxAddedAsPluginDirectory_F() { plugin::add_plugin_directory("sandbox"); } ~SandboxAddedAsPluginDirectory_F() { plugin::reset_plugin_directories(); } }; BOOST_FIXTURE_TEST_SUITE(SandboxAddedAsPluginDirectory_S, SandboxAddedAsPluginDirectory_F) BOOST_AUTO_TEST_CASE(checkFindPluginFileReturnsTrueForPluginOnSearchPath) { BOOST_CHECK(plugin::find_plugin_file(m_path_to_file, "fakePlugin")); } BOOST_AUTO_TEST_CASE(checkFindPluginFileReturnsTrueAfterChangingDirectory) { BOOST_REQUIRE(CHANGE_DIRECTORY("sandbox/dir1") == 0); BOOST_CHECK(plugin::find_plugin_file(m_path_to_file, "fakePlugin")); } BOOST_AUTO_TEST_CASE(checkResetPluginDirectoriesDoesntThrowException) { BOOST_CHECK_NO_THROW(plugin::reset_plugin_directories()); } BOOST_AUTO_TEST_CASE(checkFindPluginFileReturnsFalseForPluginOnSearchPathAfterReset) { plugin::reset_plugin_directories(); BOOST_CHECK(!plugin::find_plugin_file(m_path_to_file, "fakePlugin")); } BOOST_AUTO_TEST_SUITE_END() #endif // PION_STATIC_LINKING pion-5.0.4+dfsg.orig/tests/http_request_tests.cpp0000644000372000001440000000264612215647065021574 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include using namespace pion; class NewHTTPRequest_F : public http::request { public: NewHTTPRequest_F() { } ~NewHTTPRequest_F() { } }; BOOST_FIXTURE_TEST_SUITE(NewHTTPRequest_S, NewHTTPRequest_F) BOOST_AUTO_TEST_CASE(checkSetMethodWithValidMethodDoesntThrow) { BOOST_CHECK_NO_THROW(set_method("GET")); } // Is this what we want? BOOST_AUTO_TEST_CASE(checkSetMethodWithInvalidMethodDoesntThrow) { BOOST_CHECK_NO_THROW(set_method("NOT_A_VALID_METHOD")); } BOOST_AUTO_TEST_CASE(checkGetMethodReturnsGET) { BOOST_CHECK_EQUAL(get_method(), "GET"); } BOOST_AUTO_TEST_CASE(checkGetMethodReturnsWhatSetMethodAssigns) { BOOST_CHECK_NO_THROW(set_method("POST")); BOOST_CHECK_EQUAL(get_method(), "POST"); } BOOST_AUTO_TEST_CASE(checkGetMethodReturnsWhateverSetMethodAssigns) { BOOST_CHECK_NO_THROW(set_method("BLAH_BLAH_BLAH")); BOOST_CHECK_EQUAL(get_method(), "BLAH_BLAH_BLAH"); } BOOST_AUTO_TEST_SUITE_END() pion-5.0.4+dfsg.orig/tests/boosttest-1.0.xsd0000644000372000001440000000571212215647065020156 0ustar robertousers pion-5.0.4+dfsg.orig/tests/http_parser_tests_data.inc0000644000372000001440000011257612215647065022364 0ustar robertousers const unsigned char request_data_1[] = { 0x47, 0x45, 0x54, 0x20, 0x2f, 0x69, 0x67, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x73, 0x6b, 0x69, 0x6e, 0x73, 0x2f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x74, 0x73, 0x2f, 0x73, 0x75, 0x6e, 0x2f, 0x6d, 0x69, 0x6e, 0x5f, 0x62, 0x6c, 0x75, 0x65, 0x5f, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x67, 0x69, 0x66, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20, 0x69, 0x6d, 0x67, 0x30, 0x2e, 0x67, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c, 0x61, 0x2f, 0x35, 0x2e, 0x30, 0x20, 0x28, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x3b, 0x20, 0x55, 0x3b, 0x20, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x20, 0x4e, 0x54, 0x20, 0x35, 0x2e, 0x31, 0x3b, 0x20, 0x65, 0x6e, 0x2d, 0x55, 0x53, 0x3b, 0x20, 0x72, 0x76, 0x3a, 0x31, 0x2e, 0x39, 0x29, 0x20, 0x47, 0x65, 0x63, 0x6b, 0x6f, 0x2f, 0x32, 0x30, 0x30, 0x38, 0x30, 0x35, 0x32, 0x39, 0x30, 0x36, 0x20, 0x46, 0x69, 0x72, 0x65, 0x66, 0x6f, 0x78, 0x2f, 0x33, 0x2e, 0x30, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0x2c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x38, 0x2c, 0x2a, 0x2f, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x35, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x65, 0x6e, 0x2d, 0x75, 0x73, 0x2c, 0x65, 0x6e, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x35, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x67, 0x7a, 0x69, 0x70, 0x2c, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3a, 0x20, 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x37, 0x2c, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x37, 0x0d, 0x0a, 0x4b, 0x65, 0x65, 0x70, 0x2d, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x3a, 0x20, 0x33, 0x30, 0x30, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6b, 0x65, 0x65, 0x70, 0x2d, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x72, 0x3a, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x2f, 0x66, 0x2f, 0x55, 0x4f, 0x37, 0x4c, 0x45, 0x41, 0x33, 0x52, 0x53, 0x62, 0x30, 0x2f, 0x73, 0x6b, 0x69, 0x6e, 0x73, 0x2f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x74, 0x73, 0x2f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x74, 0x73, 0x5f, 0x73, 0x75, 0x6e, 0x2e, 0x63, 0x73, 0x73, 0x3f, 0x68, 0x6c, 0x3d, 0x65, 0x6e, 0x0d, 0x0a, 0x0d, 0x0a }; const unsigned char response_data_1[] = { 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0x0d, 0x0a, 0x4c, 0x61, 0x73, 0x74, 0x2d, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x3a, 0x20, 0x46, 0x72, 0x69, 0x2c, 0x20, 0x32, 0x30, 0x20, 0x4a, 0x75, 0x6e, 0x20, 0x32, 0x30, 0x30, 0x38, 0x20, 0x32, 0x33, 0x3a, 0x34, 0x31, 0x3a, 0x31, 0x31, 0x20, 0x47, 0x4d, 0x54, 0x0d, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x3a, 0x20, 0x53, 0x75, 0x6e, 0x2c, 0x20, 0x31, 0x37, 0x20, 0x4a, 0x61, 0x6e, 0x20, 0x32, 0x30, 0x33, 0x38, 0x20, 0x31, 0x39, 0x3a, 0x31, 0x34, 0x3a, 0x30, 0x37, 0x20, 0x47, 0x4d, 0x54, 0x0d, 0x0a, 0x43, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x3a, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x0d, 0x0a, 0x44, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x53, 0x75, 0x6e, 0x2c, 0x20, 0x32, 0x32, 0x20, 0x4a, 0x75, 0x6e, 0x20, 0x32, 0x30, 0x30, 0x38, 0x20, 0x32, 0x32, 0x3a, 0x31, 0x30, 0x3a, 0x35, 0x37, 0x20, 0x47, 0x4d, 0x54, 0x0d, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x67, 0x77, 0x73, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x31, 0x37, 0x0d, 0x0a, 0x0d, 0x0a, 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x0c, 0x00, 0x0c, 0x00, 0xb3, 0x09, 0x00, 0xcc, 0x5e, 0x33, 0xff, 0xff, 0xff, 0xd1, 0x64, 0x39, 0xd0, 0x63, 0x38, 0xe3, 0x79, 0x50, 0xe1, 0x79, 0x50, 0xe2, 0x79, 0x50, 0xe3, 0x7a, 0x50, 0xe4, 0x7a, 0x51, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00, 0x00, 0x09, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x00, 0x04, 0x22, 0x30, 0x15, 0x01, 0xaa, 0x15, 0x25, 0x19, 0xcb, 0xad, 0x19, 0x5d, 0x07, 0x86, 0x64, 0xc9, 0x05, 0x68, 0x8a, 0x9e, 0x6a, 0x6a, 0xbe, 0xe4, 0x58, 0x0e, 0xc8, 0x7b, 0x24, 0x04, 0xd5, 0x09, 0x44, 0x12, 0x01, 0x00, 0x3b }; unsigned char resp2_frame0[] = { 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0x0d, 0x0a, 0x44, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x53, 0x75, 0x6e, 0x2c, 0x20, 0x32, 0x32, 0x20, 0x4a, 0x75, 0x6e, 0x20, 0x32, 0x30, 0x30, 0x38, 0x20, 0x32, 0x33, 0x3a, 0x34, 0x33, 0x3a, 0x32, 0x33, 0x20, 0x47, 0x4d, 0x54, 0x0d, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x41, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x32, 0x2e, 0x32, 0x2e, 0x34, 0x20, 0x28, 0x55, 0x6e, 0x69, 0x78, 0x29, 0x20, 0x6d, 0x6f, 0x64, 0x5f, 0x73, 0x73, 0x6c, 0x2f, 0x32, 0x2e, 0x32, 0x2e, 0x34, 0x20, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x53, 0x4c, 0x2f, 0x30, 0x2e, 0x39, 0x2e, 0x37, 0x61, 0x20, 0x44, 0x41, 0x56, 0x2f, 0x32, 0x20, 0x50, 0x48, 0x50, 0x2f, 0x35, 0x2e, 0x32, 0x2e, 0x34, 0x20, 0x53, 0x56, 0x4e, 0x2f, 0x31, 0x2e, 0x34, 0x2e, 0x35, 0x20, 0x6d, 0x6f, 0x64, 0x5f, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x20, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x32, 0x2e, 0x33, 0x2e, 0x34, 0x0d, 0x0a, 0x58, 0x2d, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x65, 0x64, 0x2d, 0x42, 0x79, 0x3a, 0x20, 0x50, 0x48, 0x50, 0x2f, 0x35, 0x2e, 0x32, 0x2e, 0x34, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x20, 0x34, 0x37, 0x31, 0x32, 0x0d, 0x0a, 0x4b, 0x65, 0x65, 0x70, 0x2d, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x3a, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x3d, 0x35, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x3d, 0x31, 0x30, 0x30, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x4b, 0x65, 0x65, 0x70, 0x2d, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x0d, 0x0a, 0x0d, 0x0a, 0x0a, 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 0x2f, 0x44, 0x54, 0x44, 0x20, 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x31, 0x2e, 0x30, 0x20, 0x53, 0x74, 0x72, 0x69, 0x63, 0x74, 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x31, 0x2f, 0x44, 0x54, 0x44, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x31, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x2e, 0x64, 0x74, 0x64, 0x22, 0x3e, 0x0a, 0x0a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x41, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x20, 0x4c, 0x61, 0x62, 0x73, 0x3a, 0x20, 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x50, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x20, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x28, 0x43, 0x45, 0x50, 0x29, 0x20, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x41, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x20, 0x4c, 0x61, 0x62, 0x73, 0x2c, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x67, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x61, 0x6c, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x67, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x28, 0x4f, 0x49, 0x29, 0x2e, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2e, 0x2e, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, 0x22, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20 }; unsigned char resp2_frame1[] = { 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x0a, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x6f, 0x67, 0x6f, 0x22, 0x3e, 0x0a, 0x09, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6c, 0x6f, 0x67, 0x6f, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x6d, 0x67, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x70, 0x68, 0x70, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2d, 0x6c, 0x61, 0x62, 0x73, 0x2d, 0x6c, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x35, 0x39, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x36, 0x30, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x41, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x20, 0x4c, 0x61, 0x62, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x20, 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x4d, 0x65, 0x6e, 0x75, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x3c, 0x61, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x62, 0x6f, 0x6c, 0x64, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, 0x48, 0x6f, 0x6d, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x3c, 0x61, 0x20, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x22, 0x3e, 0x41, 0x62, 0x6f, 0x75, 0x74, 0x3c, 0x2f, 0x61, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x7c, 0x26, 0x6e, 0x62 }; unsigned char resp2_frame2[] = { 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x3c, 0x61, 0x20, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x3c, 0x2f, 0x61, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x0a, 0x09, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x20, 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6d, 0x65, 0x6e, 0x75, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x75, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x09, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x09, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x70, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x50, 0x69, 0x6f, 0x6e, 0x20, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x20, 0x09, 0x09, 0x09, 0x09, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x20, 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x75, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x6d, 0x61, 0x73, 0x74, 0x68, 0x65, 0x61, 0x64, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6d, 0x61, 0x73, 0x74, 0x68, 0x65, 0x61, 0x64, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x31, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x3e, 0x3c, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x50, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x26, 0x74, 0x72, 0x61, 0x64, 0x65, 0x3b, 0x3a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x20, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x3c, 0x2f, 0x68, 0x31, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x32, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x3e, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x20, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x4e, 0x6f, 0x77, 0x20, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x73, 0x74, 0x68, 0x65, 0x61, 0x64, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x61, 0x67, 0x65, 0x48, 0x6f, 0x6d, 0x65, 0x22, 0x3e, 0x0a, 0x0a, 0x0a, 0x09, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x09, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x6f, 0x6d, 0x65, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x48, 0x6f, 0x6d, 0x65, 0x42, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x70, 0x69, 0x6f, 0x6e, 0x2f, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x70, 0x69, 0x6f, 0x6e, 0x2d, 0x6c, 0x6f, 0x67, 0x6f, 0x2d, 0x68, 0x6f, 0x6d, 0x65, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x32, 0x35, 0x30, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d }; unsigned char resp2_frame3[] = { 0x22, 0x31, 0x34, 0x31, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x50, 0x69, 0x6f, 0x6e, 0x20, 0x4c, 0x6f, 0x67, 0x6f, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x3e, 0x50, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x61, 0x6c, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x67, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x50, 0x69, 0x6f, 0x6e, 0xe2, 0x80, 0x99, 0x73, 0x20, 0x68, 0x69, 0x67, 0x68, 0x2d, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x77, 0x65, 0x62, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x69, 0x74, 0x20, 0x65, 0x61, 0x73, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x20, 0x49, 0x54, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x61, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x6c, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x0a, 0x3c, 0x70, 0x3e, 0x55, 0x73, 0x65, 0x20, 0x50, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x61, 0x20, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x74, 0x6f, 0x64, 0x61, 0x79, 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x6d, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x0a, 0x3c, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x70, 0x69, 0x6f, 0x6e, 0x2f, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x69, 0x6d, 0x61 }; unsigned char resp2_frame4[] = { 0x67, 0x65, 0x73, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x2d, 0x6d, 0x6f, 0x72, 0x65, 0x2d, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x33, 0x31, 0x30, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x32, 0x33, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x4c, 0x65, 0x61, 0x72, 0x6e, 0x20, 0x4d, 0x6f, 0x72, 0x65, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x48, 0x6f, 0x6d, 0x65, 0x57, 0x68, 0x69, 0x74, 0x65, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x33, 0x3e, 0x54, 0x45, 0x43, 0x48, 0x4e, 0x4f, 0x4c, 0x4f, 0x47, 0x59, 0x20, 0x53, 0x4f, 0x4c, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x3c, 0x2f, 0x68, 0x33, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x42, 0x52, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x68, 0x70, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x69, 0x63, 0x6f, 0x6e, 0x2d, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x32, 0x34, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x37, 0x33, 0x22, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2d, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x68, 0x70, 0x22, 0x3e, 0x3c, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x3c, 0x2f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x42, 0x72, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x47, 0x65, 0x74, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x61, 0x6c, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x3c, 0x42, 0x52, 0x20, 0x2f, 0x3e, 0x3c, 0x42, 0x52, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x72, 0x20, 0x6e, 0x6f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x3d, 0x22, 0x6e, 0x6f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x22, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x2d, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x68, 0x70, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x69, 0x63, 0x6f, 0x6e, 0x2d, 0x6c, 0x6f, 0x67, 0x2d, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x32, 0x34, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x37, 0x33, 0x22, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x2d, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x68, 0x70, 0x22, 0x3e, 0x3c, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x4c, 0x6f, 0x67, 0x20, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x3c, 0x2f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x42, 0x72, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x3c, 0x42, 0x52, 0x20, 0x2f, 0x3e, 0x3c, 0x42, 0x52, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x72, 0x20, 0x6e, 0x6f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x3d, 0x22, 0x6e, 0x6f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x22, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x23 }; unsigned char resp2_frame5[] = { 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2d, 0x73, 0x6e, 0x69, 0x66, 0x66, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x68, 0x70, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x69, 0x63, 0x6f, 0x6e, 0x2d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2d, 0x73, 0x6e, 0x69, 0x66, 0x66, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x32, 0x34, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x37, 0x33, 0x22, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2d, 0x73, 0x6e, 0x69, 0x66, 0x66, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x68, 0x70, 0x22, 0x3e, 0x3c, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x53, 0x6e, 0x69, 0x66, 0x66, 0x69, 0x6e, 0x67, 0x3c, 0x2f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x42, 0x72, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x75, 0x72, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x73, 0x6e, 0x69, 0x66, 0x66, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x2e, 0x3c, 0x42, 0x52, 0x20, 0x2f, 0x3e, 0x3c, 0x42, 0x52, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x0a, 0x0a, 0x09, 0x0a, 0x09, 0x09, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x09, 0x0a, 0x09, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x65 }; unsigned char resp2_frame6[] = { 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x73, 0x69, 0x64, 0x65, 0x62, 0x61, 0x72, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x09, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x48, 0x6f, 0x6d, 0x65, 0x53, 0x69, 0x64, 0x65, 0x62, 0x61, 0x72, 0x22, 0x3e, 0x0a, 0x09, 0x09, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x09, 0x09, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x2f, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2d, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x35, 0x35, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x33, 0x36, 0x30, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x4c, 0x65, 0x61, 0x72, 0x6e, 0x20, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x41, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x20, 0x4c, 0x61, 0x62, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x0a, 0x09, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x09, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x73, 0x69, 0x64, 0x65, 0x62, 0x61, 0x72, 0x20, 0x2d, 0x2d, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x3b, 0x22, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x2d, 0x2d, 0x3e, 0x0a, 0x0a, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x0a, 0x09, 0x3c, 0x70, 0x3e, 0x26, 0x63, 0x6f, 0x70, 0x79, 0x3b, 0x20, 0x32, 0x30, 0x30, 0x38, 0x20, 0x41, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x20, 0x4c, 0x61, 0x62, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2d, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x72, 0x63, 0x68, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x22, 0x20, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x3e, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x3e, 0x0a, 0x5f, 0x75, 0x61, 0x63, 0x63, 0x74, 0x20, 0x3d, 0x20, 0x22, 0x55, 0x41, 0x2d, 0x39, 0x35, 0x32, 0x33, 0x33, 0x36, 0x2d, 0x33, 0x22, 0x3b, 0x0a, 0x75, 0x72, 0x63, 0x68, 0x69, 0x6e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x28, 0x29, 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x0a, 0x0a }; const unsigned char request_data_bad[] = { 'G', 'E', 'T', ' ', '/', ' ', 'B', 'L', 'A', 'H' }; const unsigned char chunked_request_with_semicolon[] = { 'P', 'O', 'S', 'T', ' ', '/', 'r', 'e', 's', 'o', 'u', 'r', 'c', 'e', '1', ' ', 'H', 'T', 'T', 'P', '/', '1', '.', '1', 0x0D, 0x0A, 'T', 'r', 'a', 'n', 's', 'f', 'e', 'r', '-', 'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g', ':', ' ', 'c', 'h', 'u', 'n', 'k', 'e', 'd', 0x0D, 0x0A, 0x0D, 0x0A, 'A', ';', ' ', 'i', 'g', 'n', 'o', 'r', 'e', ' ', 't', 'h', 'i', 's', ' ', 'd', 'a', 't', 'a', 0x0D, 0x0A, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 0x0D, 0x0A, '5', 0x0D, 0x0A, 'k', 'l', 'm', 'n', 'o', 0x0D, 0x0A, '0', 0x0D, 0x0A, 0x0D, 0x0A}; const unsigned char chunked_request_with_footers[] = { 'P', 'O', 'S', 'T', ' ', '/', 'r', 'e', 's', 'o', 'u', 'r', 'c', 'e', '1', ' ', 'H', 'T', 'T', 'P', '/', '1', '.', '1', 0x0D, 0x0A, 'T', 'r', 'a', 'n', 's', 'f', 'e', 'r', '-', 'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g', ':', ' ', 'c', 'h', 'u', 'n', 'k', 'e', 'd', 0x0D, 0x0A, 0x0D, 0x0A, 'A', 0x0D, 0x0A, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 0x0D, 0x0A, '5', 0x0D, 0x0A, 'k', 'l', 'm', 'n', 'o', 0x0D, 0x0A, '0', 0x0D, 0x0A, 's', 'o', 'm', 'e', '-', 'f', 'o', 'o', 't', 'e', 'r', ':', ' ', 's', 'o', 'm', 'e', '-', 'v', 'a', 'l', 'u', 'e', 0x0D, 0x0A, 'a', 'n', 'o', 't', 'h', 'e', 'r', '-', 'f', 'o', 'o', 't', 'e', 'r', ':', ' ', 'a', 'n', 'o', 't', 'h', 'e', 'r', '-', 'v', 'a', 'l', 'u', 'e', 0x0D, 0x0A, 0x0D, 0x0A}; const unsigned char chunked_request_with_error_in_footers[] = { 'P', 'O', 'S', 'T', ' ', '/', 'r', 'e', 's', 'o', 'u', 'r', 'c', 'e', '1', ' ', 'H', 'T', 'T', 'P', '/', '1', '.', '1', 0x0D, 0x0A, 'T', 'r', 'a', 'n', 's', 'f', 'e', 'r', '-', 'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g', ':', ' ', 'c', 'h', 'u', 'n', 'k', 'e', 'd', 0x0D, 0x0A, 0x0D, 0x0A, 'A', 0x0D, 0x0A, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 0x0D, 0x0A, '5', 0x0D, 0x0A, 'k', 'l', 'm', 'n', 'o', 0x0D, 0x0A, '0', 0x0D, 0x0A, 's', 'o', 'm', 'e', '-', 'f', 'o', 'o', 't', 'e', 'r', ':', ' ', 's', 'o', 'm', 'e', '-', 'v', 'a', 'l', 'u', 'e', 0x0D, 0x0A, 'a', 'n', 'o', 't', 'h', 'e', 'r', '-', 'f', 'o', 'o', 't', 'e', 'r', 0x0D, 0x0A, 0x0D, 0x0A}; pion-5.0.4+dfsg.orig/tests/http_plugin_server_tests.cpp0000644000372000001440000012705212215647065022767 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace pion; PION_DECLARE_PLUGIN(EchoService) PION_DECLARE_PLUGIN(FileService) PION_DECLARE_PLUGIN(HelloService) PION_DECLARE_PLUGIN(LogService) PION_DECLARE_PLUGIN(CookieService) #if defined(PION_XCODE) static const std::string PATH_TO_PLUGINS("../bin/Debug"); static const std::string SSL_PEM_FILE("../utils/sslkey.pem"); static const std::string SERVICES_CONFIG_FILE("../tests/config/testservices.conf"); #else // same for Unix and Windows static const std::string PATH_TO_PLUGINS("../services/.libs"); static const std::string SSL_PEM_FILE("../utils/sslkey.pem"); static const std::string SERVICES_CONFIG_FILE("../tests/config/testservices.conf"); #endif /// generates chunked POST requests for testing purposes class ChunkedPostRequestSender : public boost::enable_shared_from_this, private boost::noncopyable { public: /** * creates new ChunkedPostRequestSender objects * * @param tcp_conn TCP connection used to send the file * @param resource */ static inline boost::shared_ptr create(pion::tcp::connection_ptr& tcp_conn, const std::string& resource) { return boost::shared_ptr(new ChunkedPostRequestSender(tcp_conn, resource)); } ~ChunkedPostRequestSender() { for (m_chunk_iterator = m_chunks.begin(); m_chunk_iterator != m_chunks.end(); ++m_chunk_iterator) { delete[] m_chunk_iterator->second; } } void send(void); void addChunk(size_t size, const char* ptr) { char* localCopy = new char[size]; memcpy(localCopy, ptr, size); m_chunks.push_back(Chunk(size, localCopy)); m_chunk_iterator = m_chunks.begin(); } protected: ChunkedPostRequestSender(pion::tcp::connection_ptr& tcp_conn, const std::string& resource); /** * handler called after a send operation has completed * * @param write_error error status from the last write operation * @param bytes_written number of bytes sent by the last write operation */ void handle_write(const boost::system::error_code& write_error, std::size_t bytes_written); private: typedef std::pair Chunk; /// primary logging interface used by this class pion::logger m_logger; /// the chunks we are sending std::vector m_chunks; std::vector::const_iterator m_chunk_iterator; /// the HTTP request writer we are using pion::http::request_writer_ptr m_writer; }; ChunkedPostRequestSender::ChunkedPostRequestSender(pion::tcp::connection_ptr& tcp_conn, const std::string& resource) : m_logger(PION_GET_LOGGER("pion.ChunkedPostRequestSender")), m_writer(pion::http::request_writer::create(tcp_conn)) { m_writer->get_request().set_method("POST"); m_writer->get_request().set_resource(resource); m_writer->get_request().set_chunks_supported(true); m_chunk_iterator = m_chunks.begin(); } void ChunkedPostRequestSender::send(void) { if (m_chunk_iterator == m_chunks.end()) { m_writer->send_final_chunk(boost::bind(&ChunkedPostRequestSender::handle_write, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); return; } // write the current chunk m_writer->write_no_copy(m_chunk_iterator->second, m_chunk_iterator->first); if (++m_chunk_iterator == m_chunks.end()) { m_writer->send_final_chunk(boost::bind(&ChunkedPostRequestSender::handle_write, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } else { m_writer->send_chunk(boost::bind(&ChunkedPostRequestSender::handle_write, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } } void ChunkedPostRequestSender::handle_write(const boost::system::error_code& write_error, std::size_t bytes_written) { if (write_error) { // encountered error sending request data m_writer->get_connection()->set_lifecycle(pion::tcp::connection::LIFECYCLE_CLOSE); // make sure it will get closed PION_LOG_ERROR(m_logger, "Error sending chunked request (" << write_error.message() << ')'); } else { // request data sent OK if (m_chunk_iterator == m_chunks.end()) { PION_LOG_DEBUG(m_logger, "Sent " << bytes_written << " bytes (finished)"); } else { PION_LOG_DEBUG(m_logger, "Sent " << bytes_written << " bytes"); m_writer->clear(); send(); } } } /// /// WebServerTests_F: fixture used for running web server tests /// class WebServerTests_F { public: // default constructor & destructor WebServerTests_F() : m_scheduler(), m_server(m_scheduler) { // initialize the list of directories in which to look for plug-ins plugin::reset_plugin_directories(); #ifndef PION_STATIC_LINKING plugin::add_plugin_directory(PATH_TO_PLUGINS); #endif } ~WebServerTests_F() { m_server.stop(); m_scheduler.shutdown(); } /** * sends a request to the local HTTP server * * @param http_stream open stream to send the request via * @param resource name of the HTTP resource to request * @param content_length bytes available in the response, if successful */ inline unsigned int sendRequest(boost::asio::ip::tcp::iostream& http_stream, const std::string& resource, unsigned long& content_length) { const boost::regex regex_get_response_code("^HTTP/1\\.1\\s(\\d+)\\s.*"); const boost::regex regex_response_header("^[A-Za-z0-9_-]+:\\s.*"); const boost::regex regex_content_length_header("^Content-Length:\\s(\\d+).*", boost::regex::icase); const boost::regex regex_response_end("^\\s*$"); // send HTTP request to the server http_stream << "GET " << resource << " HTTP/1.1" << http::types::STRING_CRLF << http::types::STRING_CRLF; http_stream.flush(); // receive response from the server std::string rsp_line; boost::smatch rx_matches; unsigned int response_code = 0; BOOST_REQUIRE(std::getline(http_stream, rsp_line)); BOOST_REQUIRE(boost::regex_match(rsp_line, rx_matches, regex_get_response_code)); BOOST_REQUIRE(rx_matches.size() == 2); // extract response status code response_code = boost::lexical_cast(rx_matches[1]); BOOST_REQUIRE(response_code != 0); // read response headers content_length = 0; while (true) { BOOST_REQUIRE(std::getline(http_stream, rsp_line)); // check for end of response headers (empty line) if (boost::regex_match(rsp_line, rx_matches, regex_response_end)) break; // check validity of response header BOOST_REQUIRE(boost::regex_match(rsp_line, rx_matches, regex_response_header)); // check for content-length response header if (boost::regex_match(rsp_line, rx_matches, regex_content_length_header)) { if (rx_matches.size() == 2) content_length = boost::lexical_cast(rx_matches[1]); } } return response_code; } /** * checks the local HTTP server's response code & validity using HelloService */ inline void checkWebServerResponseCode(void) { // load simple Hello service and start the server m_server.load_service("/hello", "HelloService"); m_server.start(); // open a connection boost::asio::ip::tcp::endpoint http_endpoint(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); boost::asio::ip::tcp::iostream http_stream(http_endpoint); // send valid request to the server unsigned int response_code; unsigned long content_length = 0; response_code = sendRequest(http_stream, "/hello", content_length); BOOST_CHECK(response_code == 200); BOOST_CHECK(content_length > 0); if (content_length > 0) { boost::scoped_array content_buf(new char[content_length+1]); BOOST_CHECK(http_stream.read(content_buf.get(), content_length)); } // send invalid request to the server response_code = sendRequest(http_stream, "/doesnotexist", content_length); BOOST_CHECK(response_code == 404); } /** * checks response content validity for the local HTTP server * * @param http_stream open stream to send the request via * @param resource name of the HTTP resource to request * @param content_regex regex that the response content should match */ inline void checkWebServerResponseContent(boost::asio::ip::tcp::iostream& http_stream, const std::string& resource, const boost::regex& content_regex, unsigned int expectedResponseCode = 200) { // send valid request to the server unsigned int response_code; unsigned long content_length = 0; response_code = sendRequest(http_stream, resource, content_length); BOOST_CHECK(response_code == expectedResponseCode); BOOST_REQUIRE(content_length > 0); // read in the response content boost::scoped_array content_buf(new char[content_length+1]); BOOST_CHECK(http_stream.read(content_buf.get(), content_length)); content_buf[content_length] = '\0'; // check the response content BOOST_CHECK(boost::regex_match(content_buf.get(), content_regex)); } /** * checks response content validity for the local HTTP server * * @param service name of the web service to load and query * @param resource name of the HTTP resource to request * @param content_regex regex that the response content should match */ inline void checkWebServerResponseContent(const std::string& service, const std::string& resource, const boost::regex& content_regex, unsigned int expectedResponseCode = 200) { // load specified service and start the server m_server.load_service(resource, service); m_server.start(); // open a connection boost::asio::ip::tcp::endpoint http_endpoint(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); boost::asio::ip::tcp::iostream http_stream(http_endpoint); // send request and check response checkWebServerResponseContent(http_stream, resource, content_regex, expectedResponseCode); } /** * checks if we can successfully send and receive HTTP messages * * @param tcp_conn open TCP connection to use for the tests */ inline void checkSendAndReceiveMessages(pion::tcp::connection& tcp_conn) { // send valid request to the server http::request http_request("/hello"); boost::system::error_code error_code; http_request.send(tcp_conn, error_code); BOOST_REQUIRE(! error_code); // receive the response from the server http::response http_response(http_request); http_response.receive(tcp_conn, error_code); BOOST_REQUIRE(! error_code); // check that the response is OK boost::regex hello_regex(".*Hello\\sWorld.*"); BOOST_REQUIRE(http_response.get_status_code() == 200); BOOST_REQUIRE(http_response.get_content_length() > 0); BOOST_REQUIRE(boost::regex_match(http_response.get_content(), hello_regex)); // send invalid request to the server http_request.set_resource("/doesnotexist"); http_request.send(tcp_conn, error_code); BOOST_REQUIRE(! error_code); http_response.receive(tcp_conn, error_code); BOOST_REQUIRE(! error_code); BOOST_CHECK_EQUAL(http_response.get_status_code(), 404U); } inline boost::asio::io_service& get_io_service(void) { return m_scheduler.get_io_service(); } single_service_scheduler m_scheduler; http::plugin_server m_server; }; // plugin_server Test Cases BOOST_FIXTURE_TEST_SUITE(WebServerTests_S, WebServerTests_F) BOOST_AUTO_TEST_CASE(checkWebServerIsListening) { BOOST_CHECK(! m_server.is_listening()); m_server.start(); BOOST_CHECK(m_server.is_listening()); m_server.stop(); BOOST_CHECK(! m_server.is_listening()); } BOOST_AUTO_TEST_CASE(checkWebServerRespondsProperly) { checkWebServerResponseCode(); } BOOST_AUTO_TEST_CASE(checkSendRequestsAndReceiveResponses) { // load simple Hello service and start the server m_server.load_service("/hello", "HelloService"); m_server.start(); // open a connection pion::tcp::connection tcp_conn(get_io_service()); tcp_conn.set_lifecycle(pion::tcp::connection::LIFECYCLE_KEEPALIVE); boost::system::error_code error_code; error_code = tcp_conn.connect(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); BOOST_REQUIRE(! error_code); checkSendAndReceiveMessages(tcp_conn); } BOOST_AUTO_TEST_CASE(checkSendRequestsAndReceiveResponseLeftoverConnection) { // load simple Hello service and start the server m_server.load_service("/hello", "HelloService"); m_server.start(); // open a connection pion::tcp::connection tcp_conn(get_io_service()); tcp_conn.set_lifecycle(pion::tcp::connection::LIFECYCLE_KEEPALIVE); boost::system::error_code error_code; error_code = tcp_conn.connect(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); BOOST_REQUIRE(! error_code); // send valid request to the server http::request http_request("/hello"); http_request.send(tcp_conn, error_code); BOOST_REQUIRE(! error_code); // receive the response from the server http::response http_response(http_request); http_response.receive(tcp_conn, error_code); BOOST_REQUIRE(! error_code); BOOST_CHECK_EQUAL(http_response.get_header(http::types::HEADER_CONNECTION), "Keep-Alive"); // check that the response is OK boost::regex hello_regex(".*Hello\\sWorld.*"); BOOST_REQUIRE(http_response.get_status_code() == 200); BOOST_REQUIRE(http_response.get_content_length() > 0); BOOST_REQUIRE(boost::regex_match(http_response.get_content(), hello_regex)); // shut down the server while the connection is still alive and waiting for data m_server.stop(); } BOOST_AUTO_TEST_CASE(checkSendRequestAndReceiveResponseFromEchoService) { m_server.load_service("/echo", "EchoService"); m_server.start(); // open a connection tcp::connection_ptr tcp_conn(new pion::tcp::connection(get_io_service())); tcp_conn->set_lifecycle(pion::tcp::connection::LIFECYCLE_KEEPALIVE); boost::system::error_code error_code; error_code = tcp_conn->connect(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); BOOST_REQUIRE(!error_code); pion::http::request_writer_ptr writer(pion::http::request_writer::create(tcp_conn)); writer->get_request().set_method("POST"); writer->get_request().set_resource("/echo"); writer << "junk"; writer->send(); // receive the response from the server http::response http_response(writer->get_request()); http_response.receive(*tcp_conn, error_code); BOOST_CHECK(!error_code); // check that the response is OK BOOST_CHECK(http_response.get_status_code() == 200); BOOST_CHECK(http_response.get_content_length() > 0); // check the post content of the request, by parsing it out of the post content of the response boost::regex post_content(".*\\[POST Content]\\s*junk.*"); BOOST_CHECK(boost::regex_match(http_response.get_content(), post_content)); } BOOST_AUTO_TEST_CASE(checkRedirectHelloServiceToEchoService) { m_server.load_service("/hello", "HelloService"); m_server.load_service("/echo", "EchoService"); m_server.start(); // open a connection boost::asio::ip::tcp::endpoint http_endpoint(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); boost::asio::ip::tcp::iostream http_stream(http_endpoint); // send a request to /hello and check that the response is from HelloService checkWebServerResponseContent(http_stream, "/hello", boost::regex(".*Hello\\sWorld.*")); m_server.add_redirect("/hello", "/echo"); // send a request to /hello and check that the response is from EchoService checkWebServerResponseContent(http_stream, "/hello", boost::regex(".*\\[Request\\sEcho\\].*")); } BOOST_AUTO_TEST_CASE(checkOriginalResourceAvailableAfterRedirect) { m_server.load_service("/hello", "HelloService"); m_server.load_service("/echo", "EchoService"); m_server.start(); // open a connection boost::asio::ip::tcp::endpoint http_endpoint(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); boost::asio::ip::tcp::iostream http_stream(http_endpoint); m_server.add_redirect("/hello", "/echo"); // send a request to /hello and check the reported values of the original resource and the delivered resource boost::regex regex_expected_content(".*Resource\\soriginally\\srequested:\\s/hello.*Resource\\sdelivered:\\s/echo.*"); checkWebServerResponseContent(http_stream, "/hello", regex_expected_content); } BOOST_AUTO_TEST_CASE(checkRecursiveRedirect) { m_server.load_service("/hello", "HelloService"); m_server.load_service("/echo", "EchoService"); m_server.load_service("/cookie", "CookieService"); m_server.start(); // open a connection boost::asio::ip::tcp::endpoint http_endpoint(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); boost::asio::ip::tcp::iostream http_stream(http_endpoint); m_server.add_redirect("/hello", "/echo"); m_server.add_redirect("/echo", "/cookie"); // send a request to /hello and check that the response is from CookieService checkWebServerResponseContent(http_stream, "/hello", boost::regex(".*.*Cookie\\sService.*.*")); } BOOST_AUTO_TEST_CASE(checkCircularRedirect) { m_server.load_service("/hello", "HelloService"); m_server.load_service("/cookie", "CookieService"); m_server.load_service("/echo", "EchoService"); m_server.start(); // open a connection boost::asio::ip::tcp::endpoint http_endpoint(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); boost::asio::ip::tcp::iostream http_stream(http_endpoint); // set up a circular set of redirects m_server.add_redirect("/hello", "/echo"); m_server.add_redirect("/echo", "/cookie"); m_server.add_redirect("/cookie", "/hello"); // send request and check that server returns expected status code and error message checkWebServerResponseContent(http_stream, "/hello", boost::regex(".*Maximum number of redirects.*exceeded.*"), http::types::RESPONSE_CODE_SERVER_ERROR); } BOOST_AUTO_TEST_CASE(checkSendChunkedRequestAndReceiveResponse) { m_server.load_service("/echo", "EchoService"); m_server.start(); // open a connection tcp::connection_ptr tcp_conn(new pion::tcp::connection(get_io_service())); tcp_conn->set_lifecycle(pion::tcp::connection::LIFECYCLE_KEEPALIVE); boost::system::error_code error_code; error_code = tcp_conn->connect(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); BOOST_REQUIRE(!error_code); boost::shared_ptr sender = ChunkedPostRequestSender::create(tcp_conn, "/echo"); sender->addChunk(5, "klmno"); sender->addChunk(4, "1234"); sender->addChunk(10, "abcdefghij"); sender->send(); // receive the response from the server http::response http_response("GET"); http_response.receive(*tcp_conn, error_code); BOOST_CHECK(!error_code); // check that the response is OK BOOST_CHECK(http_response.get_status_code() == 200); BOOST_CHECK(http_response.get_content_length() > 0); // check the content length of the request, by parsing it out of the post content of the response boost::regex content_length_of_request(".*Content length\\: 19.*"); BOOST_CHECK(boost::regex_match(http_response.get_content(), content_length_of_request)); // check the post content of the request, by parsing it out of the post content of the response boost::regex post_content_of_request(".*\\[POST Content]\\s*klmno1234abcdefghij.*"); BOOST_CHECK(boost::regex_match(http_response.get_content(), post_content_of_request)); } BOOST_AUTO_TEST_CASE(checkSendChunkedRequestWithOneChunkAndReceiveResponse) { m_server.load_service("/echo", "EchoService"); m_server.start(); // open a connection tcp::connection_ptr tcp_conn(new pion::tcp::connection(get_io_service())); tcp_conn->set_lifecycle(pion::tcp::connection::LIFECYCLE_KEEPALIVE); boost::system::error_code error_code; error_code = tcp_conn->connect(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); BOOST_REQUIRE(!error_code); boost::shared_ptr sender = ChunkedPostRequestSender::create(tcp_conn, "/echo"); sender->addChunk(10, "abcdefghij"); sender->send(); // receive the response from the server http::response http_response("GET"); http_response.receive(*tcp_conn, error_code); BOOST_CHECK(!error_code); // check that the response is OK BOOST_CHECK(http_response.get_status_code() == 200); BOOST_CHECK(http_response.get_content_length() > 0); // check the post content of the request, by parsing it out of the post content of the response boost::regex post_content(".*\\[POST Content]\\s*abcdefghij.*"); BOOST_CHECK(boost::regex_match(http_response.get_content(), post_content)); } BOOST_AUTO_TEST_CASE(checkSendChunkedRequestWithNoChunksAndReceiveResponse) { m_server.load_service("/echo", "EchoService"); m_server.start(); // open a connection tcp::connection_ptr tcp_conn(new pion::tcp::connection(get_io_service())); tcp_conn->set_lifecycle(pion::tcp::connection::LIFECYCLE_KEEPALIVE); boost::system::error_code error_code; error_code = tcp_conn->connect(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); BOOST_REQUIRE(!error_code); boost::shared_ptr sender = ChunkedPostRequestSender::create(tcp_conn, "/echo"); sender->send(); // receive the response from the server http::response http_response("GET"); http_response.receive(*tcp_conn, error_code); BOOST_CHECK(!error_code); // check that the response is OK BOOST_CHECK(http_response.get_status_code() == 200); BOOST_CHECK(http_response.get_content_length() > 0); // check the content length of the request, by parsing it out of the post content of the response boost::regex content_length_of_request(".*Content length\\: 0.*"); BOOST_CHECK(boost::regex_match(http_response.get_content(), content_length_of_request)); } #ifdef PION_HAVE_SSL BOOST_AUTO_TEST_CASE(checkSendRequestsAndReceiveResponsesUsingSSL) { // load simple Hello service and start the server m_server.set_ssl_key_file(SSL_PEM_FILE); m_server.load_service("/hello", "HelloService"); m_server.start(); // open a connection pion::tcp::connection tcp_conn(get_io_service(), true); tcp_conn.set_lifecycle(pion::tcp::connection::LIFECYCLE_KEEPALIVE); boost::system::error_code error_code; error_code = tcp_conn.connect(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); BOOST_REQUIRE(! error_code); error_code = tcp_conn.handshake_client(); BOOST_REQUIRE(! error_code); checkSendAndReceiveMessages(tcp_conn); } BOOST_AUTO_TEST_CASE(checkSendRequestsAndReceiveResponseLeftoverConnectionUsingSSL) { // load simple Hello service and start the server m_server.set_ssl_key_file(SSL_PEM_FILE); m_server.load_service("/hello", "HelloService"); m_server.start(); // open a connection pion::tcp::connection tcp_conn(get_io_service(), true); tcp_conn.set_lifecycle(pion::tcp::connection::LIFECYCLE_KEEPALIVE); boost::system::error_code error_code; error_code = tcp_conn.connect(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); BOOST_REQUIRE(! error_code); error_code = tcp_conn.handshake_client(); BOOST_REQUIRE(! error_code); // send valid request to the server http::request http_request("/hello"); http_request.send(tcp_conn, error_code); BOOST_REQUIRE(! error_code); // receive the response from the server http::response http_response(http_request); http_response.receive(tcp_conn, error_code); BOOST_REQUIRE(! error_code); BOOST_CHECK_EQUAL(http_response.get_header(http::types::HEADER_CONNECTION), "Keep-Alive"); // check that the response is OK boost::regex hello_regex(".*Hello\\sWorld.*"); BOOST_REQUIRE(http_response.get_status_code() == 200); BOOST_REQUIRE(http_response.get_content_length() > 0); BOOST_REQUIRE(boost::regex_match(http_response.get_content(), hello_regex)); // shut down the server while the connection is still alive and waiting for data m_server.stop(); } #endif BOOST_AUTO_TEST_CASE(checkHelloServiceResponseContent) { checkWebServerResponseContent("HelloService", "/hello", boost::regex(".*Hello\\sWorld.*")); } BOOST_AUTO_TEST_CASE(checkCookieServiceResponseContent) { checkWebServerResponseContent("CookieService", "/cookie", boost::regex(".*.*Cookie\\sService.*.*")); } BOOST_AUTO_TEST_CASE(checkEchoServiceResponseContent) { checkWebServerResponseContent("EchoService", "/echo", boost::regex(".*\\[Request\\sEcho\\].*\\[POST\\sContent\\].*")); } BOOST_AUTO_TEST_CASE(checkLogServiceResponseContent) { #if defined(PION_USE_LOG4CXX) || defined(PION_USE_LOG4CPLUS) || defined(PION_USE_LOG4CPP) // make sure that the log level is high enough so that the entry will be recorded pion::logger log_ptr = PION_GET_LOGGER("pion"); PION_LOG_SETLEVEL_INFO(log_ptr); // make sure that the log service includes an entry for loading itself checkWebServerResponseContent("LogService", "/log", boost::regex(".*Loaded.*plug-in.*\\(/log\\):\\sLogService.*")); // bump the log level back down when we are done with the test PION_LOG_SETLEVEL_WARN(log_ptr); #elif defined(PION_DISABLE_LOGGING) checkWebServerResponseContent("LogService", "/log", boost::regex(".*Logging\\sis\\sdisabled.*")); #else checkWebServerResponseContent("LogService", "/log", boost::regex(".*Using\\sostream\\slogging.*")); #endif } #ifndef PION_STATIC_LINKING BOOST_AUTO_TEST_CASE(checkAllowNothingServiceResponseContent) { checkWebServerResponseContent("AllowNothingService", "/deny", boost::regex(".*No, you can't.*"), http::types::RESPONSE_CODE_METHOD_NOT_ALLOWED); } #endif // PION_STATIC_LINKING BOOST_AUTO_TEST_CASE(checkFileServiceResponseContent) { // load multiple services and start the server try { m_server.load_service_config(SERVICES_CONFIG_FILE); } catch (error::directory_not_found&) {} m_server.start(); // open a connection boost::asio::ip::tcp::endpoint http_endpoint(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); boost::asio::ip::tcp::iostream http_stream(http_endpoint); // send request and check response (index page) const boost::regex index_page_regex(".*.*Test\\sWebsite.*.*"); checkWebServerResponseContent(http_stream, "/" , index_page_regex); checkWebServerResponseContent(http_stream, "/index.html" , index_page_regex); // send request and check response (copy of docs index page generated by doxygen) const boost::regex doc_index_regex(".*.*pion-.*Documentation.*.*"); checkWebServerResponseContent(http_stream, "/doc/index.html" , doc_index_regex); } BOOST_AUTO_TEST_CASE(checkPionUserPasswordSanity) { const std::string clear_pw("deadmeat"); user u("test-user"); u.set_password(clear_pw); BOOST_CHECK(u.match_password(clear_pw)); #ifdef PION_HAVE_SSL std::string encrypted_pw = u.get_password(); BOOST_CHECK_EQUAL(encrypted_pw.size(), static_cast(SHA_DIGEST_LENGTH * 2)); BOOST_CHECK(clear_pw != encrypted_pw); u.set_password_hash(encrypted_pw); BOOST_CHECK_EQUAL(encrypted_pw, u.get_password()); // should still be identical BOOST_CHECK(u.match_password(clear_pw)); #endif } BOOST_AUTO_TEST_CASE(checkBasicAuthServiceFailure) { m_server.load_service("/auth", "EchoService"); user_manager_ptr userManager(new user_manager()); http::auth_ptr my_auth_ptr(new http::basic_auth(userManager)); m_server.set_authentication(my_auth_ptr); my_auth_ptr->add_restrict("/auth"); my_auth_ptr->add_user("mike", "123456"); m_server.start(); // open a connection tcp::connection_ptr tcp_conn(new pion::tcp::connection(get_io_service())); tcp_conn->set_lifecycle(pion::tcp::connection::LIFECYCLE_KEEPALIVE); boost::system::error_code error_code; error_code = tcp_conn->connect(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); BOOST_REQUIRE(!error_code); pion::http::request_writer_ptr writer(pion::http::request_writer::create(tcp_conn)); writer->get_request().set_method("POST"); writer->get_request().set_resource("/auth/something/somewhere"); writer << "junk"; writer->send(); // receive the response from the server http::response http_response(writer->get_request()); http_response.receive(*tcp_conn, error_code); BOOST_CHECK(!error_code); // check that the response is RESPONSE_CODE_UNAUTHORIZED BOOST_CHECK(http_response.get_status_code() == http::types::RESPONSE_CODE_UNAUTHORIZED); BOOST_CHECK(http_response.get_content_length() > 0); // check the post content of the request, by parsing it out of the post content of the response boost::regex post_content(".*\\[POST Content]\\s*junk.*"); BOOST_CHECK(!boost::regex_match(http_response.get_content(), post_content)); } BOOST_AUTO_TEST_CASE(checkBasicAuthServiceLogin) { m_server.load_service("/auth", "EchoService"); user_manager_ptr userManager(new user_manager()); http::auth_ptr my_auth_ptr(new http::basic_auth(userManager)); m_server.set_authentication(my_auth_ptr); my_auth_ptr->add_restrict("/auth"); my_auth_ptr->add_user("mike", "123456"); m_server.start(); // open a connection tcp::connection_ptr tcp_conn(new pion::tcp::connection(get_io_service())); tcp_conn->set_lifecycle(pion::tcp::connection::LIFECYCLE_KEEPALIVE); boost::system::error_code error_code; error_code = tcp_conn->connect(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); BOOST_REQUIRE(!error_code); pion::http::request_writer_ptr writer(pion::http::request_writer::create(tcp_conn)); writer->get_request().set_method("POST"); writer->get_request().set_resource("/auth/something/somewhere"); // add an authentication for "mike:123456" writer->get_request().add_header(http::types::HEADER_AUTHORIZATION, "Basic bWlrZToxMjM0NTY="); writer << "junk"; writer->send(); // receive the response from the server http::response http_response(writer->get_request()); http_response.receive(*tcp_conn, error_code); BOOST_CHECK(!error_code); // check that the response is OK BOOST_CHECK(http_response.get_status_code() == 200); BOOST_CHECK(http_response.get_content_length() > 0); // check the post content of the request, by parsing it out of the post content of the response boost::regex post_content(".*\\[POST Content]\\s*junk.*"); BOOST_CHECK(boost::regex_match(http_response.get_content(), post_content)); } BOOST_AUTO_TEST_CASE(checkCookieAuthServiceFailure) { m_server.load_service("/auth", "EchoService"); user_manager_ptr userManager(new user_manager()); http::auth_ptr my_auth_ptr(new http::cookie_auth(userManager)); m_server.set_authentication(my_auth_ptr); my_auth_ptr->add_restrict("/auth"); my_auth_ptr->add_user("mike", "123456"); m_server.start(); // open a connection tcp::connection_ptr tcp_conn(new pion::tcp::connection(get_io_service())); tcp_conn->set_lifecycle(pion::tcp::connection::LIFECYCLE_KEEPALIVE); boost::system::error_code error_code; error_code = tcp_conn->connect(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); BOOST_REQUIRE(!error_code); pion::http::request_writer_ptr writer(pion::http::request_writer::create(tcp_conn)); writer->get_request().set_method("POST"); writer->get_request().set_resource("/auth/something/somewhere"); writer << "junk"; writer->send(); // receive the response from the server http::response http_response(writer->get_request()); http_response.receive(*tcp_conn, error_code); BOOST_CHECK(!error_code); // check that the response is RESPONSE_CODE_UNAUTHORIZED BOOST_CHECK(http_response.get_status_code() == http::types::RESPONSE_CODE_UNAUTHORIZED); BOOST_CHECK(http_response.get_content_length() > 0); // check the post content of the request, by parsing it out of the post content of the response boost::regex post_content(".*\\[POST Content]\\s*junk.*"); BOOST_CHECK(!boost::regex_match(http_response.get_content(), post_content)); } BOOST_AUTO_TEST_CASE(checkCookieAuthServiceLogin) { m_server.load_service("/auth", "EchoService"); user_manager_ptr userManager(new user_manager()); http::auth_ptr my_auth_ptr(new http::cookie_auth(userManager)); m_server.set_authentication(my_auth_ptr); my_auth_ptr->add_restrict("/auth"); my_auth_ptr->add_user("mike", "123456"); m_server.start(); // open a login connection tcp::connection_ptr tcp_conn(new pion::tcp::connection(get_io_service())); tcp_conn->set_lifecycle(pion::tcp::connection::LIFECYCLE_KEEPALIVE); boost::system::error_code error_code; error_code = tcp_conn->connect(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); BOOST_REQUIRE(!error_code); pion::http::request_writer_ptr writer(pion::http::request_writer::create(tcp_conn)); writer->get_request().set_method("GET"); // login as "mike:123456" writer->get_request().set_resource("/login?user=mike&pass=123456"); //writer << "junk"; writer->send(); // receive the response from the server http::response http_response(writer->get_request()); http_response.receive(*tcp_conn, error_code); BOOST_CHECK(!error_code); // check that the response is OK BOOST_CHECK(http_response.get_status_code() == 204); BOOST_CHECK(http_response.get_content_length() == 0); BOOST_CHECK(http_response.has_header(http::types::HEADER_SET_COOKIE)); // get Cookies std::string cookie = http_response.get_header(http::types::HEADER_SET_COOKIE); // now try to connect to protected area using login cookie pion::http::request_writer_ptr writer2(pion::http::request_writer::create(tcp_conn)); writer2->get_request().set_method("POST"); writer2->get_request().set_resource("/auth/something/somewhere"); // add an authentications for "mike:123456" writer2->get_request().add_header(http::types::HEADER_COOKIE,cookie); writer2 << "junk"; writer2->send(); // receive the response from the server http::response http_response2(writer2->get_request()); http_response2.receive(*tcp_conn, error_code); BOOST_CHECK(!error_code); // check that the response is OK BOOST_CHECK(http_response2.get_status_code() == 200); BOOST_CHECK(http_response2.get_content_length() > 0); // check the post content of the request, by parsing it out of the post content of the response boost::regex post_content(".*\\[POST Content]\\s*junk.*"); BOOST_CHECK(boost::regex_match(http_response2.get_content(), post_content)); } BOOST_AUTO_TEST_SUITE_END() #define BIG_BUF_SIZE (12 * 1024) /// /// ContentResponseWithoutLengthTests_F: /// this uses a "big content buffer" to make sure that reading the response /// content works across multiple packets (and asio_read_some() calls) /// and when no content-length is specified (it should read through the end) /// class ContentResponseWithoutLengthTests_F : public WebServerTests_F { public: // default constructor and destructor ContentResponseWithoutLengthTests_F() { // fill the buffer with non-random characters for (unsigned long n = 0; n < BIG_BUF_SIZE; ++n) { m_big_buf[n] = char(n); } } virtual ~ContentResponseWithoutLengthTests_F() {} /** * sends an HTTP response with content, but not content-length provided * * @param http_request_ptr the HTTP request to respond to * @param tcp_conn the TCP connection to send the response over */ void sendResponseWithContentButNoLength(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { // make sure it will get closed when finished tcp_conn->set_lifecycle(pion::tcp::connection::LIFECYCLE_CLOSE); // prepare the response headers http::response http_response(*http_request_ptr); http_response.set_do_not_send_content_length(); // send the response headers boost::system::error_code error_code; http_response.send(*tcp_conn, error_code); BOOST_REQUIRE(! error_code); // send the content buffer tcp_conn->write(boost::asio::buffer(m_big_buf, BIG_BUF_SIZE), error_code); BOOST_REQUIRE(! error_code); // finish (and close) the connection tcp_conn->finish(); } /// reads in a HTTP response asynchronously void readAsyncResponse(tcp::connection_ptr& tcp_conn) { http::request http_request("GET"); http::response_reader_ptr my_reader_ptr(http::response_reader::create(tcp_conn, http_request, boost::bind(&ContentResponseWithoutLengthTests_F::checkResponse, this, _1, _2, _3))); my_reader_ptr->receive(); } /// checks the validity of the HTTP response void checkResponse(const http::response& http_response) { BOOST_REQUIRE(http_response.get_status_code() == 200); BOOST_CHECK(! http_response.has_header(http::types::HEADER_CONTENT_LENGTH)); BOOST_REQUIRE(http_response.get_content_length() == BIG_BUF_SIZE); BOOST_CHECK_EQUAL(memcmp(http_response.get_content(), m_big_buf, BIG_BUF_SIZE), 0); } /// checks the validity of the HTTP response void checkResponse(http::response_ptr& http_response_ptr, tcp::connection_ptr& conn_ptr, const boost::system::error_code& ec) { checkResponse(*http_response_ptr); boost::mutex::scoped_lock async_lock(m_mutex); m_async_test_finished.notify_one(); } /// big data buffer used for the tests char m_big_buf[BIG_BUF_SIZE]; /// signaled after the async response check has finished boost::condition m_async_test_finished; /// used to protect the asynchronous operations boost::mutex m_mutex; }; // ContentResponseWithoutLengthTests_F Test Cases BOOST_FIXTURE_TEST_SUITE(ContentResponseWithoutLengthTests_S, ContentResponseWithoutLengthTests_F) BOOST_AUTO_TEST_CASE(checkSendContentWithoutLengthAndReceiveSyncResponse) { // startup the server m_server.add_resource("/big", boost::bind(&ContentResponseWithoutLengthTests_F::sendResponseWithContentButNoLength, this, _1, _2)); m_server.start(); // open a connection tcp::connection_ptr tcp_conn(new pion::tcp::connection(get_io_service())); boost::system::error_code error_code; error_code = tcp_conn->connect(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); BOOST_REQUIRE(!error_code); // send an HTTP request http::request http_request("/big"); http_request.send(*tcp_conn, error_code); BOOST_REQUIRE(! error_code); // receive the response from the server http::response http_response(http_request); http_response.receive(*tcp_conn, error_code); BOOST_REQUIRE(! error_code); // check that the response is OK checkResponse(http_response); } BOOST_AUTO_TEST_CASE(checkSendContentWithoutLengthAndReceiveAsyncResponse) { // startup the server m_server.add_resource("/big", boost::bind(&ContentResponseWithoutLengthTests_F::sendResponseWithContentButNoLength, this, _1, _2)); m_server.start(); // open a connection tcp::connection_ptr tcp_conn(new pion::tcp::connection(get_io_service())); boost::system::error_code error_code; error_code = tcp_conn->connect(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); BOOST_REQUIRE(!error_code); // send an HTTP request boost::mutex::scoped_lock async_lock(m_mutex); pion::http::request_writer_ptr writer_ptr(pion::http::request_writer::create(tcp_conn, boost::bind(&ContentResponseWithoutLengthTests_F::readAsyncResponse, this, tcp_conn))); writer_ptr->get_request().set_resource("/big"); writer_ptr->send(); // wait until the test is finished (and async calls have finished) m_async_test_finished.wait(async_lock); } BOOST_AUTO_TEST_SUITE_END() pion-5.0.4+dfsg.orig/tests/Makefile.in0000644000372000001440000006522412215647101017154 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = piontests$(EXEEXT) subdir = tests DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_piontests_OBJECTS = piontests.$(OBJEXT) algorithm_tests.$(OBJEXT) \ file_service_tests.$(OBJEXT) http_message_tests.$(OBJEXT) \ http_parser_tests.$(OBJEXT) http_plugin_server_tests.$(OBJEXT) \ http_request_tests.$(OBJEXT) http_response_tests.$(OBJEXT) \ http_types_tests.$(OBJEXT) plugin_manager_tests.$(OBJEXT) \ plugin_tests.$(OBJEXT) spdy_parser_tests.$(OBJEXT) \ tcp_server_tests.$(OBJEXT) tcp_stream_tests.$(OBJEXT) piontests_OBJECTS = $(am_piontests_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/pion depcomp = $(SHELL) $(top_srcdir)/m4/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_$(V)) am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_$(V)) am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(piontests_SOURCES) DIST_SOURCES = $(piontests_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = plugins AM_CPPFLAGS = -I../include @PION_TESTS_CPPFLAGS@ TESTS = $(check_PROGRAMS) piontests_SOURCES = piontests.cpp \ algorithm_tests.cpp file_service_tests.cpp http_message_tests.cpp \ http_parser_tests.cpp http_plugin_server_tests.cpp http_request_tests.cpp \ http_response_tests.cpp http_types_tests.cpp plugin_manager_tests.cpp \ plugin_tests.cpp spdy_parser_tests.cpp tcp_server_tests.cpp tcp_stream_tests.cpp piontests_LDADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ @BOOST_TEST_LIB@ piontests_DEPENDENCIES = ../src/libpion.la \ plugins/hasCreateAndDestroy.la plugins/hasCreateButNoDestroy.la \ plugins/hasNoCreate.la EXTRA_DIST = *.vcxproj *.vcxproj.filters boost*.xsd boost*.xsl config doc \ http_parser_tests_data.inc spdy_parser_tests_data.inc all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list piontests$(EXEEXT): $(piontests_OBJECTS) $(piontests_DEPENDENCIES) @rm -f piontests$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(piontests_OBJECTS) $(piontests_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/algorithm_tests.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_service_tests.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_message_tests.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_parser_tests.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_plugin_server_tests.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_request_tests.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_response_tests.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_types_tests.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/piontests.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin_manager_tests.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin_tests.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spdy_parser_tests.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcp_server_tests.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcp_stream_tests.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ ctags-recursive distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.4+dfsg.orig/tests/tcp_server_tests.cpp0000644000372000001440000004753512215647065021227 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace pion; /// /// HelloServer: simple TCP server that sends "Hello there!" after receiving some data /// class HelloServer : public pion::tcp::server { public: virtual ~HelloServer() {} /** * creates a Hello server * * @param tcp_port port number used to listen for new connections (IPv4) */ HelloServer(const unsigned int tcp_port = 0) : pion::tcp::server(tcp_port) {} /** * handles a new TCP connection * * @param tcp_conn the new TCP connection to handle */ virtual void handle_connection(pion::tcp::connection_ptr& tcp_conn) { static const std::string HELLO_MESSAGE("Hello there!\n"); tcp_conn->set_lifecycle(pion::tcp::connection::LIFECYCLE_CLOSE); // make sure it will get closed tcp_conn->async_write(boost::asio::buffer(HELLO_MESSAGE), boost::bind(&HelloServer::handle_write, this, tcp_conn, boost::asio::placeholders::error)); } private: /** * called after the initial greeting has been sent * * @param tcp_conn the TCP connection to the server * @param write_error message that explains what went wrong (if anything) */ void handle_write(pion::tcp::connection_ptr& tcp_conn, const boost::system::error_code& write_error) { if (write_error) { tcp_conn->finish(); } else { tcp_conn->async_read_some(boost::bind(&HelloServer::handleRead, this, tcp_conn, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } } /** * called after the client's greeting has been received * * @param tcp_conn the TCP connection to the server * @param read_error message that explains what went wrong (if anything) * @param bytes_read number of bytes read from the client */ void handleRead(pion::tcp::connection_ptr& tcp_conn, const boost::system::error_code& read_error, std::size_t bytes_read) { static const std::string GOODBYE_MESSAGE("Goodbye!\n"); if (read_error) { tcp_conn->finish(); } else if (bytes_read == 5 && memcmp(tcp_conn->get_read_buffer().data(), "throw", 5) == 0) { throw int(1); } else { tcp_conn->async_write(boost::asio::buffer(GOODBYE_MESSAGE), boost::bind(&pion::tcp::connection::finish, tcp_conn)); } } }; /// /// HelloServerTests_F: fixture used for running (Hello) server tests /// class HelloServerTests_F { public: // default constructor and destructor HelloServerTests_F() : hello_server_ptr(new HelloServer) { // start the HTTP server hello_server_ptr->start(); } ~HelloServerTests_F() { hello_server_ptr->stop(); } inline tcp::server_ptr& getServerPtr(void) { return hello_server_ptr; } /** * check at 0.1 second intervals for up to one second to see if the number * of connections is as expected * * @param expectedNumberOfConnections expected number of connections */ void checkNumConnectionsForUpToOneSecond(std::size_t expectedNumberOfConnections) { for (int i = 0; i < 10; ++i) { if (getServerPtr()->get_connections() == expectedNumberOfConnections) break; scheduler::sleep(0, 100000000); // 0.1 seconds } BOOST_CHECK_EQUAL(getServerPtr()->get_connections(), expectedNumberOfConnections); } private: tcp::server_ptr hello_server_ptr; }; // HelloServer Test Cases BOOST_FIXTURE_TEST_SUITE(HelloServerTests_S, HelloServerTests_F) BOOST_AUTO_TEST_CASE(checkTcpServerIsListening) { BOOST_CHECK(getServerPtr()->is_listening()); } BOOST_AUTO_TEST_CASE(checkNumberOfActiveServerConnections) { // there should be no connections to start, but wait if needed // just in case other tests ran before this one, which are still connected checkNumConnectionsForUpToOneSecond(static_cast(0)); // open a connection boost::asio::ip::tcp::endpoint localhost(boost::asio::ip::address::from_string("127.0.0.1"), getServerPtr()->get_port()); boost::asio::ip::tcp::iostream tcp_stream_a(localhost); // we need to wait for the server to accept the connection since it happens // in another thread. This should always take less than one second. checkNumConnectionsForUpToOneSecond(static_cast(1)); // open a few more connections; boost::asio::ip::tcp::iostream tcp_stream_b(localhost); checkNumConnectionsForUpToOneSecond(static_cast(2)); boost::asio::ip::tcp::iostream tcp_stream_c(localhost); checkNumConnectionsForUpToOneSecond(static_cast(3)); boost::asio::ip::tcp::iostream tcp_stream_d(localhost); checkNumConnectionsForUpToOneSecond(static_cast(4)); // close connections tcp_stream_a.close(); checkNumConnectionsForUpToOneSecond(static_cast(3)); tcp_stream_b.close(); checkNumConnectionsForUpToOneSecond(static_cast(2)); tcp_stream_c.close(); checkNumConnectionsForUpToOneSecond(static_cast(1)); tcp_stream_d.close(); checkNumConnectionsForUpToOneSecond(static_cast(0)); } BOOST_AUTO_TEST_CASE(checkServerConnectionBehavior) { // open a connection boost::asio::ip::tcp::endpoint localhost(boost::asio::ip::address::from_string("127.0.0.1"), getServerPtr()->get_port()); boost::asio::ip::tcp::iostream tcp_stream_a(localhost); // read greeting from the server std::string str; std::getline(tcp_stream_a, str); BOOST_CHECK(str == "Hello there!"); // open a second connection & read the greeting boost::asio::ip::tcp::iostream tcp_stream_b(localhost); std::getline(tcp_stream_b, str); BOOST_CHECK(str == "Hello there!"); // send greeting to the first server tcp_stream_a << "Hi!\n"; tcp_stream_a.flush(); // send greeting to the second server tcp_stream_b << "Hi!\n"; tcp_stream_b.flush(); // receive goodbye from the first server std::getline(tcp_stream_a, str); tcp_stream_a.close(); BOOST_CHECK(str == "Goodbye!"); // receive goodbye from the second server std::getline(tcp_stream_b, str); tcp_stream_b.close(); BOOST_CHECK(str == "Goodbye!"); } BOOST_AUTO_TEST_CASE(checkServerExceptionsGetCaught) { // open a connection boost::asio::ip::tcp::endpoint localhost(boost::asio::ip::address::from_string("127.0.0.1"), getServerPtr()->get_port()); boost::asio::ip::tcp::iostream tcp_stream_a(localhost); // read greeting from the server std::string str; std::getline(tcp_stream_a, str); BOOST_CHECK(str == "Hello there!"); // send throw request to the server tcp_stream_a << "throw"; tcp_stream_a.flush(); tcp_stream_a.close(); } BOOST_AUTO_TEST_SUITE_END() /// /// MockSyncServer: simple TCP server that synchronously receives HTTP requests using http::message::receive(), /// and checks that the received request object has some expected properties. /// class MockSyncServer : public pion::tcp::server { public: /** * MockSyncServer constructor * * @param sched the scheduler that will be used to manage worker threads * @param tcp_port port number used to listen for new connections (IPv4) */ MockSyncServer(scheduler& sched, const unsigned int tcp_port = 0) : pion::tcp::server(sched, tcp_port) {} virtual ~MockSyncServer() {} /** * handles a new TCP connection * * @param tcp_conn the new TCP connection to handle */ virtual void handle_connection(pion::tcp::connection_ptr& tcp_conn) { // wait until an HTTP request is received or an error occurs boost::system::error_code error_code; http::request http_request; http_request.receive(*tcp_conn, error_code); BOOST_REQUIRE(!error_code); // check the received request for expected headers and content for (std::map::const_iterator i = m_expectedHeaders.begin(); i != m_expectedHeaders.end(); ++i) { BOOST_CHECK_EQUAL(http_request.get_header(i->first), i->second); } BOOST_CHECK_EQUAL(m_expectedContent, http_request.get_content()); if (m_additional_request_test) BOOST_CHECK(m_additional_request_test(http_request)); // send a simple response as evidence that this part of the code was reached static const std::string GOODBYE_MESSAGE("Goodbye!\n"); tcp_conn->write(boost::asio::buffer(GOODBYE_MESSAGE), error_code); // wrap up tcp_conn->set_lifecycle(pion::tcp::connection::LIFECYCLE_CLOSE); tcp_conn->finish(); } void setExpectations(const std::map& expectedHeaders, const std::string& expectedContent, boost::function1 additional_request_test = NULL) { m_expectedHeaders = expectedHeaders; m_expectedContent = expectedContent; m_additional_request_test = additional_request_test; } private: std::map m_expectedHeaders; std::string m_expectedContent; boost::function1 m_additional_request_test; }; /// /// MockSyncServerTests_F: fixture used for running MockSyncServer tests /// class MockSyncServerTests_F { public: MockSyncServerTests_F() : m_scheduler(), m_sync_server_ptr(new MockSyncServer(m_scheduler)) { m_sync_server_ptr->start(); } ~MockSyncServerTests_F() { m_sync_server_ptr->stop(); } inline boost::shared_ptr& getServerPtr(void) { return m_sync_server_ptr; } inline boost::asio::io_service& get_io_service(void) { return m_scheduler.get_io_service(); } private: single_service_scheduler m_scheduler; boost::shared_ptr m_sync_server_ptr; }; // MockSyncServer Test Cases BOOST_FIXTURE_TEST_SUITE(MockSyncServerTests_S, MockSyncServerTests_F) BOOST_AUTO_TEST_CASE(checkMockSyncServerIsListening) { BOOST_CHECK(getServerPtr()->is_listening()); } BOOST_AUTO_TEST_CASE(checkReceivedRequestUsingStream) { // open a connection boost::asio::ip::tcp::endpoint localhost(boost::asio::ip::address::from_string("127.0.0.1"), getServerPtr()->get_port()); boost::asio::ip::tcp::iostream tcp_stream(localhost); // set expectations for received request std::map expectedHeaders; expectedHeaders[http::types::HEADER_CONTENT_LENGTH] = "8"; expectedHeaders[http::types::HEADER_TRANSFER_ENCODING] = ""; // i.e. check that there is no transfer encoding header getServerPtr()->setExpectations(expectedHeaders, "12345678"); // send request to the server tcp_stream << "POST /resource1 HTTP/1.1" << http::types::STRING_CRLF; tcp_stream << http::types::HEADER_CONTENT_LENGTH << ": 8" << http::types::STRING_CRLF << http::types::STRING_CRLF; tcp_stream << "12345678"; tcp_stream.flush(); // receive goodbye from the server std::string str; std::getline(tcp_stream, str); BOOST_CHECK(str == "Goodbye!"); tcp_stream.close(); } BOOST_AUTO_TEST_CASE(checkReceivedRequestUsingChunkedStream) { // open a connection boost::asio::ip::tcp::endpoint localhost(boost::asio::ip::address::from_string("127.0.0.1"), getServerPtr()->get_port()); boost::asio::ip::tcp::iostream tcp_stream(localhost); // set expectations for received request std::map expectedHeaders; expectedHeaders[http::types::HEADER_TRANSFER_ENCODING] = "chunked"; expectedHeaders[http::types::HEADER_CONTENT_LENGTH] = ""; // i.e. check that there is no content length header getServerPtr()->setExpectations(expectedHeaders, "abcdefghijklmno"); // send request to the server tcp_stream << "POST /resource1 HTTP/1.1" << http::types::STRING_CRLF; tcp_stream << http::types::HEADER_TRANSFER_ENCODING << ": chunked" << http::types::STRING_CRLF << http::types::STRING_CRLF; // write first chunk size tcp_stream << "A" << http::types::STRING_CRLF; // write first chunk tcp_stream << "abcdefghij" << http::types::STRING_CRLF; // write second chunk size tcp_stream << "5" << http::types::STRING_CRLF; // write second chunk tcp_stream << "klmno" << http::types::STRING_CRLF; // write final chunk size tcp_stream << "0" << http::types::STRING_CRLF; tcp_stream << http::types::STRING_CRLF; tcp_stream.flush(); // receive goodbye from the server std::string str; std::getline(tcp_stream, str); BOOST_CHECK(str == "Goodbye!"); tcp_stream.close(); } BOOST_AUTO_TEST_CASE(checkReceivedRequestUsingExtraWhiteSpaceAroundChunkSizes) { // open a connection boost::asio::ip::tcp::endpoint localhost(boost::asio::ip::address::from_string("127.0.0.1"), getServerPtr()->get_port()); boost::asio::ip::tcp::iostream tcp_stream(localhost); // set expectations for received request std::map expectedHeaders; expectedHeaders[http::types::HEADER_TRANSFER_ENCODING] = "chunked"; getServerPtr()->setExpectations(expectedHeaders, "abcdefghijklmno"); // send request to the server tcp_stream << "POST /resource1 HTTP/1.1" << http::types::STRING_CRLF; tcp_stream << http::types::HEADER_TRANSFER_ENCODING << ": chunked" << http::types::STRING_CRLF << http::types::STRING_CRLF; // write some chunks with chunk sizes with leading and/or trailing tabs and spaces tcp_stream << " 2" << http::types::STRING_CRLF << "ab" << http::types::STRING_CRLF; tcp_stream << "2\t \t " << http::types::STRING_CRLF << "cd" << http::types::STRING_CRLF; tcp_stream << " 2 " << http::types::STRING_CRLF << "ef" << http::types::STRING_CRLF; tcp_stream << "\t \t 2\t\t" << http::types::STRING_CRLF << "gh" << http::types::STRING_CRLF; // write chunks with extra CRLF before chunk size // (extra CRLF after chunk size not allowed, since it would be ambiguous) tcp_stream << http::types::STRING_CRLF << "2" << http::types::STRING_CRLF << "ij" << http::types::STRING_CRLF; tcp_stream << http::types::STRING_CRLF << " 5 " << http::types::STRING_CRLF << "klmno" << http::types::STRING_CRLF; // write final chunk size tcp_stream << "0" << http::types::STRING_CRLF; tcp_stream << http::types::STRING_CRLF; tcp_stream.flush(); // receive goodbye from the server std::string str; std::getline(tcp_stream, str); BOOST_CHECK(str == "Goodbye!"); tcp_stream.close(); } BOOST_AUTO_TEST_CASE(checkReceivedRequestUsingRequestObject) { // open a connection pion::tcp::connection tcp_conn(get_io_service()); boost::system::error_code error_code; error_code = tcp_conn.connect(boost::asio::ip::address::from_string("127.0.0.1"), getServerPtr()->get_port()); BOOST_REQUIRE(!error_code); std::map expectedHeaders; expectedHeaders[http::types::HEADER_CONTENT_LENGTH] = "4"; expectedHeaders[http::types::HEADER_TRANSFER_ENCODING] = ""; // i.e. check that there is no transfer encoding header expectedHeaders["foo"] = "bar"; getServerPtr()->setExpectations(expectedHeaders, "wxyz"); // send request to the server http::request http_request; http_request.add_header("foo", "bar"); http_request.set_content_length(4); http_request.create_content_buffer(); memcpy(http_request.get_content(), "wxyz", 4); http_request.send(tcp_conn, error_code); BOOST_REQUIRE(!error_code); // receive the response from the server tcp_conn.read_some(error_code); BOOST_CHECK(!error_code); BOOST_CHECK(strncmp(tcp_conn.get_read_buffer().data(), "Goodbye!", strlen("Goodbye!")) == 0); } bool queryKeyXHasValueY(http::request& http_request) { return http_request.get_query("x") == "y"; } BOOST_AUTO_TEST_CASE(checkQueryOfReceivedRequestParsed) { // open a connection boost::asio::ip::tcp::endpoint localhost(boost::asio::ip::address::from_string("127.0.0.1"), getServerPtr()->get_port()); boost::asio::ip::tcp::iostream tcp_stream(localhost); // set expectations for received request std::map empty_map; getServerPtr()->setExpectations(empty_map, "", queryKeyXHasValueY); // send request to the server tcp_stream << "GET /resource1?x=y HTTP/1.1" << http::types::STRING_CRLF << http::types::STRING_CRLF; tcp_stream.flush(); // receive goodbye from the server std::string str; std::getline(tcp_stream, str); BOOST_CHECK(str == "Goodbye!"); tcp_stream.close(); } BOOST_AUTO_TEST_CASE(checkUrlEncodedQueryInPostContentParsed) { // open a connection boost::asio::ip::tcp::endpoint localhost(boost::asio::ip::address::from_string("127.0.0.1"), getServerPtr()->get_port()); boost::asio::ip::tcp::iostream tcp_stream(localhost); // set expectations for received request std::map expectedHeaders; expectedHeaders[http::types::HEADER_CONTENT_LENGTH] = "3"; getServerPtr()->setExpectations(expectedHeaders, "x=y", queryKeyXHasValueY); // send request to the server tcp_stream << "POST /resource1 HTTP/1.1" << http::types::STRING_CRLF << http::types::HEADER_CONTENT_LENGTH << ": 3" << http::types::STRING_CRLF << http::types::HEADER_CONTENT_TYPE << ": " << http::types::CONTENT_TYPE_URLENCODED << "; charset=ECMA-cyrillic" << http::types::STRING_CRLF << http::types::STRING_CRLF << "x=y"; tcp_stream.flush(); // receive goodbye from the server std::string str; std::getline(tcp_stream, str); BOOST_CHECK(str == "Goodbye!"); tcp_stream.close(); } /* Charset parsing removed due to performance concerns, but might be restored later. bool charsetIsEcmaCyrillic(http::request& http_request) { return http_request.getCharset() == "ECMA-cyrillic"; } BOOST_AUTO_TEST_CASE(checkCharsetOfReceivedRequest) { // open a connection boost::asio::ip::tcp::endpoint localhost(boost::asio::ip::address::from_string("127.0.0.1"), getServerPtr()->get_port()); boost::asio::ip::tcp::iostream tcp_stream(localhost); // set expectations for received request std::map expectedHeaders; expectedHeaders[http::types::HEADER_CONTENT_LENGTH] = "3"; getServerPtr()->setExpectations(expectedHeaders, "x=y", charsetIsEcmaCyrillic); // send request to the server tcp_stream << "POST /resource1 HTTP/1.1" << http::types::STRING_CRLF << http::types::HEADER_CONTENT_LENGTH << ": 3" << http::types::STRING_CRLF << http::types::HEADER_CONTENT_TYPE << ": " << http::types::CONTENT_TYPE_URLENCODED << "; charset=ECMA-cyrillic" << http::types::STRING_CRLF << http::types::STRING_CRLF << "x=y"; tcp_stream.flush(); // receive goodbye from the server std::string str; std::getline(tcp_stream, str); BOOST_CHECK(str == "Goodbye!"); tcp_stream.close(); } */ BOOST_AUTO_TEST_SUITE_END() pion-5.0.4+dfsg.orig/tests/boosttest-1.0-to-junit-1.0.xsl0000644000372000001440000002343112215647065022227 0ustar robertousers 0 0 0 0 0 0 0 [Error] - == [File] - == [Line] - [Exception] - == [File] - == [Line] - [Info] - == [File] - == [Line] - [Warning] - == [File] - == [Line] - [Message] - == [File] - == [Line] - [Exception] - == [File] - == [Line] - pion-5.0.4+dfsg.orig/tests/piontests.cpp0000644000372000001440000000132612215647065017645 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #define BOOST_TEST_MODULE pion-unit-tests #include #include namespace pion { namespace test { std::ofstream config::m_test_log_file; BOOST_GLOBAL_FIXTURE(config); } } pion-5.0.4+dfsg.orig/tests/plugin_manager_tests.cpp0000644000372000001440000000744712215647065022041 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef PION_STATIC_LINKING #include #include #include #include #include using namespace pion; #if defined(PION_WIN32) static const std::string directoryOfPluginsForTests = "plugins/.libs"; static const std::string sharedLibExt = ".dll"; #else #if defined(PION_XCODE) static const std::string directoryOfPluginsForTests = "../bin/Debug"; #else static const std::string directoryOfPluginsForTests = "plugins/.libs"; #endif static const std::string sharedLibExt = ".so"; #endif /// fixture for unit tests on a newly created plugin_manager template class new_plugin_manager_F : public plugin_manager { public: new_plugin_manager_F() { BOOST_REQUIRE(GET_DIRECTORY(m_old_cwd, DIRECTORY_MAX_SIZE) != NULL); BOOST_REQUIRE(CHANGE_DIRECTORY(directoryOfPluginsForTests.c_str()) == 0); } ~new_plugin_manager_F() { BOOST_CHECK(CHANGE_DIRECTORY(m_old_cwd) == 0); } private: char m_old_cwd[DIRECTORY_MAX_SIZE+1]; }; struct InterfaceStub { }; BOOST_AUTO_TEST_SUITE_FIXTURE_TEMPLATE(new_plugin_manager_S, boost::mpl::list >) BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkEmptyIsTrue) { BOOST_CHECK(F::empty()); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkLoad) { BOOST_CHECK(F::load("urn:id_1", "hasCreateAndDestroy") != NULL); } // TODO: tests for add(), find() BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkGet) { BOOST_CHECK(F::get("urn:id_2") == NULL); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkRemove) { BOOST_CHECK_THROW(F::remove("urn:id_1"), error::plugin_not_found); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkRun) { typename F::PluginRunFunction f; BOOST_CHECK_THROW(F::run("urn:id_3", f), error::plugin_not_found); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkClear) { BOOST_CHECK_NO_THROW(F::clear()); } BOOST_AUTO_TEST_SUITE_END() /// fixture for unit tests on a plugin_manager with a plugin loaded class plugin_manager_with_plugin_loaded_F : public new_plugin_manager_F { public: plugin_manager_with_plugin_loaded_F() { BOOST_REQUIRE(load("urn:id_1", "hasCreateAndDestroy") != NULL); } ~plugin_manager_with_plugin_loaded_F() { } }; BOOST_AUTO_TEST_SUITE_FIXTURE_TEMPLATE(plugin_manager_with_plugin_loaded_S, boost::mpl::list) BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkEmptyIsFalse) { BOOST_CHECK(!F::empty()); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkLoadSecondPlugin) { BOOST_CHECK(F::load("urn:id_2", "hasCreateAndDestroy") != NULL); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkLoadSecondPluginWithSameId) { BOOST_CHECK_THROW(F::load("urn:id_1", "hasCreateAndDestroy"), error::duplicate_plugin); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkGet) { BOOST_CHECK(F::get("urn:id_1") != NULL); BOOST_CHECK(F::get("urn:id_2") == NULL); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkRemove) { BOOST_CHECK_NO_THROW(F::remove("urn:id_1")); BOOST_CHECK(F::empty()); } BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkClear) { BOOST_CHECK_NO_THROW(F::clear()); BOOST_CHECK(F::empty()); } // TODO: tests for add(), find(), run() BOOST_AUTO_TEST_SUITE_END() #endif // PION_STATIC_LINKING pion-5.0.4+dfsg.orig/tests/tcp_stream_tests.cpp0000644000372000001440000001377112215647065021207 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include #include using namespace std; using namespace pion; /// /// tcp_stream_tests_F: fixture used for performing tcp::stream tests /// class tcp_stream_tests_F { public: /// data type for a function that handles tcp::stream connections typedef boost::function1 connection_handler; // default constructor and destructor tcp_stream_tests_F() { } virtual ~tcp_stream_tests_F() {} /** * listen for a TCP connection and call the connection handler when connected * * @param conn_handler function to call after a connection is established */ void acceptConnection(connection_handler conn_handler) { // configure the acceptor service boost::asio::ip::tcp::acceptor tcp_acceptor(m_scheduler.get_io_service()); boost::asio::ip::tcp::endpoint tcp_endpoint(boost::asio::ip::tcp::v4(), 0); tcp_acceptor.open(tcp_endpoint.protocol()); // allow the acceptor to reuse the address (i.e. SO_REUSEADDR) tcp_acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); tcp_acceptor.bind(tcp_endpoint); tcp_acceptor.listen(); // notify test thread that we are ready to accept a connection { // wait for test thread to be waiting on the signal boost::unique_lock accept_lock(m_accept_mutex); // trigger signal to wake test thread m_port = tcp_acceptor.local_endpoint().port(); m_accept_ready.notify_one(); } // schedule another thread to listen for a TCP connection tcp::stream listener_stream(m_scheduler.get_io_service()); boost::system::error_code ec = listener_stream.accept(tcp_acceptor); tcp_acceptor.close(); BOOST_REQUIRE(! ec); // call the connection handler conn_handler(listener_stream); } /// sends a "Hello" to a tcp::stream static void sendHello(tcp::stream& str) { str << "Hello" << std::endl; str.flush(); } /// port where acceptor listens int m_port; /// used to schedule work across multiple threads single_service_scheduler m_scheduler; /// used to notify test thread when acceptConnection() is ready boost::condition m_accept_ready; /// used to sync test thread with acceptConnection() boost::mutex m_accept_mutex; }; // tcp::stream Test Cases BOOST_FIXTURE_TEST_SUITE(tcp_stream_tests_S, tcp_stream_tests_F) BOOST_AUTO_TEST_CASE(checkTCPConnectToAnotherStream) { boost::unique_lock accept_lock(m_accept_mutex); // schedule another thread to listen for a TCP connection connection_handler conn_handler(boost::bind(&tcp_stream_tests_F::sendHello, _1)); boost::thread listener_thread(boost::bind(&tcp_stream_tests_F::acceptConnection, this, conn_handler) ); m_scheduler.add_active_user(); m_accept_ready.wait(accept_lock); // connect to the listener tcp::stream client_str(m_scheduler.get_io_service()); boost::system::error_code ec; ec = client_str.connect(boost::asio::ip::address::from_string("127.0.0.1"), m_port); BOOST_REQUIRE(! ec); // get the hello message std::string response_msg; client_str >> response_msg; BOOST_CHECK_EQUAL(response_msg, "Hello"); client_str.close(); listener_thread.join(); m_scheduler.remove_active_user(); } BOOST_AUTO_TEST_SUITE_END() #define BIG_BUF_SIZE (12 * 1024) /// /// tcp_stream_buffer_tests_F: fixture that includes a big data buffer used for tests /// class tcp_stream_buffer_tests_F : public tcp_stream_tests_F { public: // default constructor and destructor tcp_stream_buffer_tests_F() { // fill the buffer with non-random characters for (unsigned long n = 0; n < BIG_BUF_SIZE; ++n) { m_big_buf[n] = char(n); } } virtual ~tcp_stream_buffer_tests_F() {} /// sends the big buffer contents to a tcp::stream void sendBigBuffer(tcp::stream& str) { str.write(m_big_buf, BIG_BUF_SIZE); str.flush(); } /// big data buffer used for the tests char m_big_buf[BIG_BUF_SIZE]; }; BOOST_FIXTURE_TEST_SUITE(tcp_stream_buffer_tests_S, tcp_stream_buffer_tests_F) BOOST_AUTO_TEST_CASE(checkSendAndReceiveBiggerThanBuffers) { boost::unique_lock accept_lock(m_accept_mutex); // schedule another thread to listen for a TCP connection connection_handler conn_handler(boost::bind(&tcp_stream_buffer_tests_F::sendBigBuffer, this, _1)); boost::thread listener_thread(boost::bind(&tcp_stream_buffer_tests_F::acceptConnection, this, conn_handler) ); m_scheduler.add_active_user(); m_accept_ready.wait(accept_lock); // connect to the listener tcp::stream client_str(m_scheduler.get_io_service()); boost::system::error_code ec; ec = client_str.connect(boost::asio::ip::address::from_string("127.0.0.1"), m_port); BOOST_REQUIRE(! ec); // read the big buffer contents char another_buf[BIG_BUF_SIZE]; BOOST_REQUIRE(client_str.read(another_buf, BIG_BUF_SIZE)); BOOST_CHECK_EQUAL(memcmp(m_big_buf, another_buf, BIG_BUF_SIZE), 0); client_str.close(); listener_thread.join(); m_scheduler.remove_active_user(); } BOOST_AUTO_TEST_SUITE_END() pion-5.0.4+dfsg.orig/tests/algorithm_tests.cpp0000644000372000001440000003527012215647065021032 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include using namespace pion; BOOST_AUTO_TEST_CASE(testURLEncoding) { BOOST_CHECK_EQUAL(algorithm::url_encode("hello world"), "hello%20world"); BOOST_CHECK_EQUAL(algorithm::url_encode("He said, \"Hello, World!\""), "He%20said%2C%20%22Hello%2C%20World!%22"); } BOOST_AUTO_TEST_CASE(testURLEncodingOfStringWithNegativeCharacter) { std::string s = "abcde"; s[0] = -30; BOOST_CHECK_EQUAL(algorithm::url_encode(s), "%E2bcde"); } BOOST_AUTO_TEST_CASE(checkXmlEncodeWithAlphanumericString) { BOOST_CHECK_EQUAL("Freedom7", algorithm::xml_encode("Freedom7")); } BOOST_AUTO_TEST_CASE(checkXmlEncodeWithAmpersand) { BOOST_CHECK_EQUAL("A&P", algorithm::xml_encode("A&P")); } BOOST_AUTO_TEST_CASE(checkXmlEncodeWithVariousSpecialXmlCharacters) { BOOST_CHECK_EQUAL(""1" < "2" && 'b' > 'a'", algorithm::xml_encode("\"1\" < \"2\" && 'b' > 'a'")); } // UTF-8 replacement character const std::string RC = "\xEF\xBF\xBD"; BOOST_AUTO_TEST_CASE(checkXmlEncodeWithControlCharacters) { char cc_array_1[] = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"; char cc_array_2[] = "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"; std::string cc_str_1(cc_array_1, 16); std::string cc_str_2(cc_array_2, 16); std::string expected_output_1 = RC + RC + RC + RC + RC + RC + RC + RC + RC + "\x09\x0A" + RC + RC + "\x0D" + RC + RC; std::string expected_output_2 = RC + RC + RC + RC + RC + RC + RC + RC + RC + RC + RC + RC + RC + RC + RC + RC; BOOST_CHECK_EQUAL(expected_output_1, algorithm::xml_encode(cc_str_1)); BOOST_CHECK_EQUAL(expected_output_2, algorithm::xml_encode(cc_str_2)); } BOOST_AUTO_TEST_CASE(checkXmlEncodeWithValidUtf8TwoByteSequences) { const char UTF8_ENCODED_TEST_CHAR_ARRAY[] = { (char)0xCE, (char)0xB1, // UTF-8 encoding of U+03B1 (GREEK SMALL LETTER ALPHA) 0x3D, // '=' 0x31, // '1' 0x20, // space (char)0xCE, (char)0xB2, // UTF-8 encoding of U+03B2 (GREEK SMALL LETTER BETA) 0x3D, // '=' 0x32}; // '2' const std::string UTF8_ENCODED_TEST_STRING(UTF8_ENCODED_TEST_CHAR_ARRAY, sizeof(UTF8_ENCODED_TEST_CHAR_ARRAY)); BOOST_CHECK_EQUAL(UTF8_ENCODED_TEST_STRING, algorithm::xml_encode(UTF8_ENCODED_TEST_STRING)); } BOOST_AUTO_TEST_CASE(checkXmlEncodeWithValidUtf8ThreeByteSequences) { const char UTF8_ENCODED_TEST_CHAR_ARRAY[] = { (char)0xE2, (char)0x82, (char)0xA4, // UTF-8 encoding of U+20A4 (LIRA SIGN) 0x32, // '2' 0x3D, // '=' (char)0xE2, (char)0x82, (char)0xA8, // UTF-8 encoding of U+20A8 (RUPEE SIGN) 0x32}; // '3' const std::string UTF8_ENCODED_TEST_STRING(UTF8_ENCODED_TEST_CHAR_ARRAY, sizeof(UTF8_ENCODED_TEST_CHAR_ARRAY)); BOOST_CHECK_EQUAL(UTF8_ENCODED_TEST_STRING, algorithm::xml_encode(UTF8_ENCODED_TEST_STRING)); } BOOST_AUTO_TEST_CASE(checkXmlEncodeWithValidUtf8FourByteSequences) { char UTF8_ENCODED_TEST_CHAR_ARRAY[] = { (char)0xF0, (char)0x90, (char)0x82, (char)0x88, // UTF-8 encoding of U+10088 (LINEAR B IDEOGRAM B107F SHE-GOAT) (char)0xE2, (char)0x82, (char)0xA8, // UTF-8 encoding of U+2260 (NOT EQUAL TO) (char)0xF0, (char)0x90, (char)0x82, (char)0x89}; // UTF-8 encoding of U+10089 (LINEAR B IDEOGRAM B107M HE-GOAT) const std::string UTF8_ENCODED_TEST_STRING(UTF8_ENCODED_TEST_CHAR_ARRAY, sizeof(UTF8_ENCODED_TEST_CHAR_ARRAY)); BOOST_CHECK_EQUAL(UTF8_ENCODED_TEST_STRING, algorithm::xml_encode(UTF8_ENCODED_TEST_STRING)); } // Any isolated high byte (i.e. > x7F) is invalid, but they are invalid for a variety of reasons. BOOST_AUTO_TEST_CASE(checkXmlEncodeWithInvalidSingleHighByte) { // These are invalid because the second byte is > x7F and is not allowed as the first byte of a UTF-8 multi-byte sequence. BOOST_CHECK_EQUAL("=" + RC + "=", algorithm::xml_encode("=\x80=")); BOOST_CHECK_EQUAL("=" + RC + "=", algorithm::xml_encode("=\xBF=")); BOOST_CHECK_EQUAL("=" + RC + "=", algorithm::xml_encode("=\xC0=")); BOOST_CHECK_EQUAL("=" + RC + "=", algorithm::xml_encode("=\xC1=")); BOOST_CHECK_EQUAL("=" + RC + "=", algorithm::xml_encode("=\xF5=")); BOOST_CHECK_EQUAL("=" + RC + "=", algorithm::xml_encode("=\xFF=")); // These are invalid because the second byte is the first byte of a UTF-8 2-byte sequence, but isn't followed by a valid second byte. BOOST_CHECK_EQUAL("=" + RC + "=", algorithm::xml_encode("=\xC2=")); BOOST_CHECK_EQUAL("=" + RC + "=", algorithm::xml_encode("=\xDF=")); // These are invalid because the second byte is the first byte of a UTF-8 3-byte sequence, but isn't followed by a valid second byte. BOOST_CHECK_EQUAL("=" + RC + "=", algorithm::xml_encode("=\xE0=")); BOOST_CHECK_EQUAL("=" + RC + "=", algorithm::xml_encode("=\xEF=")); // These are invalid because the second byte is the first byte of a UTF-8 4-byte sequence, but isn't followed by a valid second byte. BOOST_CHECK_EQUAL("=" + RC + "=", algorithm::xml_encode("=\xF0=")); BOOST_CHECK_EQUAL("=" + RC + "=", algorithm::xml_encode("=\xF4=")); } BOOST_AUTO_TEST_CASE(checkXmlEncodeWithInvalidTwoHighByteSequence) { // These are invalid because the second byte is the first byte of a UTF-8 2-byte sequence, but isn't followed by a valid second byte. BOOST_CHECK_EQUAL("=" + RC + RC + "=", algorithm::xml_encode("=\xC2\xC0=")); BOOST_CHECK_EQUAL("=" + RC + RC + "=", algorithm::xml_encode("=\xDF\xFF=")); // These are invalid because bytes 2 & 3 are the first and second bytes of a UTF-8 3-byte sequence, but aren't followed by a valid third byte. BOOST_CHECK_EQUAL("=" + RC + RC + "=", algorithm::xml_encode("=\xE0\x80=")); BOOST_CHECK_EQUAL("=" + RC + RC + "=", algorithm::xml_encode("=\xEF\xBF=")); // These are invalid because bytes 2 & 3 are the first and second bytes of a UTF-8 4-byte sequence, but aren't followed by a valid third byte. BOOST_CHECK_EQUAL("=" + RC + RC + "=", algorithm::xml_encode("=\xF0\x80=")); BOOST_CHECK_EQUAL("=" + RC + RC + "=", algorithm::xml_encode("=\xF4\xBF=")); } BOOST_AUTO_TEST_CASE(checkXmlEncodeWithInvalidThreeHighByteSequence) { // These are invalid because bytes 2 & 3 are the first and second bytes of a UTF-8 3-byte sequence, but aren't followed by a valid third byte. BOOST_CHECK_EQUAL("=" + RC + RC + RC + "=", algorithm::xml_encode("=\xE0\x80\xC0=")); BOOST_CHECK_EQUAL("=" + RC + RC + RC + "=", algorithm::xml_encode("=\xEF\xBF\xFF=")); // These are invalid because bytes 2 & 3 are the first and second bytes of a UTF-8 4-byte sequence, but aren't followed by a valid third byte. BOOST_CHECK_EQUAL("=" + RC + RC + RC + "=", algorithm::xml_encode("=\xF0\x80\xC0=")); BOOST_CHECK_EQUAL("=" + RC + RC + RC + "=", algorithm::xml_encode("=\xF4\xBF\xFF=")); } BOOST_AUTO_TEST_CASE(checkXmlEncodeWithInvalidFourHighByteSequence) { // These are invalid because bytes 2-4 are the first, second and third bytes of a UTF-8 4-byte sequence, but aren't followed by a valid fourth byte. BOOST_CHECK_EQUAL("=" + RC + RC + RC + RC + "=", algorithm::xml_encode("=\xF0\x80\x80\xC0=")); BOOST_CHECK_EQUAL("=" + RC + RC + RC + RC + "=", algorithm::xml_encode("=\xF4\xBF\xBF\xFF=")); } BOOST_AUTO_TEST_CASE(testBase64Routines) { std::string original; std::string original_base64; std::string encoded; std::string decoded; original = "mike:123456"; original_base64 = "bWlrZToxMjM0NTY="; BOOST_CHECK(algorithm::base64_encode(original,encoded)); BOOST_CHECK(encoded == original_base64); BOOST_CHECK(algorithm::base64_decode(encoded,decoded)); BOOST_CHECK(decoded == original); original = "mike:12345"; BOOST_CHECK(algorithm::base64_encode(original,encoded)); BOOST_CHECK(algorithm::base64_decode(encoded,decoded)); BOOST_CHECK(decoded == original); original = "mike:1234"; BOOST_CHECK(algorithm::base64_encode(original,encoded)); BOOST_CHECK(algorithm::base64_decode(encoded,decoded)); BOOST_CHECK(decoded == original); original = "mike:123"; BOOST_CHECK(algorithm::base64_encode(original,encoded)); BOOST_CHECK(algorithm::base64_decode(encoded,decoded)); BOOST_CHECK(decoded == original); const char *ptr = "mike\0123\0\0"; original.assign(ptr, 10); BOOST_CHECK(algorithm::base64_encode(original,encoded)); BOOST_CHECK(algorithm::base64_decode(encoded,decoded)); BOOST_CHECK_EQUAL(decoded.size(), 10U); BOOST_CHECK_EQUAL(memcmp(decoded.c_str(), ptr, 10), 0); } BOOST_AUTO_TEST_CASE(testCharFromToIntRoutines) { char buf[8]; algorithm::from_uint8(buf, 129U); BOOST_CHECK_EQUAL(buf[0], (char)0x81); BOOST_CHECK_EQUAL(algorithm::to_int8(buf), boost::int8_t(0x81)); BOOST_CHECK_EQUAL(algorithm::to_uint8(buf), 129U); algorithm::from_uint16(buf, 32769U); BOOST_CHECK_EQUAL(buf[0], (char)0x80); BOOST_CHECK_EQUAL(buf[1], (char)0x01); BOOST_CHECK_EQUAL(algorithm::to_int16(buf), boost::int16_t(0x8001)); BOOST_CHECK_EQUAL(algorithm::to_uint16(buf), 32769U); algorithm::from_uint24(buf, 9642497U); BOOST_CHECK_EQUAL(buf[0], (char)0x93); BOOST_CHECK_EQUAL(buf[1], (char)0x22); BOOST_CHECK_EQUAL(buf[2], (char)0x01); BOOST_CHECK_EQUAL(algorithm::to_int24(buf), boost::int32_t(0x932201)); BOOST_CHECK_EQUAL(algorithm::to_uint24(buf), 9642497U); algorithm::from_uint32(buf, 2147680769UL); BOOST_CHECK_EQUAL(buf[0], (char)0x80); BOOST_CHECK_EQUAL(buf[1], (char)0x03); BOOST_CHECK_EQUAL(buf[2], (char)0x02); BOOST_CHECK_EQUAL(buf[3], (char)0x01); BOOST_CHECK_EQUAL(algorithm::to_int32(buf), boost::int32_t(0x80030201)); BOOST_CHECK_EQUAL(algorithm::to_uint32(buf), 2147680769UL); algorithm::from_uint32(buf, 1427U); BOOST_CHECK_EQUAL(buf[0], (char)0x00); BOOST_CHECK_EQUAL(buf[1], (char)0x00); BOOST_CHECK_EQUAL(buf[2], (char)0x05); BOOST_CHECK_EQUAL(buf[3], (char)0x93); BOOST_CHECK_EQUAL(algorithm::to_int32(buf), boost::int32_t(0x00000593)); BOOST_CHECK_EQUAL(algorithm::to_uint32(buf), 1427U); algorithm::from_uint64(buf, 9223378168241586176ULL); BOOST_CHECK_EQUAL(buf[0], (char)0x80); BOOST_CHECK_EQUAL(buf[1], (char)0x00); BOOST_CHECK_EQUAL(buf[2], (char)0x05); BOOST_CHECK_EQUAL(buf[3], (char)0x93); BOOST_CHECK_EQUAL(buf[4], (char)0x93); BOOST_CHECK_EQUAL(buf[5], (char)0x22); BOOST_CHECK_EQUAL(buf[6], (char)0x00); BOOST_CHECK_EQUAL(buf[7], (char)0x00); BOOST_CHECK_EQUAL(algorithm::to_int64(buf), boost::int64_t(0x8000059393220000ULL)); BOOST_CHECK_EQUAL(algorithm::to_uint64(buf), 9223378168241586176ULL); } BOOST_AUTO_TEST_CASE(testCharFromToFloatRoutines) { char buf[16]; algorithm::from_float(buf, 0.0); BOOST_CHECK_EQUAL(buf[0], (char)0x00); BOOST_CHECK_EQUAL(buf[1], (char)0x00); BOOST_CHECK_EQUAL(buf[2], (char)0x00); BOOST_CHECK_EQUAL(buf[3], (char)0x00); BOOST_CHECK_EQUAL(algorithm::to_float(buf), 0.0); algorithm::from_float(buf, -13021.0); BOOST_CHECK_EQUAL(buf[0], (char)0xc6); BOOST_CHECK_EQUAL(buf[1], (char)0x4b); BOOST_CHECK_EQUAL(buf[2], (char)0x74); BOOST_CHECK_EQUAL(buf[3], (char)0x00); BOOST_CHECK_EQUAL(algorithm::to_float(buf), -13021.0); algorithm::from_float(buf, 12.375); BOOST_CHECK_EQUAL(buf[0], (char)0x41); BOOST_CHECK_EQUAL(buf[1], (char)0x46); BOOST_CHECK_EQUAL(buf[2], (char)0x00); BOOST_CHECK_EQUAL(buf[3], (char)0x00); BOOST_CHECK_EQUAL(algorithm::to_float(buf), 12.375); algorithm::from_float(buf, 1); BOOST_CHECK_EQUAL(buf[0], (char)0x3f); BOOST_CHECK_EQUAL(buf[1], (char)0x80); BOOST_CHECK_EQUAL(buf[2], (char)0x00); BOOST_CHECK_EQUAL(buf[3], (char)0x00); BOOST_CHECK_EQUAL(algorithm::to_float(buf), 1.0); algorithm::from_float(buf, 0.25); BOOST_CHECK_EQUAL(buf[0], (char)0x3e); BOOST_CHECK_EQUAL(buf[1], (char)0x80); BOOST_CHECK_EQUAL(buf[2], (char)0x00); BOOST_CHECK_EQUAL(buf[3], (char)0x00); BOOST_CHECK_EQUAL(algorithm::to_float(buf), 0.25); algorithm::from_float(buf, 0.375); BOOST_CHECK_EQUAL(buf[0], (char)0x3e); BOOST_CHECK_EQUAL(buf[1], (char)0xc0); BOOST_CHECK_EQUAL(buf[2], (char)0x00); BOOST_CHECK_EQUAL(buf[3], (char)0x00); BOOST_CHECK_EQUAL(algorithm::to_float(buf), 0.375); algorithm::from_double(buf, 0); BOOST_CHECK_EQUAL(algorithm::to_double(buf), 0); algorithm::from_double(buf, -13021.0); BOOST_CHECK_EQUAL(algorithm::to_double(buf), -13021.0); algorithm::from_double(buf, 12.375); BOOST_CHECK_EQUAL(algorithm::to_double(buf), 12.375); algorithm::from_double(buf, 1); BOOST_CHECK_EQUAL(algorithm::to_double(buf), 1.0); algorithm::from_double(buf, 0.25); BOOST_CHECK_EQUAL(algorithm::to_double(buf), 0.25); algorithm::from_double(buf, 0.375); BOOST_CHECK_EQUAL(algorithm::to_double(buf), 0.375); algorithm::from_double(buf, 1.0123456789012345e-300); BOOST_CHECK_EQUAL(algorithm::to_double(buf), 1.0123456789012345e-300); algorithm::from_double(buf, 1.0123456789012345e+300); BOOST_CHECK_EQUAL(algorithm::to_double(buf), 1.0123456789012345e+300); algorithm::from_long_double(buf, 0); BOOST_CHECK_EQUAL(algorithm::to_long_double(buf), 0); algorithm::from_long_double(buf, -13021.0); BOOST_CHECK_EQUAL(algorithm::to_long_double(buf), -13021.0); algorithm::from_long_double(buf, 12.375); BOOST_CHECK_EQUAL(algorithm::to_long_double(buf), 12.375); algorithm::from_long_double(buf, 1); BOOST_CHECK_EQUAL(algorithm::to_long_double(buf), 1.0); algorithm::from_long_double(buf, 0.25); BOOST_CHECK_EQUAL(algorithm::to_long_double(buf), 0.25); algorithm::from_long_double(buf, 0.375); BOOST_CHECK_EQUAL(algorithm::to_long_double(buf), 0.375); algorithm::from_long_double(buf, 1.0123456789012345e-300); BOOST_CHECK_EQUAL(algorithm::to_long_double(buf), 1.0123456789012345e-300); algorithm::from_long_double(buf, 1.0123456789012345e+300); BOOST_CHECK_EQUAL(algorithm::to_long_double(buf), 1.0123456789012345e+300); } pion-5.0.4+dfsg.orig/tests/config/0000755000372000001440000000000012215647065016354 5ustar robertouserspion-5.0.4+dfsg.orig/tests/config/testservices.conf0000644000372000001440000000241012215647065021743 0ustar robertousers## ## Simple configuration file to test pion-net web services ## ## Adds path to compiled web services built from source tarball ## path ../services/.libs path ../bin/Debug ## Hello World Service ## service /hello HelloService ## Service to echo requests ## service /echo EchoService ## Service to display & update cookies ## service /cookie CookieService ## Service to display log events ## service /log LogService ## Service to serve sample pion-net documentation ## service /doc FileService option /doc directory=../tests/doc/html option /doc file=../tests/doc/html/index.html option /doc cache=2 option /doc scan=3 ## Use testservices.html as an index page ## service /index.html FileService option /index.html file=../utils/testservices.html ## service / FileService option / file=../utils/testservices.html ## Service to demonstrate Authentication interface ## service /auth EchoService ## ## define type of authentication ## ## MUST be a first command in configuration file ## auth type can be defined once and only once! ## auth cookie ## ## Add /auth resource to set of password protected ## restrict /auth ## ## Add /protected resource to set of password protected ## restrict /protected ## ## define user ## user stas 123456 ## ## define user ## user mike 123456 pion-5.0.4+dfsg.orig/tests/file_service_tests.cpp0000644000372000001440000006625312215647065021510 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace pion; PION_DECLARE_PLUGIN(FileService) #if defined(PION_XCODE) static const std::string PATH_TO_PLUGINS("../bin/Debug"); #else // same for Unix and Windows static const std::string PATH_TO_PLUGINS("../services/.libs"); #endif struct PluginPtrWithFileServiceLoaded_F : public plugin_ptr { PluginPtrWithFileServiceLoaded_F() { plugin::reset_plugin_directories(); #ifndef PION_STATIC_LINKING plugin::add_plugin_directory(PATH_TO_PLUGINS); #endif s = NULL; open("FileService"); } ~PluginPtrWithFileServiceLoaded_F() { if (s) destroy(s); } http::plugin_service* s; }; BOOST_FIXTURE_TEST_SUITE(PluginPtrWithFileServiceLoaded_S, PluginPtrWithFileServiceLoaded_F) BOOST_AUTO_TEST_CASE(checkIsOpenReturnsTrue) { BOOST_CHECK(is_open()); } BOOST_AUTO_TEST_CASE(checkGetPluginNameReturnsPluginName) { BOOST_CHECK_EQUAL(get_plugin_name(), "FileService"); } BOOST_AUTO_TEST_CASE(checkCreateReturnsSomething) { BOOST_CHECK((s = create()) != NULL); } BOOST_AUTO_TEST_CASE(checkDestroyDoesntThrowExceptionAfterCreate) { s = create(); BOOST_CHECK_NO_THROW(destroy(s)); s = NULL; } BOOST_AUTO_TEST_SUITE_END() class NewlyLoadedFileService_F { public: NewlyLoadedFileService_F() : m_scheduler(), m_server(m_scheduler) { plugin::reset_plugin_directories(); #ifndef PION_STATIC_LINKING plugin::add_plugin_directory(PATH_TO_PLUGINS); #endif boost::filesystem::remove_all("sandbox"); BOOST_REQUIRE(boost::filesystem::create_directory("sandbox")); boost::filesystem::ofstream file1("sandbox/file1"); file1 << "abc" << std::endl; file1.close(); boost::filesystem::ofstream file2("sandbox/file2"); file2 << "xyz" << std::endl; file2.close(); boost::filesystem::ofstream emptyFile("sandbox/emptyFile"); emptyFile.close(); BOOST_REQUIRE(boost::filesystem::create_directory("sandbox/dir1")); boost::filesystem::ofstream file4("sandbox/dir1/file4"); file4 << "123" << std::endl; file4.close(); m_server.load_service("/resource1", "FileService"); } ~NewlyLoadedFileService_F() { m_server.stop(); m_scheduler.shutdown(); boost::filesystem::remove_all("sandbox"); } inline boost::asio::io_service& get_io_service(void) { return m_scheduler.get_io_service(); } single_service_scheduler m_scheduler; http::plugin_server m_server; }; BOOST_FIXTURE_TEST_SUITE(NewlyLoadedFileService_S, NewlyLoadedFileService_F) BOOST_AUTO_TEST_CASE(checkSetServiceOptionDirectoryWithExistingDirectoryDoesntThrow) { BOOST_CHECK_NO_THROW(m_server.set_service_option("/resource1", "directory", "sandbox")); } BOOST_AUTO_TEST_CASE(checkSetServiceOptionDirectoryWithNonexistentDirectoryThrows) { BOOST_CHECK_THROW(m_server.set_service_option("/resource1", "directory", "NotADirectory"), error::directory_not_found); } BOOST_AUTO_TEST_CASE(checkSetServiceOptionFileWithExistingFileDoesntThrow) { BOOST_CHECK_NO_THROW(m_server.set_service_option("/resource1", "file", "sandbox/file1")); } BOOST_AUTO_TEST_CASE(checkSetServiceOptionFileWithNonexistentFileThrows) { BOOST_CHECK_THROW(m_server.set_service_option("/resource1", "file", "NotAFile"), error::file_not_found); } // TODO: tests for options "cache" and "scan" BOOST_AUTO_TEST_CASE(checkSetServiceOptionMaxChunkSizeWithSizeZeroThrows) { BOOST_CHECK_NO_THROW(m_server.set_service_option("/resource1", "max_chunk_size", "0")); } BOOST_AUTO_TEST_CASE(checkSetServiceOptionMaxChunkSizeWithNonZeroSizeDoesntThrow) { BOOST_CHECK_NO_THROW(m_server.set_service_option("/resource1", "max_chunk_size", "100")); } BOOST_AUTO_TEST_CASE(checkSetServiceOptionWritableToTrueDoesntThrow) { BOOST_CHECK_NO_THROW(m_server.set_service_option("/resource1", "writable", "true")); } BOOST_AUTO_TEST_CASE(checkSetServiceOptionWritableToFalseDoesntThrow) { BOOST_CHECK_NO_THROW(m_server.set_service_option("/resource1", "writable", "false")); } BOOST_AUTO_TEST_CASE(checkSetServiceOptionWritableToNonBooleanThrows) { BOOST_REQUIRE_THROW(m_server.set_service_option("/resource1", "writable", "3"), error::bad_arg); } BOOST_AUTO_TEST_CASE(checkSetServiceOptionWithInvalidOptionNameThrows) { BOOST_CHECK_THROW(m_server.set_service_option("/resource1", "NotAnOption", "value1"), error::bad_arg); } BOOST_AUTO_TEST_SUITE_END() class RunningFileService_F : public NewlyLoadedFileService_F { public: RunningFileService_F() { m_content_length = 0; m_server.set_service_option("/resource1", "directory", "sandbox"); m_server.set_service_option("/resource1", "file", "sandbox/file1"); m_server.start(); // open a connection boost::asio::ip::tcp::endpoint http_endpoint(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); m_http_stream.connect(http_endpoint); } ~RunningFileService_F() { } /** * sends a request to the local HTTP server * * @param request_method e.g., HEAD, GET, POST * @param resource name of the HTTP resource to request * @param expected_response_code expected status code of the response */ inline void sendRequestAndCheckResponseHead(const std::string& request_method, const std::string& resource, unsigned int expected_response_code = 200) { // send HTTP request to the server m_http_stream << request_method << " " << resource << " HTTP/1.1" << http::types::STRING_CRLF << http::types::STRING_CRLF; m_http_stream.flush(); checkResponseHead(expected_response_code); } /** * check status line and headers of response * * @param expected_response_code expected status code of the response */ inline void checkResponseHead(unsigned int expected_response_code = 200) { const boost::regex regex_get_response_code("^HTTP/1\\.1\\s(\\d+)\\s.*"); const boost::regex regex_response_header("(^[A-Za-z0-9_-]+):\\s*(.*)\\r"); const boost::regex regex_content_length_header("^Content-Length:\\s(\\d+).*", boost::regex::icase); const boost::regex regex_response_end("^\\s*$"); // receive status line from the server std::string rsp_line; boost::smatch rx_matches; unsigned int response_code = 0; BOOST_REQUIRE(std::getline(m_http_stream, rsp_line)); BOOST_REQUIRE(boost::regex_match(rsp_line, rx_matches, regex_get_response_code)); BOOST_REQUIRE(rx_matches.size() == 2); // extract response status code response_code = boost::lexical_cast(rx_matches[1]); BOOST_CHECK_EQUAL(response_code, expected_response_code); // read response headers while (true) { BOOST_REQUIRE(std::getline(m_http_stream, rsp_line)); // check for end of response headers (empty line) if (boost::regex_match(rsp_line, rx_matches, regex_response_end)) break; // check validity of response header BOOST_REQUIRE(boost::regex_match(rsp_line, rx_matches, regex_response_header)); m_response_headers[rx_matches[1]] = rx_matches[2]; // check for content-length response header if (boost::regex_match(rsp_line, rx_matches, regex_content_length_header)) { if (rx_matches.size() == 2) m_content_length = boost::lexical_cast(rx_matches[1]); } } // Responses with status-code 201 (Created) must have a Location header. if (response_code == 201) { BOOST_CHECK(m_response_headers.find("Location") != m_response_headers.end()); } // Responses with status-code 405 (Method Not Allowed) must have an Allow header. if (response_code == 405) { BOOST_CHECK(m_response_headers.find("Allow") != m_response_headers.end()); } // TODO: Any headers that are always required for specific status-codes should be checked here. } inline void sendRequestWithContent(const std::string& request_method, const std::string& resource, const std::string& content) { // send HTTP request to the server m_http_stream << request_method << " " << resource << " HTTP/1.1" << http::types::STRING_CRLF; m_http_stream << "Content-Length: " << content.size() << http::types::STRING_CRLF << http::types::STRING_CRLF << content; m_http_stream.flush(); } /** * checks response content validity for the local HTTP server * * @param content_regex regex that the response content should match */ inline void checkWebServerResponseContent(const boost::regex& content_regex) { BOOST_CHECK(m_content_length > 0); // read in the response content boost::scoped_array content_buf(new char[m_content_length + 1]); BOOST_CHECK(m_http_stream.read(content_buf.get(), m_content_length)); content_buf[m_content_length] = '\0'; // check the response content BOOST_CHECK(boost::regex_match(content_buf.get(), content_regex)); } unsigned long m_content_length; boost::asio::ip::tcp::iostream m_http_stream; std::map m_response_headers; }; BOOST_FIXTURE_TEST_SUITE(RunningFileService_S, RunningFileService_F) BOOST_AUTO_TEST_CASE(checkResponseToGetRequestForDefaultFile) { sendRequestAndCheckResponseHead("GET", "/resource1"); checkWebServerResponseContent(boost::regex("abc\\s*")); } BOOST_AUTO_TEST_CASE(checkResponseToHeadRequestForDefaultFile) { sendRequestAndCheckResponseHead("HEAD", "/resource1"); BOOST_CHECK(m_content_length == 0); } BOOST_AUTO_TEST_CASE(checkResponseToGetRequestForDefaultFileAfterDeletingIt) { boost::filesystem::remove("sandbox/file1"); sendRequestAndCheckResponseHead("GET", "/resource1", 404); checkWebServerResponseContent(boost::regex(".*404\\sNot\\sFound.*")); } BOOST_AUTO_TEST_CASE(checkResponseToHeadRequestForDefaultFileAfterDeletingIt) { boost::filesystem::remove("sandbox/file1"); sendRequestAndCheckResponseHead("HEAD", "/resource1", 404); BOOST_CHECK(m_content_length == 0); } BOOST_AUTO_TEST_CASE(checkResponseToGetRequestForSpecifiedFile) { sendRequestAndCheckResponseHead("GET", "/resource1/file2"); checkWebServerResponseContent(boost::regex("xyz\\s*")); } BOOST_AUTO_TEST_CASE(checkResponseToGetRequestForEmptyFile) { sendRequestAndCheckResponseHead("GET", "/resource1/emptyFile"); BOOST_CHECK(m_content_length == 0); } BOOST_AUTO_TEST_CASE(checkResponseToGetRequestForNonexistentFile) { sendRequestAndCheckResponseHead("GET", "/resource1/file3", 404); checkWebServerResponseContent(boost::regex(".*404\\sNot\\sFound.*")); } BOOST_AUTO_TEST_CASE(checkResponseToHeadRequestForNonexistentFile) { sendRequestAndCheckResponseHead("HEAD", "/resource1/file3", 404); BOOST_CHECK(m_content_length == 0); } BOOST_AUTO_TEST_CASE(checkResponseToGetRequestForDirectory) { sendRequestAndCheckResponseHead("GET", "/resource1/dir1", 403); checkWebServerResponseContent(boost::regex(".*403\\sForbidden.*")); } BOOST_AUTO_TEST_CASE(checkResponseToHeadRequestForDirectory) { sendRequestAndCheckResponseHead("HEAD", "/resource1/dir1", 403); BOOST_CHECK(m_content_length == 0); } BOOST_AUTO_TEST_CASE(checkResponseToGetRequestForFileOutsideDirectory) { sendRequestAndCheckResponseHead("GET", "/resource1/../someFile", 403); checkWebServerResponseContent(boost::regex(".*403\\sForbidden.*")); } BOOST_AUTO_TEST_CASE(checkResponseToHeadRequestForFileOutsideDirectory) { sendRequestAndCheckResponseHead("HEAD", "/resource1/../someFile", 403); BOOST_CHECK(m_content_length == 0); } BOOST_AUTO_TEST_CASE(checkResponseToPostRequestForDefaultFile) { sendRequestAndCheckResponseHead("POST", "/resource1", 405); checkWebServerResponseContent(boost::regex(".*405\\sMethod\\sNot\\sAllowed.*")); } BOOST_AUTO_TEST_CASE(checkResponseToPostRequestForNonexistentFile) { sendRequestAndCheckResponseHead("POST", "/resource1/file3", 405); checkWebServerResponseContent(boost::regex(".*405\\sMethod\\sNot\\sAllowed.*")); } BOOST_AUTO_TEST_CASE(checkResponseToPutRequestForDefaultFile) { sendRequestAndCheckResponseHead("PUT", "/resource1", 405); checkWebServerResponseContent(boost::regex(".*405\\sMethod\\sNot\\sAllowed.*")); } BOOST_AUTO_TEST_CASE(checkResponseToPutRequestForNonexistentFile) { sendRequestAndCheckResponseHead("PUT", "/resource1/file3", 405); checkWebServerResponseContent(boost::regex(".*405\\sMethod\\sNot\\sAllowed.*")); } BOOST_AUTO_TEST_CASE(checkResponseToDeleteRequestForDefaultFile) { sendRequestAndCheckResponseHead("DELETE", "/resource1", 405); checkWebServerResponseContent(boost::regex(".*405\\sMethod\\sNot\\sAllowed.*")); } BOOST_AUTO_TEST_CASE(checkResponseToDeleteRequestForNonexistentFile) { sendRequestAndCheckResponseHead("DELETE", "/resource1/file3", 405); checkWebServerResponseContent(boost::regex(".*405\\sMethod\\sNot\\sAllowed.*")); } BOOST_AUTO_TEST_CASE(checkAllowHeader) { sendRequestAndCheckResponseHead("POST", "/resource1", 405); checkWebServerResponseContent(boost::regex(".*405\\sMethod\\sNot\\sAllowed.*")); BOOST_CHECK(boost::algorithm::find_first(m_response_headers["Allow"], "GET")); BOOST_CHECK(boost::algorithm::find_first(m_response_headers["Allow"], "HEAD")); BOOST_CHECK(!boost::algorithm::find_first(m_response_headers["Allow"], "PUT")); BOOST_CHECK(!boost::algorithm::find_first(m_response_headers["Allow"], "POST")); BOOST_CHECK(!boost::algorithm::find_first(m_response_headers["Allow"], "DELETE")); } BOOST_AUTO_TEST_CASE(checkResponseToTraceRequestForDefaultFile) { sendRequestAndCheckResponseHead("TRACE", "/resource1", 501); checkWebServerResponseContent(boost::regex(".*501\\sNot\\sImplemented.*")); } BOOST_AUTO_TEST_CASE(checkResponseToRequestWithBogusMethod) { sendRequestAndCheckResponseHead("BOGUS", "/resource1", 501); checkWebServerResponseContent(boost::regex(".*501\\sNot\\sImplemented.*")); } BOOST_AUTO_TEST_CASE(checkResponseToHTTP_1_0_Request) { m_http_stream << "GET /resource1 HTTP/1.0" << http::types::STRING_CRLF << http::types::STRING_CRLF; m_http_stream.flush(); checkResponseHead(200); checkWebServerResponseContent(boost::regex("abc\\s*")); } BOOST_AUTO_TEST_CASE(checkDirectoryOptionWithForwardSlash) { m_server.set_service_option("/resource1", "directory", "sandbox/dir1"); sendRequestAndCheckResponseHead("GET", "/resource1/file4"); checkWebServerResponseContent(boost::regex("123\\s*")); } #ifdef PION_WIN32 BOOST_AUTO_TEST_CASE(checkDirectoryOptionWithBackslash) { m_server.set_service_option("/resource1", "directory", "sandbox\\dir1"); sendRequestAndCheckResponseHead("GET", "/resource1/file4"); checkWebServerResponseContent(boost::regex("123\\s*")); } #endif BOOST_AUTO_TEST_SUITE_END() class RunningFileServiceWithWritingEnabled_F : public RunningFileService_F { public: RunningFileServiceWithWritingEnabled_F() { m_server.set_service_option("/resource1", "writable", "true"); } ~RunningFileServiceWithWritingEnabled_F() { } void checkFileContents(const std::string& filename, const std::string& expected_contents) { boost::filesystem::ifstream in(filename); std::string actual_contents; char c; while (in.get(c)) actual_contents += c; BOOST_CHECK_EQUAL(actual_contents, expected_contents); } }; BOOST_FIXTURE_TEST_SUITE(RunningFileServiceWithWritingEnabled_S, RunningFileServiceWithWritingEnabled_F) BOOST_AUTO_TEST_CASE(checkResponseToPostRequestForDefaultFile) { sendRequestWithContent("POST", "/resource1", "1234"); checkResponseHead(204); BOOST_CHECK(m_content_length == 0); checkFileContents("sandbox/file1", "abc\n1234"); } BOOST_AUTO_TEST_CASE(checkResponseToPostRequestForSpecifiedFile) { sendRequestWithContent("POST", "/resource1/file2", "1234\n"); checkResponseHead(204); BOOST_CHECK(m_content_length == 0); checkFileContents("sandbox/file2", "xyz\n1234\n"); } BOOST_AUTO_TEST_CASE(checkResponseToPostRequestForNonexistentFile) { sendRequestWithContent("POST", "/resource1/file3", "1234\n"); checkResponseHead(201); BOOST_CHECK_EQUAL(m_response_headers["Location"], "/resource1/file3"); checkWebServerResponseContent(boost::regex(".*201\\sCreated.*")); checkFileContents("sandbox/file3", "1234\n"); } BOOST_AUTO_TEST_CASE(checkResponseToPutRequestForDefaultFile) { sendRequestWithContent("PUT", "/resource1", "1234\n"); checkResponseHead(204); BOOST_CHECK(m_content_length == 0); checkFileContents("sandbox/file1", "1234\n"); } BOOST_AUTO_TEST_CASE(checkResponseToPutRequestForSpecifiedFile) { sendRequestWithContent("PUT", "/resource1/file2", "1234"); checkResponseHead(204); BOOST_CHECK(m_content_length == 0); checkFileContents("sandbox/file2", "1234"); } /* TODO: write a couple tests of PUT requests with header 'If-None-Match: *'. The response should be 412 (Precondition Failed) if the file exists, and 204 if it doesn't. */ BOOST_AUTO_TEST_CASE(checkResponseToPutRequestForNonexistentFile) { sendRequestWithContent("PUT", "/resource1/file3", "1234\n"); checkResponseHead(201); BOOST_CHECK_EQUAL(m_response_headers["Location"], "/resource1/file3"); checkWebServerResponseContent(boost::regex(".*201\\sCreated.*")); checkFileContents("sandbox/file3", "1234\n"); } BOOST_AUTO_TEST_CASE(checkResponseToPutRequestForFileInNonexistentDirectory) { sendRequestWithContent("PUT", "/resource1/dir2/file4", "1234"); checkResponseHead(404); checkWebServerResponseContent(boost::regex(".*404\\sNot Found.*")); } /* TODO: write tests for POST and PUT with a file that's not in the configured directory. */ /* TODO: write a test with a PUT request with no content and check that it throws an appropriate exception. Currently it crashes. */ BOOST_AUTO_TEST_CASE(checkResponseToDeleteRequestForDefaultFile) { sendRequestAndCheckResponseHead("DELETE", "/resource1", 204); BOOST_CHECK(m_content_length == 0); } BOOST_AUTO_TEST_CASE(checkResponseToDeleteRequestForSpecifiedFile) { sendRequestAndCheckResponseHead("DELETE", "/resource1/file2", 204); BOOST_CHECK(m_content_length == 0); BOOST_CHECK(!boost::filesystem::exists("sandbox/file2")); } BOOST_AUTO_TEST_CASE(checkResponseToDeleteRequestForNonexistentFile) { sendRequestAndCheckResponseHead("DELETE", "/resource1/file3", 404); checkWebServerResponseContent(boost::regex(".*404\\sNot\\sFound.*")); } BOOST_AUTO_TEST_CASE(checkResponseToDeleteRequestForDirectory) { sendRequestAndCheckResponseHead("DELETE", "/resource1/dir1", 403); checkWebServerResponseContent(boost::regex(".*403\\sForbidden.*")); } BOOST_AUTO_TEST_CASE(checkResponseToDeleteRequestForFileOutsideDirectory) { sendRequestAndCheckResponseHead("DELETE", "/resource1/../someFile", 403); checkWebServerResponseContent(boost::regex(".*403\\sForbidden.*")); } #if defined(PION_WIN32) && defined(_MSC_VER) // this test only works on Windows with MSVC BOOST_AUTO_TEST_CASE(checkResponseToDeleteRequestForOpenFile) { boost::filesystem::ofstream open_file("sandbox/file2"); sendRequestAndCheckResponseHead("DELETE", "/resource1/file2", 500); checkWebServerResponseContent(boost::regex(".*500\\sServer\\sError.*")); } #endif BOOST_AUTO_TEST_CASE(checkResponseToChunkedPutRequest) { m_http_stream << "PUT /resource1 HTTP/1.1" << http::types::STRING_CRLF; m_http_stream << http::types::HEADER_TRANSFER_ENCODING << ": chunked" << http::types::STRING_CRLF << http::types::STRING_CRLF; // write first chunk size m_http_stream << "A" << http::types::STRING_CRLF; // write first chunk m_http_stream << "abcdefghij" << http::types::STRING_CRLF; // write second chunk size m_http_stream << "5" << http::types::STRING_CRLF; // write second chunk m_http_stream << "klmno" << http::types::STRING_CRLF; // write final chunk size m_http_stream << "0" << http::types::STRING_CRLF; m_http_stream << http::types::STRING_CRLF; m_http_stream.flush(); checkResponseHead(204); BOOST_CHECK(m_content_length == 0); checkFileContents("sandbox/file1", "abcdefghijklmno"); } BOOST_AUTO_TEST_CASE(checkResponseToChunkedPostRequest) { m_http_stream << "POST /resource1 HTTP/1.1" << http::types::STRING_CRLF; m_http_stream << http::types::HEADER_TRANSFER_ENCODING << ": chunked" << http::types::STRING_CRLF << http::types::STRING_CRLF; // write first chunk size m_http_stream << "A" << http::types::STRING_CRLF; // write first chunk m_http_stream << "abcdefghij" << http::types::STRING_CRLF; // write second chunk size m_http_stream << "5" << http::types::STRING_CRLF; // write second chunk m_http_stream << "klmno" << http::types::STRING_CRLF; // write final chunk size m_http_stream << "0" << http::types::STRING_CRLF; m_http_stream << http::types::STRING_CRLF; m_http_stream.flush(); checkResponseHead(204); BOOST_CHECK(m_content_length == 0); checkFileContents("sandbox/file1", "abc\nabcdefghijklmno"); } BOOST_AUTO_TEST_SUITE_END() const char g_file4_contents[] = "012345678901234"; class RunningFileServiceWithMaxChunkSizeSet_F : public RunningFileService_F { public: enum _size_constants { MAX_CHUNK_SIZE = 10 }; RunningFileServiceWithMaxChunkSizeSet_F() { m_server.set_service_option("/resource1", "max_chunk_size", boost::lexical_cast(MAX_CHUNK_SIZE)); // make sure the length of the test data is in the range expected by the tests m_file4_len = strlen(g_file4_contents); BOOST_REQUIRE(m_file4_len > MAX_CHUNK_SIZE); BOOST_REQUIRE(m_file4_len < 2 * MAX_CHUNK_SIZE); FILE* fp = fopen("sandbox/file4", "wb"); fwrite(g_file4_contents, 1, m_file4_len, fp); fclose(fp); } ~RunningFileServiceWithMaxChunkSizeSet_F() { } char m_data_buf[2 * MAX_CHUNK_SIZE]; int m_file4_len; }; BOOST_FIXTURE_TEST_SUITE(RunningFileServiceWithMaxChunkSizeSet_S, RunningFileServiceWithMaxChunkSizeSet_F) BOOST_AUTO_TEST_CASE(checkResponseToHTTP_1_1_Request) { m_http_stream << "GET /resource1/file4 HTTP/1.1" << http::types::STRING_CRLF << http::types::STRING_CRLF; m_http_stream.flush(); checkResponseHead(200); //From RFC 2616, sec 4.4: //Messages MUST NOT include both a Content-Length header field and a non-identity transfer-coding. BOOST_CHECK(m_response_headers.find("Content-Length") == m_response_headers.end()); // extract first chunk size unsigned int chunk_size_1 = 0; m_http_stream >> std::hex >> chunk_size_1; BOOST_CHECK_EQUAL(chunk_size_1, static_cast(MAX_CHUNK_SIZE)); // expect CRLF following chunk size char two_bytes[2]; BOOST_CHECK(m_http_stream.read(two_bytes, 2)); BOOST_CHECK(strncmp(two_bytes, http::types::STRING_CRLF.c_str(), 2) == 0); // read first chunk m_http_stream.read(m_data_buf, chunk_size_1); // expect CRLF following chunk BOOST_CHECK(m_http_stream.read(two_bytes, 2)); BOOST_CHECK(strncmp(two_bytes, http::types::STRING_CRLF.c_str(), 2) == 0); // extract second chunk size unsigned int chunk_size_2 = 0; m_http_stream >> std::hex >> chunk_size_2; BOOST_CHECK_EQUAL(chunk_size_2, m_file4_len - static_cast(MAX_CHUNK_SIZE)); // expect CRLF following chunk size BOOST_CHECK(m_http_stream.read(two_bytes, 2)); BOOST_CHECK(strncmp(two_bytes, http::types::STRING_CRLF.c_str(), 2) == 0); // read second chunk m_http_stream.read(m_data_buf + chunk_size_1, chunk_size_2); // verify reconstructed data BOOST_CHECK(strncmp(m_data_buf, g_file4_contents, chunk_size_1 + chunk_size_2) == 0); // expect CRLF following chunk memset(two_bytes, 0, 2); BOOST_CHECK(m_http_stream.read(two_bytes, 2)); BOOST_CHECK(strncmp(two_bytes, http::types::STRING_CRLF.c_str(), 2) == 0); // extract final chunk size unsigned int chunk_size_3 = 99; m_http_stream >> std::hex >> chunk_size_3; BOOST_CHECK(chunk_size_3 == 0); // there could be a trailer here, but so far there isn't... // expect CRLF following final chunk (and optional trailer) memset(two_bytes, 0, 2); BOOST_CHECK(m_http_stream.read(two_bytes, 2)); BOOST_CHECK(strncmp(two_bytes, http::types::STRING_CRLF.c_str(), 2) == 0); } BOOST_AUTO_TEST_CASE(checkHTTPMessageReceive) { // open (another) connection pion::tcp::connection tcp_conn(get_io_service()); boost::system::error_code error_code; error_code = tcp_conn.connect(boost::asio::ip::address::from_string("127.0.0.1"), m_server.get_port()); BOOST_REQUIRE(!error_code); // send request to the server http::request http_request("/resource1/file4"); http_request.send(tcp_conn, error_code); BOOST_REQUIRE(!error_code); // receive the response from the server http::response http_response(http_request); http_response.receive(tcp_conn, error_code); BOOST_REQUIRE(!error_code); // verify that the headers are as expected for a chunked response BOOST_CHECK_EQUAL(http_response.get_header(http::types::HEADER_TRANSFER_ENCODING), "chunked"); BOOST_CHECK_EQUAL(http_response.get_header(http::types::HEADER_CONTENT_LENGTH), ""); // verify reconstructed data BOOST_CHECK_EQUAL(http_response.get_content_length(), static_cast(m_file4_len)); BOOST_CHECK(strncmp(http_response.get_content(), g_file4_contents, m_file4_len) == 0); } BOOST_AUTO_TEST_CASE(checkResponseToHTTP_1_0_Request) { m_http_stream << "GET /resource1/file4 HTTP/1.0" << http::types::STRING_CRLF << http::types::STRING_CRLF; m_http_stream.flush(); checkResponseHead(200); // We expect no Content-Length header... BOOST_CHECK(m_response_headers.find("Content-Length") == m_response_headers.end()); // ... but connection should be closed after sending all the data, so we check for EOF. int i; for (i = 0; !m_http_stream.eof(); ++i) { m_http_stream.read(&m_data_buf[i], 1); } BOOST_CHECK_EQUAL(i, m_file4_len + 1); BOOST_CHECK(strncmp(m_data_buf, g_file4_contents, m_file4_len) == 0); } BOOST_AUTO_TEST_SUITE_END() pion-5.0.4+dfsg.orig/tests/http_response_tests.cpp0000644000372000001440000000370612215647065021740 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include using namespace pion; class NewHTTPResponse_F : public http::response { public: NewHTTPResponse_F() { } ~NewHTTPResponse_F() { } }; BOOST_FIXTURE_TEST_SUITE(NewHTTPResponse_S, NewHTTPResponse_F) BOOST_AUTO_TEST_CASE(checkClear) { prepare_headers_for_send(true, false); BOOST_CHECK(!get_headers().empty()); clear(); BOOST_CHECK(get_headers().empty()); } BOOST_AUTO_TEST_CASE(checkStatusCodeAccessors) { set_status_code(http::types::RESPONSE_CODE_NOT_FOUND); BOOST_CHECK_EQUAL(get_status_code(), http::types::RESPONSE_CODE_NOT_FOUND); set_status_code(http::types::RESPONSE_CODE_CREATED); BOOST_CHECK_EQUAL(get_status_code(), http::types::RESPONSE_CODE_CREATED); } BOOST_AUTO_TEST_CASE(checkStatusMessageAccessors) { set_status_message(http::types::RESPONSE_MESSAGE_NOT_FOUND); BOOST_CHECK_EQUAL(get_status_message(), http::types::RESPONSE_MESSAGE_NOT_FOUND); set_status_message(http::types::RESPONSE_MESSAGE_CREATED); BOOST_CHECK_EQUAL(get_status_message(), http::types::RESPONSE_MESSAGE_CREATED); } BOOST_AUTO_TEST_CASE(checkSetLastModified) { set_last_modified(0); BOOST_CHECK_EQUAL(get_header(HEADER_LAST_MODIFIED), get_date_string(0)); set_last_modified(100000000); BOOST_CHECK_EQUAL(get_header(HEADER_LAST_MODIFIED), get_date_string(100000000)); set_last_modified(1000000000); BOOST_CHECK_EQUAL(get_header(HEADER_LAST_MODIFIED), get_date_string(1000000000)); } BOOST_AUTO_TEST_SUITE_END() pion-5.0.4+dfsg.orig/tests/spdy_parser_tests.cpp0000644000372000001440000003532012215647065021373 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include "spdy_parser_tests_data.inc" using namespace pion; using namespace pion::spdy; class parser_F : public parser { public: parser_F() { } ~parser_F() { } }; BOOST_FIXTURE_TEST_SUITE(parser_S, parser_F) BOOST_AUTO_TEST_CASE(test_is_spdy_frame_methods) { // Try with a invalid SPDY frame boost::uint16_t sample_frame = 0xFF; boost::system::error_code ec; BOOST_CHECK_EQUAL(parser::get_spdy_frame_type((const char *)&(sample_frame)), spdy_invalid_frame); BOOST_CHECK_EQUAL(parser::is_spdy_control_frame((const char *)&(sample_frame)), false); // Try with valid SPDY Frames BOOST_CHECK_EQUAL(parser::get_spdy_frame_type((const char*)spdy_syn_reply_frame), spdy_control_frame); BOOST_CHECK_EQUAL(parser::is_spdy_control_frame((const char*)spdy_syn_reply_frame), true); // Try a packet with low version number BOOST_CHECK_EQUAL(parser::is_spdy_control_frame((const char*)spdy_low_version_frame), false); // Try a packet with high version number BOOST_CHECK_EQUAL(parser::is_spdy_control_frame((const char*)spdy_high_version_frame), false); // Try with an invalid type frame BOOST_CHECK_EQUAL(parser::is_spdy_control_frame((const char*)spdy_invalid_type_frame), false); // Try with an invalid control frame BOOST_CHECK_EQUAL(parser::is_spdy_control_frame((const char*)spdy_incorrect_control_frame), false); } BOOST_AUTO_TEST_CASE(test_spdy_control_frame_stream_id) { // Get the SPDY control frame stream id BOOST_CHECK_EQUAL(parser::get_control_frame_stream_id((const char*)spdy_control_frame_1), 6U); BOOST_CHECK_EQUAL(parser::get_control_frame_stream_id((const char*)spdy_control_frame_2), 1793U); } BOOST_AUTO_TEST_CASE(test_get_spdy_frame_type) { // Get the SPDY control frame type BOOST_CHECK_EQUAL(parser::get_spdy_frame_type((const char*)spdy_control_frame_1), spdy_control_frame); BOOST_CHECK_EQUAL(parser::get_spdy_frame_type((const char*)spdy_control_frame_2), spdy_control_frame); BOOST_CHECK_EQUAL(parser::get_spdy_frame_type((const char*)spdy_incorrect_control_frame), spdy_invalid_frame); BOOST_CHECK_EQUAL(parser::get_spdy_frame_type((const char*)spdy_datastream_frame), spdy_data_frame); } BOOST_AUTO_TEST_CASE(test_spdy_parse_syn_reply_frame) { // Parse a spdy response frame boost::system::error_code ec; http_protocol_info http_info; // The length is known for this packet boost::uint32_t length_packet = 1460; spdy_control_frame_info frame; boost::uint32_t stream_id = 0; this->set_read_ptr((const char*)spdy_syn_reply_frame); this->populate_frame(ec, frame, length_packet, stream_id, http_info); // Check the frame properties BOOST_CHECK_EQUAL(frame.control_bit, 1U); BOOST_CHECK_EQUAL(frame.flags, 0U); BOOST_CHECK_EQUAL(frame.length, 280U); BOOST_CHECK_EQUAL(frame.type, 2U); BOOST_CHECK_EQUAL(frame.version, 2U); BOOST_CHECK_EQUAL(stream_id, 1U); } BOOST_AUTO_TEST_CASE(test_spdy_parse_rst_frame) { // Parse a spdy rst frame http_protocol_info http_info; boost::system::error_code ec; decompressor_ptr decompressor = (decompressor_ptr)new pion::spdy::decompressor(); // Check for interleaved spdy frames // The length is known for this packet boost::uint32_t length_packet = 30; boost::tribool result = false; result = this->parse(http_info, ec, decompressor, (const char*)spdy_rst_frame, length_packet, 1); // Check if the parser recognized it as an incorrect rst frame BOOST_CHECK_EQUAL(result, true); BOOST_CHECK_EQUAL(algorithm::to_uint32(this->get_spdy_data_content()), 1U); length_packet = 30; result = this->parse(http_info, ec, decompressor, (const char*)spdy_rst_frame_with_correct_length, length_packet, 1); // Check if the parser recognized it as an incorrect rst frame BOOST_CHECK(boost::indeterminate(result)); BOOST_CHECK_EQUAL(algorithm::to_uint32(this->get_spdy_data_content()), 6169U); } BOOST_AUTO_TEST_CASE(test_spdy_parse_goaway_frame) { // Parse a spdy go away frame http_protocol_info http_info; boost::system::error_code ec; decompressor_ptr decompressor = (decompressor_ptr)new pion::spdy::decompressor(); // Check for interleaved spdy frames // The length is known for this packet boost::uint32_t length_packet = 30; boost::tribool result = false; result = this->parse(http_info, ec, decompressor, (const char*)spdy_goaway_frame, length_packet, 1); // Check if the parser recognized it as an incorrect rst frame BOOST_CHECK_EQUAL(result, true); BOOST_CHECK_EQUAL(algorithm::to_uint32(this->get_spdy_data_content()), 1U); length_packet = 30; result = this->parse(http_info, ec, decompressor, (const char*)spdy_goaway_frame_with_correct_length, length_packet, 1); // Check if the parser recognized it as an incorrect rst frame BOOST_CHECK(boost::indeterminate(result)); BOOST_CHECK_EQUAL(algorithm::to_uint32(this->get_spdy_data_content()), 6169U); } BOOST_AUTO_TEST_CASE(test_spdy_parse_frames) { // Parse a possible spdy frames which we don't parse. // The frames are not parsed but parsing these frames should not cause // any unwanted conditions like seg faults etx http_protocol_info http_info; boost::system::error_code ec; decompressor_ptr decompressor = (decompressor_ptr)new pion::spdy::decompressor(); // Check for interleaved spdy frames // The length is known for this packet boost::uint32_t length_packet = 30; boost::tribool result = false; BOOST_CHECK_NO_THROW(result = this->parse(http_info, ec, decompressor, (const char*)spdy_settings_frame, length_packet, 1)); BOOST_CHECK_EQUAL(result, true); BOOST_CHECK_NO_THROW(result = this->parse(http_info, ec, decompressor, (const char*)spdy_noop_frame, length_packet, 1)); BOOST_CHECK_EQUAL(result, true); BOOST_CHECK_NO_THROW(result = this->parse(http_info, ec, decompressor, (const char*)spdy_headers_frame, length_packet, 1)); BOOST_CHECK_EQUAL(result, false); // TODO: should this be failing? BOOST_CHECK_NO_THROW(result = this->parse(http_info, ec, decompressor, (const char*)spdy_window_update_frame, length_packet, 1)); BOOST_CHECK(boost::indeterminate(result)); BOOST_CHECK_NO_THROW(result = this->parse(http_info, ec, decompressor, (const char*)spdy_credential_frame, length_packet, 1)); BOOST_CHECK(boost::indeterminate(result)); BOOST_CHECK_NO_THROW(result = this->parse(http_info, ec, decompressor, (const char*)spdy_invalid_frame_type, length_packet, 1)); BOOST_CHECK_EQUAL(result, false); // TODO: should this be failing? } BOOST_AUTO_TEST_CASE(test_spdy_parse_ping_frame) { // Parse a spdy ping frame http_protocol_info http_info; boost::system::error_code ec; decompressor_ptr decompressor = (decompressor_ptr)new pion::spdy::decompressor(); // Check for interleaved spdy frames // The length is known for this packet boost::uint32_t length_packet = 30; boost::tribool result = false; result = this->parse(http_info, ec, decompressor, (const char*)spdy_ping_frame, length_packet, 1); // Check if the parser recognized it as an incorrect rst frame BOOST_CHECK_EQUAL(result, true); BOOST_CHECK_EQUAL(algorithm::to_uint32(this->get_spdy_data_content()), 1U); length_packet = 30; result = this->parse(http_info, ec, decompressor, (const char*)spdy_ping_frame_with_correct_length, length_packet, 1); // Check if the parser recognized it as an incorrect rst frame BOOST_CHECK(boost::indeterminate(result)); BOOST_CHECK_EQUAL(algorithm::to_uint32(this->get_spdy_data_content()), 6169U); } BOOST_AUTO_TEST_CASE(test_spdy_parse_syn_stream_frame) { // Parse a spdy response frame boost::system::error_code ec; http_protocol_info http_info; // The length is known for this packet boost::uint32_t length_packet = 294; spdy_control_frame_info frame; boost::uint32_t stream_id = 0; this->set_read_ptr((const char*)spdy_syn_stream_frame); this->populate_frame(ec, frame, length_packet, stream_id, http_info); // Check the frame properties BOOST_CHECK_EQUAL(frame.control_bit, 1U); BOOST_CHECK_EQUAL(frame.flags, 1U); BOOST_CHECK_EQUAL(frame.length, 286U); BOOST_CHECK_EQUAL(frame.type, 1U); BOOST_CHECK_EQUAL(frame.version, 2U); BOOST_CHECK_EQUAL(stream_id, 1U); BOOST_CHECK_EQUAL(http_info.data_offset, 8U); BOOST_CHECK_EQUAL(http_info.data_size, 286U); } BOOST_AUTO_TEST_CASE(test_spdy_parse_interleaved_frame) { // Parse a spdy response frame http_protocol_info http_info; boost::system::error_code ec; decompressor_ptr decompressor = (decompressor_ptr)new pion::spdy::decompressor(); // Check for interleaved spdy frames // The length is known for this packet boost::uint32_t length_packet = 1460; boost::tribool result = false; result = this->parse(http_info, ec, decompressor, (const char*)spdy_window_frame, length_packet, 1); BOOST_CHECK(boost::indeterminate(result)); } BOOST_AUTO_TEST_CASE(test_spdy_parse_header) { // Parse a spdy response frame http_protocol_info http_info; boost::system::error_code ec; // Check for interleaved spdy frames // The length is known for this packet boost::uint32_t length_packet = 1460; decompressor_ptr decompressor = (decompressor_ptr)new pion::spdy::decompressor(); boost::tribool result = false; result = this->parse(http_info, ec, decompressor, (const char*)spdy_syn_stream_frame, length_packet, 0); BOOST_CHECK(boost::indeterminate(result)); // Verify the HTTP Info BOOST_CHECK_EQUAL(http_info.data_offset, 8U); BOOST_CHECK_EQUAL(http_info.data_size, 286U); BOOST_CHECK_EQUAL(http_info.http_type, 1U); BOOST_CHECK_EQUAL(http_info.last_chunk, false); BOOST_CHECK_EQUAL(http_info.stream_id, 1U); BOOST_CHECK_EQUAL(http_info.http_headers.size(), 10U); BOOST_CHECK_EQUAL(http_info.http_headers["host"], "www.cnn.com"); BOOST_CHECK_EQUAL(http_info.http_headers["accept-encoding"], "gzip,deflate,sdch"); BOOST_CHECK_EQUAL(http_info.http_headers["accept-language"], "en-US,en;q=0.8"); BOOST_CHECK_EQUAL(http_info.http_headers["method"], "GET"); BOOST_CHECK_EQUAL(http_info.http_headers["scheme"], "http"); BOOST_CHECK_EQUAL(http_info.http_headers["url"], "/"); BOOST_CHECK_EQUAL(http_info.http_headers["version"], "HTTP/1.1"); } BOOST_AUTO_TEST_CASE(test_populate_http_info_syn_stream_frame) { // Parse a spdy response frame boost::system::error_code ec; // Check for interleaved spdy frames // The length is known for this packet boost::uint32_t length_packet = 294; decompressor_ptr decompressor = (decompressor_ptr)new pion::spdy::decompressor(); http_protocol_info http_info; boost::tribool result = false; result = this->parse(http_info, ec, decompressor, (const char*)spdy_syn_stream_frame, length_packet, 1); BOOST_CHECK_EQUAL(result, true); BOOST_CHECK_EQUAL(http_info.http_headers.size(), 10U); BOOST_CHECK_EQUAL(http_info.data_offset, 8U); BOOST_CHECK_EQUAL(http_info.data_size, 286U); BOOST_CHECK_EQUAL(http_info.http_type, 1U); BOOST_CHECK_EQUAL(http_info.last_chunk, false); } BOOST_AUTO_TEST_CASE(test_populate_http_info_datastream_frame) { // Parse a spdy response frame boost::system::error_code ec; // Check for interleaved spdy frames // The length is known for this packet decompressor_ptr decompressor = (decompressor_ptr)new pion::spdy::decompressor(); http_protocol_info http_info; boost::uint32_t length_packet = 1460; boost::tribool result = false; result = this->parse(http_info, ec, decompressor, (const char*)spdy_datastream_frame, length_packet, 1); BOOST_CHECK(boost::indeterminate(result)); BOOST_CHECK_EQUAL(http_info.http_headers.size(), 0U); BOOST_CHECK_EQUAL(http_info.data_offset, 8U); BOOST_CHECK_EQUAL(http_info.data_size, 1427U); BOOST_CHECK_EQUAL(http_info.http_type, 3U); BOOST_CHECK_EQUAL(http_info.last_chunk, false); } BOOST_AUTO_TEST_SUITE_END() pion-5.0.4+dfsg.orig/tests/doc/0000755000372000001440000000000012215647065015654 5ustar robertouserspion-5.0.4+dfsg.orig/tests/doc/html/0000755000372000001440000000000012215647065016620 5ustar robertouserspion-5.0.4+dfsg.orig/tests/doc/html/index.html0000644000372000001440000000206412215647065020617 0ustar robertousers pion-net: Main Page

pion-net Documentation

1.0.4


Generated on Thu Oct 16 17:38:02 2008 for pion-net by  doxygen 1.5.6
pion-5.0.4+dfsg.orig/tests/http_parser_tests.cpp0000644000372000001440000005576012215647065021405 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include "http_parser_tests_data.inc" using namespace pion; BOOST_AUTO_TEST_CASE(testParseHttpUri) { std::string uri("http://127.0.0.1:80/folder/file.ext?q=uery"); std::string proto; std::string host; boost::uint16_t port = 0; std::string path; std::string query; BOOST_CHECK(http::parser::parse_uri(uri, proto, host, port, path, query)); BOOST_CHECK_EQUAL(proto, "http"); BOOST_CHECK_EQUAL(host, "127.0.0.1"); BOOST_CHECK_EQUAL(port, 80); BOOST_CHECK_EQUAL(path, "/folder/file.ext"); BOOST_CHECK_EQUAL(query, "q=uery"); uri = "http://www.cloudmeter.com/folder/file.ext"; BOOST_CHECK(http::parser::parse_uri(uri, proto, host, port, path, query)); BOOST_CHECK_EQUAL(proto, "http"); BOOST_CHECK_EQUAL(host, "www.cloudmeter.com"); BOOST_CHECK_EQUAL(port, 80); BOOST_CHECK_EQUAL(path, "/folder/file.ext"); BOOST_CHECK_EQUAL(query, ""); } BOOST_AUTO_TEST_CASE(testParseSimpleQueryString) { const std::string QUERY_STRING("a=b"); ihash_multimap params; BOOST_REQUIRE(http::parser::parse_url_encoded(params, QUERY_STRING.c_str(), QUERY_STRING.size())); BOOST_CHECK_EQUAL(params.size(), 1UL); ihash_multimap::const_iterator i = params.find("a"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK_EQUAL(i->second, "b"); } BOOST_AUTO_TEST_CASE(testParseQueryStringWithMultipleParameters) { const std::string QUERY_STRING("test=2&three=%20four%20with%20spaces&five=sixty+two"); ihash_multimap params; BOOST_REQUIRE(http::parser::parse_url_encoded(params, QUERY_STRING)); BOOST_CHECK_EQUAL(params.size(), 3UL); ihash_multimap::const_iterator i = params.find("test"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK_EQUAL(i->second, "2"); i = params.find("three"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK_EQUAL(i->second, " four with spaces"); i = params.find("five"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK_EQUAL(i->second, "sixty two"); } BOOST_AUTO_TEST_CASE(testParseQueryStringWithMultipleValues) { const std::string QUERY_STRING("var1=10&var2=20&var1=30&var2=40"); ihash_multimap params; BOOST_REQUIRE(http::parser::parse_url_encoded(params, QUERY_STRING)); BOOST_REQUIRE_EQUAL(params.size(), 4UL); std::pair range; range = params.equal_range("var1"); BOOST_CHECK(range.first != range.second); BOOST_CHECK(range.first->second == "10" || range.first->second == "30"); BOOST_REQUIRE(++(range.first) != range.second); BOOST_CHECK(range.first->second == "10" || range.first->second == "30"); BOOST_CHECK(++(range.first) == range.second); range = params.equal_range("var2"); BOOST_CHECK(range.first != range.second); BOOST_CHECK(range.first->second == "20" || range.first->second == "40"); BOOST_REQUIRE(++(range.first) != range.second); BOOST_CHECK(range.first->second == "20" || range.first->second == "40"); BOOST_CHECK(++(range.first) == range.second); } BOOST_AUTO_TEST_CASE(testParseQueryStringWithCommaSeparatedValues) { const std::string QUERY_STRING("var1=10,30&var2=20,40"); ihash_multimap params; BOOST_REQUIRE(http::parser::parse_url_encoded(params, QUERY_STRING)); BOOST_REQUIRE_EQUAL(params.size(), 4UL); std::pair range; range = params.equal_range("var1"); BOOST_CHECK(range.first != range.second); BOOST_CHECK(range.first->second == "10" || range.first->second == "30"); BOOST_REQUIRE(++(range.first) != range.second); BOOST_CHECK(range.first->second == "10" || range.first->second == "30"); BOOST_CHECK(++(range.first) == range.second); range = params.equal_range("var2"); BOOST_CHECK(range.first != range.second); BOOST_CHECK(range.first->second == "20" || range.first->second == "40"); BOOST_REQUIRE(++(range.first) != range.second); BOOST_CHECK(range.first->second == "20" || range.first->second == "40"); BOOST_CHECK(++(range.first) == range.second); } BOOST_AUTO_TEST_CASE(testParseQueryStringWithEqualInValue) { const std::string QUERY_STRING("time=1363409375&cookie_id=cmid=b8c7b029-be7b-6afd-563e-32b25909e443&cookie_id=xxx"); ihash_multimap params; BOOST_REQUIRE(http::parser::parse_url_encoded(params, QUERY_STRING)); BOOST_CHECK_EQUAL(params.size(), 3UL); std::pair range; ihash_multimap::const_iterator i = params.find("time"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK_EQUAL(i->second, "1363409375"); range = params.equal_range("cookie_id"); BOOST_CHECK(range.first != range.second); BOOST_CHECK(range.first->second == "cmid=b8c7b029-be7b-6afd-563e-32b25909e443" || range.first->second == "xxx"); BOOST_CHECK(++(range.first) != range.second); BOOST_CHECK(range.first->second == "cmid=b8c7b029-be7b-6afd-563e-32b25909e443" || range.first->second == "xxx"); BOOST_CHECK(++(range.first) == range.second); } BOOST_AUTO_TEST_CASE(testParseQueryStringWithDoubleAmpersand) { const std::string QUERY_STRING("a=b&&c=d&e"); ihash_multimap params; BOOST_REQUIRE(http::parser::parse_url_encoded(params, QUERY_STRING)); BOOST_CHECK_EQUAL(params.size(), 3UL); ihash_multimap::const_iterator i = params.find("a"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK_EQUAL(i->second, "b"); i = params.find("c"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK_EQUAL(i->second, "d"); i = params.find("e"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK(i->second.empty()); } BOOST_AUTO_TEST_CASE(testParseQueryStringWithEmptyName) { const std::string QUERY_STRING("a=b&=bob&=&c=d&e"); ihash_multimap params; BOOST_REQUIRE(http::parser::parse_url_encoded(params, QUERY_STRING)); BOOST_CHECK_EQUAL(params.size(), 3UL); ihash_multimap::const_iterator i = params.find("a"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK_EQUAL(i->second, "b"); i = params.find("c"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK_EQUAL(i->second, "d"); i = params.find("e"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK(i->second.empty()); } BOOST_AUTO_TEST_CASE(testParseQueryStringWithEmptyValues) { const std::string QUERY_STRING("a=&b&c="); ihash_multimap params; BOOST_REQUIRE(http::parser::parse_url_encoded(params, QUERY_STRING)); BOOST_CHECK_EQUAL(params.size(), 3UL); ihash_multimap::const_iterator i = params.find("a"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK(i->second.empty()); i = params.find("b"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK(i->second.empty()); i = params.find("c"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK(i->second.empty()); } BOOST_AUTO_TEST_CASE(testParseQueryStringWithTabs) { const std::string QUERY_STRING("promoCode=BOB "); ihash_multimap params; BOOST_REQUIRE(http::parser::parse_url_encoded(params, QUERY_STRING)); BOOST_CHECK_EQUAL(params.size(), 1UL); ihash_multimap::const_iterator i = params.find("promoCode"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK_EQUAL(i->second, "BOB"); } BOOST_AUTO_TEST_CASE(testParseMultipartFormData) { const std::string FORM_DATA("------WebKitFormBoundarynqrI4c1BfROrEpu7\r\n" "Content-Disposition: form-data; name=\"field1\"\r\n" "\r\n" "this\r\n" "------WebKitFormBoundarynqrI4c1BfROrEpu7\r\n" "Content-Disposition: form-data; name=\"field2\"\r\n" "\r\n" "is\r\n" "------WebKitFormBoundarynqrI4c1BfROrEpu7\r\n" "Content-Disposition: form-data; name=\"funny$field1\"\r\n" "\r\n" "a\r\n" "------WebKitFormBoundarynqrI4c1BfROrEpu7\r\n" "Content-Disposition: form-data; name=\"skipme\"\r\n" "content-type: application/octet-stream\r\n" "\r\n" "SKIP ME!\r\n" "------WebKitFormBoundarynqrI4c1BfROrEpu7\r\n" "Content-Disposition: form-data; name=\"funny$field2\"\r\n" "\r\n" "funky test!\r\n" "------WebKitFormBoundarynqrI4c1BfROrEpu7--"); ihash_multimap params; BOOST_REQUIRE(http::parser::parse_multipart_form_data(params, "multipart/form-data; boundary=----WebKitFormBoundarynqrI4c1BfROrEpu7", FORM_DATA)); BOOST_CHECK_EQUAL(params.size(), 4UL); ihash_multimap::const_iterator i; i = params.find("skipme"); BOOST_REQUIRE(i == params.end()); i = params.find("field1"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK_EQUAL(i->second, "this"); i = params.find("field2"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK_EQUAL(i->second, "is"); i = params.find("funny$field1"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK_EQUAL(i->second, "a"); i = params.find("funny$field2"); BOOST_REQUIRE(i != params.end()); BOOST_CHECK_EQUAL(i->second, "funky test!"); } BOOST_AUTO_TEST_CASE(testParseGarbageMultipartFormData) { static const size_t BUF_SIZE = 1024; boost::scoped_array buf_ptr(new char[BUF_SIZE]); memset(buf_ptr.get(), 'x', BUF_SIZE); ihash_multimap params; BOOST_CHECK(!http::parser::parse_multipart_form_data(params, "multipart/form-data; boundary=----WebKitFormBoundarynqrI4c1BfROrEpu7", buf_ptr.get(), BUF_SIZE)); BOOST_CHECK_EQUAL(params.size(), 0UL); } BOOST_AUTO_TEST_CASE(testParseSingleCookieHeader) { std::string cookie_header; ihash_multimap cookies; ihash_multimap::const_iterator cookie_it; cookie_header = "a=b"; BOOST_REQUIRE(http::parser::parse_cookie_header(cookies, cookie_header, false)); BOOST_CHECK_EQUAL(cookies.size(), 1UL); cookie_it = cookies.find("a"); BOOST_REQUIRE(cookie_it != cookies.end()); BOOST_CHECK_EQUAL(cookie_it->second, "b"); } BOOST_AUTO_TEST_CASE(testParseTwoCookieHeader) { std::string cookie_header; ihash_multimap cookies; ihash_multimap::const_iterator cookie_it; cookie_header = "a=b; Part_Number=\"Rocket_Launcher_0001\";"; BOOST_REQUIRE(http::parser::parse_cookie_header(cookies, cookie_header, false)); BOOST_CHECK_EQUAL(cookies.size(), 2UL); cookie_it = cookies.find("a"); BOOST_REQUIRE(cookie_it != cookies.end()); BOOST_CHECK_EQUAL(cookie_it->second, "b"); cookie_it = cookies.find("Part_Number"); BOOST_REQUIRE(cookie_it != cookies.end()); BOOST_CHECK_EQUAL(cookie_it->second, "Rocket_Launcher_0001"); } BOOST_AUTO_TEST_CASE(testParseCookieHeaderWithEmptyName) { std::string cookie_header; ihash_multimap cookies; ihash_multimap::const_iterator cookie_it; cookie_header = "a=b; =; =\"001\"; c=d"; BOOST_REQUIRE(http::parser::parse_cookie_header(cookies, cookie_header, false)); BOOST_CHECK_EQUAL(cookies.size(), 2UL); cookie_it = cookies.find("a"); BOOST_REQUIRE(cookie_it != cookies.end()); BOOST_CHECK_EQUAL(cookie_it->second, "b"); cookie_it = cookies.find("c"); BOOST_REQUIRE(cookie_it != cookies.end()); BOOST_CHECK_EQUAL(cookie_it->second, "d"); } BOOST_AUTO_TEST_CASE(testParseCookieHeaderWithUnquotedSpaces) { std::string cookie_header; ihash_multimap cookies; ihash_multimap::const_iterator cookie_it; cookie_header = "a=a black cat; c = Dec 2, 2010 11:54:30 AM; d = \"dark \""; BOOST_REQUIRE(http::parser::parse_cookie_header(cookies, cookie_header, false)); BOOST_CHECK_EQUAL(cookies.size(), 4UL); cookie_it = cookies.find("a"); BOOST_REQUIRE(cookie_it != cookies.end()); BOOST_CHECK_EQUAL(cookie_it->second, "a black cat"); cookie_it = cookies.find("c"); BOOST_REQUIRE(cookie_it != cookies.end()); BOOST_CHECK_EQUAL(cookie_it->second, "Dec 2"); // ideally, this would be parsed as part of c (as intended) // but the parser needs to accept , as a cookie separator to conform with v1 and later // so for now just not "breaking" is good enough cookie_it = cookies.find("201011:54:30AM"); BOOST_REQUIRE(cookie_it != cookies.end()); BOOST_CHECK_EQUAL(cookie_it->second, ""); cookie_it = cookies.find("d"); BOOST_REQUIRE(cookie_it != cookies.end()); BOOST_CHECK_EQUAL(cookie_it->second, "dark "); } BOOST_AUTO_TEST_CASE(testParseNormalCookieHeader) { std::string cookie_header; ihash_multimap cookies; ihash_multimap::const_iterator cookie_it; cookie_header = "$Version=\"1\"; Part_Number=\"Rocket_Launcher_0001\"; $Path=\"/acme\""; BOOST_REQUIRE(http::parser::parse_cookie_header(cookies, cookie_header, false)); BOOST_CHECK_EQUAL(cookies.size(), 1UL); cookie_it = cookies.find("Part_Number"); BOOST_REQUIRE(cookie_it != cookies.end()); BOOST_CHECK_EQUAL(cookie_it->second, "Rocket_Launcher_0001"); } BOOST_AUTO_TEST_CASE(testParseSetCookieHeader) { std::string cookie_header; ihash_multimap cookies; ihash_multimap::const_iterator cookie_it; cookie_header = "Shipping=\"FedEx\"; Version=\"1\"; Path=\"/acme\""; BOOST_REQUIRE(http::parser::parse_cookie_header(cookies, cookie_header, true)); BOOST_CHECK_EQUAL(cookies.size(), 1UL); cookie_it = cookies.find("Shipping"); BOOST_REQUIRE(cookie_it != cookies.end()); BOOST_CHECK_EQUAL(cookie_it->second, "FedEx"); } BOOST_AUTO_TEST_CASE(testHTTPParserSimpleRequest) { http::parser request_parser(true); request_parser.set_read_buffer((const char*)request_data_1, sizeof(request_data_1)); http::request http_request; boost::system::error_code ec; BOOST_CHECK(request_parser.parse(http_request, ec)); BOOST_CHECK(!ec); BOOST_CHECK_EQUAL(http_request.get_content_length(), 0UL); BOOST_CHECK_EQUAL(request_parser.get_total_bytes_read(), sizeof(request_data_1)); BOOST_CHECK_EQUAL(request_parser.get_content_bytes_read(), 0UL); } BOOST_AUTO_TEST_CASE(testHTTPParserSimpleResponse) { http::parser response_parser(false); response_parser.set_read_buffer((const char*)response_data_1, sizeof(response_data_1)); http::response http_response; boost::system::error_code ec; BOOST_CHECK(response_parser.parse(http_response, ec)); BOOST_CHECK(!ec); BOOST_CHECK_EQUAL(http_response.get_content_length(), 117UL); BOOST_CHECK_EQUAL(response_parser.get_total_bytes_read(), sizeof(response_data_1)); BOOST_CHECK_EQUAL(response_parser.get_content_bytes_read(), 117UL); boost::regex content_regex("^GIF89a.*"); BOOST_CHECK(boost::regex_match(http_response.get_content(), content_regex)); } BOOST_AUTO_TEST_CASE(testHTTPParserBadRequest) { http::parser request_parser(true); request_parser.set_read_buffer((const char*)request_data_bad, sizeof(request_data_bad)); http::request http_request; boost::system::error_code ec; BOOST_CHECK(!request_parser.parse(http_request, ec)); BOOST_CHECK_EQUAL(ec.value(), http::parser::ERROR_VERSION_CHAR); BOOST_CHECK_EQUAL(ec.message(), "invalid version character"); } BOOST_AUTO_TEST_CASE(testHTTPParserSimpleResponseWithSmallerMaxSize) { http::parser response_parser(false); response_parser.set_read_buffer((const char*)response_data_1, sizeof(response_data_1)); response_parser.set_max_content_length(4); http::response http_response; boost::system::error_code ec; BOOST_CHECK(response_parser.parse(http_response, ec)); BOOST_CHECK(!ec); BOOST_CHECK_EQUAL(http_response.get_content_length(), 4UL); BOOST_CHECK_EQUAL(response_parser.get_total_bytes_read(), sizeof(response_data_1)); BOOST_CHECK_EQUAL(response_parser.get_content_bytes_read(), 117UL); std::string content_str("GIF8"); BOOST_CHECK_EQUAL(content_str, http_response.get_content()); } BOOST_AUTO_TEST_CASE(testHTTPParserSimpleResponseWithZeroMaxSize) { http::parser response_parser(false); response_parser.set_read_buffer((const char*)response_data_1, sizeof(response_data_1)); response_parser.set_max_content_length(0); http::response http_response; boost::system::error_code ec; BOOST_CHECK(response_parser.parse(http_response, ec)); BOOST_CHECK(!ec); BOOST_CHECK_EQUAL(http_response.get_content_length(), 0UL); BOOST_CHECK_EQUAL(response_parser.get_total_bytes_read(), sizeof(response_data_1)); BOOST_CHECK_EQUAL(response_parser.get_content_bytes_read(), 117UL); BOOST_CHECK_EQUAL(http_response.get_content()[0], '\0'); } BOOST_AUTO_TEST_CASE(testHTTPParser_MultipleResponseFrames) { const unsigned char* frames[] = { resp2_frame0, resp2_frame1, resp2_frame2, resp2_frame3, resp2_frame4, resp2_frame5, resp2_frame6 }; size_t sizes[] = { sizeof(resp2_frame0), sizeof(resp2_frame1), sizeof(resp2_frame2), sizeof(resp2_frame3), sizeof(resp2_frame4), sizeof(resp2_frame5), sizeof(resp2_frame6) }; int frame_cnt = sizeof(frames)/sizeof(frames[0]); http::parser response_parser(false); http::response http_response; boost::system::error_code ec; boost::uint64_t total_bytes = 0; for (int i=0; i < frame_cnt - 1; i++ ) { response_parser.set_read_buffer((const char*)frames[i], sizes[i]); BOOST_CHECK( boost::indeterminate(response_parser.parse(http_response, ec)) ); BOOST_CHECK(!ec); total_bytes += sizes[i]; } response_parser.set_read_buffer((const char*)frames[frame_cnt - 1], sizes[frame_cnt - 1]); BOOST_CHECK( response_parser.parse(http_response, ec) ); BOOST_CHECK(!ec); total_bytes += sizes[frame_cnt - 1]; BOOST_CHECK_EQUAL(http_response.get_content_length(), 4712UL); BOOST_CHECK_EQUAL(response_parser.get_total_bytes_read(), total_bytes); BOOST_CHECK_EQUAL(response_parser.get_content_bytes_read(), 4712UL); boost::regex content_regex(".*Atomic\\sLabs:.*"); BOOST_CHECK(boost::regex_match(http_response.get_content(), content_regex)); } BOOST_AUTO_TEST_CASE(testHTTPParserWithSemicolons) { http::parser request_parser(true); request_parser.set_read_buffer((const char*)chunked_request_with_semicolon, sizeof(chunked_request_with_semicolon)); http::request http_request; boost::system::error_code ec; BOOST_CHECK(request_parser.parse(http_request, ec)); BOOST_CHECK(!ec); // The content length should be 15 and the ignored data after ';' // should not be added to content length BOOST_CHECK_EQUAL(http_request.get_content_length(), 15UL); BOOST_CHECK_EQUAL(request_parser.get_total_bytes_read(), sizeof(chunked_request_with_semicolon)); BOOST_CHECK_EQUAL(request_parser.get_content_bytes_read(), 48UL); } BOOST_AUTO_TEST_CASE(testHTTPParserWithFooters) { http::parser request_parser(true); request_parser.set_read_buffer((const char*)chunked_request_with_footers, sizeof(chunked_request_with_footers)); http::request http_request; boost::system::error_code ec; BOOST_CHECK(request_parser.parse(http_request, ec)); BOOST_CHECK(!ec); BOOST_CHECK_EQUAL(http_request.get_content_length(), 15UL); BOOST_CHECK_EQUAL(request_parser.get_total_bytes_read(), sizeof(chunked_request_with_footers)); BOOST_CHECK_EQUAL(request_parser.get_content_bytes_read(), 28UL); BOOST_CHECK_EQUAL(http_request.get_header("Transfer-Encoding"), "chunked"); // Check if the footers are added as a part of the HTTP Data BOOST_CHECK_EQUAL(http_request.get_header("some-footer"), "some-value"); BOOST_CHECK_EQUAL(http_request.get_header("another-footer"), "another-value"); } BOOST_AUTO_TEST_CASE(testHTTPParserWithErrorInFooters) { http::parser request_parser(true); request_parser.set_read_buffer((const char*)chunked_request_with_error_in_footers, sizeof(chunked_request_with_error_in_footers)); http::request http_request; boost::system::error_code ec; // The HTTP Packet does not contain any footer value associated with the footer key // This will lead to any error within the parse_headers() method BOOST_CHECK_EQUAL(request_parser.parse(http_request, ec), false); // Check if there is an error generated BOOST_CHECK_EQUAL(ec.value(), http::parser::ERROR_HEADER_CHAR); BOOST_CHECK_EQUAL(http_request.get_content_length(), 15UL); BOOST_CHECK_EQUAL(request_parser.get_total_bytes_read(), 84UL); BOOST_CHECK_EQUAL(http_request.get_header("Transfer-Encoding"), "chunked"); // Check if the footers are added as a part of the HTTP Data BOOST_CHECK_EQUAL(http_request.get_header("some-footer"), "some-value"); } /// fixture used for testing http::parser's X-Fowarded-For header parsing class HTTPParserForwardedForTests_F { public: HTTPParserForwardedForTests_F(void) {} ~HTTPParserForwardedForTests_F(void) {} inline void checkParsingTrue(const std::string& header, const std::string& result) { std::string public_ip; BOOST_CHECK(http::parser::parse_forwarded_for(header, public_ip)); BOOST_CHECK_EQUAL(public_ip, result); } inline void checkParsingFalse(const std::string& header) { std::string public_ip; BOOST_CHECK(! http::parser::parse_forwarded_for(header, public_ip)); } }; BOOST_FIXTURE_TEST_SUITE(HTTPParserForwardedForTests_S, HTTPParserForwardedForTests_F) BOOST_AUTO_TEST_CASE(checkParseForwardedForHeaderNoIP) { checkParsingFalse("myserver"); checkParsingFalse("128.2.02f.12"); } BOOST_AUTO_TEST_CASE(checkParseForwardedForHeaderNotPublic) { checkParsingFalse("127.0.0.1"); checkParsingFalse("10.0.2.1"); checkParsingFalse("192.168.2.12"); checkParsingFalse("172.16.2.1"); checkParsingFalse("172.21.2.1"); checkParsingFalse("172.30.2.1"); } BOOST_AUTO_TEST_CASE(checkParseForwardedForHeaderWithSpaces) { checkParsingTrue(" 129.12.12.204 ", "129.12.12.204"); } BOOST_AUTO_TEST_CASE(checkParseForwardedForHeaderFirstNotIP) { checkParsingTrue(" phono , 129.2.31.24, 62.31.21.2", "129.2.31.24"); checkParsingTrue("not_ipv4, 127.2.31.24, 62.31.21.2", "62.31.21.2"); } BOOST_AUTO_TEST_CASE(checkParseForwardedForHeaderFirstNotPublic) { checkParsingTrue("127.0.0.1, 62.31.21.2", "62.31.21.2"); checkParsingTrue("10.21.31.2, 172.15.31.2", "172.15.31.2"); checkParsingTrue("192.168.2.12, 172.32.31.2", "172.32.31.2"); } BOOST_AUTO_TEST_SUITE_END() ����������������pion-5.0.4+dfsg.orig/tests/piontests.vcxproj.filters������������������������������������������������0000644�0003720�0000144�00000004135�12215647065�022226� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Filter Include="Source Files"> <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> </Filter> <Filter Include="Header Files"> <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> </Filter> <Filter Include="Resource Files"> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions> </Filter> </ItemGroup> <ItemGroup> <ClCompile Include="algorithm_tests.cpp"> <Filter>Source Files</Filter> </ClCompile> <ClCompile Include="file_service_tests.cpp"> <Filter>Source Files</Filter> </ClCompile> <ClCompile Include="http_message_tests.cpp"> <Filter>Source Files</Filter> </ClCompile> <ClCompile Include="http_parser_tests.cpp"> <Filter>Source Files</Filter> </ClCompile> <ClCompile Include="http_plugin_server_tests.cpp"> <Filter>Source Files</Filter> </ClCompile> <ClCompile Include="http_request_tests.cpp"> <Filter>Source Files</Filter> </ClCompile> <ClCompile Include="http_response_tests.cpp"> <Filter>Source Files</Filter> </ClCompile> <ClCompile Include="http_types_tests.cpp"> <Filter>Source Files</Filter> </ClCompile> <ClCompile Include="piontests.cpp"> <Filter>Source Files</Filter> </ClCompile> <ClCompile Include="plugin_manager_tests.cpp"> <Filter>Source Files</Filter> </ClCompile> <ClCompile Include="plugin_tests.cpp"> <Filter>Source Files</Filter> </ClCompile> <ClCompile Include="tcp_server_tests.cpp"> <Filter>Source Files</Filter> </ClCompile> <ClCompile Include="tcp_stream_tests.cpp"> <Filter>Source Files</Filter> </ClCompile> </ItemGroup> </Project>�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/tests/spdy_parser_tests_data.inc�����������������������������������������������0000644�0003720�0000144�00000102656�12215647065�022362� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Length of this frame is 1460 // This spdy packet contains 2 interleaved spdy frames const unsigned char spdy_window_frame[] = { 0x80, 0x02, 0x00, 0x09, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x38, 0xea, 0xdf, 0xa2, 0x51, 0xb2, 0x62, 0xe0, 0x67, 0x60, 0x71, 0x01, 0x2a, 0x60, 0x90, 0x05, 0x7a, 0x53, 0x47, 0xc1, 0xc8, 0x44, 0x01, 0xe8, 0x1f, 0x05, 0x60, 0x9a, 0x35, 0x54, 0x30, 0x34, 0xb5, 0x32, 0xb5, 0xb4, 0x32, 0x31, 0x53, 0x70, 0xf7, 0x0d, 0x61, 0x60, 0x0b, 0x06, 0xa7, 0x0a, 0x06, 0x36, 0xc7, 0x02, 0x50, 0xe4, 0x32, 0xf0, 0xa2, 0x24, 0x32, 0x06, 0xd6, 0xa4, 0xca, 0x12, 0x20, 0xc5, 0x8b, 0x12, 0xf3, 0x0c, 0x32, 0x50, 0xf7, 0xd9, 0x9a, 0x19, 0xe8, 0x28, 0x14, 0x14, 0x65, 0x96, 0x01, 0x2d, 0x82, 0x33, 0x18, 0xb8, 0x10, 0x29, 0x83, 0x81, 0xcb, 0x3b, 0x35, 0xb5, 0x40, 0xd7, 0x31, 0x27, 0xb3, 0x2c, 0x95, 0x41, 0x00, 0x3d, 0x39, 0x31, 0xb0, 0x80, 0x7c, 0xc2, 0xc0, 0x87, 0x9a, 0x04, 0x18, 0x58, 0x81, 0x99, 0xca, 0xc8, 0x82, 0x81, 0x07, 0x39, 0x8e, 0x19, 0x38, 0xe1, 0xc1, 0xcc, 0xc0, 0x92, 0x02, 0xf1, 0x57, 0x29, 0xd0, 0x4e, 0x23, 0x53, 0x05, 0x60, 0x54, 0x41, 0xfc, 0x65, 0x60, 0x68, 0x65, 0x68, 0x62, 0x65, 0x6c, 0x04, 0xf6, 0x17, 0x3b, 0x34, 0x45, 0xe0, 0x50, 0x67, 0x6a, 0x65, 0x64, 0x0c, 0x10, 0x58, 0x1d, 0x57, 0x36, 0xc8, 0x81, 0x89, 0x60, 0x07, 0x0a, 0x96, 0x64, 0xe6, 0xa6, 0xe6, 0x97, 0x96, 0xd8, 0x1a, 0xe9, 0x28, 0x00, 0x7d, 0x68, 0x6b, 0x68, 0xc0, 0xc0, 0x85, 0x48, 0x44, 0x0c, 0x52, 0xce, 0xee, 0xb6, 0xa1, 0xc1, 0x56, 0xce, 0x8e, 0x56, 0xce, 0xa5, 0x05, 0xc0, 0xa4, 0x9e, 0x99, 0x97, 0x6f, 0xad, 0x50, 0x90, 0x58, 0x92, 0x61, 0xab, 0xcf, 0xc0, 0x06, 0x89, 0x00, 0x06, 0x36, 0x60, 0xc1, 0xa0, 0xe0, 0xef, 0xcd, 0xc0, 0x02, 0xca, 0x66, 0x0c, 0x52, 0xa1, 0xa0, 0x62, 0xc3, 0x11, 0x54, 0x6c, 0xe8, 0x38, 0x42, 0xc2, 0xd5, 0x15, 0xe6, 0x77, 0x76, 0x68, 0x64, 0x31, 0x70, 0xc0, 0xe2, 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x93, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xed, 0x7d, 0x69, 0x77, 0xdb, 0x38, 0xb2, 0xe8, 0x67, 0xfb, 0x9c, 0xfc, 0x07, 0x8c, 0x32, 0xb7, 0x65, 0x4f, 0x9b, 0xd4, 0xe2, 0x25, 0x5e, 0x62, 0xe7, 0x38, 0xb6, 0x92, 0xb8, 0xc7, 0xdb, 0x58, 0x4e, 0x72, 0x7b, 0xa6, 0xe7, 0xe8, 0x40, 0x24, 0x24, 0xd1, 0xa6, 0x48, 0x36, 0x41, 0x5a, 0x56, 0x32, 0xf9, 0xef, 0xaf, 0x0a, 0x00, 0x57, 0x91, 0x5a, 0x6c, 0x27, 0xf1, 0xbc, 0xf7, 0x7a, 0xee, 0x8d, 0x45, 0x12, 0x4b, 0xa1, 0x50, 0xa8, 0x0d, 0x85, 0xc2, 0xeb, 0xbf, 0x1c, 0x5f, 0x1c, 0x5d, 0xff, 0x7e, 0xd9, 0x22, 0x1f, 0xae, 0xcf, 0x4e, 0xc9, 0xe5, 0xc7, 0xb7, 0xa7, 0x27, 0x47, 0xa4, 0xa2, 0xd5, 0x6a, 0x9f, 0xd7, 0x8f, 0x6a, 0xb5, 0xe3, 0xeb, 0x63, 0xf9, 0x61, 0x43, 0xaf, 0x37, 0xc8, 0xb5, 0x4f, 0x1d, 0x6e, 0x05, 0x96, 0xeb, 0x50, 0xbb, 0x56, 0x6b, 0x9d, 0x57, 0x2a, 0x83, 0x20, 0xf0, 0x76, 0x6b, 0xb5, 0xd1, 0x68, 0xa4, 0x8f, 0xd6, 0x75, 0xd7, 0xef, 0xd7, 0xae, 0xaf, 0x6a, 0x83, 0x60, 0x68, 0x6f, 0xd4, 0x6c, 0xd7, 0xe5, 0x4c, 0x37, 0x03, 0xb3, 0x72, 0xf0, 0x1a, 0xdf, 0x10, 0x9b, 0x3a, 0xfd, 0xfd, 0x0a, 0x73, 0xf0, 0x99, 0x51, 0xf3, 0xe0, 0x75, 0x60, 0x05, 0x36, 0x3b, 0x38, 0x3a, 0x3f, 0xd7, 0x0d, 0x77, 0x48, 0x34, 0xf2, 0xd6, 0x67, 0xf4, 0xd6, 0x72, 0xfa, 0xe4, 0x9c, 0x8d, 0xf8, 0x1a, 0xf9, 0xa8, 0xb7, 0xf5, 0x35, 0xf2, 0xd9, 0xf5, 0x6d, 0x13, 0xfe, 0x30, 0x1a, 0x0c, 0x98, 0xbf, 0x46, 0x5a, 0x4e, 0xc0, 0xfc, 0x80, 0x5a, 0xce, 0x90, 0x39, 0x01, 0xf9, 0x85, 0x0e, 0xbd, 0x3d, 0xf2, 0xc9, 0x32, 0x99, 0x2b, 0x6a, 0xbd, 0xae, 0xc9, 0x46, 0x09, 0x21, 0xaf, 0x87, 0x2c, 0xa0, 0x04, 0x01, 0xd4, 0xd8, 0x9f, 0xa1, 0x75, 0xb7, 0x5f, 0xf1, 0x59, 0xcf, 0x67, 0x7c, 0x50, 0x21, 0x86, 0x0b, 0x8d, 0x38, 0xc1, 0x7e, 0xa5, 0xb1, 0x5d, 0xaf, 0xef, 0x85, 0xbe, 0xbd, 0xff, 0x46, 0x7d, 0xdb, 0x6f, 0x54, 0x0e, 0x96, 0x65, 0x4d, 0x87, 0x0e, 0xd9, 0x7e, 0xe5, 0x98, 0x71, 0xc3, 0xb7, 0x3c, 0x1c, 0x73, 0xaa, 0x5e, 0x04, 0xb3, 0xc9, 0x6c, 0xeb, 0x8e, 0xf9, 0x9c, 0x00, 0x6c, 0x30, 0xbe, 0x80, 0xf1, 0x80, 0x74, 0xa3, 0x51, 0x38, 0x00, 0x0f, 0xa1, 0x8e, 0x49, 0x2c, 0xa7, 0xe7, 0xfa, 0x43, 0x8a, 0x6d, 0x10, 0xf8, 0xbf, 0x54, 0xd9, 0xc0, 0xf5, 0x08, 0x0f, 0x5c, 0xdf, 0x62, 0x30, 0xde, 0x51, 0x34, 0xc4, 0x6e, 0xc8, 0x2d, 0x87, 0x71, 0x78, 0xc5, 0xd2, 0x83, 0x5d, 0x23, 0x9e, 0x6b, 0x03, 0xf6, 0x0d, 0xf8, 0x80, 0xcd, 0x0e, 0x5d, 0x9f, 0xe9, 0xe4, 0x9d, 0xeb, 0x43, 0x07, 0x9a, 0xc9, 0xbc, 0x60, 0x00, 0x00, 0x02, 0x34, 0xb4, 0xcf, 0xd6, 0x48, 0x04, 0xa1, 0xe7, 0xbb, 0x77, 0x80, 0x1d, 0x4e, 0xb8, 0xc7, 0x0c, 0x8b, 0xda, 0xc4, 0x67, 0x9e, 0xeb, 0x07, 0xd0, 0x04, 0xbe, 0x76, 0xa1, 0xa5, 0xd0, 0xb4, 0xe0, 0x8f, 0x37, 0x70, 0x03, 0x97, 0xf4, 0xa9, 0x6d, 0x33, 0x09, 0x8d, 0x04, 0x1c, 0xba, 0xa7, 0x46, 0x00, 0x63, 0x24, 0xfd, 0x10, 0x9b, 0xd1, 0x73, 0xe8, 0xf9, 0x3b, 0x1b, 0x8f, 0x5c, 0xdf, 0xe4, 0x59, 0xdc, 0x88, 0xee, 0xc5, 0xf8, 0x63, 0x40, 0xe4, 0xab, 0xeb, 0x4f, 0x6b, 0xea, 0xb5, 0x40, 0x8e, 0xeb, 0xd8, 0x30, 0xd0, 0xb5, 0x2c, 0xca, 0xe4, 0xc4, 0xab, 0x9f, 0x23, 0x9c, 0xfd, 0xe8, 0xf7, 0x24, 0x7e, 0xb0, 0xcd, 0x33, 0xd7, 0x61, 0xe3, 0x35, 0x18, 0x9f, 0x1c, 0x56, 0x82, 0x23, 0x9b, 0x8e, 0xd6, 0x48, 0xc0, 0x8c, 0x81, 0xe3, 0xda, 0x6e, 0x7f, 0x3c, 0x81, 0x4d, 0x66, 0x86, 0x86, 0x98, 0x14, 0x28, 0xe5, 0xd3, 0x3b, 0x66, 0xaf, 0x11, 0xa0, 0x4b, 0x3b, 0x18, 0xac, 0x4d, 0x22, 0x8b, 0x86, 0x81, 0x0b, 0x7f, 0x4c, 0x06, 0xc5, 0x5c, 0x0f, 0x41, 0xc5, 0x69, 0x1b, 0xab, 0x71, 0x28, 0x54, 0x22, 0x34, 0x27, 0x4e, 0x60, 0x03, 0x8e, 0x96, 0x27, 0xa9, 0x4f, 0x21, 0x48, 0x0b, 0xc6, 0x1e, 0x4b, 0xa1, 0x2b, 0x60, 0xf7, 0x81, 0x58, 0x31, 0x7b, 0xc4, 0x18, 0x50, 0x9f, 0xb3, 0x60, 0xdf, 0xe2, 0xae, 0xb6, 0xbd, 0xbd, 0xb9, 0xa3, 0x09, 0x62, 0x04, 0x14, 0xdd, 0x02, 0x20, 0xf6, 0x7e, 0xa5, 0x3d, 0x00, 0x60, 0x8c, 0x30, 0x20, 0x27, 0x06, 0x52, 0x23, 0x36, 0xb4, 0x5f, 0xb1, 0x86, 0x30, 0xdf, 0xb5, 0x7b, 0xcd, 0x12, 0xef, 0x06, 0x40, 0xc7, 0xfb, 0xe9, 0x55, 0x69, 0x38, 0x0e, 0xa2, 0xbf, 0xd6, 0xa3, 0x77, 0x58, 0x42, 0xb7, 0xd8, 0x8e, 0x0e, 0x3f, 0x2a, 0xa4, 0x16, 0x03, 0x29, 0x67, 0x92, 0x7a, 0x9e, 0x6d, 0x49, 0x7c, 0x68, 0xf8, 0x26, 0x3b, 0xa3, 0x93, 0xe5, 0x87, 0x3c, 0x5d, 0x23, 0x70, 0x5d, 0x3b, 0xb0, 0xbc, 0x0a, 0x49, 0x6a, 0x3d, 0x60, 0x35, 0x23, 0xcd, 0x25, 0x6b, 0x79, 0x66, 0x9f, 0x94, 0xdf, 0xa6, 0xa0, 0x14, 0x45, 0x5a, 0x36, 0x33, 0xc4, 0x3a, 0x3b, 0x12, 0x93, 0xbd, 0x47, 0xc5, 0x93, 0x16, 0xfa, 0xd6, 0x7e, 0x01, 0x52, 0x2e, 0x2f, 0x4e, 0x4f, 0xae, 0x4f, 0x8e, 0xda, 0x35, 0xa6, 0xaa, 0xe9, 0xcd, 0x7a, 0xa3, 0x5e, 0x03, 0xd0, 0xf4, 0x2e, 0xe5, 0x40, 0x44, 0xb5, 0x3d, 0x44, 0x5a, 0x59, 0xf5, 0x99, 0x38, 0x9d, 0x0d, 0x2f, 0x8e, 0x93, 0x5c, 0x86, 0x36, 0x67, 0x05, 0xa0, 0x22, 0x6d, 0x79, 0xf8, 0x2d, 0xee, 0xf1, 0xe9, 0xc1, 0xc1, 0xff, 0xb2, 0x20, 0x59, 0x57, 0x82, 0xe8, 0x0b, 0xe0, 0xb1, 0xe4, 0x72, 0x88, 0x3a, 0x9c, 0x00, 0x26, 0xf7, 0x3d, 0x01, 0x48, 0x01, 0x33, 0xb9, 0x26, 0xfe, 0x57, 0xfb, 0x78, 0xa8, 0x1d, 0xb9, 0x43, 0x0f, 0x40, 0xea, 0xda, 0x69, 0x9a, 0x3b, 0x69, 0xed, 0xb7, 0x86, 0x21, 0xb2, 0xc9, 0x93, 0xd6, 0x76, 0xe5, 0x80, 0xa4, 0xd7, 0x01, 0x67, 0xd4, 0x37, 0x06, 0xd1, 0x02, 0x48, 0x8d, 0xa9, 0xe6, 0x7a, 0xcc, 0x91, 0x5f, 0xcd, 0x84, 0x6f, 0xff, 0x7a, 0x3f, 0xb4, 0xa3, 0x95, 0x51, 0x43, 0x42, 0xe5, 0x35, 0x59, 0xa6, 0x06, 0x80, 0x02, 0x9c, 0xba, 0xf8, 0x2e, 0xe4, 0x46, 0xcc, 0xd9, 0xbf, 0x6f, 0x8f, 0x82, 0x5f, 0x14, 0x75, 0x2b, 0xa9, 0x5f, 0xf0, 0x8f, 0xa4, 0x73, 0x83, 0x3a, 0xae, 0x03, 0xfd, 0xd9, 0x53, 0x96, 0x77, 0x8e, 0x2d, 0xdf, 0x59, 0x6c, 0x84, 0x53, 0x91, 0x42, 0xe8, 0xc8, 0x32, 0x03, 0x10, 0x6f, 0xf5, 0xe6, 0x46, 0x96, 0xa9, 0xe0, 0x60, 0x18, 0xac, 0xdf, 0xd0, 0x18, 0x14, 0xf1, 0x10, 0x4b, 0x37, 0x4c, 0x47, 0x0f, 0x42, 0xdf, 0x61, 0xbe, 0xe8, 0x09, 0x7a, 0xac, 0xe9, 0xb0, 0x5e, 0x70, 0xc1, 0xd6, 0xac, 0x61, 0xbf, 0xb6, 0xae, 0xd7, 0x6b, 0x7d, 0xdb, 0xed, 0x82, 0x4a, 0x30, 0xb4, 0xb8, 0x51, 0xcb, 0x37, 0xa8, 0x7b, 0x4e, 0x1f, 0x47, 0x94, 0x19, 0x13, 0xb0, 0x59, 0xe6, 0x3b, 0x30, 0xbb, 0x45, 0x38, 0xf5, 0x39, 0xff, 0x35, 0x87, 0x1c, 0xd0, 0x0e, 0xae, 0x41, 0x56, 0xb6, 0xa5, 0xac, 0x24, 0xff, 0xba, 0x6a, 0xb7, 0xff, 0x9d, 0x83, 0x14, 0x6a, 0xc5, 0xe8, 0x80, 0xdf, 0x08, 0x68, 0x07, 0xe4, 0xab, 0x12, 0xaf, 0x3a, 0xbc, 0xca, 0x0d, 0x7c, 0x71, 0x10, 0xae, 0x98, 0x81, 0x6c, 0x6a, 0x51, 0x28, 0xa4, 0xb0, 0x97, 0x10, 0x90, 0x0c, 0x1a, 0x78, 0x30, 0xb6, 0x41, 0xeb, 0x60, 0x2c, 0x88, 0x80, 0x10, 0xe2, 0xc0, 0x80, 0x92, 0x8b, 0x4c, 0x03, 0x94, 0x17, 0xd3, 0x00, 0x1f, 0x86, 0x80, 0x70, 0x23, 0x3f, 0xd4, 0x27, 0xee, 0x66, 0x08, 0xfc, 0xfa, 0xbb, 0x77, 0x02, 0x94, 0xe3, 0x00, 0x53, 0xae, 0xa1, 0x46, 0x63, 0xd3, 0x31, 0xf6, 0xf7, 0x06, 0xb9, 0x73, 0x7d, 0xa3, 0x29, 0xc4, 0xa2, 0xe8, 0x2e, 0xdf, 0xd1, 0xc1, 0xf2, 0xdf, 0x88, 0xd0, 0x35, 0x5f, 0x0e, 0x4c, 0x5f, 0x03, 0xa1, 0x3d, 0x58, 0x8b, 0xdf, 0x78, 0xc3, 0x8f, 0x9c, 0xf9, 0x97, 0xd4, 0x61, 0xf6, 0xf2, 0x57, 0xd3, 0xe2, 0x1e, 0xb4, 0xba, 0x0b, 0x2b, 0x8b, 0x7d, 0x23, 0xcb, 0x38, 0x65, 0x1d, 0x3e, 0x30, 0x0d, 0x3a, 0x0c, 0x82, 0x06, 0x11, 0x8f, 0xc3, 0xc0, 0xf6, 0x6c, 0xc7, 0x35, 0x19, 0xf9, 0x0a, 0x7a, 0x81, 0xd5, 0x1f, 0x04, 0xbb, 0x8d, 0xe6, 0x86, 0x77, 0xbf, 0x47, 0xbe, 0x2d, 0xbf, 0xae, 0x89, 0xee, 0xbf, 0xe7, 0xf8}; // Length of this frame is 294 // This spdy packet does not contain interleaved frames const unsigned char spdy_syn_stream_frame[] = { 0x80, 0x02, 0x00, 0x01, 0x01, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xea, 0xdf, 0xa2, 0x51, 0xb2, 0x62, 0xe0, 0x62, 0x60, 0x83, 0xa4, 0x17, 0x86, 0x28, 0x34, 0xdb, 0x75, 0x30, 0xac, 0xd7, 0x06, 0x89, 0xc2, 0xfd, 0x61, 0x5d, 0x68, 0x6b, 0xa0, 0x67, 0xa9, 0x83, 0x70, 0x13, 0x58, 0xc0, 0x42, 0x07, 0xee, 0x3f, 0x1d, 0x2d, 0x7d, 0x2d, 0xb0, 0x98, 0x29, 0x03, 0x1f, 0x6a, 0x66, 0x66, 0x90, 0xf3, 0x0c, 0xf6, 0x87, 0x3a, 0x55, 0x07, 0xec, 0x56, 0xb0, 0x3a, 0x73, 0x1d, 0x88, 0x7a, 0x63, 0x06, 0x7e, 0xb4, 0xec, 0xce, 0x20, 0x08, 0xf2, 0x8c, 0x0e, 0xd4, 0x37, 0x3a, 0xc5, 0x29, 0xc9, 0x19, 0x70, 0x35, 0xb0, 0x14, 0xc2, 0xc0, 0x97, 0x9a, 0xa7, 0x1b, 0x1a, 0xac, 0x93, 0x0a, 0x75, 0x08, 0x03, 0x0b, 0x28, 0xfb, 0x33, 0x70, 0x03, 0x93, 0xaf, 0x5e, 0x72, 0x5e, 0x9e, 0x5e, 0x72, 0x7e, 0x2e, 0x03, 0x5b, 0x2e, 0xb0, 0xcc, 0xc9, 0x4f, 0x61, 0x60, 0x76, 0x77, 0x0d, 0x61, 0x60, 0x2b, 0x06, 0x26, 0xd3, 0xdc, 0x54, 0xa0, 0xba, 0x92, 0x92, 0x02, 0x06, 0x66, 0x50, 0x70, 0x30, 0xea, 0x33, 0x70, 0x21, 0xf2, 0x30, 0x43, 0x81, 0x6f, 0x7e, 0x55, 0x66, 0x4e, 0x4e, 0xa2, 0xbe, 0xa9, 0x1e, 0x40, 0x06, 0x0a, 0x1a, 0x11, 0x86, 0x86, 0xd6, 0x0a, 0xa1, 0xd6, 0x0a, 0x3e, 0x99, 0x79, 0xa5, 0x15, 0x0a, 0x15, 0x16, 0x66, 0xf1, 0x66, 0x26, 0xd6, 0x0a, 0x60, 0x4b, 0x35, 0x15, 0x1c, 0x81, 0x81, 0x95, 0x1a, 0x9e, 0x9a, 0xe4, 0x9d, 0x59, 0xa2, 0x6f, 0x6a, 0x6c, 0xa2, 0x67, 0x64, 0xa8, 0xa0, 0xe1, 0xed, 0x11, 0xe2, 0xeb, 0xa3, 0xa3, 0x90, 0x93, 0x99, 0x9d, 0xaa, 0xe0, 0x9e, 0x9a, 0x9c, 0x9d, 0xaf, 0xa9, 0xe0, 0x9c, 0x01, 0x2c, 0x96, 0x52, 0xf5, 0x0d, 0x0d, 0xf5, 0x0c, 0xf4, 0xcc, 0xcc, 0xcd, 0x81, 0xc6, 0x06, 0x27, 0xa6, 0x25, 0x16, 0x65, 0x42, 0xf5, 0x30, 0xb0, 0x43, 0xe3, 0x86, 0x81, 0x03, 0x16, 0x65, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff}; // Length of this frame is 1460 const unsigned char spdy_datastream_frame[] = { 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x93, 0x0a, 0x09, 0x09, 0x09, 0x43, 0x4e, 0x4e, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x28, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x28, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x69, 0x73, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x28, 0x27, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x27, 0x29, 0x20, 0x20, 0x26, 0x26, 0x20, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x20, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x2f, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x27, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x2c, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x63, 0x6e, 0x6e, 0x27, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x69, 0x66, 0x28, 0x21, 0x68, 0x61, 0x73, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x24, 0x28, 0x27, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x27, 0x29, 0x2e, 0x73, 0x68, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x24, 0x28, 0x27, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x55, 0x70, 0x73, 0x65, 0x6c, 0x6c, 0x27, 0x29, 0x2e, 0x73, 0x68, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x09, 0x24, 0x28, 0x27, 0x70, 0x6d, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x27, 0x29, 0x2e, 0x73, 0x68, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x24, 0x28, 0x27, 0x70, 0x6d, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x4f, 0x66, 0x66, 0x27, 0x29, 0x2e, 0x68, 0x69, 0x64, 0x65, 0x28, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x43, 0x4e, 0x4e, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x28, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x2f, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x27, 0x6e, 0x6f, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x73, 0x27, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x24, 0x28, 0x27, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x55, 0x70, 0x73, 0x65, 0x6c, 0x6c, 0x27, 0x29, 0x2e, 0x73, 0x68, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x24, 0x28, 0x27, 0x70, 0x6d, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x27, 0x29, 0x2e, 0x68, 0x69, 0x64, 0x65, 0x28, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x24, 0x28, 0x27, 0x70, 0x6d, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x4f, 0x66, 0x66, 0x27, 0x29, 0x2e, 0x73, 0x68, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x43, 0x4e, 0x4e, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x28, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x0a, 0x0a, 0x0a, 0x09, 0x69, 0x66, 0x20, 0x28, 0x28, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x43, 0x4e, 0x4e, 0x5f, 0x46, 0x42, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x66, 0x62, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x69, 0x73, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x28, 0x27, 0x63, 0x6e, 0x6e, 0x27, 0x29, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x21, 0x24, 0x28, 0x27, 0x66, 0x62, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x27, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x66, 0x62, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x28, 0x27, 0x64, 0x69, 0x76, 0x27, 0x2c, 0x20, 0x7b, 0x20, 0x69, 0x64, 0x3a, 0x20, 0x27, 0x66, 0x62, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x27, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x24, 0x28, 0x27, 0x70, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x50, 0x61, 0x6e, 0x65, 0x6c, 0x27, 0x29, 0x2e, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x28, 0x66, 0x62, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x7d, 0x0a, 0x0a, 0x0a, 0x0a, 0x09, 0x7d, 0x2f, 0x2f, 0x65, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0a, 0x09, 0x7d, 0x2c, 0x0a, 0x0a, 0x0a, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x3a, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x6f, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x09, 0x09, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x70, 0x6d, 0x57, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, 0x27, 0x3a, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x70, 0x6d, 0x57, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x6c, 0x27, 0x3a, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, 0x4d, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4f, 0x62, 0x6a, 0x2e, 0x57, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, 0x2e, 0x69, 0x73, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x27, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x4d, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4f, 0x62, 0x6a, 0x2e, 0x57, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x28, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x09, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x70, 0x6d, 0x53, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x27, 0x3a, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, 0x4d, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4f, 0x62, 0x6a, 0x2e, 0x53, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x69, 0x73, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x27, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x4d, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4f, 0x62, 0x6a, 0x2e, 0x53, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x28, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x09, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x70, 0x6d, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x27, 0x3a, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, 0x4d, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4f, 0x62, 0x6a, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x2e, 0x69, 0x73, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x27, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x4d, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4f, 0x62, 0x6a, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x28, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x09, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x7d, 0x2c, 0x0a, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x3a, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x66, 0x6c, 0x61, 0x67, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x69, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x93, 0x66, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x3b, 0x0a, 0x09}; // Length of this frame is 1460 // This spdy packet contains 2 interleaved spdy frames const unsigned char spdy_syn_reply_frame[] = { 0x80, 0x02, 0x00, 0x02, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x38, 0xea, 0xdf, 0xa2, 0x51, 0xb2, 0x62, 0xe0, 0x67, 0x60, 0x71, 0x01, 0x2a, 0x60, 0x90, 0x05, 0x7a, 0x53, 0x47, 0xc1, 0xc8, 0x44, 0x01, 0xe8, 0x1f, 0x05, 0x60, 0x9a, 0x35, 0x54, 0x30, 0x34, 0xb5, 0x32, 0xb5, 0xb4, 0x32, 0x31, 0x53, 0x70, 0xf7, 0x0d, 0x61, 0x60, 0x0b, 0x06, 0xa7, 0x0a, 0x06, 0x36, 0xc7, 0x02, 0x50, 0xe4, 0x32, 0xf0, 0xa2, 0x24, 0x32, 0x06, 0xd6, 0xa4, 0xca, 0x12, 0x20, 0xc5, 0x8b, 0x12, 0xf3, 0x0c, 0x32, 0x50, 0xf7, 0xd9, 0x9a, 0x19, 0xe8, 0x28, 0x14, 0x14, 0x65, 0x96, 0x01, 0x2d, 0x82, 0x33, 0x18, 0xb8, 0x10, 0x29, 0x83, 0x81, 0xcb, 0x3b, 0x35, 0xb5, 0x40, 0xd7, 0x31, 0x27, 0xb3, 0x2c, 0x95, 0x41, 0x00, 0x3d, 0x39, 0x31, 0xb0, 0x80, 0x7c, 0xc2, 0xc0, 0x87, 0x9a, 0x04, 0x18, 0x58, 0x81, 0x99, 0xca, 0xc8, 0x82, 0x81, 0x07, 0x39, 0x8e, 0x19, 0x38, 0xe1, 0xc1, 0xcc, 0xc0, 0x92, 0x02, 0xf1, 0x57, 0x29, 0xd0, 0x4e, 0x23, 0x53, 0x05, 0x60, 0x54, 0x41, 0xfc, 0x65, 0x60, 0x68, 0x65, 0x68, 0x62, 0x65, 0x6c, 0x04, 0xf6, 0x17, 0x3b, 0x34, 0x45, 0xe0, 0x50, 0x67, 0x6a, 0x65, 0x64, 0x0c, 0x10, 0x58, 0x1d, 0x57, 0x36, 0xc8, 0x81, 0x89, 0x60, 0x07, 0x0a, 0x96, 0x64, 0xe6, 0xa6, 0xe6, 0x97, 0x96, 0xd8, 0x1a, 0xe9, 0x28, 0x00, 0x7d, 0x68, 0x6b, 0x68, 0xc0, 0xc0, 0x85, 0x48, 0x44, 0x0c, 0x52, 0xce, 0xee, 0xb6, 0xa1, 0xc1, 0x56, 0xce, 0x8e, 0x56, 0xce, 0xa5, 0x05, 0xc0, 0xa4, 0x9e, 0x99, 0x97, 0x6f, 0xad, 0x50, 0x90, 0x58, 0x92, 0x61, 0xab, 0xcf, 0xc0, 0x06, 0x89, 0x00, 0x06, 0x36, 0x60, 0xc1, 0xa0, 0xe0, 0xef, 0xcd, 0xc0, 0x02, 0xca, 0x66, 0x0c, 0x52, 0xa1, 0xa0, 0x62, 0xc3, 0x11, 0x54, 0x6c, 0xe8, 0x38, 0x42, 0xc2, 0xd5, 0x15, 0xe6, 0x77, 0x76, 0x68, 0x64, 0x31, 0x70, 0xc0, 0xe2, 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x93, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xed, 0x7d, 0x69, 0x77, 0xdb, 0x38, 0xb2, 0xe8, 0x67, 0xfb, 0x9c, 0xfc, 0x07, 0x8c, 0x32, 0xb7, 0x65, 0x4f, 0x9b, 0xd4, 0xe2, 0x25, 0x5e, 0x62, 0xe7, 0x38, 0xb6, 0x92, 0xb8, 0xc7, 0xdb, 0x58, 0x4e, 0x72, 0x7b, 0xa6, 0xe7, 0xe8, 0x40, 0x24, 0x24, 0xd1, 0xa6, 0x48, 0x36, 0x41, 0x5a, 0x56, 0x32, 0xf9, 0xef, 0xaf, 0x0a, 0x00, 0x57, 0x91, 0x5a, 0x6c, 0x27, 0xf1, 0xbc, 0xf7, 0x7a, 0xee, 0x8d, 0x45, 0x12, 0x4b, 0xa1, 0x50, 0xa8, 0x0d, 0x85, 0xc2, 0xeb, 0xbf, 0x1c, 0x5f, 0x1c, 0x5d, 0xff, 0x7e, 0xd9, 0x22, 0x1f, 0xae, 0xcf, 0x4e, 0xc9, 0xe5, 0xc7, 0xb7, 0xa7, 0x27, 0x47, 0xa4, 0xa2, 0xd5, 0x6a, 0x9f, 0xd7, 0x8f, 0x6a, 0xb5, 0xe3, 0xeb, 0x63, 0xf9, 0x61, 0x43, 0xaf, 0x37, 0xc8, 0xb5, 0x4f, 0x1d, 0x6e, 0x05, 0x96, 0xeb, 0x50, 0xbb, 0x56, 0x6b, 0x9d, 0x57, 0x2a, 0x83, 0x20, 0xf0, 0x76, 0x6b, 0xb5, 0xd1, 0x68, 0xa4, 0x8f, 0xd6, 0x75, 0xd7, 0xef, 0xd7, 0xae, 0xaf, 0x6a, 0x83, 0x60, 0x68, 0x6f, 0xd4, 0x6c, 0xd7, 0xe5, 0x4c, 0x37, 0x03, 0xb3, 0x72, 0xf0, 0x1a, 0xdf, 0x10, 0x9b, 0x3a, 0xfd, 0xfd, 0x0a, 0x73, 0xf0, 0x99, 0x51, 0xf3, 0xe0, 0x75, 0x60, 0x05, 0x36, 0x3b, 0x38, 0x3a, 0x3f, 0xd7, 0x0d, 0x77, 0x48, 0x34, 0xf2, 0xd6, 0x67, 0xf4, 0xd6, 0x72, 0xfa, 0xe4, 0x9c, 0x8d, 0xf8, 0x1a, 0xf9, 0xa8, 0xb7, 0xf5, 0x35, 0xf2, 0xd9, 0xf5, 0x6d, 0x13, 0xfe, 0x30, 0x1a, 0x0c, 0x98, 0xbf, 0x46, 0x5a, 0x4e, 0xc0, 0xfc, 0x80, 0x5a, 0xce, 0x90, 0x39, 0x01, 0xf9, 0x85, 0x0e, 0xbd, 0x3d, 0xf2, 0xc9, 0x32, 0x99, 0x2b, 0x6a, 0xbd, 0xae, 0xc9, 0x46, 0x09, 0x21, 0xaf, 0x87, 0x2c, 0xa0, 0x04, 0x01, 0xd4, 0xd8, 0x9f, 0xa1, 0x75, 0xb7, 0x5f, 0xf1, 0x59, 0xcf, 0x67, 0x7c, 0x50, 0x21, 0x86, 0x0b, 0x8d, 0x38, 0xc1, 0x7e, 0xa5, 0xb1, 0x5d, 0xaf, 0xef, 0x85, 0xbe, 0xbd, 0xff, 0x46, 0x7d, 0xdb, 0x6f, 0x54, 0x0e, 0x96, 0x65, 0x4d, 0x87, 0x0e, 0xd9, 0x7e, 0xe5, 0x98, 0x71, 0xc3, 0xb7, 0x3c, 0x1c, 0x73, 0xaa, 0x5e, 0x04, 0xb3, 0xc9, 0x6c, 0xeb, 0x8e, 0xf9, 0x9c, 0x00, 0x6c, 0x30, 0xbe, 0x80, 0xf1, 0x80, 0x74, 0xa3, 0x51, 0x38, 0x00, 0x0f, 0xa1, 0x8e, 0x49, 0x2c, 0xa7, 0xe7, 0xfa, 0x43, 0x8a, 0x6d, 0x10, 0xf8, 0xbf, 0x54, 0xd9, 0xc0, 0xf5, 0x08, 0x0f, 0x5c, 0xdf, 0x62, 0x30, 0xde, 0x51, 0x34, 0xc4, 0x6e, 0xc8, 0x2d, 0x87, 0x71, 0x78, 0xc5, 0xd2, 0x83, 0x5d, 0x23, 0x9e, 0x6b, 0x03, 0xf6, 0x0d, 0xf8, 0x80, 0xcd, 0x0e, 0x5d, 0x9f, 0xe9, 0xe4, 0x9d, 0xeb, 0x43, 0x07, 0x9a, 0xc9, 0xbc, 0x60, 0x00, 0x00, 0x02, 0x34, 0xb4, 0xcf, 0xd6, 0x48, 0x04, 0xa1, 0xe7, 0xbb, 0x77, 0x80, 0x1d, 0x4e, 0xb8, 0xc7, 0x0c, 0x8b, 0xda, 0xc4, 0x67, 0x9e, 0xeb, 0x07, 0xd0, 0x04, 0xbe, 0x76, 0xa1, 0xa5, 0xd0, 0xb4, 0xe0, 0x8f, 0x37, 0x70, 0x03, 0x97, 0xf4, 0xa9, 0x6d, 0x33, 0x09, 0x8d, 0x04, 0x1c, 0xba, 0xa7, 0x46, 0x00, 0x63, 0x24, 0xfd, 0x10, 0x9b, 0xd1, 0x73, 0xe8, 0xf9, 0x3b, 0x1b, 0x8f, 0x5c, 0xdf, 0xe4, 0x59, 0xdc, 0x88, 0xee, 0xc5, 0xf8, 0x63, 0x40, 0xe4, 0xab, 0xeb, 0x4f, 0x6b, 0xea, 0xb5, 0x40, 0x8e, 0xeb, 0xd8, 0x30, 0xd0, 0xb5, 0x2c, 0xca, 0xe4, 0xc4, 0xab, 0x9f, 0x23, 0x9c, 0xfd, 0xe8, 0xf7, 0x24, 0x7e, 0xb0, 0xcd, 0x33, 0xd7, 0x61, 0xe3, 0x35, 0x18, 0x9f, 0x1c, 0x56, 0x82, 0x23, 0x9b, 0x8e, 0xd6, 0x48, 0xc0, 0x8c, 0x81, 0xe3, 0xda, 0x6e, 0x7f, 0x3c, 0x81, 0x4d, 0x66, 0x86, 0x86, 0x98, 0x14, 0x28, 0xe5, 0xd3, 0x3b, 0x66, 0xaf, 0x11, 0xa0, 0x4b, 0x3b, 0x18, 0xac, 0x4d, 0x22, 0x8b, 0x86, 0x81, 0x0b, 0x7f, 0x4c, 0x06, 0xc5, 0x5c, 0x0f, 0x41, 0xc5, 0x69, 0x1b, 0xab, 0x71, 0x28, 0x54, 0x22, 0x34, 0x27, 0x4e, 0x60, 0x03, 0x8e, 0x96, 0x27, 0xa9, 0x4f, 0x21, 0x48, 0x0b, 0xc6, 0x1e, 0x4b, 0xa1, 0x2b, 0x60, 0xf7, 0x81, 0x58, 0x31, 0x7b, 0xc4, 0x18, 0x50, 0x9f, 0xb3, 0x60, 0xdf, 0xe2, 0xae, 0xb6, 0xbd, 0xbd, 0xb9, 0xa3, 0x09, 0x62, 0x04, 0x14, 0xdd, 0x02, 0x20, 0xf6, 0x7e, 0xa5, 0x3d, 0x00, 0x60, 0x8c, 0x30, 0x20, 0x27, 0x06, 0x52, 0x23, 0x36, 0xb4, 0x5f, 0xb1, 0x86, 0x30, 0xdf, 0xb5, 0x7b, 0xcd, 0x12, 0xef, 0x06, 0x40, 0xc7, 0xfb, 0xe9, 0x55, 0x69, 0x38, 0x0e, 0xa2, 0xbf, 0xd6, 0xa3, 0x77, 0x58, 0x42, 0xb7, 0xd8, 0x8e, 0x0e, 0x3f, 0x2a, 0xa4, 0x16, 0x03, 0x29, 0x67, 0x92, 0x7a, 0x9e, 0x6d, 0x49, 0x7c, 0x68, 0xf8, 0x26, 0x3b, 0xa3, 0x93, 0xe5, 0x87, 0x3c, 0x5d, 0x23, 0x70, 0x5d, 0x3b, 0xb0, 0xbc, 0x0a, 0x49, 0x6a, 0x3d, 0x60, 0x35, 0x23, 0xcd, 0x25, 0x6b, 0x79, 0x66, 0x9f, 0x94, 0xdf, 0xa6, 0xa0, 0x14, 0x45, 0x5a, 0x36, 0x33, 0xc4, 0x3a, 0x3b, 0x12, 0x93, 0xbd, 0x47, 0xc5, 0x93, 0x16, 0xfa, 0xd6, 0x7e, 0x01, 0x52, 0x2e, 0x2f, 0x4e, 0x4f, 0xae, 0x4f, 0x8e, 0xda, 0x35, 0xa6, 0xaa, 0xe9, 0xcd, 0x7a, 0xa3, 0x5e, 0x03, 0xd0, 0xf4, 0x2e, 0xe5, 0x40, 0x44, 0xb5, 0x3d, 0x44, 0x5a, 0x59, 0xf5, 0x99, 0x38, 0x9d, 0x0d, 0x2f, 0x8e, 0x93, 0x5c, 0x86, 0x36, 0x67, 0x05, 0xa0, 0x22, 0x6d, 0x79, 0xf8, 0x2d, 0xee, 0xf1, 0xe9, 0xc1, 0xc1, 0xff, 0xb2, 0x20, 0x59, 0x57, 0x82, 0xe8, 0x0b, 0xe0, 0xb1, 0xe4, 0x72, 0x88, 0x3a, 0x9c, 0x00, 0x26, 0xf7, 0x3d, 0x01, 0x48, 0x01, 0x33, 0xb9, 0x26, 0xfe, 0x57, 0xfb, 0x78, 0xa8, 0x1d, 0xb9, 0x43, 0x0f, 0x40, 0xea, 0xda, 0x69, 0x9a, 0x3b, 0x69, 0xed, 0xb7, 0x86, 0x21, 0xb2, 0xc9, 0x93, 0xd6, 0x76, 0xe5, 0x80, 0xa4, 0xd7, 0x01, 0x67, 0xd4, 0x37, 0x06, 0xd1, 0x02, 0x48, 0x8d, 0xa9, 0xe6, 0x7a, 0xcc, 0x91, 0x5f, 0xcd, 0x84, 0x6f, 0xff, 0x7a, 0x3f, 0xb4, 0xa3, 0x95, 0x51, 0x43, 0x42, 0xe5, 0x35, 0x59, 0xa6, 0x06, 0x80, 0x02, 0x9c, 0xba, 0xf8, 0x2e, 0xe4, 0x46, 0xcc, 0xd9, 0xbf, 0x6f, 0x8f, 0x82, 0x5f, 0x14, 0x75, 0x2b, 0xa9, 0x5f, 0xf0, 0x8f, 0xa4, 0x73, 0x83, 0x3a, 0xae, 0x03, 0xfd, 0xd9, 0x53, 0x96, 0x77, 0x8e, 0x2d, 0xdf, 0x59, 0x6c, 0x84, 0x53, 0x91, 0x42, 0xe8, 0xc8, 0x32, 0x03, 0x10, 0x6f, 0xf5, 0xe6, 0x46, 0x96, 0xa9, 0xe0, 0x60, 0x18, 0xac, 0xdf, 0xd0, 0x18, 0x14, 0xf1, 0x10, 0x4b, 0x37, 0x4c, 0x47, 0x0f, 0x42, 0xdf, 0x61, 0xbe, 0xe8, 0x09, 0x7a, 0xac, 0xe9, 0xb0, 0x5e, 0x70, 0xc1, 0xd6, 0xac, 0x61, 0xbf, 0xb6, 0xae, 0xd7, 0x6b, 0x7d, 0xdb, 0xed, 0x82, 0x4a, 0x30, 0xb4, 0xb8, 0x51, 0xcb, 0x37, 0xa8, 0x7b, 0x4e, 0x1f, 0x47, 0x94, 0x19, 0x13, 0xb0, 0x59, 0xe6, 0x3b, 0x30, 0xbb, 0x45, 0x38, 0xf5, 0x39, 0xff, 0x35, 0x87, 0x1c, 0xd0, 0x0e, 0xae, 0x41, 0x56, 0xb6, 0xa5, 0xac, 0x24, 0xff, 0xba, 0x6a, 0xb7, 0xff, 0x9d, 0x83, 0x14, 0x6a, 0xc5, 0xe8, 0x80, 0xdf, 0x08, 0x68, 0x07, 0xe4, 0xab, 0x12, 0xaf, 0x3a, 0xbc, 0xca, 0x0d, 0x7c, 0x71, 0x10, 0xae, 0x98, 0x81, 0x6c, 0x6a, 0x51, 0x28, 0xa4, 0xb0, 0x97, 0x10, 0x90, 0x0c, 0x1a, 0x78, 0x30, 0xb6, 0x41, 0xeb, 0x60, 0x2c, 0x88, 0x80, 0x10, 0xe2, 0xc0, 0x80, 0x92, 0x8b, 0x4c, 0x03, 0x94, 0x17, 0xd3, 0x00, 0x1f, 0x86, 0x80, 0x70, 0x23, 0x3f, 0xd4, 0x27, 0xee, 0x66, 0x08, 0xfc, 0xfa, 0xbb, 0x77, 0x02, 0x94, 0xe3, 0x00, 0x53, 0xae, 0xa1, 0x46, 0x63, 0xd3, 0x31, 0xf6, 0xf7, 0x06, 0xb9, 0x73, 0x7d, 0xa3, 0x29, 0xc4, 0xa2, 0xe8, 0x2e, 0xdf, 0xd1, 0xc1, 0xf2, 0xdf, 0x88, 0xd0, 0x35, 0x5f, 0x0e, 0x4c, 0x5f, 0x03, 0xa1, 0x3d, 0x58, 0x8b, 0xdf, 0x78, 0xc3, 0x8f, 0x9c, 0xf9, 0x97, 0xd4, 0x61, 0xf6, 0xf2, 0x57, 0xd3, 0xe2, 0x1e, 0xb4, 0xba, 0x0b, 0x2b, 0x8b, 0x7d, 0x23, 0xcb, 0x38, 0x65, 0x1d, 0x3e, 0x30, 0x0d, 0x3a, 0x0c, 0x82, 0x06, 0x11, 0x8f, 0xc3, 0xc0, 0xf6, 0x6c, 0xc7, 0x35, 0x19, 0xf9, 0x0a, 0x7a, 0x81, 0xd5, 0x1f, 0x04, 0xbb, 0x8d, 0xe6, 0x86, 0x77, 0xbf, 0x47, 0xbe, 0x2d, 0xbf, 0xae, 0x89, 0xee, 0xbf, 0xe7, 0xf8}; const unsigned char spdy_low_version_frame[] = { 0x80, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x01}; const unsigned char spdy_high_version_frame[] = { 0x80, 0x06, 0x00, 0x02, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x01}; const unsigned char spdy_invalid_type_frame[] = { 0x80, 0x02, 0x00, 0x70, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x01}; const unsigned char spdy_incorrect_control_frame[] = { 0x70, 0x02, 0x00, 0x02}; const unsigned char spdy_control_frame_1[] = { 0x80, 0x02, 0x00, 0x02, 0x00, 0x00, 0x08, 0x18, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00}; const unsigned char spdy_control_frame_2[] = { 0x80, 0x02, 0x00, 0x02, 0x00, 0x00, 0x22, 0x18, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00}; const unsigned char spdy_rst_frame[] = { 0x80, 0x02, 0x00, 0x03, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x18, 0x19}; const unsigned char spdy_rst_frame_with_correct_length[] = { 0x80, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x18, 0x19}; const unsigned char spdy_settings_frame[] = { 0x80, 0x02, 0x00, 0x04, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}; const unsigned char spdy_noop_frame[] = { 0x80, 0x02, 0x00, 0x05, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}; const unsigned char spdy_ping_frame[] = { 0x80, 0x02, 0x00, 0x06, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}; const unsigned char spdy_ping_frame_with_correct_length[] = { 0x80, 0x02, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x18, 0x19}; const unsigned char spdy_goaway_frame_with_correct_length[] = { 0x80, 0x02, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x18, 0x19}; const unsigned char spdy_goaway_frame[] = { 0x80, 0x02, 0x00, 0x07, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}; const unsigned char spdy_headers_frame[] = { 0x80, 0x02, 0x00, 0x08, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}; const unsigned char spdy_window_update_frame[] = { 0x80, 0x02, 0x00, 0x09, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}; const unsigned char spdy_credential_frame[] = { 0x80, 0x02, 0x00, 0x0a, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}; const unsigned char spdy_invalid_frame_type[] = { 0x80, 0x02, 0x00, 0x11, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00};����������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/tests/piontests.vcxproj��������������������������������������������������������0000644�0003720�0000144�00000043631�12215647065�020563� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug_DLL_full|Win32"> <Configuration>Debug_DLL_full</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_DLL_full|x64"> <Configuration>Debug_DLL_full</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_static|Win32"> <Configuration>Debug_static</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_static|x64"> <Configuration>Debug_static</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_DLL_full|Win32"> <Configuration>Release_DLL_full</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_DLL_full|x64"> <Configuration>Release_DLL_full</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_static|Win32"> <Configuration>Release_static</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_static|x64"> <Configuration>Release_static</Configuration> <Platform>x64</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{5AD25B42-E2C0-4D08-985B-E8F115D19D56}</ProjectGuid> <RootNamespace>PionNetUnitTests</RootNamespace> <Keyword>Win32Proj</Keyword> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <WholeProgramOptimization>true</WholeProgramOptimization> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <WholeProgramOptimization>true</WholeProgramOptimization> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_win32.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_win32.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_win32.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_win32.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_x64.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_x64.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_x64.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_x64.props" /> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup> <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" /> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'"> <ClCompile> <PreprocessorDefinitions>_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <AdditionalDependencies>EchoService.lib;FileService.lib;HelloService.lib;LogService.lib;CookieService.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalLibraryDirectories>..\services\$(Configuration)_$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <SubSystem>Console</SubSystem> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> <PostBuildEvent> <Message>auto run tests</Message> <Command>"$(TargetPath)" --log_level=test_suite</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> <Link> <AdditionalDependencies>EchoService.lib;FileService.lib;HelloService.lib;LogService.lib;CookieService.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalLibraryDirectories>..\services\$(Configuration)_$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <SubSystem>Console</SubSystem> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> <PostBuildEvent> <Message>auto run tests</Message> <Command>"$(TargetPath)" --log_level=test_suite</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'"> <ClCompile> <PreprocessorDefinitions>_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </ClCompile> <Link> <AdditionalDependencies>EchoService.lib;FileService.lib;HelloService.lib;LogService.lib;CookieService.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Configuration)_$(PlatformName)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <SubSystem>Console</SubSystem> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> <PostBuildEvent> <Message>auto run tests</Message> <Command>"$(TargetPath)" --log_level=test_suite</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </ClCompile> <Link> <AdditionalDependencies>EchoService.lib;FileService.lib;HelloService.lib;LogService.lib;CookieService.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Configuration)_$(PlatformName)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <SubSystem>Console</SubSystem> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> <PostBuildEvent> <Message>auto run tests</Message> <Command>"$(TargetPath)" --log_level=test_suite</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'"> <ClCompile> <PreprocessorDefinitions>_CONSOLE;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> <PostBuildEvent> <Message>auto run tests</Message> <Command>echo $(PION_PATH) & PATH=$(PION_PATH) & "$(TargetPath)" --log_level=test_suite</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>_CONSOLE;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> <Link> <SubSystem>Console</SubSystem> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> <PostBuildEvent> <Message>auto run tests</Message> <Command>echo $(PION_PATH) & PATH=$(PION_PATH) & "$(TargetPath)" --log_level=test_suite</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'"> <ClCompile> <PreprocessorDefinitions>_CONSOLE;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> <PostBuildEvent> <Message>auto run tests</Message> <Command>cd $(ProjectDir) & PATH=$(PION_PATH) & "$(TargetPath)" --log_level=test_suite</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>_CONSOLE;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> <PostBuildEvent> <Message>auto run tests</Message> <Command>echo $(PION_PATH) & PATH=$(PION_PATH) & "$(TargetPath)" --log_level=test_suite</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="algorithm_tests.cpp" /> <ClCompile Include="file_service_tests.cpp" /> <ClCompile Include="http_message_tests.cpp" /> <ClCompile Include="http_parser_tests.cpp" /> <ClCompile Include="http_plugin_server_tests.cpp" /> <ClCompile Include="http_request_tests.cpp" /> <ClCompile Include="http_response_tests.cpp" /> <ClCompile Include="http_types_tests.cpp" /> <ClCompile Include="piontests.cpp" /> <ClCompile Include="plugin_manager_tests.cpp" /> <ClCompile Include="plugin_tests.cpp" /> <ClCompile Include="tcp_server_tests.cpp" /> <ClCompile Include="tcp_stream_tests.cpp" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\PionNetServices.vcxproj"> <Project>{99d0c0c7-793b-49b1-a42e-cb563e5bb81f}</Project> <ReferenceOutputAssembly>false</ReferenceOutputAssembly> </ProjectReference> <ProjectReference Include="..\src\pion.vcxproj"> <Project>{61f4b4d5-3608-4264-9f4b-b0da3e3fdf62}</Project> <ReferenceOutputAssembly>false</ReferenceOutputAssembly> </ProjectReference> <ProjectReference Include="TestPlugins.vcxproj"> <Project>{7080e9f1-318f-4152-9e36-9f427f5ce9b7}</Project> <ReferenceOutputAssembly>false</ReferenceOutputAssembly> </ProjectReference> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> </Project>�������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/Makefile.am��������������������������������������������������������������������0000644�0003720�0000144�00000001014�12215647065�015775� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -------------------------------- # pion automake configuration file # -------------------------------- ACLOCAL_AMFLAGS = -I m4 -I build SUBDIRS = include src services utils @PION_TESTS_MAKEDIRS@ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = pion.pc EXTRA_DIST = README.md index.html autogen.sh *.sln *.xcodeproj *.vcxproj doc \ build/*.props build/*.sh build/*.pl build/*.bat build/*.dll \ build/pion.ico build/common.inc include $(top_srcdir)/build/doxygen.inc docs: doxygen-doc clean-docs: doxygen-clean ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/configure����������������������������������������������������������������������0000755�0003720�0000144�00002536655�12215647077�015705� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.63 for pion 5.0.4. # # Report bugs to <pion-users@lists.sourceforge.net>. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell bug-autoconf@gnu.org about your system, echo including any error possibly output before this message. echo This can help us improve future autoconf versions. echo Configuration will now proceed without shell functions. } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac ECHO=${lt_ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF $* _LT_EOF exit 0 fi # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi exec 7<&0 </dev/null 6>&1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='pion' PACKAGE_TARNAME='pion' PACKAGE_VERSION='5.0.4' PACKAGE_STRING='pion 5.0.4' PACKAGE_BUGREPORT='pion-users@lists.sourceforge.net' ac_unique_file="src/algorithm.cpp" # Factoring default headers for most tests. ac_includes_default="\ #include <stdio.h> #ifdef HAVE_SYS_TYPES_H # include <sys/types.h> #endif #ifdef HAVE_SYS_STAT_H # include <sys/stat.h> #endif #ifdef STDC_HEADERS # include <stdlib.h> # include <stddef.h> #else # ifdef HAVE_STDLIB_H # include <stdlib.h> # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include <memory.h> # endif # include <string.h> #endif #ifdef HAVE_STRINGS_H # include <strings.h> #endif #ifdef HAVE_INTTYPES_H # include <inttypes.h> #endif #ifdef HAVE_STDINT_H # include <stdint.h> #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS PION_EXTERNAL_LIBS PION_LOG_LIB PION_SSL_LIB PION_BZLIB PION_ZLIB PION_CYGWIN_DIRECTORY PION_LIBRARY_VERSION PION_TESTS_CPPFLAGS PION_TESTS_MAKEDIRS BOOST_TEST_LIB BOOST_REGEX_LIB BOOST_FILESYSTEM_LIB BOOST_THREAD_LIB BOOST_SYSTEM_LIB BOOST_DATE_TIME_LIB BOOST_LIB_EXTENSION BOOST_LDFLAGS BOOST_CPPFLAGS BOOST_HOME_DIR PION_PLUGINS_DIRECTORY PION_DLOPEN_LIBS CXXCPP am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX DOXYGEN_PAPER_SIZE DX_COND_latex_FALSE DX_COND_latex_TRUE DX_COND_pdf_FALSE DX_COND_pdf_TRUE DX_PDFLATEX DX_FLAG_pdf DX_COND_ps_FALSE DX_COND_ps_TRUE DX_EGREP DX_DVIPS DX_MAKEINDEX DX_LATEX DX_FLAG_ps DX_COND_html_FALSE DX_COND_html_TRUE DX_FLAG_html DX_COND_chi_FALSE DX_COND_chi_TRUE DX_FLAG_chi DX_COND_chm_FALSE DX_COND_chm_TRUE DX_HHC DX_FLAG_chm DX_COND_xml_FALSE DX_COND_xml_TRUE DX_FLAG_xml DX_COND_rtf_FALSE DX_COND_rtf_TRUE DX_FLAG_rtf DX_COND_man_FALSE DX_COND_man_TRUE DX_FLAG_man DX_COND_dot_FALSE DX_COND_dot_TRUE DX_DOT DX_FLAG_dot DX_COND_doc_FALSE DX_COND_doc_TRUE DX_PERL DX_DOXYGEN DX_FLAG_doc DX_ENV DX_DOCDIR DX_CONFIG DX_PROJECT CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL lt_ECHO RANLIB AR LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL OBJDUMP DLLTOOL AS host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld enable_libtool_lock enable_doxygen_doc enable_doxygen_dot enable_doxygen_man enable_doxygen_rtf enable_doxygen_xml enable_doxygen_chm enable_doxygen_chi enable_doxygen_html enable_doxygen_ps enable_doxygen_pdf with_arch with_cpu with_debug with_plugins with_boost with_boost_extension enable_tests with_cygwin with_zlib with_bzlib with_openssl enable_logging with_ostream_logging with_log4cplus with_log4cxx with_log4cpp ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP DOXYGEN_PAPER_SIZE CXX CXXFLAGS CCC CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { $as_echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { $as_echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 { (exit 1); exit 1; }; } ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { $as_echo "$as_me: error: working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures pion 5.0.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/pion] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of pion 5.0.4:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-doxygen-doc don't generate any doxygen documentation --enable-doxygen-dot generate graphics for doxygen documentation --enable-doxygen-man generate doxygen manual pages --enable-doxygen-rtf generate doxygen RTF documentation --enable-doxygen-xml generate doxygen XML documentation --enable-doxygen-chm generate doxygen compressed HTML help documentation --enable-doxygen-chi generate doxygen seperate compressed HTML help index file --disable-doxygen-html don't generate doxygen plain HTML documentation --enable-doxygen-ps generate doxygen PostScript documentation --enable-doxygen-pdf generate doxygen PDF documentation --disable-tests do not build and run the unit tests --disable-logging disable all logging support (including std::ostream) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-arch[=LIST] specify comma-separated list of OSX architectures --with-cpu[=MARCH] specify specific CPU architecture for gcc --with-debug build with debugging information --with-plugins[=DIR] directory where Pion Plug-ins are installed --with-boost[=DIR] use boost (default is yes) - it is possible to specify the root directory for boost (optional) --with-boost-extension[=EXT] extension used for boost library files --with-cygwin[=DIR] directory where cygwin is installed (Windows only) --with-zlib[=DIR] location of zlib library (for gzip compression); use --without-zlib to disable --with-bzlib[=DIR] location of bzlib library (for bzip2 compression); use --without-bzlib to disable --with-openssl[=DIR] location of OpenSSL library (enables SSL support); use --without-openssl to disable --with-ostream-logging use std::ostream logging instead of library --with-log4cplus[=DIR] location of log4cplus library (recommended) --with-log4cxx[=DIR] location of log4cxx library --with-log4cpp[=DIR] location of log4cpp library Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor DOXYGEN_PAPER_SIZE a4wide (default), a4, letter, legal or executive CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to <pion-users@lists.sourceforge.net>. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF pion configure 5.0.4 generated by GNU Autoconf 2.63 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by pion $as_me 5.0.4, which was generated by GNU Autoconf 2.63. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test -r "$ac_site_file"; then { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 $as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Initialize some other things ac_aux_dir= for ac_dir in m4 "$srcdir"/m4; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in m4 \"$srcdir\"/m4" >&5 $as_echo "$as_me: error: cannot find install-sh or install.sh in m4 \"$srcdir\"/m4" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # package and version args are now taken from AC_INIT() am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5 $as_echo "$as_me: error: unsafe absolute working directory name" >&2;} { (exit 1); exit 1; }; };; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5 $as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;} { (exit 1); exit 1; }; };; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 $as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 $as_echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AWK+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:$LINENO: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 $as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='pion' VERSION='5.0.4' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' # Use "silent mode" for less verbose build commands in automake 1.11+ # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac AM_BACKSLASH='\' # Needed to set per-target compilation flags DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:$LINENO: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 $as_echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { $as_echo "$as_me:$LINENO: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } if test -z "$ac_file"; then $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 $as_echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi fi fi { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } { $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } { $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi rm -f conftest$ac_cv_exeext { $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <stdarg.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:$LINENO: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:$LINENO: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test "x$CC" != xcc; then { $as_echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else { $as_echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5 $as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -f conftest2.$ac_objext && { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -f conftest2.$ac_objext && { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -f core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } cat >>confdefs.h <<\_ACEOF #define NO_MINUS_C_MINUS_O 1 _ACEOF fi # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi # Setup libtool # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 $as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } { $as_echo "$as_me:$LINENO: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; then $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 $as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 $as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi { $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 $as_echo "$as_me: error: invalid value of canonical build" >&2;} { (exit 1); exit 1; }; };; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:$LINENO: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 $as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 $as_echo "$as_me: error: invalid value of canonical host" >&2;} { (exit 1); exit 1; }; };; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AS+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:$LINENO: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AS+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DLLTOOL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:$LINENO: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OBJDUMP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump enable_dlopen=yes case `pwd` in *\ * | *\ *) { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.2.6b' macro_revision='1.3017' ltmain="$ac_aux_dir/ltmain.sh" { $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if test "${ac_cv_path_SED+set}" = set; then $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed $as_unset ac_script || ac_script= if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5 $as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:$LINENO: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:$LINENO: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if test "${ac_cv_path_FGREP+set}" = set; then $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${lt_cv_path_LD+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$lt_save_ifs" else lt_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$lt_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:$LINENO: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 $as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } { $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes ;; *) lt_cv_prog_gnu_ld=no ;; esac fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test "${lt_cv_path_NM+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$ac_tool_prefix"; then for ac_prog in "dumpbin -symbols" "link -dump -symbols" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DUMPBIN+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in "dumpbin -symbols" "link -dump -symbols" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if test "${lt_cv_nm_interface+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:4978: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:4981: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:4984: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if test "${lt_cv_sys_max_cmd_len+set}" = set; then $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:$LINENO: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:$LINENO: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:$LINENO: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if test "${lt_cv_ld_reload_flag+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OBJDUMP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if test "${lt_cv_deplibs_check_method+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AR+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:$LINENO: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AR+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ const struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:$LINENO: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } fi # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 6187 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if test "${lt_cv_cc_needs_belf+set}" = set; then $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_cv_cc_needs_belf=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DSYMUTIL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_NMEDIT+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_LIPO+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:$LINENO: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OTOOL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:$LINENO: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OTOOL64+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:$LINENO: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if test "${lt_cv_apple_cc_single_mod+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if test "${lt_cv_ld_exported_symbols_list+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_cv_ld_exported_symbols_list=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_ld_exported_symbols_list=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:$LINENO: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 $as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <float.h> int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <string.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <stdlib.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <ctype.h> #include <stdlib.h> #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Set options # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then withval=$with_pic; pic_mode="$withval" else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:$LINENO: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if test "${lt_cv_objdir+set}" = set; then $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:$LINENO: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' { $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8040: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8044: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= { $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 $as_echo "$lt_prog_compiler_pic" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test "${lt_cv_prog_compiler_pic_works+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8379: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8383: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test "${lt_cv_prog_compiler_static_works+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8484: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8488: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8539: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8543: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:$LINENO: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag= tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld='-rpath $libdir' archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat >conftest.$ac_ext <<_ACEOF int foo(void) {} _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 $as_echo "$archive_cmds_need_lc" >&6; } ;; esac fi ;; esac { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib<name>.so # instead of lib<name>.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$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' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then shlibpath_overrides_runpath=yes fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dl_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) { $as_echo "$as_me:$LINENO: checking for shl_load" >&5 $as_echo_n "checking for shl_load... " >&6; } if test "${ac_cv_func_shl_load+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load. For example, HP-UX 11i <limits.h> declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer <limits.h> to <assert.h> if __STDC__ is defined, since <limits.h> exists even on freestanding compilers. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif #undef shl_load /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_shl_load || defined __stub___shl_load choke me #endif int main () { return shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_func_shl_load=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 $as_echo "$ac_cv_func_shl_load" >&6; } if test "x$ac_cv_func_shl_load" = x""yes; then lt_cv_dlopen="shl_load" else { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if test "${ac_cv_lib_dld_shl_load+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dld_shl_load=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = x""yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else { $as_echo "$as_me:$LINENO: checking for dlopen" >&5 $as_echo_n "checking for dlopen... " >&6; } if test "${ac_cv_func_dlopen+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen. For example, HP-UX 11i <limits.h> declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer <limits.h> to <assert.h> if __STDC__ is defined, since <limits.h> exists even on freestanding compilers. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif #undef dlopen /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_dlopen || defined __stub___dlopen choke me #endif int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_func_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 $as_echo "$ac_cv_func_dlopen" >&6; } if test "x$ac_cv_func_dlopen" = x""yes; then lt_cv_dlopen="dlopen" else { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dl_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if test "${ac_cv_lib_svld_dlopen+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_svld_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = x""yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if test "${ac_cv_lib_dld_dld_link+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dld_dld_link=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = x""yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line 11342 "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self_static+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line 11438 "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:$LINENO: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: # Setup doxygen support # Files: DX_PROJECT=pion DX_CONFIG=doc/Doxyfile DX_DOCDIR=doc # Environment variables used inside doxygen.cfg: DX_ENV="$DX_ENV SRCDIR='$srcdir'" DX_ENV="$DX_ENV PROJECT='$DX_PROJECT'" DX_ENV="$DX_ENV DOCDIR='$DX_DOCDIR'" DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" # Doxygen itself: # Check whether --enable-doxygen-doc was given. if test "${enable_doxygen_doc+set}" = set; then enableval=$enable_doxygen_doc; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_doc=1 ;; #( n|N|no|No|NO) DX_FLAG_doc=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-doc" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-doc" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_doc=1 fi if test "$DX_FLAG_doc" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. set dummy ${ac_tool_prefix}doxygen; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_DOXYGEN+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN if test -n "$DX_DOXYGEN"; then { $as_echo "$as_me:$LINENO: result: $DX_DOXYGEN" >&5 $as_echo "$DX_DOXYGEN" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_DOXYGEN"; then ac_pt_DX_DOXYGEN=$DX_DOXYGEN # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_DOXYGEN+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN if test -n "$ac_pt_DX_DOXYGEN"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_DOXYGEN" >&5 $as_echo "$ac_pt_DX_DOXYGEN" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_DOXYGEN" = x; then DX_DOXYGEN="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOXYGEN=$ac_pt_DX_DOXYGEN fi else DX_DOXYGEN="$ac_cv_path_DX_DOXYGEN" fi if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then { $as_echo "$as_me:$LINENO: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 $as_echo "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_doc=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. set dummy ${ac_tool_prefix}perl; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_PERL+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_PERL=$ac_cv_path_DX_PERL if test -n "$DX_PERL"; then { $as_echo "$as_me:$LINENO: result: $DX_PERL" >&5 $as_echo "$DX_PERL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_PERL"; then ac_pt_DX_PERL=$DX_PERL # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_PERL+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL if test -n "$ac_pt_DX_PERL"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_PERL" >&5 $as_echo "$ac_pt_DX_PERL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_PERL" = x; then DX_PERL="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PERL=$ac_pt_DX_PERL fi else DX_PERL="$ac_cv_path_DX_PERL" fi if test "$DX_FLAG_doc$DX_PERL" = 1; then { $as_echo "$as_me:$LINENO: WARNING: perl not found - will not generate any doxygen documentation" >&5 $as_echo "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_doc=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi : fi if test "$DX_FLAG_doc" = 1; then if :; then DX_COND_doc_TRUE= DX_COND_doc_FALSE='#' else DX_COND_doc_TRUE='#' DX_COND_doc_FALSE= fi DX_ENV="$DX_ENV PERL_PATH='$DX_PERL'" : else if false; then DX_COND_doc_TRUE= DX_COND_doc_FALSE='#' else DX_COND_doc_TRUE='#' DX_COND_doc_FALSE= fi : fi # Dot for graphics: # Check whether --enable-doxygen-dot was given. if test "${enable_doxygen_dot+set}" = set; then enableval=$enable_doxygen_dot; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_dot=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-dot requires doxygen-dot" >&5 $as_echo "$as_me: error: doxygen-dot requires doxygen-dot" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_dot=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-dot" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-dot" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_dot=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_dot=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_dot" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. set dummy ${ac_tool_prefix}dot; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_DOT+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_DOT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_DOT=$ac_cv_path_DX_DOT if test -n "$DX_DOT"; then { $as_echo "$as_me:$LINENO: result: $DX_DOT" >&5 $as_echo "$DX_DOT" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_DOT"; then ac_pt_DX_DOT=$DX_DOT # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_DOT+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_DOT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT if test -n "$ac_pt_DX_DOT"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_DOT" >&5 $as_echo "$ac_pt_DX_DOT" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_DOT" = x; then DX_DOT="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOT=$ac_pt_DX_DOT fi else DX_DOT="$ac_cv_path_DX_DOT" fi if test "$DX_FLAG_dot$DX_DOT" = 1; then { $as_echo "$as_me:$LINENO: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 $as_echo "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_dot=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi : fi if test "$DX_FLAG_dot" = 1; then if :; then DX_COND_dot_TRUE= DX_COND_dot_FALSE='#' else DX_COND_dot_TRUE='#' DX_COND_dot_FALSE= fi DX_ENV="$DX_ENV HAVE_DOT='YES'" DX_ENV="$DX_ENV DOT_PATH='`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'`'" : else if false; then DX_COND_dot_TRUE= DX_COND_dot_FALSE='#' else DX_COND_dot_TRUE='#' DX_COND_dot_FALSE= fi DX_ENV="$DX_ENV HAVE_DOT='NO'" : fi # Man pages generation: # Check whether --enable-doxygen-man was given. if test "${enable_doxygen_man+set}" = set; then enableval=$enable_doxygen_man; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_man=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-man requires doxygen-man" >&5 $as_echo "$as_me: error: doxygen-man requires doxygen-man" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_man=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-man" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-man" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_man=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_man=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_man" = 1; then : fi if test "$DX_FLAG_man" = 1; then if :; then DX_COND_man_TRUE= DX_COND_man_FALSE='#' else DX_COND_man_TRUE='#' DX_COND_man_FALSE= fi DX_ENV="$DX_ENV GENERATE_MAN='YES'" : else if false; then DX_COND_man_TRUE= DX_COND_man_FALSE='#' else DX_COND_man_TRUE='#' DX_COND_man_FALSE= fi DX_ENV="$DX_ENV GENERATE_MAN='NO'" : fi # RTF file generation: # Check whether --enable-doxygen-rtf was given. if test "${enable_doxygen_rtf+set}" = set; then enableval=$enable_doxygen_rtf; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_rtf=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-rtf requires doxygen-rtf" >&5 $as_echo "$as_me: error: doxygen-rtf requires doxygen-rtf" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_rtf=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-rtf" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-rtf" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_rtf=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_rtf=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_rtf" = 1; then : fi if test "$DX_FLAG_rtf" = 1; then if :; then DX_COND_rtf_TRUE= DX_COND_rtf_FALSE='#' else DX_COND_rtf_TRUE='#' DX_COND_rtf_FALSE= fi DX_ENV="$DX_ENV GENERATE_RTF='YES'" : else if false; then DX_COND_rtf_TRUE= DX_COND_rtf_FALSE='#' else DX_COND_rtf_TRUE='#' DX_COND_rtf_FALSE= fi DX_ENV="$DX_ENV GENERATE_RTF='NO'" : fi # XML file generation: # Check whether --enable-doxygen-xml was given. if test "${enable_doxygen_xml+set}" = set; then enableval=$enable_doxygen_xml; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_xml=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-xml requires doxygen-xml" >&5 $as_echo "$as_me: error: doxygen-xml requires doxygen-xml" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_xml=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-xml" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-xml" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_xml=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_xml=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_xml" = 1; then : fi if test "$DX_FLAG_xml" = 1; then if :; then DX_COND_xml_TRUE= DX_COND_xml_FALSE='#' else DX_COND_xml_TRUE='#' DX_COND_xml_FALSE= fi DX_ENV="$DX_ENV GENERATE_XML='YES'" : else if false; then DX_COND_xml_TRUE= DX_COND_xml_FALSE='#' else DX_COND_xml_TRUE='#' DX_COND_xml_FALSE= fi DX_ENV="$DX_ENV GENERATE_XML='NO'" : fi # (Compressed) HTML help generation: # Check whether --enable-doxygen-chm was given. if test "${enable_doxygen_chm+set}" = set; then enableval=$enable_doxygen_chm; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_chm=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-chm requires doxygen-chm" >&5 $as_echo "$as_me: error: doxygen-chm requires doxygen-chm" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_chm=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-chm" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-chm" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_chm=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_chm=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_chm" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. set dummy ${ac_tool_prefix}hhc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_HHC+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_HHC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_HHC=$ac_cv_path_DX_HHC if test -n "$DX_HHC"; then { $as_echo "$as_me:$LINENO: result: $DX_HHC" >&5 $as_echo "$DX_HHC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_HHC"; then ac_pt_DX_HHC=$DX_HHC # Extract the first word of "hhc", so it can be a program name with args. set dummy hhc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_HHC+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_HHC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC if test -n "$ac_pt_DX_HHC"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_HHC" >&5 $as_echo "$ac_pt_DX_HHC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_HHC" = x; then DX_HHC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_HHC=$ac_pt_DX_HHC fi else DX_HHC="$ac_cv_path_DX_HHC" fi if test "$DX_FLAG_chm$DX_HHC" = 1; then { $as_echo "$as_me:$LINENO: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 $as_echo "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_chm=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi : fi if test "$DX_FLAG_chm" = 1; then if :; then DX_COND_chm_TRUE= DX_COND_chm_FALSE='#' else DX_COND_chm_TRUE='#' DX_COND_chm_FALSE= fi DX_ENV="$DX_ENV HHC_PATH='$DX_HHC'" DX_ENV="$DX_ENV GENERATE_HTML='YES'" DX_ENV="$DX_ENV GENERATE_HTMLHELP='YES'" : else if false; then DX_COND_chm_TRUE= DX_COND_chm_FALSE='#' else DX_COND_chm_TRUE='#' DX_COND_chm_FALSE= fi DX_ENV="$DX_ENV GENERATE_HTMLHELP='NO'" : fi # Seperate CHI file generation. # Check whether --enable-doxygen-chi was given. if test "${enable_doxygen_chi+set}" = set; then enableval=$enable_doxygen_chi; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_chi=1 test "$DX_FLAG_chm" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-chi requires doxygen-chi" >&5 $as_echo "$as_me: error: doxygen-chi requires doxygen-chi" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_chi=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-chi" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-chi" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_chi=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_chm" = "1" || DX_FLAG_chi=0 #test "$DX_FLAG_chm" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_chi" = 1; then : fi if test "$DX_FLAG_chi" = 1; then if :; then DX_COND_chi_TRUE= DX_COND_chi_FALSE='#' else DX_COND_chi_TRUE='#' DX_COND_chi_FALSE= fi DX_ENV="$DX_ENV GENERATE_CHI='YES'" : else if false; then DX_COND_chi_TRUE= DX_COND_chi_FALSE='#' else DX_COND_chi_TRUE='#' DX_COND_chi_FALSE= fi DX_ENV="$DX_ENV GENERATE_CHI='NO'" : fi # Plain HTML pages generation: # Check whether --enable-doxygen-html was given. if test "${enable_doxygen_html+set}" = set; then enableval=$enable_doxygen_html; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_html=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-html requires doxygen-html" >&5 $as_echo "$as_me: error: doxygen-html requires doxygen-html" >&2;} { (exit 1); exit 1; }; } test "$DX_FLAG_chm" = "0" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-html contradicts doxygen-html" >&5 $as_echo "$as_me: error: doxygen-html contradicts doxygen-html" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_html=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-html" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-html" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_html=1 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_html=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_chm" = "0" || DX_FLAG_html=0 #test "$DX_FLAG_chm" = "0" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_html" = 1; then : fi if test "$DX_FLAG_html" = 1; then if :; then DX_COND_html_TRUE= DX_COND_html_FALSE='#' else DX_COND_html_TRUE='#' DX_COND_html_FALSE= fi DX_ENV="$DX_ENV GENERATE_HTML='YES'" : else if false; then DX_COND_html_TRUE= DX_COND_html_FALSE='#' else DX_COND_html_TRUE='#' DX_COND_html_FALSE= fi test "$DX_FLAG_chm" = 1 || DX_ENV="$DX_ENV GENERATE_HTML='NO'" : fi # PostScript file generation: # Check whether --enable-doxygen-ps was given. if test "${enable_doxygen_ps+set}" = set; then enableval=$enable_doxygen_ps; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_ps=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-ps requires doxygen-ps" >&5 $as_echo "$as_me: error: doxygen-ps requires doxygen-ps" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_ps=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-ps" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-ps" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_ps=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_ps=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_ps" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. set dummy ${ac_tool_prefix}latex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_LATEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_LATEX=$ac_cv_path_DX_LATEX if test -n "$DX_LATEX"; then { $as_echo "$as_me:$LINENO: result: $DX_LATEX" >&5 $as_echo "$DX_LATEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_LATEX"; then ac_pt_DX_LATEX=$DX_LATEX # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_LATEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX if test -n "$ac_pt_DX_LATEX"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_LATEX" >&5 $as_echo "$ac_pt_DX_LATEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_LATEX" = x; then DX_LATEX="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_LATEX=$ac_pt_DX_LATEX fi else DX_LATEX="$ac_cv_path_DX_LATEX" fi if test "$DX_FLAG_ps$DX_LATEX" = 1; then { $as_echo "$as_me:$LINENO: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 $as_echo "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_ps=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_MAKEINDEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then { $as_echo "$as_me:$LINENO: result: $DX_MAKEINDEX" >&5 $as_echo "$DX_MAKEINDEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_MAKEINDEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_MAKEINDEX" >&5 $as_echo "$ac_pt_DX_MAKEINDEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then DX_MAKEINDEX="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX fi else DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" fi if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then { $as_echo "$as_me:$LINENO: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 $as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_ps=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. set dummy ${ac_tool_prefix}dvips; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_DVIPS+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_DVIPS=$ac_cv_path_DX_DVIPS if test -n "$DX_DVIPS"; then { $as_echo "$as_me:$LINENO: result: $DX_DVIPS" >&5 $as_echo "$DX_DVIPS" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_DVIPS"; then ac_pt_DX_DVIPS=$DX_DVIPS # Extract the first word of "dvips", so it can be a program name with args. set dummy dvips; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_DVIPS+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS if test -n "$ac_pt_DX_DVIPS"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_DVIPS" >&5 $as_echo "$ac_pt_DX_DVIPS" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_DVIPS" = x; then DX_DVIPS="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DVIPS=$ac_pt_DX_DVIPS fi else DX_DVIPS="$ac_cv_path_DX_DVIPS" fi if test "$DX_FLAG_ps$DX_DVIPS" = 1; then { $as_echo "$as_me:$LINENO: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 $as_echo "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_ps=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then { $as_echo "$as_me:$LINENO: result: $DX_EGREP" >&5 $as_echo "$DX_EGREP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_EGREP" >&5 $as_echo "$ac_pt_DX_EGREP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then DX_EGREP="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP fi else DX_EGREP="$ac_cv_path_DX_EGREP" fi if test "$DX_FLAG_ps$DX_EGREP" = 1; then { $as_echo "$as_me:$LINENO: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 $as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_ps=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi : fi if test "$DX_FLAG_ps" = 1; then if :; then DX_COND_ps_TRUE= DX_COND_ps_FALSE='#' else DX_COND_ps_TRUE='#' DX_COND_ps_FALSE= fi : else if false; then DX_COND_ps_TRUE= DX_COND_ps_FALSE='#' else DX_COND_ps_TRUE='#' DX_COND_ps_FALSE= fi : fi # PDF file generation: # Check whether --enable-doxygen-pdf was given. if test "${enable_doxygen_pdf+set}" = set; then enableval=$enable_doxygen_pdf; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_pdf=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-pdf requires doxygen-pdf" >&5 $as_echo "$as_me: error: doxygen-pdf requires doxygen-pdf" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_pdf=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-pdf" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-pdf" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_pdf=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_pdf=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_pdf" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_PDFLATEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX if test -n "$DX_PDFLATEX"; then { $as_echo "$as_me:$LINENO: result: $DX_PDFLATEX" >&5 $as_echo "$DX_PDFLATEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_PDFLATEX"; then ac_pt_DX_PDFLATEX=$DX_PDFLATEX # Extract the first word of "pdflatex", so it can be a program name with args. set dummy pdflatex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_PDFLATEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX if test -n "$ac_pt_DX_PDFLATEX"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_PDFLATEX" >&5 $as_echo "$ac_pt_DX_PDFLATEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_PDFLATEX" = x; then DX_PDFLATEX="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PDFLATEX=$ac_pt_DX_PDFLATEX fi else DX_PDFLATEX="$ac_cv_path_DX_PDFLATEX" fi if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then { $as_echo "$as_me:$LINENO: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 $as_echo "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_pdf=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_MAKEINDEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then { $as_echo "$as_me:$LINENO: result: $DX_MAKEINDEX" >&5 $as_echo "$DX_MAKEINDEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_MAKEINDEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_MAKEINDEX" >&5 $as_echo "$ac_pt_DX_MAKEINDEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then DX_MAKEINDEX="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX fi else DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" fi if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then { $as_echo "$as_me:$LINENO: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 $as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_pdf=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then { $as_echo "$as_me:$LINENO: result: $DX_EGREP" >&5 $as_echo "$DX_EGREP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_EGREP" >&5 $as_echo "$ac_pt_DX_EGREP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then DX_EGREP="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP fi else DX_EGREP="$ac_cv_path_DX_EGREP" fi if test "$DX_FLAG_pdf$DX_EGREP" = 1; then { $as_echo "$as_me:$LINENO: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 $as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_pdf=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi : fi if test "$DX_FLAG_pdf" = 1; then if :; then DX_COND_pdf_TRUE= DX_COND_pdf_FALSE='#' else DX_COND_pdf_TRUE='#' DX_COND_pdf_FALSE= fi : else if false; then DX_COND_pdf_TRUE= DX_COND_pdf_FALSE='#' else DX_COND_pdf_TRUE='#' DX_COND_pdf_FALSE= fi : fi # LaTeX generation for PS and/or PDF: if test "$DX_FLAG_ps" = 1 || test "$DX_FLAG_pdf" = 1; then if :; then DX_COND_latex_TRUE= DX_COND_latex_FALSE='#' else DX_COND_latex_TRUE='#' DX_COND_latex_FALSE= fi DX_ENV="$DX_ENV GENERATE_LATEX='YES'" else if false; then DX_COND_latex_TRUE= DX_COND_latex_FALSE='#' else DX_COND_latex_TRUE='#' DX_COND_latex_FALSE= fi DX_ENV="$DX_ENV GENERATE_LATEX='NO'" fi # Paper size for PS and/or PDF: case "$DOXYGEN_PAPER_SIZE" in #( "") DOXYGEN_PAPER_SIZE="" ;; #( a4wide|a4|letter|legal|executive) DX_ENV="$DX_ENV PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" ;; #( *) { { $as_echo "$as_me:$LINENO: error: unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" >&5 $as_echo "$as_me: error: unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" >&2;} { (exit 1); exit 1; }; } ;; esac #For debugging: #echo DX_FLAG_doc=$DX_FLAG_doc #echo DX_FLAG_dot=$DX_FLAG_dot #echo DX_FLAG_man=$DX_FLAG_man #echo DX_FLAG_html=$DX_FLAG_html #echo DX_FLAG_chm=$DX_FLAG_chm #echo DX_FLAG_chi=$DX_FLAG_chi #echo DX_FLAG_rtf=$DX_FLAG_rtf #echo DX_FLAG_xml=$DX_FLAG_xml #echo DX_FLAG_pdf=$DX_FLAG_pdf #echo DX_FLAG_ps=$DX_FLAG_ps #echo DX_ENV=$DX_ENV # Define CXXFLAGS before AC_PROG_CXX to suppress the default autoconf # compiler options CFLAGS="$CFLAGS -DPION" CXXFLAGS="$CXXFLAGS -DPION" # Include pion-config.inc # -------------------------------------- # pion-setup autoconf configuration file # -------------------------------------- # DO NOT USE autoheader (the .hpp.in file is not automanaged) AUTOHEADER="echo autoheader ignored" # Check for programs ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:$LINENO: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:$LINENO: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:$LINENO: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} _lt_caught_CXX_error=yes; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${lt_cv_path_LD+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$lt_save_ifs" else lt_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$lt_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:$LINENO: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 $as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } { $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes ;; *) lt_cv_prog_gnu_ld=no ;; esac fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='' link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd[12]*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5]* | *pgcpp\ [1-5]*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 will use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "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 "X$list" | $Xsed' ;; xl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=echo else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "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 "X$list" | $Xsed' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) 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" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= { $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC*) # IBM XL 8.0 on PPC lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 $as_echo "$lt_prog_compiler_pic_CXX" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16734: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:16738: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16833: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:16837: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16885: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:16889: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:$LINENO: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) 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' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' { $as_echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 $as_echo "$archive_cmds_need_lc_CXX" >&6; } ;; esac fi ;; esac { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib<name>.so # instead of lib<name>.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$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' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then shlibpath_overrides_runpath=yes fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # Use C++ language ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:$LINENO: checking for C++ compiler vendor" >&5 $as_echo_n "checking for C++ compiler vendor... " >&6; } if test "${ax_cv_cxx_compiler_vendor+set}" = set; then $as_echo_n "(cached) " >&6 else ax_cv_cxx_compiler_vendor=unknown # note: don't check for gcc first since some other compilers define __GNUC__ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #if !($vencpp) thisisanerror; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ax_cv_cxx_compiler_vendor=`echo $ventest | cut -d: -f1`; break else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done fi { $as_echo "$as_me:$LINENO: result: $ax_cv_cxx_compiler_vendor" >&5 $as_echo "$ax_cv_cxx_compiler_vendor" >&6; } # library to link with for dlopen, etc. PION_DLOPEN_LIBS=$lt_cv_dlopen_libs # Set basic compiler options case "$build_os" in *solaris*) if test "$ax_cv_cxx_compiler_vendor" = "sun"; then # Solaris: Sun Studio C++ compiler CPPFLAGS="$CPPFLAGS -mt -library=stlport4" LDFLAGS="$LDFLAGS -mt -library=stlport4" PION_OPT_FLAGS="-O2 -DNDEBUG" PION_DEBUG_FLAGS="-g" else # Solaris: GCC compiler CPPFLAGS="$CPPFLAGS -pthreads -D_REENTRANT" LDFLAGS="$LDFLAGS -pthreads" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" fi PION_EXTERNAL_LIBS="-lsocket -lnsl -lposix4" ;; *darwin*) # Mac OS X: GCC compiler # -pthread is implied (automatically set by compiler) CPPFLAGS="$CPPFLAGS -D_REENTRANT" #LDFLAGS="$LDFLAGS" PION_OPT_FLAGS="-O3 -ggdb -fomit-frame-pointer -fstrict-aliasing -fno-tree-pre -falign-loops -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" # Check for OSX binary architecture { $as_echo "$as_me:$LINENO: checking for OSX binary architectures" >&5 $as_echo_n "checking for OSX binary architectures... " >&6; } # Check whether --with-arch was given. if test "${with_arch+set}" = set; then withval=$with_arch; with_arch=$withval else with_arch=default fi if test "$with_arch" = "no"; then { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } elif test "$with_arch" = "default"; then { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } # Note: Pion seems to crashe consistently when built with x86_64 # AC_MSG_RESULT(x86_64) # with_arch="-arch x86_64" # PION_OPT_FLAGS="$PION_OPT_FLAGS $with_arch" # PION_DEBUG_FLAGS="$PION_DEBUG_FLAGS $with_arch" else { $as_echo "$as_me:$LINENO: result: $with_arch" >&5 $as_echo "$with_arch" >&6; } with_arch="-arch `echo $with_arch | sed 's#,# -arch #g'`" PION_OPT_FLAGS="$PION_OPT_FLAGS $with_arch" PION_DEBUG_FLAGS="$PION_DEBUG_FLAGS $with_arch" fi ;; *cygwin*) # Cygwin GCC compiler (Windows) CPPFLAGS="$CPPFLAGS -mthreads -D_REENTRANT -DPION_WIN32 -D__USE_W32_SOCKETS" LDFLAGS="$LDFLAGS -mthreads -Wl,-E" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" PION_EXTERNAL_LIBS="-lws2_32 -lmswsock" ;; *freebsd*) # FreeBSD: GCC compiler CPPFLAGS="$CPPFLAGS -pthread -D_REENTRANT" LDFLAGS="$LDFLAGS -pthread -Wl,-E" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" ;; *) # Other (Linux): GCC compiler CPPFLAGS="$CPPFLAGS -pthread -D_REENTRANT" LDFLAGS="$LDFLAGS -pthread -lrt -ldl -Wl,-E" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" ;; esac # Check for --with-cpu (gcc CPU architecture) { $as_echo "$as_me:$LINENO: checking for specific CPU architecture" >&5 $as_echo_n "checking for specific CPU architecture... " >&6; } # Check whether --with-cpu was given. if test "${with_cpu+set}" = set; then withval=$with_cpu; with_cpu=$withval else with_cpu=default fi if test "$with_cpu" = "no"; then { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } else if test "$with_cpu" = "default"; then if test "$with_arch" = "no" || test "$with_arch" = "default" ; then if test "$ax_cv_cxx_compiler_vendor" = "gnu"; then # check __x86_64__ to determine default cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #if defined(__x86_64__) // x86_64 defined -> leave undefined #else #error __x86_64__ not defined -> i686 #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 with_cpu="i686" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi fi fi if test "$with_cpu" = "default"; then { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } else # check to make sure it works CFLAGS_SAVED=$CFLAGS CXXFLAGS_SAVED=$CXXFLAGS CFLAGS="$CFLAGS -march=$with_cpu" CXXFLAGS="$CXXFLAGS -march=$with_cpu" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: $with_cpu" >&5 $as_echo "$with_cpu" >&6; } PION_OPT_FLAGS="$PION_OPT_FLAGS -march=$with_cpu" PION_DEBUG_FLAGS="$PION_DEBUG_FLAGS -march=$with_cpu" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$CFLAGS_SAVED CXXFLAGS=$CXXFLAGS_SAVED fi fi # Check for debug { $as_echo "$as_me:$LINENO: checking for debugging" >&5 $as_echo_n "checking for debugging... " >&6; } # Check whether --with-debug was given. if test "${with_debug+set}" = set; then withval=$with_debug; with_debug=$withval else with_debug=no fi if test "$with_debug" = "no"; then { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } CFLAGS="$CFLAGS $PION_OPT_FLAGS" CXXFLAGS="$CXXFLAGS $PION_OPT_FLAGS" else { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } CFLAGS="$CFLAGS $PION_DEBUG_FLAGS" CXXFLAGS="$CXXFLAGS $PION_DEBUG_FLAGS" fi # Check for --with-plugins { $as_echo "$as_me:$LINENO: checking for plug-ins directory" >&5 $as_echo_n "checking for plug-ins directory... " >&6; } # Check whether --with-plugins was given. if test "${with_plugins+set}" = set; then withval=$with_plugins; with_plugins=$withval else with_plugins=no fi if test "$with_plugins" = "no"; then if test "x$prefix" = "xNONE"; then PION_PLUGINS_DIRECTORY=/usr/local/share/pion/plugins else PION_PLUGINS_DIRECTORY=${prefix}/share/pion/plugins fi else PION_PLUGINS_DIRECTORY=$with_plugins fi { $as_echo "$as_me:$LINENO: result: $PION_PLUGINS_DIRECTORY" >&5 $as_echo "$PION_PLUGINS_DIRECTORY" >&6; } cat >>confdefs.h <<_ACEOF #define PION_PLUGINS_DIRECTORY "$PION_PLUGINS_DIRECTORY" _ACEOF # -------------------------------- # Pion autoconf configuration file # -------------------------------- # Check for Boost # Check whether --with-boost was given. if test "${with_boost+set}" = set; then withval=$with_boost; if test "$withval" = "no"; then want_boost="no" elif test "$withval" = "yes"; then want_boost="yes" ac_boost_path="" else want_boost="yes" ac_boost_path="$withval" fi else want_boost="yes" fi if test "x$want_boost" = "xyes"; then boost_lib_version_req=1.35 boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([0-9]*\.[0-9]*\)'` boost_lib_version_req_major=`expr $boost_lib_version_req : '\([0-9]*\)'` boost_lib_version_req_minor=`expr $boost_lib_version_req : '[0-9]*\.\([0-9]*\)'` boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[0-9]*\.[0-9]*\.\([0-9]*\)'` if test "x$boost_lib_version_req_sub_minor" = "x" ; then boost_lib_version_req_sub_minor="0" fi WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` { $as_echo "$as_me:$LINENO: checking for boostlib >= $boost_lib_version_req" >&5 $as_echo_n "checking for boostlib >= $boost_lib_version_req... " >&6; } succeeded=no if test "$ac_boost_path" != ""; then BOOST_HOME_DIR="$ac_boost_path" BOOST_LDFLAGS="-L$ac_boost_path/lib" BOOST_CPPFLAGS="-I$ac_boost_path/include" else for ac_boost_path_tmp in /usr /usr/local /opt ; do if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then BOOST_HOME_DIR="$ac_boost_path_tmp" BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib" BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" break; fi done fi CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <boost/version.hpp> int main () { #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } succeeded=yes found_system=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test "x$succeeded" != "xyes"; then _version=0 if test "$ac_boost_path" != ""; then BOOST_HOME_DIR="$ac_boost_path" BOOST_LDFLAGS="-L$ac_boost_path/lib" if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp fi VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" done fi else for ac_boost_path in /usr /usr/local /opt ; do if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp best_path=$ac_boost_path fi done fi done VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" BOOST_LDFLAGS="-L$best_path/lib" BOOST_HOME_DIR="$best_path" if test "x$BOOST_ROOT" != "x"; then if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` stage_version_shorten=`expr $stage_version : '\([0-9]*\.[0-9]*\)'` V_CHECK=`expr $stage_version_shorten \>\= $_version` if test "$V_CHECK" = "1" ; then { $as_echo "$as_me:$LINENO: We will use a staged boost library from $BOOST_ROOT" >&5 $as_echo "$as_me: We will use a staged boost library from $BOOST_ROOT" >&6;} BOOST_CPPFLAGS="-I$BOOST_ROOT" BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib" fi fi fi fi CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <boost/version.hpp> int main () { #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } succeeded=yes found_system=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi if test "$succeeded" != "yes" ; then if test "$_version" = "0" ; then { { $as_echo "$as_me:$LINENO: error: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation." >&5 $as_echo "$as_me: error: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation." >&2;} { (exit 1); exit 1; }; } else { $as_echo "$as_me:$LINENO: Your boost libraries seems to old (version $_version)." >&5 $as_echo "$as_me: Your boost libraries seems to old (version $_version)." >&6;} fi else cat >>confdefs.h <<\_ACEOF #define HAVE_BOOST /**/ _ACEOF fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" fi # AC_MSG_NOTICE(Boost home directory: $BOOST_HOME_DIR) CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" # Check for Boost library extension { $as_echo "$as_me:$LINENO: checking boost library extension" >&5 $as_echo_n "checking boost library extension... " >&6; } # Check whether --with-boost-extension was given. if test "${with_boost_extension+set}" = set; then withval=$with_boost_extension; boost_ext=$withval else detect_boost_ext=true fi # Check if openssl location is specified if test "$detect_boost_ext" != "true"; then # use provided extension for boost library files BOOST_LIB_EXTENSION="$boost_ext" else # Attempt to Autodetect Boost library extension by looking for thread library (i.e. "-gcc41-mt") for boost_thread_library in `ls $BOOST_HOME_DIR/lib*/libboost_thread*-mt*{dylib,dll,so,a}* 2>/dev/null` ; do if test -r $boost_thread_library ; then BOOST_LIB_EXTENSION=`echo $boost_thread_library | sed 's,.*/,,' | sed -e 's;^libboost_thread\(.*\)\.dylib.*$;\1;' -e 's;^libboost_thread\(.*\)\.dll*$;\1;' -e 's;^libboost_thread\(.*\)\.so.*$;\1;' -e 's;^libboost_thread\(.*\)\.a*$;\1;'` break fi done fi if test "x$BOOST_LIB_EXTENSION" = "x"; then { $as_echo "$as_me:$LINENO: result: \"(none)\"" >&5 $as_echo "\"(none)\"" >&6; } else { $as_echo "$as_me:$LINENO: result: $BOOST_LIB_EXTENSION" >&5 $as_echo "$BOOST_LIB_EXTENSION" >&6; } fi # Check for Boost Date Time library BOOST_TRY_LIB=date_time BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK}" { $as_echo "$as_me:$LINENO: checking for boost::${BOOST_TRY_LIB} library" >&5 $as_echo_n "checking for boost::${BOOST_TRY_LIB} library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <boost/date_time/gregorian/greg_date.hpp> int main () { boost::gregorian::date d(2007, 11, 11); return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } BOOST_DATE_TIME_LIB="-l${BOOST_TRY_LINK}" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: not found" >&5 $as_echo "not found" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&5 $as_echo "$as_me: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" # Check for Boost System library BOOST_TRY_LIB=system BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK}" { $as_echo "$as_me:$LINENO: checking for boost::${BOOST_TRY_LIB} library" >&5 $as_echo_n "checking for boost::${BOOST_TRY_LIB} library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <boost/system/error_code.hpp> int main () { boost::system::error_code error_code; std::string message(error_code.message()); return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } BOOST_SYSTEM_LIB="-l${BOOST_TRY_LINK}" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: not found" >&5 $as_echo "not found" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&5 $as_echo "$as_me: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" # Check for Boost Thread library BOOST_TRY_LIB=thread BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK} ${BOOST_SYSTEM_LIB} ${BOOST_DATE_TIME_LIB}" { $as_echo "$as_me:$LINENO: checking for boost::${BOOST_TRY_LIB} library" >&5 $as_echo_n "checking for boost::${BOOST_TRY_LIB} library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <boost/thread/thread.hpp> #include <boost/thread/condition.hpp> int main () { boost::thread current_thread; return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } BOOST_THREAD_LIB="-l${BOOST_TRY_LINK}" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: not found" >&5 $as_echo "not found" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&5 $as_echo "$as_me: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" # Check for Boost Filesystem library BOOST_TRY_LIB=filesystem BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK} $BOOST_SYSTEM_LIB" { $as_echo "$as_me:$LINENO: checking for boost::${BOOST_TRY_LIB} library" >&5 $as_echo_n "checking for boost::${BOOST_TRY_LIB} library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <boost/filesystem/path.hpp> int main () { boost::filesystem::path a_path; return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } BOOST_FILESYSTEM_LIB="-l${BOOST_TRY_LINK}" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: not found" >&5 $as_echo "not found" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&5 $as_echo "$as_me: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" # Check for Boost Regex library BOOST_TRY_LIB=regex BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK}" { $as_echo "$as_me:$LINENO: checking for boost::${BOOST_TRY_LIB} library" >&5 $as_echo_n "checking for boost::${BOOST_TRY_LIB} library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <boost/regex.hpp> int main () { boost::regex exp(".*"); return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } BOOST_REGEX_LIB="-l${BOOST_TRY_LINK}" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: not found" >&5 $as_echo "not found" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&5 $as_echo "$as_me: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" # Check for Boost Unit Test Framework # Check whether --enable-tests was given. if test "${enable_tests+set}" = set; then enableval=$enable_tests; enable_tests=$enableval else enable_tests=yes fi if test "x$enable_tests" == "xno"; then # Display notice if unit tests are disabled { $as_echo "$as_me:$LINENO: Unit tests are disabled" >&5 $as_echo "$as_me: Unit tests are disabled" >&6;} else BOOST_TRY_LIB=unit_test_framework BOOST_TRY_LINK="$BOOST_HOME_DIR/lib/libboost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}.a" # check if static version of lib is available if !(test -r "$BOOST_TRY_LINK"); then BOOST_TRY_LINK="-lboost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" PION_TESTS_CPPFLAGS="-DBOOST_TEST_DYN_LINK" fi LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED ${BOOST_TRY_LINK}" CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS ${PION_TESTS_CPPFLAGS}" { $as_echo "$as_me:$LINENO: checking for boost::test library" >&5 $as_echo_n "checking for boost::test library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <boost/test/unit_test.hpp> using namespace boost::unit_test; test_suite* init_unit_test_suite( int argc, char* argv[] ) { return BOOST_TEST_SUITE("Master test suite"); } int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } BOOST_TEST_LIB="${BOOST_TRY_LINK}" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: not found" >&5 $as_echo "not found" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&5 $as_echo "$as_me: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" CPPFLAGS="$CPPFLAGS_SAVED" PION_TESTS_MAKEDIRS="tests" fi # -------------------------------- # Pion autoconf configuration file # -------------------------------- # Set Pion version information PION_LIBRARY_VERSION=`echo $PACKAGE_VERSION | sed 's;^\([0-9][0-9]*\.[0-9][0-9]*\).*$;\1;'` # AC_MSG_NOTICE("Pion Library Version: $PION_LIBRARY_VERSION") cat >>confdefs.h <<_ACEOF #define PION_VERSION "$PACKAGE_VERSION" _ACEOF # Note: AM_CONFIG_HEADER is deprecated ac_config_headers="$ac_config_headers include/pion/config.hpp" # Check for --with-cygwin { $as_echo "$as_me:$LINENO: checking for cygwin directory" >&5 $as_echo_n "checking for cygwin directory... " >&6; } # Check whether --with-cygwin was given. if test "${with_cygwin+set}" = set; then withval=$with_cygwin; with_cygwin=$withval else with_cygwin=maybe fi if test "$with_cygwin" = "maybe"; then case "$build_os" in *cygwin*) PION_CYGWIN_DIRECTORY="c:/cygwin" { $as_echo "$as_me:$LINENO: result: $PION_CYGWIN_DIRECTORY" >&5 $as_echo "$PION_CYGWIN_DIRECTORY" >&6; } ;; *) { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } ;; esac elif test "$with_cygwin" != "no"; then PION_CYGWIN_DIRECTOR="$with_cygwin" { $as_echo "$as_me:$LINENO: result: $PION_CYGWIN_DIRECTORY" >&5 $as_echo "$PION_CYGWIN_DIRECTORY" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi cat >>confdefs.h <<_ACEOF #define PION_CYGWIN_DIRECTORY "$PION_CYGWIN_DIRECTORY" _ACEOF # Check for malloc_trim support { $as_echo "$as_me:$LINENO: checking for malloc_trim() support" >&5 $as_echo_n "checking for malloc_trim() support... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <malloc.h> int main () { malloc_trim(0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } cat >>confdefs.h <<\_ACEOF #define PION_HAVE_MALLOC_TRIM 1 _ACEOF else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext # Check for unordered container support for ac_header in tr1/unordered_map do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------------- ## ## Report this to pion-users@lists.sourceforge.net ## ## ----------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF unordered_map_type=tr1_unordered_map fi done if test "x$unordered_map_type" = "xtr1_unordered_map"; then # test to make sure it's good enough { $as_echo "$as_me:$LINENO: checking if unordered_map is ok" >&5 $as_echo_n "checking if unordered_map is ok... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <tr1/unordered_map> int main () { #if defined(__APPLE__) #error completely broken on OSX, even for gcc 4.2 #elif !defined(__GNUC__) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) return(0); #else #error only use gcc versions 4.1 or greater #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: failed" >&5 $as_echo "failed" >&6; } unordered_map_type="" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi if test "x$unordered_map_type" = "x"; then for ac_header in ext/hash_map do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------------- ## ## Report this to pion-users@lists.sourceforge.net ## ## ----------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF unordered_map_type=ext_hash_map fi done fi if test "x$unordered_map_type" = "x"; then for ac_header in hash_map do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------------- ## ## Report this to pion-users@lists.sourceforge.net ## ## ----------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF unordered_map_type=hash_map fi done fi if test "$unordered_map_type" = "tr1_unordered_map"; then cat >>confdefs.h <<\_ACEOF #define PION_HAVE_UNORDERED_MAP 1 _ACEOF elif test "$unordered_map_type" = "ext_hash_map"; then cat >>confdefs.h <<\_ACEOF #define PION_HAVE_EXT_HASH_MAP 1 _ACEOF elif test "$unordered_map_type" = "hash_map"; then cat >>confdefs.h <<\_ACEOF #define PION_HAVE_HASH_MAP 1 _ACEOF else { { $as_echo "$as_me:$LINENO: error: C++ compiler does not seem to support unordered containers" >&5 $as_echo "$as_me: error: C++ compiler does not seem to support unordered containers" >&2;} { (exit 1); exit 1; }; } fi # Check for zlib { $as_echo "$as_me:$LINENO: checking for gzip compression support (zlib)" >&5 $as_echo_n "checking for gzip compression support (zlib)... " >&6; } # Check whether --with-zlib was given. if test "${with_zlib+set}" = set; then withval=$with_zlib; zlib_location=$withval else zlib_location=yes fi # Check if zlib location is specified if test "x_$zlib_location" != "x_no"; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } if test "x_$zlib_location" != "x_yes"; then # alternative location provided CPPFLAGS="$CPPFLAGS -I$zlib_location/include" LDFLAGS="$LDFLAGS -L$zlib_location/lib" fi # Check for zlib headers for ac_header in zlib.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------------- ## ## Report this to pion-users@lists.sourceforge.net ## ## ----------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else { { $as_echo "$as_me:$LINENO: error: Unable to find the zlib headers" >&5 $as_echo "$as_me: error: Unable to find the zlib headers" >&2;} { (exit 1); exit 1; }; } fi done # Check for zlib library LIBS="$LIBS_SAVED -lz" { $as_echo "$as_me:$LINENO: checking linking with zlib" >&5 $as_echo_n "checking linking with zlib... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <zlib.h> int main () { zlibVersion(); return(0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: failed" >&5 $as_echo "failed" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the zlib library" >&5 $as_echo "$as_me: error: Unable to link with the zlib library" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" PION_ZLIB="-lz" # Found the zlib library cat >>confdefs.h <<\_ACEOF #define PION_HAVE_ZLIB 1 _ACEOF else # zlib is disabled { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Check for bzlib { $as_echo "$as_me:$LINENO: checking for bzip2 compression support (bzlib)" >&5 $as_echo_n "checking for bzip2 compression support (bzlib)... " >&6; } # Check whether --with-bzlib was given. if test "${with_bzlib+set}" = set; then withval=$with_bzlib; bzlib_location=$withval else bzlib_location=yes fi # Check if bzlib location is specified if test "x_$bzlib_location" != "x_no"; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } if test "x_$bzlib_location" != "x_yes"; then # alternative location provided CPPFLAGS="$CPPFLAGS -I$bzlib_location/include" LDFLAGS="$LDFLAGS -L$bzlib_location/lib" fi # Check for bzlib headers for ac_header in bzlib.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------------- ## ## Report this to pion-users@lists.sourceforge.net ## ## ----------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else { { $as_echo "$as_me:$LINENO: error: Unable to find the bzlib headers" >&5 $as_echo "$as_me: error: Unable to find the bzlib headers" >&2;} { (exit 1); exit 1; }; } fi done # Check for bzlib library LIBS="$LIBS_SAVED -lbz2" { $as_echo "$as_me:$LINENO: checking linking with bzlib" >&5 $as_echo_n "checking linking with bzlib... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <bzlib.h> int main () { BZ2_bzlibVersion(); return(0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: failed" >&5 $as_echo "failed" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the bzlib library; use --without-bzlib to disable" >&5 $as_echo "$as_me: error: Unable to link with the bzlib library; use --without-bzlib to disable" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" PION_BZLIB="-lbz2" # Found the bzlib library cat >>confdefs.h <<\_ACEOF #define PION_HAVE_BZLIB 1 _ACEOF else # bzlib is disabled { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Check for OpenSSL { $as_echo "$as_me:$LINENO: checking for SSL support (openssl)" >&5 $as_echo_n "checking for SSL support (openssl)... " >&6; } # Check whether --with-openssl was given. if test "${with_openssl+set}" = set; then withval=$with_openssl; openssl_location=$withval else openssl_location=yes fi # Check if openssl location is specified if test "x_$openssl_location" != "x_no"; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } if test "x_$openssl_location" != "x_yes"; then # alternative location provided CPPFLAGS="$CPPFLAGS -I$openssl_location/include" LDFLAGS="$LDFLAGS -L$openssl_location/lib" fi # Check for OpenSSL headers for ac_header in openssl/ssl.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------------- ## ## Report this to pion-users@lists.sourceforge.net ## ## ----------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else { { $as_echo "$as_me:$LINENO: error: Unable to find the OpenSSL headers" >&5 $as_echo "$as_me: error: Unable to find the OpenSSL headers" >&2;} { (exit 1); exit 1; }; } fi done # Check for OpenSSL library LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -lssl -lcrypto" { $as_echo "$as_me:$LINENO: checking linking with openssl" >&5 $as_echo_n "checking linking with openssl... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <openssl/ssl.h> int main () { SSL_library_init(); return(0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: failed" >&5 $as_echo "failed" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the openssl library; use --without-openssl to disable" >&5 $as_echo "$as_me: error: Unable to link with the openssl library; use --without-openssl to disable" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" PION_SSL_LIB="-lssl -lcrypto" # Found the OpenSSL library { $as_echo "$as_me:$LINENO: Building Pion with support for SSL (using OpenSSL)" >&5 $as_echo "$as_me: Building Pion with support for SSL (using OpenSSL)" >&6;} cat >>confdefs.h <<\_ACEOF #define PION_HAVE_SSL 1 _ACEOF else # SSL is disabled { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Check for logging support # Check whether --enable-logging was given. if test "${enable_logging+set}" = set; then enableval=$enable_logging; enable_logging=$enableval else enable_logging=yes fi # Check whether --with-ostream-logging was given. if test "${with_ostream_logging+set}" = set; then withval=$with_ostream_logging; ostream_logging=yes else ostream_logging=no fi # Check whether --with-log4cplus was given. if test "${with_log4cplus+set}" = set; then withval=$with_log4cplus; log4cplus_location=$withval without_log4cxx=true without_log4cpp=true fi # Check whether --with-log4cxx was given. if test "${with_log4cxx+set}" = set; then withval=$with_log4cxx; log4cxx_location=$withval without_log4cplus=true without_log4cpp=true fi # Check whether --with-log4cpp was given. if test "${with_log4cpp+set}" = set; then withval=$with_log4cpp; log4cpp_location=$withval without_log4cplus=true without_log4cxx=true fi if test "x$enable_logging" == "xno"; then # Display notice if no logging found { $as_echo "$as_me:$LINENO: Logging has been disabled" >&5 $as_echo "$as_me: Logging has been disabled" >&6;} cat >>confdefs.h <<\_ACEOF #define PION_DISABLE_LOGGING 1 _ACEOF elif test "x$ostream_logging" == "xyes"; then { $as_echo "$as_me:$LINENO: Using std::ostream for logging" >&5 $as_echo "$as_me: Using std::ostream for logging" >&6;} cat >>confdefs.h <<\_ACEOF #define PION_USE_OSTREAM_LOGGING 1 _ACEOF else # check for an available logging library (log4cplus, then log4cxx, then log4cpp) # log4cplus if test "$without_log4cplus" != "true"; then # Check if log4cplus location is specified if test "x$log4cplus_location" != "xyes" then CPPFLAGS="$CPPFLAGS -I$log4cplus_location/include" LDFLAGS="$LDFLAGS -L$log4cplus_location/lib" fi # Check for log4cplus library LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -llog4cplus" { $as_echo "$as_me:$LINENO: checking log4cplus library" >&5 $as_echo_n "checking log4cplus library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <log4cplus/logger.h> int main () { log4cplus::Logger::getRoot(); return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then # Found the log4cplus library { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } cat >>confdefs.h <<\_ACEOF #define PION_USE_LOG4CPLUS 1 _ACEOF { $as_echo "$as_me:$LINENO: Using log4cplus for logging" >&5 $as_echo "$as_me: Using log4cplus for logging" >&6;} without_log4cxx=true without_log4cpp=true PION_LOG_LIB="-llog4cplus" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" fi # log4cxx if test "$without_log4cxx" != "true"; then # Check if log4cxx location is specified if test "x$log4cxx_location" != "xyes" then CPPFLAGS="$CPPFLAGS -I$log4cxx_location/include" LDFLAGS="$LDFLAGS -L$log4cxx_location/lib" fi # Check for log4cxx library LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -llog4cxx" { $as_echo "$as_me:$LINENO: checking log4cxx library" >&5 $as_echo_n "checking log4cxx library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <log4cxx/logger.h> int main () { log4cxx::Logger::getRootLogger(); return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then # Found the log4cxx library { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } cat >>confdefs.h <<\_ACEOF #define PION_USE_LOG4CXX 1 _ACEOF { $as_echo "$as_me:$LINENO: Using log4cxx for logging" >&5 $as_echo "$as_me: Using log4cxx for logging" >&6;} without_log4cplus=true without_log4cpp=true PION_LOG_LIB="-llog4cxx" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" fi # log4cpp if test "$without_log4cpp" != "true"; then # Check if log4cpp location is specified if test "x$log4cpp_location" != "xyes" then CPPFLAGS="$CPPFLAGS -I$log4cpp_location/include" LDFLAGS="$LDFLAGS -L$log4cpp_location/lib" fi # Check for log4cpp library LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -llog4cpp" { $as_echo "$as_me:$LINENO: checking log4cpp library" >&5 $as_echo_n "checking log4cpp library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <log4cpp/Category.hh> int main () { log4cpp::Category::getRoot(); return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then # Found the log4cpp library { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } cat >>confdefs.h <<\_ACEOF #define PION_USE_LOG4CPP 1 _ACEOF { $as_echo "$as_me:$LINENO: Using log4cpp for logging" >&5 $as_echo "$as_me: Using log4cpp for logging" >&6;} without_log4cplus=true without_log4cxx=true PION_LOG_LIB="-llog4cpp" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" fi # no log library found if test "x$PION_LOG_LIB" == "x"; then if test "x$ostream_logging" == "xno"; then { $as_echo "$as_me:$LINENO: WARNING: No logging library found - disabling logging" >&5 $as_echo "$as_me: WARNING: No logging library found - disabling logging" >&2;} cat >>confdefs.h <<\_ACEOF #define PION_DISABLE_LOGGING 1 _ACEOF else { $as_echo "$as_me:$LINENO: WARNING: No logging library found - using std::ostream for logging" >&5 $as_echo "$as_me: WARNING: No logging library found - using std::ostream for logging" >&2;} cat >>confdefs.h <<\_ACEOF #define PION_USE_OSTREAM_LOGGING 1 _ACEOF fi fi fi # Set external library dependencies PION_EXTERNAL_LIBS="$BOOST_THREAD_LIB $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_REGEX_LIB $BOOST_DATE_TIME_LIB $PION_LOG_LIB $PION_SSL_LIB $PION_ZLIB $PION_BZLIB $PION_EXTERNAL_LIBS" # Output Makefiles ac_config_files="$ac_config_files pion.pc Makefile include/Makefile include/pion/Makefile include/pion/tcp/Makefile include/pion/http/Makefile include/pion/test/Makefile include/pion/spdy/Makefile src/Makefile services/Makefile utils/Makefile tests/Makefile tests/plugins/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_doc_TRUE}" && test -z "${DX_COND_doc_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_doc\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_doc\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_doc_TRUE}" && test -z "${DX_COND_doc_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_doc\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_doc\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_dot_TRUE}" && test -z "${DX_COND_dot_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_dot\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_dot\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_dot_TRUE}" && test -z "${DX_COND_dot_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_dot\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_dot\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_man_TRUE}" && test -z "${DX_COND_man_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_man\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_man\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_man_TRUE}" && test -z "${DX_COND_man_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_man\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_man\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_rtf_TRUE}" && test -z "${DX_COND_rtf_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_rtf\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_rtf\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_rtf_TRUE}" && test -z "${DX_COND_rtf_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_rtf\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_rtf\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_xml_TRUE}" && test -z "${DX_COND_xml_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_xml\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_xml\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_xml_TRUE}" && test -z "${DX_COND_xml_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_xml\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_xml\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_chm_TRUE}" && test -z "${DX_COND_chm_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_chm\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_chm\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_chm_TRUE}" && test -z "${DX_COND_chm_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_chm\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_chm\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_chi_TRUE}" && test -z "${DX_COND_chi_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_chi\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_chi\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_chi_TRUE}" && test -z "${DX_COND_chi_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_chi\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_chi\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_html_TRUE}" && test -z "${DX_COND_html_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_html\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_html\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_html_TRUE}" && test -z "${DX_COND_html_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_html\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_html\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_ps_TRUE}" && test -z "${DX_COND_ps_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_ps\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_ps\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_ps_TRUE}" && test -z "${DX_COND_ps_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_ps\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_ps\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_pdf_TRUE}" && test -z "${DX_COND_pdf_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_pdf\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_pdf\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_pdf_TRUE}" && test -z "${DX_COND_pdf_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_pdf\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_pdf\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_latex_TRUE}" && test -z "${DX_COND_latex_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_latex\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_latex\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_latex_TRUE}" && test -z "${DX_COND_latex_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_latex\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_latex\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by pion $as_me 5.0.4, which was generated by GNU Autoconf 2.63. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTION]... [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to <bug-autoconf@gnu.org>." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ pion config.status 5.0.4 configured by $0, generated by GNU Autoconf 2.63, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2008 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header { $as_echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; };; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { $as_echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`' predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`' postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`' predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`' postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`' LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`' fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # Quote evaled strings. for var in SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ AR \ AR_FLAGS \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ SHELL \ ECHO \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ fix_srcfile_path \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ fix_srcfile_path_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` ;; esac ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "include/pion/config.hpp") CONFIG_HEADERS="$CONFIG_HEADERS include/pion/config.hpp" ;; "pion.pc") CONFIG_FILES="$CONFIG_FILES pion.pc" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/pion/Makefile") CONFIG_FILES="$CONFIG_FILES include/pion/Makefile" ;; "include/pion/tcp/Makefile") CONFIG_FILES="$CONFIG_FILES include/pion/tcp/Makefile" ;; "include/pion/http/Makefile") CONFIG_FILES="$CONFIG_FILES include/pion/http/Makefile" ;; "include/pion/test/Makefile") CONFIG_FILES="$CONFIG_FILES include/pion/test/Makefile" ;; "include/pion/spdy/Makefile") CONFIG_FILES="$CONFIG_FILES include/pion/spdy/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "services/Makefile") CONFIG_FILES="$CONFIG_FILES services/Makefile" ;; "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "tests/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES tests/plugins/Makefile" ;; *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { $as_echo "$as_me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=' ' ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\).*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\).*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' <conf$$subs.awk | sed ' /^[^""]/{ N s/\n// } ' >>$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 $as_echo "$as_me: error: could not setup config files machinery" >&2;} { (exit 1); exit 1; }; } _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 $as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' <confdefs.h | sed ' s/'"$ac_delim"'/"\\\ "/g' >>$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 $as_echo "$as_me: error: could not setup config headers machinery" >&2;} { (exit 1); exit 1; }; } fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 $as_echo "$as_me: error: invalid tag $ac_tag" >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 $as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac ac_file_inputs="$ac_file_inputs '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 $as_echo "$as_me: error: could not create -" >&2;} { (exit 1); exit 1; }; } fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir=$dirpart/$fdir case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Assembler program. AS=$AS # DLL creation program. DLLTOOL=$DLLTOOL # Object dumper program. OBJDUMP=$OBJDUMP # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == "file_magic". file_magic_cmd=$lt_file_magic_cmd # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name of the directory that contains temporary libtool files. objdir=$objdir # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that does not interpret backslashes. ECHO=$lt_ECHO # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into a binary # during linking. This must work even if \$libdir does not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $* )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_basename file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[^=]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$@"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1+=\$2" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1=\$$1\$2" } _LT_EOF ;; esac sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # If ld is used when linking, flag to hardcode \$libdir into a binary # during linking. This must work even if \$libdir does not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 $as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi �����������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/����������������������������������������������������������������������0000755�0003720�0000144�00000000000�12215647145�015567� 5����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/FileService.vcxproj.filters�������������������������������������������0000644�0003720�0000144�00000002032�12215647065�023051� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Filter Include="Source Files"> <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> </Filter> <Filter Include="Header Files"> <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> </Filter> <Filter Include="Resource Files"> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions> </Filter> </ItemGroup> <ItemGroup> <ClCompile Include="FileService.cpp"> <Filter>Source Files</Filter> </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="FileService.hpp"> <Filter>Header Files</Filter> </ClInclude> </ItemGroup> </Project>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/Makefile.am�����������������������������������������������������������0000644�0003720�0000144�00000004154�12215647065�017630� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -------------------------------- # pion automake configuration file # -------------------------------- AM_CPPFLAGS = -I../include pion_pluginsdir = @PION_PLUGINS_DIRECTORY@ pion_plugins_LTLIBRARIES = HelloService.la EchoService.la \ CookieService.la LogService.la FileService.la AllowNothingService.la HelloService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) HelloService_la_SOURCES = HelloService.hpp HelloService.cpp HelloService_la_LDFLAGS = -no-undefined -module -avoid-version HelloService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ HelloService_la_DEPENDENCIES = ../src/libpion.la EchoService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) EchoService_la_SOURCES = EchoService.hpp EchoService.cpp EchoService_la_LDFLAGS = -no-undefined -module -avoid-version EchoService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ EchoService_la_DEPENDENCIES = ../src/libpion.la CookieService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) CookieService_la_SOURCES = CookieService.hpp CookieService.cpp CookieService_la_LDFLAGS = -no-undefined -module -avoid-version CookieService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ CookieService_la_DEPENDENCIES = ../src/libpion.la LogService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) LogService_la_SOURCES = LogService.hpp LogService.cpp LogService_la_LDFLAGS = -no-undefined -module -avoid-version LogService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ LogService_la_DEPENDENCIES = ../src/libpion.la # Build both dynamic and static library for FileService #FileService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) FileService_la_SOURCES = FileService.hpp FileService.cpp FileService_la_LDFLAGS = -no-undefined -module -avoid-version FileService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ FileService_la_DEPENDENCIES = ../src/libpion.la AllowNothingService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) AllowNothingService_la_SOURCES = AllowNothingService.hpp AllowNothingService.cpp AllowNothingService_la_LDFLAGS = -no-undefined -module -avoid-version AllowNothingService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ AllowNothingService_la_DEPENDENCIES = ../src/libpion.la EXTRA_DIST = *.vcxproj *.vcxproj.filters ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/EchoService.vcxproj���������������������������������������������������0000644�0003720�0000144�00000033131�12215647065�021405� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug_DLL_full|Win32"> <Configuration>Debug_DLL_full</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_DLL_full|x64"> <Configuration>Debug_DLL_full</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_static|Win32"> <Configuration>Debug_static</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_static|x64"> <Configuration>Debug_static</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_DLL_full|Win32"> <Configuration>Release_DLL_full</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_DLL_full|x64"> <Configuration>Release_DLL_full</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_static|Win32"> <Configuration>Release_static</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_static|x64"> <Configuration>Release_static</Configuration> <Platform>x64</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}</ProjectGuid> <RootNamespace>EchoService</RootNamespace> <Keyword>Win32Proj</Keyword> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup> <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" /> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'">$(SolutionDir)bin\$(Configuration)_$(PlatformName)\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'">$(SolutionDir)bin\$(Configuration)_$(PlatformName)\</OutDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'"> <ClCompile> <PreprocessorDefinitions>ECHOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>ECHOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'"> <ClCompile> <PreprocessorDefinitions>ECHOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>ECHOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'"> <ClCompile> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </ClCompile> </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="EchoService.cpp" /> </ItemGroup> <ItemGroup> <ClInclude Include="EchoService.hpp" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\src\pion.vcxproj"> <Project>{61f4b4d5-3608-4264-9f4b-b0da3e3fdf62}</Project> <ReferenceOutputAssembly>false</ReferenceOutputAssembly> </ProjectReference> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> </Project>���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/CookieService.vcxproj�������������������������������������������������0000644�0003720�0000144�00000033147�12215647065�021747� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug_DLL_full|Win32"> <Configuration>Debug_DLL_full</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_DLL_full|x64"> <Configuration>Debug_DLL_full</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_static|Win32"> <Configuration>Debug_static</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_static|x64"> <Configuration>Debug_static</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_DLL_full|Win32"> <Configuration>Release_DLL_full</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_DLL_full|x64"> <Configuration>Release_DLL_full</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_static|Win32"> <Configuration>Release_static</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_static|x64"> <Configuration>Release_static</Configuration> <Platform>x64</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{1CF012D8-A47C-4D2B-952D-D90D19795A07}</ProjectGuid> <RootNamespace>CookieService</RootNamespace> <Keyword>Win32Proj</Keyword> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup> <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" /> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'">$(SolutionDir)bin\$(Configuration)_$(PlatformName)\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'">$(SolutionDir)bin\$(Configuration)_$(PlatformName)\</OutDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'"> <ClCompile> <PreprocessorDefinitions>COOKIESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>COOKIESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'"> <ClCompile> <PreprocessorDefinitions>COOKIESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>COOKIESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'"> <ClCompile> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </ClCompile> </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="CookieService.cpp" /> </ItemGroup> <ItemGroup> <ClInclude Include="CookieService.hpp" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\src\pion.vcxproj"> <Project>{61f4b4d5-3608-4264-9f4b-b0da3e3fdf62}</Project> <ReferenceOutputAssembly>false</ReferenceOutputAssembly> </ProjectReference> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> </Project>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/CookieService.vcxproj.filters�����������������������������������������0000644�0003720�0000144�00000002036�12215647065�023407� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Filter Include="Source Files"> <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> </Filter> <Filter Include="Header Files"> <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> </Filter> <Filter Include="Resource Files"> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions> </Filter> </ItemGroup> <ItemGroup> <ClCompile Include="CookieService.cpp"> <Filter>Source Files</Filter> </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="CookieService.hpp"> <Filter>Header Files</Filter> </ClInclude> </ItemGroup> </Project>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/LogService.hpp��������������������������������������������������������0000644�0003720�0000144�00000011524�12215647065�020346� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_LOGSERVICE_HEADER__ #define __PION_LOGSERVICE_HEADER__ #include <boost/thread/mutex.hpp> #include <boost/scoped_ptr.hpp> #include <pion/logger.hpp> #include <pion/http/plugin_service.hpp> #include <pion/http/response_writer.hpp> #include <string> #include <list> #if defined(PION_USE_LOG4CXX) #include <log4cxx/appenderskeleton.h> // version 0.10.x introduces a new data type that is declared in a // pool.h header file. If we're using 0.9.x, just declare the type // as an int since it is not being used at all #ifndef _LOG4CXX_HELPERS_POOL_H namespace log4cxx { namespace helpers { typedef int Pool; } } #endif #endif namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins /// /// LogServiceAppender: caches log events in memory for use by LogService /// class LogServiceAppender #ifdef PION_HAS_LOG_APPENDER : public log_appender #endif { public: // default constructor and destructor LogServiceAppender(void); virtual ~LogServiceAppender() {} /// sets the maximum number of log events cached in memory inline void setMaxEvents(unsigned int n) { m_max_events = n; } /// adds a formatted log message to the memory cache void addLogString(const std::string& log_string); /// writes the events cached in memory to a response stream void writeLogEvents(pion::http::response_writer_ptr& writer); private: /// default maximum number of events cached in memory static const unsigned int DEFAULT_MAX_EVENTS; /// maxiumum number of events cached in memory unsigned int m_max_events; /// number of events currently cached in memory unsigned int m_num_events; /// memory cache of pre-formatted log events std::list<std::string> m_log_events; /// mutex to make class thread-safe boost::mutex m_log_mutex; #if defined(PION_USE_LOG4CXX) public: // member functions inherited from the Appender interface class virtual void close() {} virtual bool requiresLayout() const { return false; } protected: /// adds log event to the memory cache virtual void append(const log4cxx::spi::LoggingEventPtr& event); // version 0.10.x adds a second "pool" argument -> just ignore it virtual void append(const log4cxx::spi::LoggingEventPtr& event, log4cxx::helpers::Pool& pool) { append(event); } #elif defined(PION_USE_LOG4CPLUS) public: // member functions inherited from the Appender interface class virtual void close() {} protected: virtual void append(const log4cplus::spi::InternalLoggingEvent& event); private: /// this is used to convert numeric log levels into strings log4cplus::LogLevelManager m_log_level_manager; #elif defined(PION_USE_LOG4CPP) public: // member functions inherited from the AppenderSkeleton class virtual void close() {} virtual bool requiresLayout() const { return true; } virtual void setLayout(log4cpp::Layout* layout) { m_layout_ptr.reset(layout); } protected: /// adds log event to the memory cache virtual void _append(const log4cpp::LoggingEvent& event); private: /// the logging layout used to format events boost::scoped_ptr<log4cpp::Layout> m_layout_ptr; #endif }; /// /// LogService: web service that displays log messages /// class LogService : public pion::http::plugin_service { public: // default constructor and destructor LogService(void); virtual ~LogService(); /// handles a new HTTP request virtual void operator()(pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn); /// returns the log appender used by LogService inline LogServiceAppender& getLogAppender(void) { #ifdef PION_HAS_LOG_APPENDER return dynamic_cast<LogServiceAppender&>(*m_log_appender_ptr); #else return *m_log_appender_ptr; #endif } private: /// this is used to keep track of log messages #ifdef PION_HAS_LOG_APPENDER log_appender_ptr m_log_appender_ptr; #else LogServiceAppender * m_log_appender_ptr; #endif }; } // end namespace plugins } // end namespace pion #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/LogService.vcxproj����������������������������������������������������0000644�0003720�0000144�00000033122�12215647065�021250� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug_DLL_full|Win32"> <Configuration>Debug_DLL_full</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_DLL_full|x64"> <Configuration>Debug_DLL_full</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_static|Win32"> <Configuration>Debug_static</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_static|x64"> <Configuration>Debug_static</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_DLL_full|Win32"> <Configuration>Release_DLL_full</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_DLL_full|x64"> <Configuration>Release_DLL_full</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_static|Win32"> <Configuration>Release_static</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_static|x64"> <Configuration>Release_static</Configuration> <Platform>x64</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{12F95FE7-ACE1-4281-86BF-4117AE2D633E}</ProjectGuid> <RootNamespace>LogService</RootNamespace> <Keyword>Win32Proj</Keyword> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup> <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" /> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'">$(SolutionDir)bin\$(Configuration)_$(PlatformName)\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'">$(SolutionDir)bin\$(Configuration)_$(PlatformName)\</OutDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'"> <ClCompile> <PreprocessorDefinitions>LOGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>LOGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'"> <ClCompile> <PreprocessorDefinitions>LOGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>LOGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'"> <ClCompile> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </ClCompile> </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="LogService.cpp" /> </ItemGroup> <ItemGroup> <ClInclude Include="LogService.hpp" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\src\pion.vcxproj"> <Project>{61f4b4d5-3608-4264-9f4b-b0da3e3fdf62}</Project> <ReferenceOutputAssembly>false</ReferenceOutputAssembly> </ProjectReference> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> </Project>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/LogService.vcxproj.filters��������������������������������������������0000644�0003720�0000144�00000002030�12215647065�022711� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Filter Include="Source Files"> <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> </Filter> <Filter Include="Header Files"> <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> </Filter> <Filter Include="Resource Files"> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions> </Filter> </ItemGroup> <ItemGroup> <ClCompile Include="LogService.cpp"> <Filter>Source Files</Filter> </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="LogService.hpp"> <Filter>Header Files</Filter> </ClInclude> </ItemGroup> </Project>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/HelloService.hpp������������������������������������������������������0000644�0003720�0000144�00000002000�12215647065�020655� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HELLOSERVICE_HEADER__ #define __PION_HELLOSERVICE_HEADER__ #include <pion/http/plugin_service.hpp> namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins /// /// HelloService: web service that responds with "Hello World" /// class HelloService : public pion::http::plugin_service { public: HelloService(void) {} virtual ~HelloService() {} virtual void operator()(pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn); }; } // end namespace plugins } // end namespace pion #endif pion-5.0.4+dfsg.orig/services/AllowNothingService.vcxproj�������������������������������������������0000644�0003720�0000144�00000035604�12215647065�023143� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug_DLL_full|Win32"> <Configuration>Debug_DLL_full</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_DLL_full|x64"> <Configuration>Debug_DLL_full</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_static|Win32"> <Configuration>Debug_static</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_static|x64"> <Configuration>Debug_static</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_DLL_full|Win32"> <Configuration>Release_DLL_full</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_DLL_full|x64"> <Configuration>Release_DLL_full</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_static|Win32"> <Configuration>Release_static</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_static|x64"> <Configuration>Release_static</Configuration> <Platform>x64</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{8C8A8E46-4588-4CE1-B624-89C36EA5209E}</ProjectGuid> <RootNamespace>AllowNothingService</RootNamespace> <Keyword>Win32Proj</Keyword> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_win32.props" /> <Import Project="..\build\Release_DLL_pion.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_win32.props" /> <Import Project="..\build\Debug_DLL_pion.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\Release_static_pion.props" /> <Import Project="..\build\third_party_static_libs_win32.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\Debug_static_pion.props" /> <Import Project="..\build\third_party_static_libs_win32.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\Release_DLL_pion.props" /> <Import Project="..\build\third_party_libs_x64.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\Debug_DLL_pion.props" /> <Import Project="..\build\third_party_static_libs_x64.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\Release_static_pion.props" /> <Import Project="..\build\third_party_static_libs_x64.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\Debug_static_pion.props" /> <Import Project="..\build\third_party_static_libs_x64.props" /> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup> <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'">$(Configuration)_$(PlatformName)\</OutDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'">$(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(Platform)\</IntDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'">$(Configuration)_$(PlatformName)\</OutDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'">$(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(Platform)\</IntDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'">$(Configuration)_$(PlatformName)\</OutDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'">$(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(Platform)\</IntDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'">$(Configuration)_$(PlatformName)\</OutDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'">$(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(Platform)\</IntDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'">$(Configuration)_$(PlatformName)\</OutDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'">$(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(Platform)\</IntDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'">$(Configuration)_$(PlatformName)\</OutDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'">$(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(Platform)\</IntDir> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" /> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'">$(Configuration)_$(PlatformName)\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'">$(Configuration)_$(PlatformName)\</OutDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'"> <ClCompile> <PreprocessorDefinitions>ALLOWNOTHINGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>ALLOWNOTHINGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'"> <ClCompile> <PreprocessorDefinitions>ALLOWNOTHINGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>ALLOWNOTHINGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'"> <ClCompile> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </ClCompile> </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="AllowNothingService.cpp" /> </ItemGroup> <ItemGroup> <ClInclude Include="AllowNothingService.hpp" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\src\pion.vcxproj"> <Project>{61f4b4d5-3608-4264-9f4b-b0da3e3fdf62}</Project> <ReferenceOutputAssembly>false</ReferenceOutputAssembly> </ProjectReference> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> </Project>����������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/Makefile.in�����������������������������������������������������������0000644�0003720�0000144�00000075742�12215647101�017643� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = services DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pion_pluginsdir)" LTLIBRARIES = $(pion_plugins_LTLIBRARIES) am_AllowNothingService_la_OBJECTS = \ AllowNothingService_la-AllowNothingService.lo AllowNothingService_la_OBJECTS = $(am_AllowNothingService_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent AllowNothingService_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AllowNothingService_la_CXXFLAGS) $(CXXFLAGS) \ $(AllowNothingService_la_LDFLAGS) $(LDFLAGS) -o $@ am_CookieService_la_OBJECTS = CookieService_la-CookieService.lo CookieService_la_OBJECTS = $(am_CookieService_la_OBJECTS) CookieService_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(CookieService_la_CXXFLAGS) $(CXXFLAGS) \ $(CookieService_la_LDFLAGS) $(LDFLAGS) -o $@ am_EchoService_la_OBJECTS = EchoService_la-EchoService.lo EchoService_la_OBJECTS = $(am_EchoService_la_OBJECTS) EchoService_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(EchoService_la_CXXFLAGS) $(CXXFLAGS) \ $(EchoService_la_LDFLAGS) $(LDFLAGS) -o $@ am_FileService_la_OBJECTS = FileService.lo FileService_la_OBJECTS = $(am_FileService_la_OBJECTS) FileService_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(FileService_la_LDFLAGS) \ $(LDFLAGS) -o $@ am_HelloService_la_OBJECTS = HelloService_la-HelloService.lo HelloService_la_OBJECTS = $(am_HelloService_la_OBJECTS) HelloService_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(HelloService_la_CXXFLAGS) $(CXXFLAGS) \ $(HelloService_la_LDFLAGS) $(LDFLAGS) -o $@ am_LogService_la_OBJECTS = LogService_la-LogService.lo LogService_la_OBJECTS = $(am_LogService_la_OBJECTS) LogService_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(LogService_la_CXXFLAGS) $(CXXFLAGS) $(LogService_la_LDFLAGS) \ $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/pion depcomp = $(SHELL) $(top_srcdir)/m4/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_$(V)) am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_$(V)) am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(AllowNothingService_la_SOURCES) \ $(CookieService_la_SOURCES) $(EchoService_la_SOURCES) \ $(FileService_la_SOURCES) $(HelloService_la_SOURCES) \ $(LogService_la_SOURCES) DIST_SOURCES = $(AllowNothingService_la_SOURCES) \ $(CookieService_la_SOURCES) $(EchoService_la_SOURCES) \ $(FileService_la_SOURCES) $(HelloService_la_SOURCES) \ $(LogService_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I../include pion_pluginsdir = @PION_PLUGINS_DIRECTORY@ pion_plugins_LTLIBRARIES = HelloService.la EchoService.la \ CookieService.la LogService.la FileService.la AllowNothingService.la HelloService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) HelloService_la_SOURCES = HelloService.hpp HelloService.cpp HelloService_la_LDFLAGS = -no-undefined -module -avoid-version HelloService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ HelloService_la_DEPENDENCIES = ../src/libpion.la EchoService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) EchoService_la_SOURCES = EchoService.hpp EchoService.cpp EchoService_la_LDFLAGS = -no-undefined -module -avoid-version EchoService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ EchoService_la_DEPENDENCIES = ../src/libpion.la CookieService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) CookieService_la_SOURCES = CookieService.hpp CookieService.cpp CookieService_la_LDFLAGS = -no-undefined -module -avoid-version CookieService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ CookieService_la_DEPENDENCIES = ../src/libpion.la LogService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) LogService_la_SOURCES = LogService.hpp LogService.cpp LogService_la_LDFLAGS = -no-undefined -module -avoid-version LogService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ LogService_la_DEPENDENCIES = ../src/libpion.la # Build both dynamic and static library for FileService #FileService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) FileService_la_SOURCES = FileService.hpp FileService.cpp FileService_la_LDFLAGS = -no-undefined -module -avoid-version FileService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ FileService_la_DEPENDENCIES = ../src/libpion.la AllowNothingService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) AllowNothingService_la_SOURCES = AllowNothingService.hpp AllowNothingService.cpp AllowNothingService_la_LDFLAGS = -no-undefined -module -avoid-version AllowNothingService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ AllowNothingService_la_DEPENDENCIES = ../src/libpion.la EXTRA_DIST = *.vcxproj *.vcxproj.filters all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign services/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign services/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-pion_pluginsLTLIBRARIES: $(pion_plugins_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(pion_pluginsdir)" || $(MKDIR_P) "$(DESTDIR)$(pion_pluginsdir)" @list='$(pion_plugins_LTLIBRARIES)'; test -n "$(pion_pluginsdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pion_pluginsdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pion_pluginsdir)"; \ } uninstall-pion_pluginsLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pion_plugins_LTLIBRARIES)'; test -n "$(pion_pluginsdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pion_pluginsdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pion_pluginsdir)/$$f"; \ done clean-pion_pluginsLTLIBRARIES: -test -z "$(pion_plugins_LTLIBRARIES)" || rm -f $(pion_plugins_LTLIBRARIES) @list='$(pion_plugins_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done AllowNothingService.la: $(AllowNothingService_la_OBJECTS) $(AllowNothingService_la_DEPENDENCIES) $(AM_V_CXXLD)$(AllowNothingService_la_LINK) -rpath $(pion_pluginsdir) $(AllowNothingService_la_OBJECTS) $(AllowNothingService_la_LIBADD) $(LIBS) CookieService.la: $(CookieService_la_OBJECTS) $(CookieService_la_DEPENDENCIES) $(AM_V_CXXLD)$(CookieService_la_LINK) -rpath $(pion_pluginsdir) $(CookieService_la_OBJECTS) $(CookieService_la_LIBADD) $(LIBS) EchoService.la: $(EchoService_la_OBJECTS) $(EchoService_la_DEPENDENCIES) $(AM_V_CXXLD)$(EchoService_la_LINK) -rpath $(pion_pluginsdir) $(EchoService_la_OBJECTS) $(EchoService_la_LIBADD) $(LIBS) FileService.la: $(FileService_la_OBJECTS) $(FileService_la_DEPENDENCIES) $(AM_V_CXXLD)$(FileService_la_LINK) -rpath $(pion_pluginsdir) $(FileService_la_OBJECTS) $(FileService_la_LIBADD) $(LIBS) HelloService.la: $(HelloService_la_OBJECTS) $(HelloService_la_DEPENDENCIES) $(AM_V_CXXLD)$(HelloService_la_LINK) -rpath $(pion_pluginsdir) $(HelloService_la_OBJECTS) $(HelloService_la_LIBADD) $(LIBS) LogService.la: $(LogService_la_OBJECTS) $(LogService_la_DEPENDENCIES) $(AM_V_CXXLD)$(LogService_la_LINK) -rpath $(pion_pluginsdir) $(LogService_la_OBJECTS) $(LogService_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AllowNothingService_la-AllowNothingService.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieService_la-CookieService.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EchoService_la-EchoService.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileService.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HelloService_la-HelloService.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LogService_la-LogService.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< AllowNothingService_la-AllowNothingService.lo: AllowNothingService.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AllowNothingService_la_CXXFLAGS) $(CXXFLAGS) -MT AllowNothingService_la-AllowNothingService.lo -MD -MP -MF $(DEPDIR)/AllowNothingService_la-AllowNothingService.Tpo -c -o AllowNothingService_la-AllowNothingService.lo `test -f 'AllowNothingService.cpp' || echo '$(srcdir)/'`AllowNothingService.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/AllowNothingService_la-AllowNothingService.Tpo $(DEPDIR)/AllowNothingService_la-AllowNothingService.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='AllowNothingService.cpp' object='AllowNothingService_la-AllowNothingService.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AllowNothingService_la_CXXFLAGS) $(CXXFLAGS) -c -o AllowNothingService_la-AllowNothingService.lo `test -f 'AllowNothingService.cpp' || echo '$(srcdir)/'`AllowNothingService.cpp CookieService_la-CookieService.lo: CookieService.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CookieService_la_CXXFLAGS) $(CXXFLAGS) -MT CookieService_la-CookieService.lo -MD -MP -MF $(DEPDIR)/CookieService_la-CookieService.Tpo -c -o CookieService_la-CookieService.lo `test -f 'CookieService.cpp' || echo '$(srcdir)/'`CookieService.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/CookieService_la-CookieService.Tpo $(DEPDIR)/CookieService_la-CookieService.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='CookieService.cpp' object='CookieService_la-CookieService.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CookieService_la_CXXFLAGS) $(CXXFLAGS) -c -o CookieService_la-CookieService.lo `test -f 'CookieService.cpp' || echo '$(srcdir)/'`CookieService.cpp EchoService_la-EchoService.lo: EchoService.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(EchoService_la_CXXFLAGS) $(CXXFLAGS) -MT EchoService_la-EchoService.lo -MD -MP -MF $(DEPDIR)/EchoService_la-EchoService.Tpo -c -o EchoService_la-EchoService.lo `test -f 'EchoService.cpp' || echo '$(srcdir)/'`EchoService.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/EchoService_la-EchoService.Tpo $(DEPDIR)/EchoService_la-EchoService.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='EchoService.cpp' object='EchoService_la-EchoService.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(EchoService_la_CXXFLAGS) $(CXXFLAGS) -c -o EchoService_la-EchoService.lo `test -f 'EchoService.cpp' || echo '$(srcdir)/'`EchoService.cpp HelloService_la-HelloService.lo: HelloService.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(HelloService_la_CXXFLAGS) $(CXXFLAGS) -MT HelloService_la-HelloService.lo -MD -MP -MF $(DEPDIR)/HelloService_la-HelloService.Tpo -c -o HelloService_la-HelloService.lo `test -f 'HelloService.cpp' || echo '$(srcdir)/'`HelloService.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/HelloService_la-HelloService.Tpo $(DEPDIR)/HelloService_la-HelloService.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='HelloService.cpp' object='HelloService_la-HelloService.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(HelloService_la_CXXFLAGS) $(CXXFLAGS) -c -o HelloService_la-HelloService.lo `test -f 'HelloService.cpp' || echo '$(srcdir)/'`HelloService.cpp LogService_la-LogService.lo: LogService.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(LogService_la_CXXFLAGS) $(CXXFLAGS) -MT LogService_la-LogService.lo -MD -MP -MF $(DEPDIR)/LogService_la-LogService.Tpo -c -o LogService_la-LogService.lo `test -f 'LogService.cpp' || echo '$(srcdir)/'`LogService.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/LogService_la-LogService.Tpo $(DEPDIR)/LogService_la-LogService.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='LogService.cpp' object='LogService_la-LogService.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(LogService_la_CXXFLAGS) $(CXXFLAGS) -c -o LogService_la-LogService.lo `test -f 'LogService.cpp' || echo '$(srcdir)/'`LogService.cpp mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(pion_pluginsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-pion_pluginsLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pion_pluginsLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pion_pluginsLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-pion_pluginsLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pion_pluginsLTLIBRARIES \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-pion_pluginsLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������pion-5.0.4+dfsg.orig/services/EchoService.vcxproj.filters�������������������������������������������0000644�0003720�0000144�00000002032�12215647065�023050� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Filter Include="Source Files"> <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> </Filter> <Filter Include="Header Files"> <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> </Filter> <Filter Include="Resource Files"> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions> </Filter> </ItemGroup> <ItemGroup> <ClCompile Include="EchoService.cpp"> <Filter>Source Files</Filter> </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="EchoService.hpp"> <Filter>Header Files</Filter> </ClInclude> </ItemGroup> </Project>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/FileService.hpp�������������������������������������������������������0000644�0003720�0000144�00000032120�12215647065�020477� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_FILESERVICE_HEADER__ #define __PION_FILESERVICE_HEADER__ #include <boost/shared_ptr.hpp> #include <boost/functional/hash.hpp> #include <boost/filesystem/path.hpp> #include <boost/thread/once.hpp> #include <boost/thread/mutex.hpp> #include <boost/shared_array.hpp> #include <pion/config.hpp> #include <pion/logger.hpp> #include <pion/hash_map.hpp> #include <pion/http/plugin_service.hpp> #include <pion/http/request.hpp> #include <pion/http/response_writer.hpp> #include <pion/http/server.hpp> #include <string> #include <map> namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins /// /// DiskFile: class used to represent files stored on disk /// class DiskFile { public: /// default constructor DiskFile(void) : m_file_size(0), m_last_modified(0) {} /// used to construct new disk file objects DiskFile(const boost::filesystem::path& path, char *content, unsigned long size, std::time_t modified, const std::string& mime) : m_file_path(path), m_file_content(content), m_file_size(size), m_last_modified(modified), m_mime_type(mime) {} /// copy constructor DiskFile(const DiskFile& f) : m_file_path(f.m_file_path), m_file_content(f.m_file_content), m_file_size(f.m_file_size), m_last_modified(f.m_last_modified), m_last_modified_string(f.m_last_modified_string), m_mime_type(f.m_mime_type) {} /// updates the file_size and last_modified timestamp to disk void update(void); /// reads content from disk into file_content buffer (may throw) void read(void); /** * checks if the file has been updated and updates vars if it has (may throw) * * @return true if the file was updated */ bool checkUpdated(void); /// return path to the cached file inline const boost::filesystem::path& getFilePath(void) const { return m_file_path; } /// returns content of the cached file inline char *getFileContent(void) { return m_file_content.get(); } /// returns true if there is cached file content inline bool hasFileContent(void) const { return m_file_content; } /// returns size of the file's content inline unsigned long getFileSize(void) const { return m_file_size; } /// returns timestamp that the cached file was last modified (0 = cache disabled) inline std::time_t getLastModified(void) const { return m_last_modified; } /// returns timestamp that the cached file was last modified (string format) inline const std::string& getLastModifiedString(void) const { return m_last_modified_string; } /// returns mime type for the cached file inline const std::string& getMimeType(void) const { return m_mime_type; } /// sets the path to the cached file inline void setFilePath(const boost::filesystem::path& p) { m_file_path = p; } /// appends to the path of the cached file inline void appendFilePath(const std::string& p) { m_file_path /= p; } /// sets the mime type for the cached file inline void setMimeType(const std::string& t) { m_mime_type = t; } /// resets the size of the file content buffer inline void resetFileContent(unsigned long n = 0) { if (n == 0) m_file_content.reset(); else m_file_content.reset(new char[n]); } protected: /// path to the cached file boost::filesystem::path m_file_path; /// content of the cached file boost::shared_array<char> m_file_content; /// size of the file's content std::streamsize m_file_size; /// timestamp that the cached file was last modified (0 = cache disabled) std::time_t m_last_modified; /// timestamp that the cached file was last modified (string format) std::string m_last_modified_string; /// mime type for the cached file std::string m_mime_type; }; /// /// DiskFileSender: class used to send files to clients using HTTP responses /// class DiskFileSender : public boost::enable_shared_from_this<DiskFileSender>, private boost::noncopyable { public: /** * creates new DiskFileSender objects * * @param file disk file object that should be sent * @param http_request_ptr HTTP request that we are responding to * @param tcp_conn TCP connection used to send the file * @param max_chunk_size sets the maximum chunk size (default=0, unlimited) */ static inline boost::shared_ptr<DiskFileSender> create(DiskFile& file, pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn, unsigned long max_chunk_size = 0) { return boost::shared_ptr<DiskFileSender>(new DiskFileSender(file, http_request_ptr, tcp_conn, max_chunk_size)); } /// default virtual destructor virtual ~DiskFileSender() {} /// Begins sending the file to the client. Following a call to this /// function, it is not thread safe to use your reference to the /// DiskFileSender object. void send(void); /// sets the logger to be used inline void set_logger(logger log_ptr) { m_logger = log_ptr; } /// returns the logger currently in use inline logger get_logger(void) { return m_logger; } protected: /** * protected constructor restricts creation of objects (use create()) * * @param file disk file object that should be sent * @param http_request_ptr HTTP request that we are responding to * @param tcp_conn TCP connection used to send the file * @param max_chunk_size sets the maximum chunk size */ DiskFileSender(DiskFile& file, pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn, unsigned long max_chunk_size); /** * handler called after a send operation has completed * * @param write_error error status from the last write operation * @param bytes_written number of bytes sent by the last write operation */ void handle_write(const boost::system::error_code& write_error, std::size_t bytes_written); /// primary logging interface used by this class logger m_logger; private: /// the disk file we are sending DiskFile m_disk_file; /// the HTTP response we are sending pion::http::response_writer_ptr m_writer; /// used to read the file from disk if it is not already cached in memory boost::filesystem::ifstream m_file_stream; /// buffer used to send file content boost::shared_array<char> m_content_buf; /** * maximum chunk size (in bytes): files larger than this size will be * delivered to clients using HTTP chunked responses. A value of * zero means that the size is unlimited (chunking is disabled). */ unsigned long m_max_chunk_size; /// the number of file bytes send in the last operation unsigned long m_file_bytes_to_send; /// the number of bytes we have sent so far unsigned long m_bytes_sent; }; /// data type for a DiskFileSender pointer typedef boost::shared_ptr<DiskFileSender> DiskFileSenderPtr; /// /// FileService: web service that serves regular files /// class FileService : public pion::http::plugin_service { public: // default constructor and destructor FileService(void); virtual ~FileService() {} /** * configuration options supported by FileService: * * directory: all files within the directory will be made available * file: * cache: * scan: * max_chunk_size: * writable: */ virtual void set_option(const std::string& name, const std::string& value); /// handles requests for FileService virtual void operator()(pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn); /// called when the web service's server is starting virtual void start(void); /// called when the web service's server is stopping virtual void stop(void); /// sets the logger to be used inline void set_logger(logger log_ptr) { m_logger = log_ptr; } /// returns the logger currently in use inline logger get_logger(void) { return m_logger; } protected: /// data type for map of file names to cache entries typedef PION_HASH_MAP<std::string, DiskFile, PION_HASH_STRING > CacheMap; /// data type for map of file extensions to MIME types typedef PION_HASH_MAP<std::string, std::string, PION_HASH_STRING > MIMETypeMap; /** * adds all files within a directory to the cache * * @param dir_path the directory to scan (sub-directories are included) */ void scanDirectory(const boost::filesystem::path& dir_path); /** * adds a single file to the cache * * @param relative_path path for the file relative to the root directory * @param file_path actual path to the file on disk * @param placeholder if true, the file's contents are not cached * * @return std::pair<CacheMap::iterator, bool> if an entry is added to the * cache, second will be true and first will point to the new entry */ std::pair<CacheMap::iterator, bool> addCacheEntry(const std::string& relative_path, const boost::filesystem::path& file_path, const bool placeholder); /** * searches for a MIME type that matches a file * * @param file_name name of the file to search for * @return MIME type corresponding with the file, or DEFAULT_MIME_TYPE if none found */ static std::string findMIMEType(const std::string& file_name); void sendNotFoundResponse(pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn); /// primary logging interface used by this class logger m_logger; private: /// function called once to initialize the map of MIME types static void createMIMETypes(void); /// mime type used if no others are found for the file's extension static const std::string DEFAULT_MIME_TYPE; /// default setting for cache configuration option static const unsigned int DEFAULT_CACHE_SETTING; /// default setting for scan configuration option static const unsigned int DEFAULT_SCAN_SETTING; /// default setting for the maximum cache size option static const unsigned long DEFAULT_MAX_CACHE_SIZE; /// default setting for the maximum chunk size option static const unsigned long DEFAULT_MAX_CHUNK_SIZE; /// flag used to make sure that createMIMETypes() is called only once static boost::once_flag m_mime_types_init_flag; /// map of file extensions to MIME types static MIMETypeMap * m_mime_types_ptr; /// directory containing files that will be made available boost::filesystem::path m_directory; /// single file served by the web service boost::filesystem::path m_file; /// used to cache file contents and metadata in memory CacheMap m_cache_map; /// mutex used to make the file cache thread-safe boost::mutex m_cache_mutex; /** * cache configuration setting: * 0 = do not cache files in memory * 1 = cache files in memory when requested, check for any updates * 2 = cache files in memory when requested, ignore any updates */ unsigned int m_cache_setting; /** * scan configuration setting (only applies to directories): * 0 = do not scan the directory; allow files to be added at any time * 1 = scan directory when started, and do not allow files to be added * 2 = scan directory and pre-populate cache; allow new files * 3 = scan directory and pre-populate cache; ignore new files */ unsigned int m_scan_setting; /** * maximum cache size (in bytes): files larger than this size will never be * cached in memory. A value of zero means that the size is unlimited. */ unsigned long m_max_cache_size; /** * maximum chunk size (in bytes): files larger than this size will be * delivered to clients using HTTP chunked responses. A value of * zero means that the size is unlimited (chunking is disabled). */ unsigned long m_max_chunk_size; /** * Whether the file and/or directory served are writable. */ bool m_writable; }; } // end namespace plugins } // end namespace pion #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/EchoService.hpp�������������������������������������������������������0000644�0003720�0000144�00000002014�12215647065�020475� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_ECHOSERVICE_HEADER__ #define __PION_ECHOSERVICE_HEADER__ #include <pion/http/plugin_service.hpp> namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins /// /// EchoService: web service that echos back requests (to test request parsing) /// class EchoService : public pion::http::plugin_service { public: EchoService(void) {} virtual ~EchoService() {} virtual void operator()(pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn); }; } // end namespace plugins } // end namespace pion #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/HelloService.vcxproj.filters������������������������������������������0000644�0003720�0000144�00000002034�12215647065�023237� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Filter Include="Source Files"> <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> </Filter> <Filter Include="Header Files"> <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> </Filter> <Filter Include="Resource Files"> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions> </Filter> </ItemGroup> <ItemGroup> <ClCompile Include="HelloService.cpp"> <Filter>Source Files</Filter> </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="HelloService.hpp"> <Filter>Header Files</Filter> </ClInclude> </ItemGroup> </Project>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/FileService.vcxproj���������������������������������������������������0000644�0003720�0000144�00000033131�12215647065�021406� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug_DLL_full|Win32"> <Configuration>Debug_DLL_full</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_DLL_full|x64"> <Configuration>Debug_DLL_full</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_static|Win32"> <Configuration>Debug_static</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_static|x64"> <Configuration>Debug_static</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_DLL_full|Win32"> <Configuration>Release_DLL_full</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_DLL_full|x64"> <Configuration>Release_DLL_full</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_static|Win32"> <Configuration>Release_static</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_static|x64"> <Configuration>Release_static</Configuration> <Platform>x64</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}</ProjectGuid> <RootNamespace>FileService</RootNamespace> <Keyword>Win32Proj</Keyword> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup> <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" /> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'">$(SolutionDir)bin\$(Configuration)_$(PlatformName)\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'">$(SolutionDir)bin\$(Configuration)_$(PlatformName)\</OutDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'"> <ClCompile> <PreprocessorDefinitions>FILESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>FILESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'"> <ClCompile> <PreprocessorDefinitions>FILESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>FILESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'"> <ClCompile> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </ClCompile> </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="FileService.cpp" /> </ItemGroup> <ItemGroup> <ClInclude Include="FileService.hpp" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\src\pion.vcxproj"> <Project>{61f4b4d5-3608-4264-9f4b-b0da3e3fdf62}</Project> <ReferenceOutputAssembly>false</ReferenceOutputAssembly> </ProjectReference> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> </Project>���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/HelloService.vcxproj��������������������������������������������������0000644�0003720�0000144�00000033140�12215647065�021572� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug_DLL_full|Win32"> <Configuration>Debug_DLL_full</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_DLL_full|x64"> <Configuration>Debug_DLL_full</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_static|Win32"> <Configuration>Debug_static</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug_static|x64"> <Configuration>Debug_static</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_DLL_full|Win32"> <Configuration>Release_DLL_full</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_DLL_full|x64"> <Configuration>Release_DLL_full</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_static|Win32"> <Configuration>Release_static</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release_static|x64"> <Configuration>Release_static</Configuration> <Platform>x64</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{9EE2433A-B460-45E0-8968-EC5CE8EF9875}</ProjectGuid> <RootNamespace>HelloService</RootNamespace> <Keyword>Win32Proj</Keyword> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_win32.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_DLL_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Release_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="..\build\Debug_static_pion.props" /> <Import Project="..\build\depth_2_pion-net.props" /> <Import Project="..\build\third_party_static_libs_x64.props" /> <Import Project="..\build\pion_plugin.props" /> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup> <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_static|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'" /> <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'">AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'" /> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'">$(SolutionDir)bin\$(Configuration)_$(PlatformName)\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'">$(SolutionDir)bin\$(Configuration)_$(PlatformName)\</OutDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_static|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|Win32'"> <ClCompile> <PreprocessorDefinitions>HELLOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_DLL_full|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>HELLOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|Win32'"> <ClCompile> <PreprocessorDefinitions>HELLOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL_full|x64'"> <Midl> <TargetEnvironment>X64</TargetEnvironment> </Midl> <ClCompile> <PreprocessorDefinitions>HELLOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> <TargetMachine>MachineX64</TargetMachine> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_static|Win32'"> <ClCompile> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </ClCompile> </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="HelloService.cpp" /> </ItemGroup> <ItemGroup> <ClInclude Include="HelloService.hpp" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\src\pion.vcxproj"> <Project>{61f4b4d5-3608-4264-9f4b-b0da3e3fdf62}</Project> <ReferenceOutputAssembly>false</ReferenceOutputAssembly> </ProjectReference> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> </Project>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/HelloService.cpp������������������������������������������������������0000644�0003720�0000144�00000003125�12215647065�020661� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include "HelloService.hpp" #include <pion/http/response_writer.hpp> using namespace pion; namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins // HelloService member functions /// handles requests for HelloService void HelloService::operator()(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { static const std::string HELLO_HTML = "<html><body>Hello World!</body></html>"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->write_no_copy(HELLO_HTML); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); writer->send(); } } // end namespace plugins } // end namespace pion /// creates new HelloService objects extern "C" PION_PLUGIN pion::plugins::HelloService *pion_create_HelloService(void) { return new pion::plugins::HelloService(); } /// destroys HelloService objects extern "C" PION_PLUGIN void pion_destroy_HelloService(pion::plugins::HelloService *service_ptr) { delete service_ptr; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pion-5.0.4+dfsg.orig/services/CookieService.cpp�����������������������������������������������������0000644�0003720�0000144�00000011770�12215647065�021034� 0����������������������������������������������������������������������������������������������������ustar �roberto�������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include "CookieService.hpp" #include <pion/algorithm.hpp> #include <pion/http/response_writer.hpp> using namespace pion; namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins // CookieService member functions /// handles requests for CookieService void CookieService::operator()(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { static const std::string HEADER_HTML = "<html>\n<head>\n<title>Cookie Service\n" "\n\n\n

Cookie Service

\n"; static const std::string FOOTER_HTML = "\n\n\n"; // Set Content-type for HTML and write the header http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_content_type(http::types::CONTENT_TYPE_HTML); writer->write_no_copy(HEADER_HTML); // Check if we have an action to perform if (http_request_ptr->has_query("action")) { if (http_request_ptr->get_query("action") == "Add Cookie") { // add a new cookie const std::string cookie_name(http_request_ptr->get_query("cookie_name")); const std::string cookie_value(http_request_ptr->get_query("cookie_value")); if (cookie_name.empty() || cookie_value.empty()) { writer << "\n

[Error: You must specify a name and value to add a cookie]

\n\n"; } else { writer->get_response().set_cookie(cookie_name, cookie_value); writer << "\n

[Added cookie " << cookie_name << '=' << cookie_value << "]

\n\n"; } } else if (http_request_ptr->get_query("action") == "delete") { const std::string cookie_name(http_request_ptr->get_query("cookie_name")); if (cookie_name.empty()) { writer << "\n

[Error: You must specify a name to delete a cookie]

\n\n"; } else { writer->get_response().delete_cookie(cookie_name); writer << "\n

[Deleted cookie " << cookie_name << "]

\n\n"; } } else { writer << "\n

[Error: Unrecognized action]

\n\n"; } } // display cookie headers in request if (http_request_ptr->has_header(http::types::HEADER_COOKIE)) { writer << "\n

Cookie Headers

\n
    \n"; std::pair header_pair = http_request_ptr->get_headers().equal_range(http::types::HEADER_COOKIE); for (ihash_multimap::const_iterator header_iterator = header_pair.first; header_iterator != http_request_ptr->get_headers().end() && header_iterator != header_pair.second; ++header_iterator) { writer << "
  • Cookie: " << header_iterator->second << "\n"; } writer << "
\n\n"; } else { writer << "\n

No Cookie Headers

\n\n"; } // display existing cookies ihash_multimap& cookie_params = http_request_ptr->get_cookies(); if (! cookie_params.empty()) { writer << "\n

Cookie Variables

\n\n\n"; } else { writer << "\n

No Cookie Variables

\n\n"; } // display form to add a cookie writer << "\n

Add Cookie

\n" "

get_resource() << "\" method=\"POST\">\n" "Name:
\n" "Value:
\n" "

\n" "
\n\n"; // write the footer writer->write_no_copy(FOOTER_HTML); // send the writer writer->send(); } } // end namespace plugins } // end namespace pion /// creates new CookieService objects extern "C" PION_PLUGIN pion::plugins::CookieService *pion_create_CookieService(void) { return new pion::plugins::CookieService(); } /// destroys CookieService objects extern "C" PION_PLUGIN void pion_destroy_CookieService(pion::plugins::CookieService *service_ptr) { delete service_ptr; } pion-5.0.4+dfsg.orig/services/CookieService.hpp0000644000372000001440000000201312215647065021027 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_COOKIESERVICE_HEADER__ #define __PION_COOKIESERVICE_HEADER__ #include namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins /// /// CookieService: web service that displays and updates cookies /// class CookieService : public pion::http::plugin_service { public: CookieService(void) {} virtual ~CookieService() {} virtual void operator()(pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn); }; } // end namespace plugins } // end namespace pion #endif pion-5.0.4+dfsg.orig/services/AllowNothingService.hpp0000644000372000001440000000223112215647065022225 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_ALLOW_NOTHING_SERVICE_HEADER__ #define __PION_ALLOW_NOTHING_SERVICE_HEADER__ #include namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins /// /// This class has a corresponding create function (pion_create_AllowNothingService) and /// destroy function (pion_destroy_AllowNothingService), as required for use by plugin. /// class AllowNothingService : public pion::http::plugin_service { public: AllowNothingService(void) {} ~AllowNothingService() {} virtual void operator()(pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn); }; } // end namespace plugins } // end namespace pion #endif pion-5.0.4+dfsg.orig/services/EchoService.cpp0000644000372000001440000001271212215647065020476 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include "EchoService.hpp" #include #include #include #include using namespace pion; namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins /// used by handle_request to write dictionary terms void writeDictionaryTerm(http::response_writer_ptr& writer, const ihash_multimap::value_type& val) { // text is copied into writer text cache writer << val.first << http::types::HEADER_NAME_VALUE_DELIMITER << val.second << http::types::STRING_CRLF; } // EchoService member functions /// handles requests for EchoService void EchoService::operator()(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { // this web service uses static text to test the mixture of "copied" with // "static" (no-copy) text static const std::string REQUEST_ECHO_TEXT("[Request Echo]"); static const std::string REQUEST_HEADERS_TEXT("[Request Headers]"); static const std::string QUERY_PARAMS_TEXT("[Query Parameters]"); static const std::string COOKIE_PARAMS_TEXT("[Cookie Parameters]"); static const std::string POST_CONTENT_TEXT("[POST Content]"); static const std::string USER_INFO_TEXT("[USER Info]"); // Set Content-type to "text/plain" (plain ascii text) http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_content_type(http::types::CONTENT_TYPE_TEXT); // write request information writer->write_no_copy(REQUEST_ECHO_TEXT); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); writer << "Request method: " << http_request_ptr->get_method() << http::types::STRING_CRLF << "Resource originally requested: " << http_request_ptr->get_original_resource() << http::types::STRING_CRLF << "Resource delivered: " << http_request_ptr->get_resource() << http::types::STRING_CRLF << "Query string: " << http_request_ptr->get_query_string() << http::types::STRING_CRLF << "HTTP version: " << http_request_ptr->get_version_major() << '.' << http_request_ptr->get_version_minor() << http::types::STRING_CRLF << "Content length: " << (unsigned long)http_request_ptr->get_content_length() << http::types::STRING_CRLF << http::types::STRING_CRLF; // write request headers writer->write_no_copy(REQUEST_HEADERS_TEXT); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); std::for_each(http_request_ptr->get_headers().begin(), http_request_ptr->get_headers().end(), boost::bind(&writeDictionaryTerm, writer, _1)); writer->write_no_copy(http::types::STRING_CRLF); // write query parameters writer->write_no_copy(QUERY_PARAMS_TEXT); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); std::for_each(http_request_ptr->get_queries().begin(), http_request_ptr->get_queries().end(), boost::bind(&writeDictionaryTerm, writer, _1)); writer->write_no_copy(http::types::STRING_CRLF); // write cookie parameters writer->write_no_copy(COOKIE_PARAMS_TEXT); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); std::for_each(http_request_ptr->get_cookies().begin(), http_request_ptr->get_cookies().end(), boost::bind(&writeDictionaryTerm, writer, _1)); writer->write_no_copy(http::types::STRING_CRLF); // write POST content writer->write_no_copy(POST_CONTENT_TEXT); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); if (http_request_ptr->get_content_length() != 0) { writer->write(http_request_ptr->get_content(), http_request_ptr->get_content_length()); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); } // if authenticated, write user info user_ptr user = http_request_ptr->get_user(); if (user) { writer->write_no_copy(USER_INFO_TEXT); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); writer << "User authenticated, username: " << user->get_username(); writer->write_no_copy(http::types::STRING_CRLF); } // send the writer writer->send(); } } // end namespace plugins } // end namespace pion /// creates new EchoService objects extern "C" PION_PLUGIN pion::plugins::EchoService *pion_create_EchoService(void) { return new pion::plugins::EchoService(); } /// destroys EchoService objects extern "C" PION_PLUGIN void pion_destroy_EchoService(pion::plugins::EchoService *service_ptr) { delete service_ptr; } pion-5.0.4+dfsg.orig/services/AllowNothingService.cpp0000644000372000001440000000407312215647065022226 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include "AllowNothingService.hpp" #include #include using namespace pion; namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins void AllowNothingService::operator()(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { static const std::string DENY_HTML = "No, you can't."; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_METHOD_NOT_ALLOWED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_METHOD_NOT_ALLOWED); // This is a legitimate header, but it crashes when it's sent. //writer->get_response().add_header("Allow", ""); // Use this line to demonstrate that it's the empty header value that's causing the problem. writer->get_response().add_header("Allow", "GET"); writer->write_no_copy(DENY_HTML); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); writer->send(); } } // end namespace plugins } // end namespace pion /// creates new AllowNothingService objects extern "C" PION_PLUGIN pion::plugins::AllowNothingService *pion_create_AllowNothingService(void) { return new pion::plugins::AllowNothingService(); } /// destroys AllowNothingService objects extern "C" PION_PLUGIN void pion_destroy_AllowNothingService(pion::plugins::AllowNothingService *service_ptr) { delete service_ptr; } pion-5.0.4+dfsg.orig/services/FileService.cpp0000644000372000001440000012637412215647065020511 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include #include #include "FileService.hpp" #include #include #include #include using namespace pion; namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins // static members of FileService const std::string FileService::DEFAULT_MIME_TYPE("application/octet-stream"); const unsigned int FileService::DEFAULT_CACHE_SETTING = 1; const unsigned int FileService::DEFAULT_SCAN_SETTING = 0; const unsigned long FileService::DEFAULT_MAX_CACHE_SIZE = 0; /* 0=disabled */ const unsigned long FileService::DEFAULT_MAX_CHUNK_SIZE = 0; /* 0=disabled */ boost::once_flag FileService::m_mime_types_init_flag = BOOST_ONCE_INIT; FileService::MIMETypeMap *FileService::m_mime_types_ptr = NULL; // FileService member functions FileService::FileService(void) : m_logger(PION_GET_LOGGER("pion.FileService")), m_cache_setting(DEFAULT_CACHE_SETTING), m_scan_setting(DEFAULT_SCAN_SETTING), m_max_cache_size(DEFAULT_MAX_CACHE_SIZE), m_max_chunk_size(DEFAULT_MAX_CHUNK_SIZE), m_writable(false) {} void FileService::set_option(const std::string& name, const std::string& value) { if (name == "directory") { m_directory = value; m_directory.normalize(); plugin::check_cygwin_path(m_directory, value); // make sure that the directory exists if (! boost::filesystem::exists(m_directory) || ! boost::filesystem::is_directory(m_directory)) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 const std::string dir_name = m_directory.string(); #else const std::string dir_name = m_directory.directory_string(); #endif BOOST_THROW_EXCEPTION( error::directory_not_found() << error::errinfo_dir_name(dir_name) ); } } else if (name == "file") { m_file = value; plugin::check_cygwin_path(m_file, value); // make sure that the directory exists if (! boost::filesystem::exists(m_file) || boost::filesystem::is_directory(m_file)) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 const std::string file_name = m_file.string(); #else const std::string file_name = m_file.file_string(); #endif BOOST_THROW_EXCEPTION( error::file_not_found() << error::errinfo_file_name(file_name) ); } } else if (name == "cache") { if (value == "0") { m_cache_setting = 0; } else if (value == "1") { m_cache_setting = 1; } else if (value == "2") { m_cache_setting = 2; } else { BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } } else if (name == "scan") { if (value == "0") { m_scan_setting = 0; } else if (value == "1") { m_scan_setting = 1; } else if (value == "2") { m_scan_setting = 2; } else if (value == "3") { m_scan_setting = 3; } else { BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } } else if (name == "max_chunk_size") { m_max_chunk_size = boost::lexical_cast(value); } else if (name == "writable") { if (value == "true") { m_writable = true; } else if (value == "false") { m_writable = false; } else { BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } } else { BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } } void FileService::operator()(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { // get the relative resource path for the request const std::string relative_path(get_relative_resource(http_request_ptr->get_resource())); // determine the path of the file being requested boost::filesystem::path file_path; if (relative_path.empty()) { // request matches resource exactly if (m_file.empty()) { // no file is specified, either in the request or in the options PION_LOG_WARN(m_logger, "No file option defined (" << get_resource() << ")"); sendNotFoundResponse(http_request_ptr, tcp_conn); return; } else { file_path = m_file; } } else { // request does not match resource if (m_directory.empty()) { // no directory is specified for the relative file PION_LOG_WARN(m_logger, "No directory option defined (" << get_resource() << "): " << relative_path); sendNotFoundResponse(http_request_ptr, tcp_conn); return; } else { file_path = m_directory / relative_path; } } // make sure that the requested file is within the configured directory file_path.normalize(); # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 std::string file_string = file_path.string(); if (file_string.find(m_directory.string()) != 0) { #else std::string file_string = file_path.file_string(); if (file_string.find(m_directory.directory_string()) != 0) { #endif PION_LOG_WARN(m_logger, "Request for file outside of directory (" << get_resource() << "): " << relative_path); static const std::string FORBIDDEN_HTML_START = "\n" "403 Forbidden\n" "\n" "

Forbidden

\n" "

The requested URL "; static const std::string FORBIDDEN_HTML_FINISH = " is not in the configured directory.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_FORBIDDEN); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_FORBIDDEN); if (http_request_ptr->get_method() != http::types::REQUEST_METHOD_HEAD) { writer->write_no_copy(FORBIDDEN_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(FORBIDDEN_HTML_FINISH); } writer->send(); return; } // requests specifying directories are not allowed if (boost::filesystem::is_directory(file_path)) { PION_LOG_WARN(m_logger, "Request for directory (" << get_resource() << "): " << relative_path); static const std::string FORBIDDEN_HTML_START = "\n" "403 Forbidden\n" "\n" "

Forbidden

\n" "

The requested URL "; static const std::string FORBIDDEN_HTML_FINISH = " is a directory.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_FORBIDDEN); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_FORBIDDEN); if (http_request_ptr->get_method() != http::types::REQUEST_METHOD_HEAD) { writer->write_no_copy(FORBIDDEN_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(FORBIDDEN_HTML_FINISH); } writer->send(); return; } if (http_request_ptr->get_method() == http::types::REQUEST_METHOD_GET || http_request_ptr->get_method() == http::types::REQUEST_METHOD_HEAD) { // the type of response we will send enum ResponseType { RESPONSE_UNDEFINED, // initial state until we know how to respond RESPONSE_OK, // normal response that includes the file's content RESPONSE_HEAD_OK, // response to HEAD request (would send file's content) RESPONSE_NOT_FOUND, // Not Found (404) RESPONSE_NOT_MODIFIED // Not Modified (304) response to If-Modified-Since } response_type = RESPONSE_UNDEFINED; // used to hold our response information DiskFile response_file; // get the If-Modified-Since request header const std::string if_modified_since(http_request_ptr->get_header(http::types::HEADER_IF_MODIFIED_SINCE)); // check the cache for a corresponding entry (if enabled) // note that m_cache_setting may equal 0 if m_scan_setting == 1 if (m_cache_setting > 0 || m_scan_setting > 0) { // search for a matching cache entry boost::mutex::scoped_lock cache_lock(m_cache_mutex); CacheMap::iterator cache_itr = m_cache_map.find(relative_path); if (cache_itr == m_cache_map.end()) { // no existing cache entries found if (m_scan_setting == 1 || m_scan_setting == 3) { // do not allow files to be added; // all requests must correspond with existing cache entries // since no match was found, just return file not found PION_LOG_WARN(m_logger, "Request for unknown file (" << get_resource() << "): " << relative_path); response_type = RESPONSE_NOT_FOUND; } else { PION_LOG_DEBUG(m_logger, "No cache entry for request (" << get_resource() << "): " << relative_path); } } else { // found an existing cache entry PION_LOG_DEBUG(m_logger, "Found cache entry for request (" << get_resource() << "): " << relative_path); if (m_cache_setting == 0) { // cache is disabled // copy & re-use file_path and mime_type response_file.setFilePath(cache_itr->second.getFilePath()); response_file.setMimeType(cache_itr->second.getMimeType()); // get the file_size and last_modified timestamp response_file.update(); // just compare strings for simplicity (parsing this date format sucks!) if (response_file.getLastModifiedString() == if_modified_since) { // no need to read the file; the modified times match! response_type = RESPONSE_NOT_MODIFIED; } else { if (http_request_ptr->get_method() == http::types::REQUEST_METHOD_HEAD) { response_type = RESPONSE_HEAD_OK; } else { response_type = RESPONSE_OK; PION_LOG_DEBUG(m_logger, "Cache disabled, reading file (" << get_resource() << "): " << relative_path); } } } else { // cache is enabled // true if the entry was updated (used for log message) bool cache_was_updated = false; if (cache_itr->second.getLastModified() == 0) { // cache file for the first time cache_was_updated = true; cache_itr->second.update(); if (m_max_cache_size==0 || cache_itr->second.getFileSize() <= m_max_cache_size) { // read the file (may throw exception) cache_itr->second.read(); } else { cache_itr->second.resetFileContent(); } } else if (m_cache_setting == 1) { // check if file has been updated (may throw exception) cache_was_updated = cache_itr->second.checkUpdated(); } // else cache_setting == 2 (use existing values) // get the response type if (cache_itr->second.getLastModifiedString() == if_modified_since) { response_type = RESPONSE_NOT_MODIFIED; } else if (http_request_ptr->get_method() == http::types::REQUEST_METHOD_HEAD) { response_type = RESPONSE_HEAD_OK; } else { response_type = RESPONSE_OK; } // copy cache contents so that we can release the mutex response_file = cache_itr->second; PION_LOG_DEBUG(m_logger, (cache_was_updated ? "Updated" : "Using") << " cache entry for request (" << get_resource() << "): " << relative_path); } } } if (response_type == RESPONSE_UNDEFINED) { // make sure that the file exists if (! boost::filesystem::exists(file_path)) { PION_LOG_WARN(m_logger, "File not found (" << get_resource() << "): " << relative_path); sendNotFoundResponse(http_request_ptr, tcp_conn); return; } response_file.setFilePath(file_path); PION_LOG_DEBUG(m_logger, "Found file for request (" << get_resource() << "): " << relative_path); // determine the MIME type # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 response_file.setMimeType(findMIMEType( response_file.getFilePath().filename().string())); #else response_file.setMimeType(findMIMEType( response_file.getFilePath().leaf() )); #endif // get the file_size and last_modified timestamp response_file.update(); // just compare strings for simplicity (parsing this date format sucks!) if (response_file.getLastModifiedString() == if_modified_since) { // no need to read the file; the modified times match! response_type = RESPONSE_NOT_MODIFIED; } else if (http_request_ptr->get_method() == http::types::REQUEST_METHOD_HEAD) { response_type = RESPONSE_HEAD_OK; } else { response_type = RESPONSE_OK; if (m_cache_setting != 0) { if (m_max_cache_size==0 || response_file.getFileSize() <= m_max_cache_size) { // read the file (may throw exception) response_file.read(); } // add new entry to the cache PION_LOG_DEBUG(m_logger, "Adding cache entry for request (" << get_resource() << "): " << relative_path); boost::mutex::scoped_lock cache_lock(m_cache_mutex); m_cache_map.insert( std::make_pair(relative_path, response_file) ); } } } if (response_type == RESPONSE_OK) { // use DiskFileSender to send a file DiskFileSenderPtr sender_ptr(DiskFileSender::create(response_file, http_request_ptr, tcp_conn, m_max_chunk_size)); sender_ptr->send(); } else if (response_type == RESPONSE_NOT_FOUND) { sendNotFoundResponse(http_request_ptr, tcp_conn); } else { // sending headers only -> use our own response object // prepare a response and set the Content-Type http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_content_type(response_file.getMimeType()); // set Last-Modified header to enable client-side caching writer->get_response().add_header(http::types::HEADER_LAST_MODIFIED, response_file.getLastModifiedString()); switch(response_type) { case RESPONSE_UNDEFINED: case RESPONSE_NOT_FOUND: case RESPONSE_OK: // this should never happen BOOST_ASSERT(false); break; case RESPONSE_NOT_MODIFIED: // set "Not Modified" response writer->get_response().set_status_code(http::types::RESPONSE_CODE_NOT_MODIFIED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NOT_MODIFIED); break; case RESPONSE_HEAD_OK: // set "OK" response (not really necessary since this is the default) writer->get_response().set_status_code(http::types::RESPONSE_CODE_OK); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_OK); break; } // send the response writer->send(); } } else if (http_request_ptr->get_method() == http::types::REQUEST_METHOD_POST || http_request_ptr->get_method() == http::types::REQUEST_METHOD_PUT || http_request_ptr->get_method() == http::types::REQUEST_METHOD_DELETE) { // If not writable, then send 405 (Method Not Allowed) response for POST, PUT or DELETE requests. if (!m_writable) { static const std::string NOT_ALLOWED_HTML_START = "\n" "405 Method Not Allowed\n" "\n" "

Not Allowed

\n" "

The requested method "; static const std::string NOT_ALLOWED_HTML_FINISH = " is not allowed on this server.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_METHOD_NOT_ALLOWED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_METHOD_NOT_ALLOWED); writer->write_no_copy(NOT_ALLOWED_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_method()); writer->write_no_copy(NOT_ALLOWED_HTML_FINISH); writer->get_response().add_header("Allow", "GET, HEAD"); writer->send(); } else { http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); if (http_request_ptr->get_method() == http::types::REQUEST_METHOD_POST || http_request_ptr->get_method() == http::types::REQUEST_METHOD_PUT) { if (boost::filesystem::exists(file_path)) { writer->get_response().set_status_code(http::types::RESPONSE_CODE_NO_CONTENT); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NO_CONTENT); } else { // The file doesn't exist yet, so it will be created below, unless the // directory of the requested file also doesn't exist. if (!boost::filesystem::exists(file_path.branch_path())) { static const std::string NOT_FOUND_HTML_START = "\n" "404 Not Found\n" "\n" "

Not Found

\n" "

The directory of the requested URL "; static const std::string NOT_FOUND_HTML_FINISH = " was not found on this server.

\n" "\n"; writer->get_response().set_status_code(http::types::RESPONSE_CODE_NOT_FOUND); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NOT_FOUND); writer->write_no_copy(NOT_FOUND_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(NOT_FOUND_HTML_FINISH); writer->send(); return; } static const std::string CREATED_HTML_START = "\n" "201 Created\n" "\n" "

Created

\n" "

"; static const std::string CREATED_HTML_FINISH = "

\n" "\n"; writer->get_response().set_status_code(http::types::RESPONSE_CODE_CREATED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_CREATED); writer->get_response().add_header(http::types::HEADER_LOCATION, http_request_ptr->get_resource()); writer->write_no_copy(CREATED_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(CREATED_HTML_FINISH); } std::ios_base::openmode mode = http_request_ptr->get_method() == http::types::REQUEST_METHOD_POST? std::ios::app : std::ios::out; boost::filesystem::ofstream file_stream(file_path, mode); file_stream.write(http_request_ptr->get_content(), http_request_ptr->get_content_length()); file_stream.close(); if (!boost::filesystem::exists(file_path)) { static const std::string PUT_FAILED_HTML_START = "\n" "500 Server Error\n" "\n" "

Server Error

\n" "

Error writing to "; static const std::string PUT_FAILED_HTML_FINISH = ".

\n" "\n"; writer->get_response().set_status_code(http::types::RESPONSE_CODE_SERVER_ERROR); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_SERVER_ERROR); writer->write_no_copy(PUT_FAILED_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(PUT_FAILED_HTML_FINISH); } writer->send(); } else if (http_request_ptr->get_method() == http::types::REQUEST_METHOD_DELETE) { if (!boost::filesystem::exists(file_path)) { sendNotFoundResponse(http_request_ptr, tcp_conn); } else { try { boost::filesystem::remove(file_path); writer->get_response().set_status_code(http::types::RESPONSE_CODE_NO_CONTENT); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NO_CONTENT); writer->send(); } catch (std::exception& e) { static const std::string DELETE_FAILED_HTML_START = "\n" "500 Server Error\n" "\n" "

Server Error

\n" "

Could not delete "; static const std::string DELETE_FAILED_HTML_FINISH = ".

\n" "\n"; writer->get_response().set_status_code(http::types::RESPONSE_CODE_SERVER_ERROR); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_SERVER_ERROR); writer->write_no_copy(DELETE_FAILED_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()) << ".

" << boost::diagnostic_information(e); writer->write_no_copy(DELETE_FAILED_HTML_FINISH); writer->send(); } } } else { // This should never be reached. writer->get_response().set_status_code(http::types::RESPONSE_CODE_SERVER_ERROR); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_SERVER_ERROR); writer->send(); } } } // Any method not handled above is unimplemented. else { static const std::string NOT_IMPLEMENTED_HTML_START = "\n" "501 Not Implemented\n" "\n" "

Not Implemented

\n" "

The requested method "; static const std::string NOT_IMPLEMENTED_HTML_FINISH = " is not implemented on this server.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_NOT_IMPLEMENTED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NOT_IMPLEMENTED); writer->write_no_copy(NOT_IMPLEMENTED_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_method()); writer->write_no_copy(NOT_IMPLEMENTED_HTML_FINISH); writer->send(); } } void FileService::sendNotFoundResponse(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { static const std::string NOT_FOUND_HTML_START = "\n" "404 Not Found\n" "\n" "

Not Found

\n" "

The requested URL "; static const std::string NOT_FOUND_HTML_FINISH = " was not found on this server.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_NOT_FOUND); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NOT_FOUND); if (http_request_ptr->get_method() != http::types::REQUEST_METHOD_HEAD) { writer->write_no_copy(NOT_FOUND_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(NOT_FOUND_HTML_FINISH); } writer->send(); } void FileService::start(void) { PION_LOG_DEBUG(m_logger, "Starting up resource (" << get_resource() << ')'); // scan directory/file if scan setting != 0 if (m_scan_setting != 0) { // force caching if scan == (2 | 3) if (m_cache_setting == 0 && m_scan_setting > 1) m_cache_setting = 1; boost::mutex::scoped_lock cache_lock(m_cache_mutex); // add entry for file if one is defined if (! m_file.empty()) { // use empty relative_path for file option // use placeholder entry (do not pre-populate) if scan == 1 addCacheEntry("", m_file, m_scan_setting == 1); } // scan directory if one is defined if (! m_directory.empty()) scanDirectory(m_directory); } } void FileService::stop(void) { PION_LOG_DEBUG(m_logger, "Shutting down resource (" << get_resource() << ')'); // clear cached files (if started again, it will re-scan) boost::mutex::scoped_lock cache_lock(m_cache_mutex); m_cache_map.clear(); } void FileService::scanDirectory(const boost::filesystem::path& dir_path) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_DEBUG(m_logger, "Scanning directory (" << get_resource() << "): " << dir_path.string()); #else PION_LOG_DEBUG(m_logger, "Scanning directory (" << get_resource() << "): " << dir_path.directory_string()); #endif // iterate through items in the directory boost::filesystem::directory_iterator end_itr; for ( boost::filesystem::directory_iterator itr( dir_path ); itr != end_itr; ++itr ) { if ( boost::filesystem::is_directory(*itr) ) { // item is a sub-directory // recursively call scanDirectory() scanDirectory(*itr); } else { // item is a regular file // figure out relative path to the file # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 std::string file_path_string( itr->path().string() ); std::string relative_path( file_path_string.substr(m_directory.string().size() + 1) ); #else std::string file_path_string( itr->path().file_string() ); std::string relative_path( file_path_string.substr(m_directory.directory_string().size() + 1) ); #endif // add item to cache (use placeholder if scan == 1) addCacheEntry(relative_path, *itr, m_scan_setting == 1); } } } std::pair FileService::addCacheEntry(const std::string& relative_path, const boost::filesystem::path& file_path, const bool placeholder) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 DiskFile cache_entry(file_path, NULL, 0, 0, findMIMEType(file_path.filename().string())); #else DiskFile cache_entry(file_path, NULL, 0, 0, findMIMEType(file_path.leaf())); #endif if (! placeholder) { cache_entry.update(); // only read the file if its size is <= max_cache_size if (m_max_cache_size==0 || cache_entry.getFileSize() <= m_max_cache_size) { try { cache_entry.read(); } catch (std::exception&) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_ERROR(m_logger, "Unable to add file to cache: " << file_path.string()); #else PION_LOG_ERROR(m_logger, "Unable to add file to cache: " << file_path.file_string()); #endif return std::make_pair(m_cache_map.end(), false); } } } std::pair add_entry_result = m_cache_map.insert( std::make_pair(relative_path, cache_entry) ); if (add_entry_result.second) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_DEBUG(m_logger, "Added file to cache: " << file_path.string()); #else PION_LOG_DEBUG(m_logger, "Added file to cache: " << file_path.file_string()); #endif } else { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_ERROR(m_logger, "Unable to insert cache entry for file: " << file_path.string()); #else PION_LOG_ERROR(m_logger, "Unable to insert cache entry for file: " << file_path.file_string()); #endif } return add_entry_result; } std::string FileService::findMIMEType(const std::string& file_name) { // initialize m_mime_types if it hasn't been done already boost::call_once(FileService::createMIMETypes, m_mime_types_init_flag); // determine the file's extension std::string extension(file_name.substr(file_name.find_last_of('.') + 1)); boost::algorithm::to_lower(extension); // search for the matching mime type and return the result MIMETypeMap::iterator i = m_mime_types_ptr->find(extension); return (i == m_mime_types_ptr->end() ? DEFAULT_MIME_TYPE : i->second); } void FileService::createMIMETypes(void) { // create the map static MIMETypeMap mime_types; // populate mime types mime_types["js"] = "text/javascript"; mime_types["txt"] = "text/plain"; mime_types["xml"] = "text/xml"; mime_types["css"] = "text/css"; mime_types["htm"] = "text/html"; mime_types["html"] = "text/html"; mime_types["xhtml"] = "text/html"; mime_types["gif"] = "image/gif"; mime_types["png"] = "image/png"; mime_types["jpg"] = "image/jpeg"; mime_types["jpeg"] = "image/jpeg"; mime_types["svg"] = "image/svg+xml"; mime_types["eof"] = "application/vnd.ms-fontobject"; mime_types["otf"] = "application/x-font-opentype"; mime_types["ttf"] = "application/x-font-ttf"; mime_types["woff"] = "application/font-woff"; // ... // set the static pointer m_mime_types_ptr = &mime_types; } // DiskFile member functions void DiskFile::update(void) { // set file_size and last_modified m_file_size = boost::numeric_cast(boost::filesystem::file_size( m_file_path )); m_last_modified = boost::filesystem::last_write_time( m_file_path ); m_last_modified_string = http::types::get_date_string( m_last_modified ); } void DiskFile::read(void) { // re-allocate storage buffer for the file's content m_file_content.reset(new char[m_file_size]); // open the file for reading boost::filesystem::ifstream file_stream; file_stream.open(m_file_path, std::ios::in | std::ios::binary); // read the file into memory if (!file_stream.is_open() || !file_stream.read(m_file_content.get(), m_file_size)) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 const std::string file_name = m_file_path.string(); #else const std::string file_name = m_file_path.file_string(); #endif BOOST_THROW_EXCEPTION( error::read_file() << error::errinfo_file_name(file_name) ); } } bool DiskFile::checkUpdated(void) { // get current values std::streamsize cur_size = boost::numeric_cast(boost::filesystem::file_size( m_file_path )); time_t cur_modified = boost::filesystem::last_write_time( m_file_path ); // check if file has not been updated if (cur_modified == m_last_modified && cur_size == m_file_size) return false; // file has been updated // update file_size and last_modified timestamp m_file_size = cur_size; m_last_modified = cur_modified; m_last_modified_string = http::types::get_date_string( m_last_modified ); // read new contents read(); return true; } // DiskFileSender member functions DiskFileSender::DiskFileSender(DiskFile& file, pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn, unsigned long max_chunk_size) : m_logger(PION_GET_LOGGER("pion.FileService.DiskFileSender")), m_disk_file(file), m_writer(pion::http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))), m_max_chunk_size(max_chunk_size), m_file_bytes_to_send(0), m_bytes_sent(0) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_DEBUG(m_logger, "Preparing to send file" << (m_disk_file.hasFileContent() ? " (cached): " : ": ") << m_disk_file.getFilePath().string()); #else PION_LOG_DEBUG(m_logger, "Preparing to send file" << (m_disk_file.hasFileContent() ? " (cached): " : ": ") << m_disk_file.getFilePath().file_string()); #endif // set the Content-Type HTTP header using the file's MIME type m_writer->get_response().set_content_type(m_disk_file.getMimeType()); // set Last-Modified header to enable client-side caching m_writer->get_response().add_header(http::types::HEADER_LAST_MODIFIED, m_disk_file.getLastModifiedString()); // use "200 OK" HTTP response m_writer->get_response().set_status_code(http::types::RESPONSE_CODE_OK); m_writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_OK); } void DiskFileSender::send(void) { // check if we have nothing to send (send 0 byte response content) if (m_disk_file.getFileSize() <= m_bytes_sent) { m_writer->send(); return; } // calculate the number of bytes to send (m_file_bytes_to_send) m_file_bytes_to_send = m_disk_file.getFileSize() - m_bytes_sent; if (m_max_chunk_size > 0 && m_file_bytes_to_send > m_max_chunk_size) m_file_bytes_to_send = m_max_chunk_size; // get the content to send (file_content_ptr) char *file_content_ptr; if (m_disk_file.hasFileContent()) { // the entire file IS cached in memory (m_disk_file.file_content) file_content_ptr = m_disk_file.getFileContent() + m_bytes_sent; } else { // the file is not cached in memory // check if the file has been opened yet if (! m_file_stream.is_open()) { // open the file for reading m_file_stream.open(m_disk_file.getFilePath(), std::ios::in | std::ios::binary); if (! m_file_stream.is_open()) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_ERROR(m_logger, "Unable to open file: " << m_disk_file.getFilePath().string()); #else PION_LOG_ERROR(m_logger, "Unable to open file: " << m_disk_file.getFilePath().file_string()); #endif return; } } // check if the content buffer was initialized yet if (! m_content_buf) { // allocate memory for the new content buffer m_content_buf.reset(new char[m_file_bytes_to_send]); } file_content_ptr = m_content_buf.get(); // read a block of data from the file into the content buffer if (! m_file_stream.read(m_content_buf.get(), m_file_bytes_to_send)) { if (m_file_stream.gcount() > 0) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_ERROR(m_logger, "File size inconsistency: " << m_disk_file.getFilePath().string()); #else PION_LOG_ERROR(m_logger, "File size inconsistency: " << m_disk_file.getFilePath().file_string()); #endif } else { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_ERROR(m_logger, "Unable to read file: " << m_disk_file.getFilePath().string()); #else PION_LOG_ERROR(m_logger, "Unable to read file: " << m_disk_file.getFilePath().file_string()); #endif } return; } } // send the content m_writer->write_no_copy(file_content_ptr, m_file_bytes_to_send); if (m_bytes_sent + m_file_bytes_to_send >= m_disk_file.getFileSize()) { // this is the last piece of data to send if (m_bytes_sent > 0) { // send last chunk in a series m_writer->send_final_chunk(boost::bind(&DiskFileSender::handle_write, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } else { // sending entire file at once m_writer->send(boost::bind(&DiskFileSender::handle_write, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } } else { // there will be more data -> send a chunk m_writer->send_chunk(boost::bind(&DiskFileSender::handle_write, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } } void DiskFileSender::handle_write(const boost::system::error_code& write_error, std::size_t bytes_written) { bool finished_sending = true; if (write_error) { // encountered error sending response data m_writer->get_connection()->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); // make sure it will get closed PION_LOG_WARN(m_logger, "Error sending file (" << write_error.message() << ')'); } else { // response data sent OK // use m_file_bytes_to_send instead of bytes_written; bytes_written // includes bytes for HTTP headers and chunking headers m_bytes_sent += m_file_bytes_to_send; if (m_bytes_sent >= m_disk_file.getFileSize()) { // finished sending PION_LOG_DEBUG(m_logger, "Sent " << (m_file_bytes_to_send < m_disk_file.getFileSize() ? "file chunk" : "complete file") << " of " << m_file_bytes_to_send << " bytes (finished" << (m_writer->get_connection()->get_keep_alive() ? ", keeping alive)" : ", closing)") ); } else { // NOT finished sending PION_LOG_DEBUG(m_logger, "Sent file chunk of " << m_file_bytes_to_send << " bytes"); finished_sending = false; m_writer->clear(); } } if (finished_sending) { // connection::finish() calls tcp::server::finish_connection, which will either: // a) call http::server::handle_connection again if keep-alive is true; or, // b) close the socket and remove it from the server's connection pool m_writer->get_connection()->finish(); } else { send(); } } } // end namespace plugins } // end namespace pion /// creates new FileService objects extern "C" PION_PLUGIN pion::plugins::FileService *pion_create_FileService(void) { return new pion::plugins::FileService(); } /// destroys FileService objects extern "C" PION_PLUGIN void pion_destroy_FileService(pion::plugins::FileService *service_ptr) { delete service_ptr; } pion-5.0.4+dfsg.orig/services/LogService.cpp0000644000372000001440000001302412215647065020336 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include "LogService.hpp" #if defined(PION_USE_LOG4CXX) #include #include #elif defined(PION_USE_LOG4CPLUS) #include #include #elif defined(PION_USE_LOG4CPP) #include #endif #include using namespace pion; namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins // static members of LogServiceAppender const unsigned int LogServiceAppender::DEFAULT_MAX_EVENTS = 25; // LogServiceAppender member functions #if defined(PION_USE_LOG4CPP) LogServiceAppender::LogServiceAppender(void) : log4cpp::AppenderSkeleton("LogServiceAppender"), m_max_events(DEFAULT_MAX_EVENTS), m_num_events(0), m_layout_ptr(new log4cpp::BasicLayout()) {} #else LogServiceAppender::LogServiceAppender(void) : m_max_events(DEFAULT_MAX_EVENTS), m_num_events(0) {} #endif #if defined(PION_USE_LOG4CXX) void LogServiceAppender::append(const log4cxx::spi::LoggingEventPtr& event) { // custom layouts is not supported for log4cxx library std::string formatted_string(boost::lexical_cast(event->getTimeStamp())); formatted_string += ' '; formatted_string += event->getLevel()->toString(); formatted_string += ' '; formatted_string += event->getLoggerName(); formatted_string += " - "; formatted_string += event->getRenderedMessage(); formatted_string += '\n'; addLogString(formatted_string); } #elif defined(PION_USE_LOG4CPLUS) void LogServiceAppender::append(const log4cplus::spi::InternalLoggingEvent& event) { // custom layouts is not supported for log4cplus library std::string formatted_string(boost::lexical_cast(event.getTimestamp().sec())); formatted_string += ' '; formatted_string += m_log_level_manager.toString(event.getLogLevel()); formatted_string += ' '; formatted_string += event.getLoggerName(); formatted_string += " - "; formatted_string += event.getMessage(); formatted_string += '\n'; addLogString(formatted_string); } #elif defined(PION_USE_LOG4CPP) void LogServiceAppender::_append(const log4cpp::LoggingEvent& event) { std::string formatted_string(m_layout_ptr->format(event)); addLogString(formatted_string); } #endif void LogServiceAppender::addLogString(const std::string& log_string) { boost::mutex::scoped_lock log_lock(m_log_mutex); m_log_events.push_back(log_string); ++m_num_events; while (m_num_events > m_max_events) { m_log_events.erase(m_log_events.begin()); --m_num_events; } } void LogServiceAppender::writeLogEvents(pion::http::response_writer_ptr& writer) { #if defined(PION_USE_LOG4CXX) || defined(PION_USE_LOG4CPLUS) || defined(PION_USE_LOG4CPP) boost::mutex::scoped_lock log_lock(m_log_mutex); for (std::list::const_iterator i = m_log_events.begin(); i != m_log_events.end(); ++i) { writer << *i; } #elif defined(PION_DISABLE_LOGGING) writer << "Logging is disabled." << http::types::STRING_CRLF; #else writer << "Using ostream logging." << http::types::STRING_CRLF; #endif } // LogService member functions LogService::LogService(void) : m_log_appender_ptr(new LogServiceAppender()) { #if defined(PION_USE_LOG4CXX) m_log_appender_ptr->setName("LogServiceAppender"); log4cxx::Logger::getRootLogger()->addAppender(m_log_appender_ptr); #elif defined(PION_USE_LOG4CPLUS) m_log_appender_ptr->setName("LogServiceAppender"); log4cplus::Logger::getRoot().addAppender(m_log_appender_ptr); #elif defined(PION_USE_LOG4CPP) log4cpp::Category::getRoot().addAppender(m_log_appender_ptr); #endif } LogService::~LogService() { #if defined(PION_USE_LOG4CXX) // removeAppender() also deletes the object log4cxx::Logger::getRootLogger()->removeAppender(m_log_appender_ptr); #elif defined(PION_USE_LOG4CPLUS) // removeAppender() also deletes the object log4cplus::Logger::getRoot().removeAppender("LogServiceAppender"); #elif defined(PION_USE_LOG4CPP) // removeAppender() also deletes the object log4cpp::Category::getRoot().removeAppender(m_log_appender_ptr); #else delete m_log_appender_ptr; #endif } /// handles requests for LogService void LogService::operator()(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { // Set Content-type to "text/plain" (plain ascii text) http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_content_type(http::types::CONTENT_TYPE_TEXT); getLogAppender().writeLogEvents(writer); writer->send(); } } // end namespace plugins } // end namespace pion /// creates new LogService objects extern "C" PION_PLUGIN pion::plugins::LogService *pion_create_LogService(void) { return new pion::plugins::LogService(); } /// destroys LogService objects extern "C" PION_PLUGIN void pion_destroy_LogService(pion::plugins::LogService *service_ptr) { delete service_ptr; } pion-5.0.4+dfsg.orig/services/AllowNothingService.vcxproj.filters0000644000372000001440000000205212215647065024601 0ustar robertousers {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Header Files pion-5.0.4+dfsg.orig/AUTHORS0000644000372000001440000000106012215647065015012 0ustar robertousersAuthors of the Pion Network Library: ==================================== Mignon Belongie Michael Dickey Stas Khirman Andrew C. Morrow Taneli Otala Parts of the Pion Network Library were derived from or inspired by the HTTP Server example in the asio documentation. Many thanks to Christopher M. Kohlhoff and all the contributors of Boost and asio, without whom this library would not have been possible. pion-5.0.4+dfsg.orig/pion.sln0000644000372000001440000005504312215647065015437 0ustar robertousers Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pion", "src\pion.vcxproj", "{61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "piond", "utils\piond.vcxproj", "{2CF6432F-56EA-43AD-BCCB-C31A4DB75853}" ProjectSection(ProjectDependencies) = postProject {99D0C0C7-793B-49B1-A42E-CB563E5BB81F} = {99D0C0C7-793B-49B1-A42E-CB563E5BB81F} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "piontests", "tests\piontests.vcxproj", "{5AD25B42-E2C0-4D08-985B-E8F115D19D56}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PionNetServices", "PionNetServices.vcxproj", "{99D0C0C7-793B-49B1-A42E-CB563E5BB81F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AllowNothingService", "services\AllowNothingService.vcxproj", "{8C8A8E46-4588-4CE1-B624-89C36EA5209E}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CookieService", "services\CookieService.vcxproj", "{1CF012D8-A47C-4D2B-952D-D90D19795A07}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EchoService", "services\EchoService.vcxproj", "{09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FileService", "services\FileService.vcxproj", "{70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HelloService", "services\HelloService.vcxproj", "{9EE2433A-B460-45E0-8968-EC5CE8EF9875}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LogService", "services\LogService.vcxproj", "{12F95FE7-ACE1-4281-86BF-4117AE2D633E}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hasCreateAndDestroy", "tests\plugins\hasCreateAndDestroy.vcxproj", "{CD11B3D6-1296-45F4-B924-034CC103D626}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hasCreateButNoDestroy", "tests\plugins\hasCreateButNoDestroy.vcxproj", "{2DEAB99F-2617-4235-8EF7-653F36EFAC83}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hasNoCreate", "tests\plugins\hasNoCreate.vcxproj", "{33DEAB53-40E1-42FF-9C17-7A9956102052}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestPluigins", "tests\TestPlugins.vcxproj", "{7080E9F1-318F-4152-9E36-9F427F5CE9B7}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug_DLL_full|Win32 = Debug_DLL_full|Win32 Debug_DLL_full|x64 = Debug_DLL_full|x64 Debug_static|Win32 = Debug_static|Win32 Debug_static|x64 = Debug_static|x64 Release_DLL_full|Win32 = Release_DLL_full|Win32 Release_DLL_full|x64 = Release_DLL_full|x64 Release_static|Win32 = Release_static|Win32 Release_static|x64 = Release_static|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_static|Win32.Build.0 = Debug_static|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_static|x64.ActiveCfg = Debug_static|x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_static|x64.Build.0 = Debug_static|x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_static|Win32.ActiveCfg = Release_static|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_static|Win32.Build.0 = Release_static|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_static|x64.ActiveCfg = Release_static|x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_static|x64.Build.0 = Release_static|x64 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_static|Win32.Build.0 = Debug_static|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_static|x64.ActiveCfg = Debug_static|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_static|x64.Build.0 = Debug_static|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_static|Win32.ActiveCfg = Release_static|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_static|Win32.Build.0 = Release_static|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_static|x64.ActiveCfg = Release_static|x64 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_static|x64.Build.0 = Release_static|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_static|Win32.Build.0 = Debug_static|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_static|x64.ActiveCfg = Debug_static|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_static|x64.Build.0 = Debug_static|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_static|Win32.ActiveCfg = Release_static|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_static|Win32.Build.0 = Release_static|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_static|x64.ActiveCfg = Release_static|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_static|x64.Build.0 = Release_static|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_static|Win32.Build.0 = Debug_static|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_static|x64.ActiveCfg = Debug_static|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_static|x64.Build.0 = Debug_static|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_static|Win32.ActiveCfg = Release_static|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_static|Win32.Build.0 = Release_static|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_static|x64.ActiveCfg = Release_static|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_static|x64.Build.0 = Release_static|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_static|Win32.Build.0 = Debug_static|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_static|x64.ActiveCfg = Debug_static|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_static|x64.Build.0 = Debug_static|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_static|Win32.ActiveCfg = Release_static|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_static|Win32.Build.0 = Release_static|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_static|x64.ActiveCfg = Release_static|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_static|x64.Build.0 = Release_static|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_static|Win32.Build.0 = Debug_static|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_static|x64.ActiveCfg = Debug_static|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_static|x64.Build.0 = Debug_static|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_static|Win32.ActiveCfg = Release_static|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_static|Win32.Build.0 = Release_static|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_static|x64.ActiveCfg = Release_static|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_static|x64.Build.0 = Release_static|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_static|Win32.Build.0 = Debug_static|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_static|x64.ActiveCfg = Debug_static|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_static|x64.Build.0 = Debug_static|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_static|Win32.ActiveCfg = Release_static|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_static|Win32.Build.0 = Release_static|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_static|x64.ActiveCfg = Release_static|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_static|x64.Build.0 = Release_static|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_static|Win32.Build.0 = Debug_static|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_static|x64.ActiveCfg = Debug_static|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_static|x64.Build.0 = Debug_static|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_static|Win32.ActiveCfg = Release_static|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_static|Win32.Build.0 = Release_static|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_static|x64.ActiveCfg = Release_static|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_static|x64.Build.0 = Release_static|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_static|Win32.Build.0 = Debug_static|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_static|x64.ActiveCfg = Debug_static|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_static|x64.Build.0 = Debug_static|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_static|Win32.ActiveCfg = Release_static|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_static|Win32.Build.0 = Release_static|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_static|x64.ActiveCfg = Release_static|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_static|x64.Build.0 = Release_static|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_static|Win32.Build.0 = Debug_static|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_static|x64.ActiveCfg = Debug_static|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_static|x64.Build.0 = Debug_static|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_static|Win32.ActiveCfg = Release_static|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_static|Win32.Build.0 = Release_static|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_static|x64.ActiveCfg = Release_static|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_static|x64.Build.0 = Release_static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Debug_DLL_full|Win32.ActiveCfg = Release_Static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Debug_DLL_full|x64.ActiveCfg = Release_Static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Debug_DLL_full|x64.Build.0 = Release_Static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Debug_static|Win32.ActiveCfg = Release_Static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Debug_static|x64.ActiveCfg = Release_Static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Debug_static|x64.Build.0 = Release_Static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_Full|Win32 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_DLL_full|Win32.Build.0 = Release_DLL_Full|Win32 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_DLL_full|x64.ActiveCfg = Release_DLL_Full|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_DLL_full|x64.Build.0 = Release_DLL_Full|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_static|Win32.ActiveCfg = Release_Static|Win32 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_static|Win32.Build.0 = Release_Static|Win32 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_static|x64.ActiveCfg = Release_Static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_static|x64.Build.0 = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Debug_DLL_full|Win32.ActiveCfg = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Debug_DLL_full|x64.ActiveCfg = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Debug_DLL_full|x64.Build.0 = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Debug_static|Win32.ActiveCfg = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Debug_static|x64.ActiveCfg = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Debug_static|x64.Build.0 = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_static|Win32.ActiveCfg = Release_Static|Win32 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_static|Win32.Build.0 = Release_Static|Win32 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_static|x64.ActiveCfg = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_static|x64.Build.0 = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Debug_DLL_full|Win32.ActiveCfg = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Debug_DLL_full|x64.ActiveCfg = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Debug_DLL_full|x64.Build.0 = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Debug_static|Win32.ActiveCfg = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Debug_static|x64.ActiveCfg = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Debug_static|x64.Build.0 = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_static|Win32.ActiveCfg = Release_Static|Win32 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_static|Win32.Build.0 = Release_Static|Win32 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_static|x64.ActiveCfg = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_static|x64.Build.0 = Release_Static|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_static|Win32.Build.0 = Debug_static|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_static|x64.ActiveCfg = Debug_static|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_static|x64.Build.0 = Debug_static|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_static|Win32.ActiveCfg = Release_static|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_static|Win32.Build.0 = Release_static|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_static|x64.ActiveCfg = Release_static|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_static|x64.Build.0 = Release_static|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal pion-5.0.4+dfsg.orig/README.md0000644000372000001440000000325312215647065015227 0ustar robertousersPion Network Library ==================== C++ framework for building lightweight HTTP interfaces **Project Home:** https://github.com/cloudmeter/pion Retrieving the code ------------------- git clone git@github.com:cloudmeter/pion.git cd pion Building the code ----------------- *For XCode:* use `pion.xcodeproj` *For Visual Studio:* use `pion.sln` On Unix platforms (including Linux, OSX, etc.) you can run ./autogen.sh ./configure to generate Makefiles using GNU autotools, followed by make to build everything except the unit tests. You can build and run all the unit tests with make check Third Party Libraries --------------------- Pion *requires* the [Boost C++ libraries](http://www.boost.org/) version 1.35 or greater. Please see the `README.boost` file within the `doc` subdirectory for instructions on how to download, build and install Boost. For logging, Pion may be configured to: * use std::cout and std::cerr for logging (the default configuration) * use one of the following open source libraries: * [log4cplus](http://log4cplus.sourceforge.net/) (recommended; `--with-log4cplus`), * [log4cxx](http://logging.apache.org/log4cxx/) (`--with-log4cxx`) or * [log4cpp](http://log4cpp.sourceforge.net/) (`--with-log4cpp`). * disable logging entirely (run `configure --disable-logging`) Detailed build instructions are available for all of the platforms supported by Pion within the `doc` subdirectory (`README.platform`). License ------- Copyright © 2007-2012 Cloudmeter, Inc. The Pion Network Library is published under the [Boost Software License](http://www.boost.org/users/license.html). See COPYING for licensing information. pion-5.0.4+dfsg.orig/COPYING0000644000372000001440000000247212215647065015005 0ustar robertousersBoost Software License - Version 1.0 - August 17th, 2003 Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. pion-5.0.4+dfsg.orig/aclocal.m40000644000372000001440000011027712215647075015616 0ustar robertousers# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],, [m4_warning([this file was generated for autoconf 2.63. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_PROG_CC_C_O # -------------- # Like AC_PROG_CC_C_O, but changed for automake. AC_DEFUN([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC_C_O])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi dnl Make sure AC_PROG_CC is never called again, or it will override our dnl setting of CC. m4_define([AC_PROG_CC], [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([build/ax_boost_base.m4]) m4_include([build/ax_compiler_vendor.m4]) m4_include([build/ax_prog_doxygen.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) pion-5.0.4+dfsg.orig/Makefile.in0000644000372000001440000007341112215647102016010 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/pion.pc.in \ $(top_srcdir)/build/doxygen.inc $(top_srcdir)/configure \ AUTHORS COPYING ChangeLog NEWS TODO m4/compile m4/config.guess \ m4/config.sub m4/depcomp m4/install-sh m4/ltmain.sh m4/missing subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = pion.pc CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pkgconfigdir)" DATA = $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 -I build SUBDIRS = include src services utils @PION_TESTS_MAKEDIRS@ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = pion.pc EXTRA_DIST = README.md index.html autogen.sh *.sln *.xcodeproj *.vcxproj doc \ build/*.props build/*.sh build/*.pl build/*.bat build/*.dll \ build/pion.ico build/common.inc @DX_COND_doc_TRUE@@DX_COND_html_TRUE@DX_CLEAN_HTML = @DX_DOCDIR@/html @DX_COND_chm_TRUE@@DX_COND_doc_TRUE@DX_CLEAN_CHM = @DX_DOCDIR@/chm @DX_COND_chi_TRUE@@DX_COND_chm_TRUE@@DX_COND_doc_TRUE@DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi @DX_COND_doc_TRUE@@DX_COND_man_TRUE@DX_CLEAN_MAN = @DX_DOCDIR@/man @DX_COND_doc_TRUE@@DX_COND_rtf_TRUE@DX_CLEAN_RTF = @DX_DOCDIR@/rtf @DX_COND_doc_TRUE@@DX_COND_xml_TRUE@DX_CLEAN_XML = @DX_DOCDIR@/xml @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@DX_PS_GOAL = doxygen-ps @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@DX_PDF_GOAL = doxygen-pdf @DX_COND_doc_TRUE@@DX_COND_latex_TRUE@DX_CLEAN_LATEX = @DX_DOCDIR@/latex @DX_COND_doc_TRUE@DX_CLEANFILES = \ @DX_COND_doc_TRUE@ @DX_DOCDIR@/@PACKAGE@.tag \ @DX_COND_doc_TRUE@ $(DX_CLEAN_HTML) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_CHM) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_CHI) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_MAN) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_RTF) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_XML) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_PS) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_PDF) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_LATEX) all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/build/doxygen.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): pion.pc: $(top_builddir)/config.status $(srcdir)/pion.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pkgconfigDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-pkgconfigDATA @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@@DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ cd @DX_DOCDIR@/latex; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(MAKEINDEX_PATH) refman.idx; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ countdown=5; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ refman.log > /dev/null 2>&1 \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ && test $$countdown -gt 0; do \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ countdown=`expr $$countdown - 1`; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ done; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@@DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ cd @DX_DOCDIR@/latex; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_MAKEINDEX) refman.idx; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ countdown=5; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ refman.log > /dev/null 2>&1 \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ && test $$countdown -gt 0; do \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ countdown=`expr $$countdown - 1`; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ done; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ mv refman.pdf ../@PACKAGE@.pdf @DX_COND_doc_TRUE@.PHONY: doxygen-run doxygen-doc doxygen-clean $(DX_PS_GOAL) $(DX_PDF_GOAL) @DX_COND_doc_TRUE@.INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) @DX_COND_doc_TRUE@doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag @DX_COND_doc_TRUE@doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) @DX_COND_doc_TRUE@@DX_DOCDIR@/@PACKAGE@.tag: $(srcdir)/$(DX_CONFIG) @DX_COND_doc_TRUE@ rm -rf $(DX_CLEANFILES) @DX_COND_doc_TRUE@ $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG) @DX_COND_doc_TRUE@doxygen-clean: @DX_COND_doc_TRUE@ rm -rf $(DX_CLEANFILES) docs: doxygen-doc clean-docs: doxygen-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.4+dfsg.orig/m4/0000755000372000001440000000000012215647143014262 5ustar robertouserspion-5.0.4+dfsg.orig/m4/lt~obsolete.m40000644000372000001440000001311311435020267017070 0ustar robertousers# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 4 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) pion-5.0.4+dfsg.orig/m4/libtool.m40000644000372000001440000077341111435020267016200 0ustar robertousers# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 56 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl _LT_PROG_ECHO_BACKSLASH case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\[$]0 --fallback-echo"')dnl " lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` ;; esac _LT_OUTPUT_LIBTOOL_INIT ]) # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) cat >"$CONFIG_LT" <<_LTEOF #! $SHELL # Generated by $as_me. # Run this file to recreate a libtool stub with the current configuration. lt_cl_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2008 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. if test "$no_create" != yes; then lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) fi ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_XSI_SHELLFNS sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES # -------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(whole_archive_flag_spec, $1)='' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX # ----------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl AC_LINK_IFELSE(AC_LANG_PROGRAM,[ lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], [AC_DIVERT_PUSH(NOTICE)]) $1 AC_DIVERT_POP ])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. m4_defun([_LT_PROG_ECHO_BACKSLASH], [_LT_SHELL_INIT([ # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` ;; esac ECHO=${lt_ECHO-echo} if test "X[$]1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X[$]1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} fi if test "X[$]1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF [$]* _LT_EOF exit 0 fi # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL [$]0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL [$]0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "[$]0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" fi AC_SUBST(lt_ECHO) ]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that does not interpret backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [AC_CHECK_TOOL(AR, ar, false) test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1]) AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line __oline__ "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$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' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[123]]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[[3-9]]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method == "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ const struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= AC_MSG_CHECKING([for $compiler option to produce PIC]) m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC*) # IBM XL 8.0 on PPC _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) _LT_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' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag= tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; freebsd1*) _LT_TAGVAR(ld_shlibs, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE(int foo(void) {}, _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' ) LDFLAGS="$save_LDFLAGS" else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_MSG_CHECKING([whether -lc should be explicitly linked in]) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then _LT_TAGVAR(archive_cmds_need_lc, $1)=no else _LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], [[If ld is used when linking, flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [fix_srcfile_path], [1], [Fix the shell variable $srcfile for the compiler]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_PROG_CXX # ------------ # Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ # compiler, we have our own version here. m4_defun([_LT_PROG_CXX], [ pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) AC_PROG_CXX if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_CXX dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_CXX], []) # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [AC_REQUIRE([_LT_PROG_CXX])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_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' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd[[12]]*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then _LT_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' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_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' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 will use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "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 "X$list" | $Xsed' ;; xl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=echo else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "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 "X$list" | $Xsed' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_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" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ]) dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_PROG_F77 # ------------ # Since AC_PROG_F77 is broken, in that it returns the empty string # if there is no fortran compiler, we have our own version here. m4_defun([_LT_PROG_F77], [ pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) AC_PROG_F77 if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_F77 dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_F77], []) # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_REQUIRE([_LT_PROG_F77])dnl AC_LANG_PUSH(Fortran 77) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC CC=${F77-"f77"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_PROG_FC # ----------- # Since AC_PROG_FC is broken, in that it returns the empty string # if there is no fortran compiler, we have our own version here. m4_defun([_LT_PROG_FC], [ pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) AC_PROG_FC if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_FC dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_FC], []) # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_REQUIRE([_LT_PROG_FC])dnl AC_LANG_PUSH(Fortran) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC CC=${FC-"f95"} compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC="$lt_save_CC" ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC GCC= CC=${RC-"windres"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC="$lt_save_CC" ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_XSI_SHELLFNS # --------------------- # Bourne and XSI compatible variants of some useful shell functions. m4_defun([_LT_PROG_XSI_SHELLFNS], [case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $[*] )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_basename file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } dnl func_dirname_and_basename dnl A portable version of this function is already defined in general.m4sh dnl so there is no need for it here. # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[[^=]]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$[@]"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]+=\$[2]" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]=\$$[1]\$[2]" } _LT_EOF ;; esac ]) pion-5.0.4+dfsg.orig/m4/ltversion.m40000644000372000001440000000127711435020267016553 0ustar robertousers# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # Generated from ltversion.in. # serial 3017 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.2.6b]) m4_define([LT_PACKAGE_REVISION], [1.3017]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.2.6b' macro_revision='1.3017' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) pion-5.0.4+dfsg.orig/m4/config.sub0000755000372000001440000010316711466635415016263 0ustar robertousers#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 # Free Software Foundation, Inc. timestamp='2009-11-20' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | ubicom32 \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | picochip) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tile*) basic_machine=tile-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: pion-5.0.4+dfsg.orig/m4/ltsugar.m40000644000372000001440000001042411435020267016201 0ustar robertousers# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) pion-5.0.4+dfsg.orig/m4/config.guess0000755000372000001440000012761511466635415016624 0ustar robertousers#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 # Free Software Foundation, Inc. timestamp='2009-11-20' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else echo ${UNAME_MACHINE}-unknown-linux-gnueabi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: pion-5.0.4+dfsg.orig/m4/depcomp0000755000372000001440000004426711466635415015662 0ustar robertousers#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2009-04-28.21; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free # Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u="sed s,\\\\\\\\,/,g" depmode=msvisualcpp fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: pion-5.0.4+dfsg.orig/m4/install-sh0000755000372000001440000003253711466635415016306 0ustar robertousers#!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: pion-5.0.4+dfsg.orig/m4/ltoptions.m40000644000372000001440000002724211435020267016561 0ustar robertousers# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [0], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [pic_mode="$withval"], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) pion-5.0.4+dfsg.orig/m4/compile0000755000372000001440000000727111466635415015655 0ustar robertousers#! /bin/sh # Wrapper for compilers which do not understand `-c -o'. scriptversion=2009-10-06.20; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 Free Software # Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand `-c -o'. Remove `-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file `INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; esac ofile= cfile= eat= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as `compile cc -o foo foo.c'. # So we strip `-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no `-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # `.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use `[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: pion-5.0.4+dfsg.orig/m4/missing0000755000372000001440000002623311466635415015675 0ustar robertousers#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; tar*) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar*) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: pion-5.0.4+dfsg.orig/m4/ltmain.sh0000755000372000001440000073306011435020267016111 0ustar robertousers# Generated from ltmain.m4sh. # ltmain.sh (GNU libtool) 2.2.6b # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print informational messages (default) # --version print version information # -h, --help print short or long help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.2.6b # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . PROGRAM=ltmain.sh PACKAGE=libtool VERSION=2.2.6b TIMESTAMP="" package_revision=1.3017 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # NLS nuisances: We save the old values to restore during execute mode. # Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done $lt_unset CDPATH : ${CP="cp -f"} : ${ECHO="echo"} : ${EGREP="/bin/grep -E"} : ${FGREP="/bin/grep -F"} : ${GREP="/bin/grep"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SED="/bin/sed"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # Generated shell functions inserted here. # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: # In the unlikely event $progname began with a '-', it would play havoc with # func_echo (imagine progname=-n), so we prepend ./ in that case: func_dirname_and_basename "$progpath" progname=$func_basename_result case $progname in -*) progname=./$progname ;; esac # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=: for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname${mode+: }$mode: $*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` done my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "X$my_tmpdir" | $Xsed } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "X$1" | $Xsed \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_version # Echo version message to standard output and exit. func_version () { $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $SED -n '/^# Usage:/,/# -h/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" $ECHO $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help # Echo long help message to standard output and exit. func_help () { $SED -n '/^# Usage:/,/# Report bugs to/ { s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ p }' < "$progpath" exit $? } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { func_error "missing argument for $1" exit_cmd=exit } exit_cmd=: # Check that we have a working $ECHO. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then # Yippee, $ECHO works! : else # Restart under the correct shell, and then maybe $ECHO will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # Parse options once, thoroughly. This comes as soon as possible in # the script to make things like `libtool --version' happen quickly. { # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Parse non-mode specific arguments: while test "$#" -gt 0; do opt="$1" shift case $opt in --config) func_config ;; --debug) preserve_args="$preserve_args $opt" func_echo "enabling shell trace mode" opt_debug='set -x' $opt_debug ;; -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break execute_dlfiles="$execute_dlfiles $1" shift ;; --dry-run | -n) opt_dry_run=: ;; --features) func_features ;; --finish) mode="finish" ;; --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break case $1 in # Valid mode arguments: clean) ;; compile) ;; execute) ;; finish) ;; install) ;; link) ;; relink) ;; uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac mode="$1" shift ;; --preserve-dup-deps) opt_duplicate_deps=: ;; --quiet|--silent) preserve_args="$preserve_args $opt" opt_silent=: ;; --verbose| -v) preserve_args="$preserve_args $opt" opt_silent=false ;; --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break preserve_args="$preserve_args $opt $1" func_enable_tag "$1" # tagname is set here shift ;; # Separate optargs to long options: -dlopen=*|--mode=*|--tag=*) func_opt_split "$opt" set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} shift ;; -\?|-h) func_usage ;; --help) opt_help=: ;; --version) func_version ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) nonopt="$opt" break ;; esac done case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_duplicate_deps ;; esac # Having warned about all mis-specified options, bail out if # anything was wrong. $exit_cmd $EXIT_FAILURE } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } ## ----------- ## ## Main. ## ## ----------- ## $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi test -z "$mode" && func_fatal_error "error: you must specify a MODE." # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$mode' for more information." } # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_ltwrapper_scriptname_result="" if func_ltwrapper_executable_p "$1"; then func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" fi } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done case "$@ " in " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T <?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi removelist="$removelist $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist removelist="$removelist $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir command="$command -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then command="$command -o $obj" fi # Suppress compiler output if we already did a PIC compilation. command="$command$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$mode'" ;; esac $ECHO $ECHO "Try \`$progname --help' for more information about other modes." exit $? } # Now that we've collected a possible --mode arg, show help if necessary $opt_help && func_mode_help # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $execute_dlfiles; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_quote_for_eval "$file" args="$args $func_quote_for_eval_result" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" $ECHO "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS $ECHO "X----------------------------------------------------------------------" | $Xsed $ECHO "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done $ECHO $ECHO "If you ever happen to want to link against installed libraries" $ECHO "in a given directory, LIBDIR, you must either use libtool, and" $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" $ECHO "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" $ECHO " during execution" fi if test -n "$runpath_var"; then $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" $ECHO " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $ECHO $ECHO "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" $ECHO "pages." ;; *) $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac $ECHO "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS } test "$mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $ECHO "X$nonopt" | $GREP shtool >/dev/null; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" install_prog="$install_prog$func_quote_for_eval_result" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" install_prog="$install_prog $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for progfile in $progfiles; do func_verbose "extracting global C symbols from \`$progfile'" $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" } done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" fi $ECHO >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; " case $host in *cygwin* | *mingw* | *cegcc* ) $ECHO >> "$output_objdir/$my_dlsyms" "\ /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */" lt_dlsym_const= ;; *osf5*) echo >> "$output_objdir/$my_dlsyms" "\ /* This system does not cope well with relocations in const data */" lt_dlsym_const= ;; *) lt_dlsym_const=const ;; esac $ECHO >> "$output_objdir/$my_dlsyms" "\ extern $lt_dlsym_const lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; $lt_dlsym_const lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac $ECHO >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) symtab_cflags="$symtab_cflags $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper_part1 [arg=no] # # Emit the first part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part1 () { func_emit_wrapper_part1_arg1=no if test -n "$1" ; then func_emit_wrapper_part1_arg1=$1 fi $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then ECHO=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then # Yippee, \$ECHO works! : else # Restart under the correct shell, and then maybe \$ECHO will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $ECHO "\ # Find the directory that this script lives in. thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done " } # end: func_emit_wrapper_part1 # func_emit_wrapper_part2 [arg=no] # # Emit the second part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part2 () { func_emit_wrapper_part2_arg1=no if test -n "$1" ; then func_emit_wrapper_part2_arg1=$1 fi $ECHO "\ # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # end: func_emit_wrapper_part2 # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=no if test -n "$1" ; then func_emit_wrapper_arg1=$1 fi # split this up so that func_emit_cwrapperexe_src # can call each part independently. func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" } # func_to_host_path arg # # Convert paths to host format when used with build tools. # Intended for use with "native" mingw (where libtool itself # is running under the msys shell), or in the following cross- # build environments: # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # where wine is equipped with the `winepath' executable. # In the native mingw case, the (msys) shell automatically # converts paths for any non-msys applications it launches, # but that facility isn't available from inside the cwrapper. # Similar accommodations are necessary for $host mingw and # $build cygwin. Calling this function does no harm for other # $host/$build combinations not listed above. # # ARG is the path (on $build) that should be converted to # the proper representation for $host. The result is stored # in $func_to_host_path_result. func_to_host_path () { func_to_host_path_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' case $build in *mingw* ) # actually, msys # awkward: cmd appends spaces to result lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_path_tmp1=`( cmd //c echo "$1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_path_tmp1=`cygpath -w "$1"` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # Unfortunately, winepath does not exit with a non-zero # error code, so we are forced to check the contents of # stdout. On the other hand, if the command is not # found, the shell will set an exit code of 127 and print # *an error message* to stdout. So we must check for both # error code of zero AND non-empty stdout, which explains # the odd construction: func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` else # Allow warning below. func_to_host_path_result="" fi ;; esac if test -z "$func_to_host_path_result" ; then func_error "Could not determine host path corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_path_result="$1" fi ;; esac fi } # end: func_to_host_path # func_to_host_pathlist arg # # Convert pathlists to host format when used with build tools. # See func_to_host_path(), above. This function supports the # following $build/$host combinations (but does no harm for # combinations not listed here): # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # # Path separators are also converted from $build format to # $host format. If ARG begins or ends with a path separator # character, it is preserved (but converted to $host format) # on output. # # ARG is a pathlist (on $build) that should be converted to # the proper representation on $host. The result is stored # in $func_to_host_pathlist_result. func_to_host_pathlist () { func_to_host_pathlist_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_to_host_pathlist_tmp2="$1" # Once set for this call, this variable should not be # reassigned. It is used in tha fallback case. func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e 's|^:*||' -e 's|:*$||'` case $build in *mingw* ) # Actually, msys. # Awkward: cmd appends spaces to result. lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # unfortunately, winepath doesn't convert pathlists func_to_host_pathlist_result="" func_to_host_pathlist_oldIFS=$IFS IFS=: for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do IFS=$func_to_host_pathlist_oldIFS if test -n "$func_to_host_pathlist_f" ; then func_to_host_path "$func_to_host_pathlist_f" if test -n "$func_to_host_path_result" ; then if test -z "$func_to_host_pathlist_result" ; then func_to_host_pathlist_result="$func_to_host_path_result" else func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" fi fi fi IFS=: done IFS=$func_to_host_pathlist_oldIFS ;; esac if test -z "$func_to_host_pathlist_result" ; then func_error "Could not determine the host path(s) corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This may break if $1 contains DOS-style drive # specifications. The fix is not to complicate the expression # below, but for the user to provide a working wine installation # with winepath so that path translation in the cross-to-mingw # case works properly. lt_replace_pathsep_nix_to_dos="s|:|;|g" func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_replace_pathsep_nix_to_dos"` fi # Now, add the leading and trailing path separators back case "$1" in :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" ;; esac case "$1" in *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" ;; esac ;; esac fi } # end: func_to_host_pathlist # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include # define setmode _setmode #else # include # include # ifdef __CYGWIN__ # include # define HAVE_SETENV # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif # endif #endif #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif #ifdef _MSC_VER # define S_IXUSR _S_IEXEC # define stat _stat # ifndef _INTPTR_T_DEFINED # define intptr_t int # endif #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifdef __CYGWIN__ # define FOPEN_WB "wb" #endif #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #undef LTWRAPPER_DEBUGPRINTF #if defined DEBUGWRAPPER # define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args static void ltwrapper_debugprintf (const char *fmt, ...) { va_list args; va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } #else # define LTWRAPPER_DEBUGPRINTF(args) #endif const char *program_name = NULL; void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_fatal (const char *message, ...); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_opt_process_env_set (const char *arg); void lt_opt_process_env_prepend (const char *arg); void lt_opt_process_env_append (const char *arg); int lt_split_name_value (const char *arg, char** name, char** value); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); static const char *script_text_part1 = EOF func_emit_wrapper_part1 yes | $SED -e 's/\([\\"]\)/\\\1/g' \ -e 's/^/ "/' -e 's/$/\\n"/' echo ";" cat <"))); for (i = 0; i < newargc; i++) { LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); } EOF case $host_os in mingw*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); return 127; } return rval; EOF ;; *) cat <<"EOF" execv (lt_argv_zero, newargz); return rval; /* =127, but avoids unused variable warning */ EOF ;; esac cat <<"EOF" } void * xmalloc (size_t num) { void *p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char) name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable (const char *path) { struct stat st; LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", tmp_pathspec)); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { char *errstr = strerror (errno); lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal ("Could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } void lt_setenv (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", (name ? name : ""), (value ? value : ""))); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } int lt_split_name_value (const char *arg, char** name, char** value) { const char *p; int len; if (!arg || !*arg) return 1; p = strchr (arg, (int)'='); if (!p) return 1; *value = xstrdup (++p); len = strlen (arg) - strlen (*value); *name = XMALLOC (char, len); strncpy (*name, arg, len-1); (*name)[len - 1] = '\0'; return 0; } void lt_opt_process_env_set (const char *arg) { char *name = NULL; char *value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); } lt_setenv (name, value); XFREE (name); XFREE (value); } void lt_opt_process_env_prepend (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); } new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_opt_process_env_append (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); } new_value = lt_extend_str (getenv (name), value, 1); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_update_exe_path (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? value : ""))); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? value : ""))); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF } # end: func_emit_cwrapperexe_src # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) deplibs="$deplibs $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) weak_libs="$weak_libs $arg" prev= continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname '-L' '' "$arg" dir=$func_stripname_result if test -z "$dir"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$compiler_flags $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" linker_flags="$linker_flags $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -F/path gives path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" compiler_flags="$compiler_flags $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_duplicate_deps ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= case $lib in *.la) func_source "$lib" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` case " $weak_libs " in *" $deplib_base "*) ;; *) deplibs="$deplibs $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" dir=$func_stripname_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $ECHO $ECHO "*** Warning: Trying to link with static lib archive $deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because the file extensions .$libext of this argument makes me believe" $ECHO "*** that it is just a static archive that I should not use here." else $ECHO $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) temp_rpath="$temp_rpath$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded notinst_deplibs="$notinst_deplibs $lib" need_relink=no ;; *) if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then $ECHO if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $ECHO $ECHO "*** And there doesn't seem to be a static archive available" $ECHO "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $ECHO $ECHO "*** Warning: This system can not link to static lib archive $lib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $ECHO "*** But as you try to build a module library, libtool will still create " $ECHO "*** a static module, that should work as long as the dlopening application" $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $ECHO $ECHO "*** However, this would only work if libtool was able to extract symbol" $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" $ECHO "*** not find such a program. So, this module is probably useless." $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) func_dirname "$deplib" "" "." dir="$func_dirname_result" # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else $ECHO $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" libobjs="$libobjs $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $ECHO $ECHO "*** Warning: linker path does not have real file for library $a_deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $ECHO $ECHO "*** Warning: linker path does not have real file for library $a_deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` done fi if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | $GREP . >/dev/null; then $ECHO if test "X$deplibs_check_method" = "Xnone"; then $ECHO "*** Warning: inter-library dependencies are not supported in this platform." else $ECHO "*** Warning: inter-library dependencies are not known to be supported." fi $ECHO "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $ECHO $ECHO "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" $ECHO "*** a static module, that should work as long as the dlopening" $ECHO "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $ECHO $ECHO "*** However, this would only work if libtool was able to extract symbol" $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" $ECHO "*** not find such a program. So, this module is probably useless." $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $ECHO "*** The inter-library dependencies that have been dropped here will be" $ECHO "*** automatically added whenever a program is linked with this library" $ECHO "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $ECHO $ECHO "*** Since this library must not contain undefined symbols," $ECHO "*** because either the platform does not support them or" $ECHO "*** it was explicitly requested with -no-undefined," $ECHO "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" delfiles="$delfiles $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" func_len " $cmd" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then func_show_eval "$cmd" 'exit $?' skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output output_la=`$ECHO "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" $ECHO 'INPUT (' > $output for obj in $save_libobjs do $ECHO "$obj" >> $output done $ECHO ')' >> $output delfiles="$delfiles $output" elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do $ECHO "$obj" >> $output done delfiles="$delfiles $output" output=$firstobj\"$file_list_spec$output\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=$obj func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi delfiles="$delfiles $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles libobjs="$libobjs $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *cegcc) # Disable wrappers for cegcc, we are cross compiling anyway. wrappers_required=no ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $ECHO for shipping. if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then oldobjs="$oldobjs $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles oldobjs="$oldobjs $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else $ECHO "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlfiles="$newdlfiles $libdir/$name" ;; *) newdlfiles="$newdlfiles $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlprefiles="$newdlprefiles $libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$mode" = link || test "$mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) RM="$RM $arg"; rmforce=yes ;; -*) RM="$RM $arg" ;; *) files="$files $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= origobjdir="$objdir" for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then objdir="$origobjdir" else objdir="$dir/$origobjdir" fi func_basename "$file" name="$func_basename_result" test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result rmfiles="$rmfiles $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$mode" = uninstall || test "$mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 pion-5.0.4+dfsg.orig/build/0000755000372000001440000000000012220154375015035 5ustar robertouserspion-5.0.4+dfsg.orig/build/pion-boost.inc0000644000372000001440000001311712215647065017633 0ustar robertousers# -------------------------------- # Pion autoconf configuration file # -------------------------------- # Check for Boost AX_BOOST_BASE([1.35]) # AC_MSG_NOTICE(Boost home directory: $BOOST_HOME_DIR) CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" # Check for Boost library extension AC_MSG_CHECKING([boost library extension]) AC_ARG_WITH([boost-extension], AC_HELP_STRING([--with-boost-extension@<:@=EXT@:>@],[extension used for boost library files]), [ boost_ext=$withval ], [ detect_boost_ext=true ]) # Check if openssl location is specified if test "$detect_boost_ext" != "true"; then # use provided extension for boost library files BOOST_LIB_EXTENSION="$boost_ext" else # Attempt to Autodetect Boost library extension by looking for thread library (i.e. "-gcc41-mt") for boost_thread_library in `ls $BOOST_HOME_DIR/lib*/libboost_thread*-mt*{dylib,dll,so,a}* 2>/dev/null` ; do if test -r $boost_thread_library ; then BOOST_LIB_EXTENSION=`echo $boost_thread_library | sed 's,.*/,,' | sed -e 's;^libboost_thread\(.*\)\.dylib.*$;\1;' -e 's;^libboost_thread\(.*\)\.dll*$;\1;' -e 's;^libboost_thread\(.*\)\.so.*$;\1;' -e 's;^libboost_thread\(.*\)\.a*$;\1;'` break fi done fi if test "x$BOOST_LIB_EXTENSION" = "x"; then AC_MSG_RESULT("(none)") else AC_MSG_RESULT($BOOST_LIB_EXTENSION) fi AC_SUBST(BOOST_LIB_EXTENSION) # Check for Boost Date Time library BOOST_TRY_LIB=date_time BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK}" AC_MSG_CHECKING([for boost::${BOOST_TRY_LIB} library]) AC_TRY_LINK([#include ], [ boost::gregorian::date d(2007, 11, 11); return 0; ], [ AC_MSG_RESULT(ok) BOOST_DATE_TIME_LIB="-l${BOOST_TRY_LINK}" ], [ AC_MSG_RESULT(not found) AC_MSG_ERROR(Unable to link with the boost::${BOOST_TRY_LIB} library) ]) LIBS="$LIBS_SAVED" AC_SUBST(BOOST_DATE_TIME_LIB) # Check for Boost System library BOOST_TRY_LIB=system BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK}" AC_MSG_CHECKING([for boost::${BOOST_TRY_LIB} library]) AC_TRY_LINK([#include ], [ boost::system::error_code error_code; std::string message(error_code.message()); return 0; ], [ AC_MSG_RESULT(ok) BOOST_SYSTEM_LIB="-l${BOOST_TRY_LINK}" ], [ AC_MSG_RESULT(not found) AC_MSG_ERROR(Unable to link with the boost::${BOOST_TRY_LIB} library) ]) LIBS="$LIBS_SAVED" AC_SUBST(BOOST_SYSTEM_LIB) # Check for Boost Thread library BOOST_TRY_LIB=thread BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK} ${BOOST_SYSTEM_LIB} ${BOOST_DATE_TIME_LIB}" AC_MSG_CHECKING([for boost::${BOOST_TRY_LIB} library]) AC_TRY_LINK([#include #include ], [ boost::thread current_thread; return 0; ], [ AC_MSG_RESULT(ok) BOOST_THREAD_LIB="-l${BOOST_TRY_LINK}" ], [ AC_MSG_RESULT(not found) AC_MSG_ERROR(Unable to link with the boost::${BOOST_TRY_LIB} library) ]) LIBS="$LIBS_SAVED" AC_SUBST(BOOST_THREAD_LIB) # Check for Boost Filesystem library BOOST_TRY_LIB=filesystem BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK} $BOOST_SYSTEM_LIB" AC_MSG_CHECKING([for boost::${BOOST_TRY_LIB} library]) AC_TRY_LINK([#include ], [ boost::filesystem::path a_path; return 0; ], [ AC_MSG_RESULT(ok) BOOST_FILESYSTEM_LIB="-l${BOOST_TRY_LINK}" ], [ AC_MSG_RESULT(not found) AC_MSG_ERROR(Unable to link with the boost::${BOOST_TRY_LIB} library) ]) LIBS="$LIBS_SAVED" AC_SUBST(BOOST_FILESYSTEM_LIB) # Check for Boost Regex library BOOST_TRY_LIB=regex BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK}" AC_MSG_CHECKING([for boost::${BOOST_TRY_LIB} library]) AC_TRY_LINK([#include ], [ boost::regex exp(".*"); return 0; ], [ AC_MSG_RESULT(ok) BOOST_REGEX_LIB="-l${BOOST_TRY_LINK}" ], [ AC_MSG_RESULT(not found) AC_MSG_ERROR(Unable to link with the boost::${BOOST_TRY_LIB} library) ]) LIBS="$LIBS_SAVED" AC_SUBST(BOOST_REGEX_LIB) # Check for Boost Unit Test Framework AC_ARG_ENABLE([tests], AC_HELP_STRING([--disable-tests],[do not build and run the unit tests]), [enable_tests=$enableval], [enable_tests=yes]) if test "x$enable_tests" == "xno"; then # Display notice if unit tests are disabled AC_MSG_NOTICE([Unit tests are disabled]) else BOOST_TRY_LIB=unit_test_framework BOOST_TRY_LINK="$BOOST_HOME_DIR/lib/libboost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}.a" # check if static version of lib is available if !(test -r "$BOOST_TRY_LINK"); then BOOST_TRY_LINK="-lboost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" PION_TESTS_CPPFLAGS="-DBOOST_TEST_DYN_LINK" fi LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED ${BOOST_TRY_LINK}" CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS ${PION_TESTS_CPPFLAGS}" AC_MSG_CHECKING([for boost::test library]) AC_TRY_LINK([#include using namespace boost::unit_test; test_suite* init_unit_test_suite( int argc, char* argv[] ) { return BOOST_TEST_SUITE("Master test suite"); }], [], [ AC_MSG_RESULT(ok) BOOST_TEST_LIB="${BOOST_TRY_LINK}" ], [ AC_MSG_RESULT(not found) AC_MSG_ERROR(Unable to link with the boost::${BOOST_TRY_LIB} library) ]) LIBS="$LIBS_SAVED" CPPFLAGS="$CPPFLAGS_SAVED" PION_TESTS_MAKEDIRS="tests" fi AC_SUBST(BOOST_TEST_LIB) AC_SUBST(PION_TESTS_MAKEDIRS) AC_SUBST(PION_TESTS_CPPFLAGS) pion-5.0.4+dfsg.orig/build/Release_static_pion.props0000644000372000001440000000125312215647065022106 0ustar robertousers <_ProjectFileVersion>10.0.40219.1 PION_STATIC_LINKING;NDEBUG;PION_FULL;%(PreprocessorDefinitions) MultiThreadedDLL ProgramDatabase pion-5.0.4+dfsg.orig/build/winbuild.bat0000644000372000001440000000274312215647065017357 0ustar robertousers@ECHO OFF SET PION_LIBS=C:\Atomic Labs\pion-libraries SETLOCAL EnableDelayedExpansion SET PION_HOME=C:\Atomic Labs\pion-platform SET INCLUDE=%PION_LIBS%\boost-1.37.0;%PION_LIBS%\bzip2-1.0.5\include;%PION_LIBS%\dssl-1.6.8\src;%PION_LIBS%\iconv-1.9.2\include;%PION_LIBS%\libxml2-2.6.30\include;%PION_LIBS%\log4cplus-1.0.3\include;%PION_LIBS%\openssl-0.9.8l\inc32;%PION_LIBS%\sqlapi-3.7.24;%PION_LIBS%\yajl-1.0.5\include;%PION_LIBS%\zlib-1.2.3\include;%PION_LIBS%\WpdPack-4.0.2\Include;%INCLUDE% SET LIB=%PION_LIBS%\boost-1.37.0\lib;%PION_LIBS%\bzip2-1.0.5\lib;%PION_LIBS%\dssl-1.6.8\release;%PION_LIBS%\iconv-1.9.2\lib;%PION_LIBS%\libxml2-2.6.30\lib;%PION_LIBS%\log4cplus-1.0.3\bin;%PION_LIBS%\openssl-0.9.8l\bin;%PION_LIBS%\sqlapi-3.7.24\lib;%PION_LIBS%\yajl-1.0.5\bin;%PION_LIBS%\zlib-1.2.3\lib;%PION_LIBS%\WpdPack-4.0.2\Lib;%LIB% SET PATH=%PION_LIBS%\boost-1.37.0\lib;%PION_LIBS%\bzip2-1.0.5\bin;%PION_LIBS%\iconv-1.9.2\bin;%PION_LIBS%\libxml2-2.6.30\bin;%PION_LIBS%\log4cplus-1.0.3\bin;%PION_LIBS%\openssl-0.9.8l\bin;%PION_LIBS%\sqlapi-3.7.24\bin;%PION_LIBS%\yajl-1.0.5\bin;%PION_LIBS%\zlib-1.2.3\bin;%PION_LIBS%\WpdPack-4.0.2\Bin;%PATH% SET opts=/nologo /platform:Win32 /logcommands /nohtmllog /M1 /useenv SET conf=Release_DLL_full FOR %%I IN (%*) DO (SET opt=%%~I IF "!opt:~0,1!"=="/" SET opts=!opts! %%I IF "!opt!"=="debug" SET conf=Debug_DLL_full IF "!opt!"=="release" SET conf=Release_DLL_full) FOR %%S in (*.sln) DO vcbuild %opts% "/logfile:%%~nS[%conf%].log" %%S "%conf%|Win32" pion-5.0.4+dfsg.orig/build/common.pl0000644000372000001440000000351012215647065016670 0ustar robertousers# ------------------------------------------------ # pion-common common perl subroutines used by pion # ------------------------------------------------ use File::Spec; use File::Path; use File::Copy; # ---------------------- # some helpful functions # ---------------------- # recursively copies an entire directory tree, excluding anything that starts with a dot sub copyDirWithoutDotFiles(@) { my $src_dir = shift(); my $dst_dir = shift(); my %templates = @_; # make sure directory exists mkpath($dst_dir); # get list of files in source directory opendir(DIR, $src_dir); my @files = readdir(DIR); closedir(DIR); # iterate through source files foreach (@files) { if ( ! /^\./ ) { my $src_file = File::Spec->catfile($src_dir, $_); my $dst_file = File::Spec->catfile($dst_dir, $_); if (-d $src_file) { copyDirWithoutDotFiles($src_file, $dst_file, %templates); } elsif ( scalar keys %templates == 0 ) { # no templates specified -> just copy the file as-is copy($src_file, $dst_file); } else { # template parameters were specified # process key->value parameters while copying the file # WARNING: this probably only works for text files open(FROMFILE, $src_file) or die "could not open source template ($src_file)"; open(TOFILE, ">", $dst_file) or die "could not open $dst_file for writing"; while ( ) { while ( ($key, $value) = each %templates ) { s,\@$key\@,$value,; } print TOFILE $_; } close(FROMFILE); close(TOFILE); } } } } 1;pion-5.0.4+dfsg.orig/build/pion.ico0000644000372000001440000000725612215647065016517 0ustar robertousers(6 è^@@h F( €€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿwwwwwwwwwwwwwwwwwwwwwwww‡wxˆˆww‡wˆøw‡øx‡ÿw‡‡‡‡‡ˆw‡x÷‡øw‡x÷‡ˆw‡x÷‡‡‡‡‡ø‡w‡wÿøwx‡wxˆwwwwwwwwwwwwwwwwww( @€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÿ‡wwwwwˆˆˆ‡wwwwwÿ‡wwwwˆÿÿÿø‡wwwwÿ‡wwwˆÿÿÿÿÿøwwwwÿ‡wwxÿÿˆˆˆÿ‡wwwÿ‡wwÿˆwxwxøwwwÿ‡wwøww‡wˆÿ‡wwÿ‡wxÿ‡ww‡wxÿøwwÿ‡wxøwww‡wwøwwÿ‡wøwww‡wwøwwÿ‡wøwww‡wwxÿwwÿ‡wøwww‡wwxÿwwÿ‡wøwww‡wwxÿwwÿ‡wøwww‡wwxÿwwÿ‡wøwww‡wwxÿwwÿ‡wøwww‡wwxøwwÿ‡wøwww‡wwøwwÿ‡wxÿ‡ww‡wwøwwÿ‡wwøww‡wxÿ‡wwÿ‡wwÿ‡w‡xøwwwÿ‡wwxÿøˆˆÿˆwwwÿ‡wwwˆÿøÿøwwwwÿ‡wwwxˆøÿø‡wwwwˆwwwwwxˆˆ‡wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(@€€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿøˆˆˆˆˆˆˆˆˆˆˆwÿÿÿÿ÷xˆˆˆˆˆˆˆˆˆˆˆÿøˆˆˆˆˆˆˆˆˆ‡ÿÿÿÿÿÿÿxˆˆˆˆˆˆˆˆˆˆÿøˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿÿÿxˆˆˆˆˆˆˆˆˆÿøˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿÿÿÿÿxˆˆˆˆˆˆˆˆÿøˆˆˆˆˆˆˆ‡ÿÿÿÿwˆˆwÿÿÿ÷ˆˆˆˆˆˆˆˆÿøˆˆˆˆˆˆˆÿÿ÷xˆˆˆˆˆwÿÿÿxˆˆˆˆˆˆˆÿøˆˆˆˆˆˆ‡ÿÿ÷ˆˆˆˆˆˆˆˆwÿÿ÷ˆˆˆˆˆˆˆÿøˆˆˆˆˆˆÿÿxˆˆˆˆˆˆˆˆˆÿÿxˆˆˆˆˆˆÿøˆˆˆˆˆ‡ÿÿ÷ˆˆˆˆ‡÷ˆˆˆˆ‡ÿÿ÷ˆˆˆˆˆˆÿøˆˆˆˆˆÿÿxˆˆˆˆÿxˆˆˆˆÿÿˆˆˆˆˆˆÿøˆˆˆˆˆÿ÷ˆˆˆˆˆÿxˆˆˆˆ‡ÿÿxˆˆˆˆˆÿøˆˆˆˆ‡ÿÿxˆˆˆˆˆÿxˆˆˆˆˆÿ÷ˆˆˆˆˆÿøˆˆˆˆ‡ÿÿˆˆˆˆˆˆÿxˆˆˆˆˆÿ÷ˆˆˆˆˆÿøˆˆˆˆÿ÷ˆˆˆˆˆˆÿxˆˆˆˆˆ‡ÿÿˆˆˆˆˆÿøˆˆˆˆÿøˆˆˆˆˆˆÿxˆˆˆˆˆˆÿÿxˆˆˆˆÿøˆˆˆˆÿÿxˆˆˆˆˆˆÿxˆˆˆˆˆˆÿxˆˆˆˆÿøˆˆˆˆÿÿxˆˆˆˆˆˆÿxˆˆˆˆˆˆÿøˆˆˆˆÿøˆˆˆ‡ÿÿˆˆˆˆˆˆˆÿxˆˆˆˆˆˆÿøˆˆˆˆÿøˆˆˆ‡ÿÿˆˆˆˆˆˆˆÿxˆˆˆˆˆˆÿ÷ˆˆˆˆÿøˆˆˆ‡ÿ÷ˆˆˆˆˆˆˆÿxˆˆˆˆˆˆÿ÷ˆˆˆˆÿøˆˆˆ‡ÿ÷ˆˆˆˆˆˆˆÿxˆˆˆˆˆˆÿ÷ˆˆˆˆÿøˆˆˆ‡ÿ÷ˆˆˆˆˆˆˆÿxˆˆˆˆˆˆÿ÷ˆˆˆˆÿøˆˆˆ‡ÿ÷ˆˆˆˆˆˆˆÿxˆˆˆˆˆˆÿ÷ˆˆˆˆÿøˆˆˆ‡ÿÿˆˆˆˆˆˆˆÿxˆˆˆˆˆˆÿ÷ˆˆˆˆÿøˆˆˆ‡ÿÿˆˆˆˆˆˆˆÿxˆˆˆˆˆˆÿ÷ˆˆˆˆÿøˆˆˆˆÿÿxˆˆˆˆˆˆÿxˆˆˆˆˆˆÿøˆˆˆˆÿøˆˆˆˆÿÿxˆˆˆˆˆˆÿxˆˆˆˆˆˆÿøˆˆˆˆÿøˆˆˆˆÿøˆˆˆˆˆˆÿxˆˆˆˆˆˆÿÿxˆˆˆˆÿøˆˆˆˆÿ÷ˆˆˆˆˆˆÿxˆˆˆˆˆ‡ÿÿxˆˆˆˆÿøˆˆˆˆÿÿˆˆˆˆˆˆÿxˆˆˆˆˆÿÿˆˆˆˆˆÿøˆˆˆˆ‡ÿÿxˆˆˆˆˆÿxˆˆˆˆˆÿ÷ˆˆˆˆˆÿøˆˆˆˆˆÿÿ÷ˆˆˆˆˆÿxˆˆˆˆ‡ÿÿøˆˆˆˆˆÿøˆˆˆˆˆÿÿˆˆˆˆˆÿxˆˆˆˆÿÿxˆˆˆˆˆÿøˆˆˆˆˆ‡ÿÿøˆˆˆˆÿxˆˆˆˆÿÿ÷ˆˆˆˆˆˆÿøˆˆˆˆˆˆÿÿÿxˆˆˆÿxˆˆˆÿÿøˆˆˆˆˆˆÿøˆˆˆˆˆˆÿÿ÷ˆˆˆÿxˆˆ‡ÿÿÿˆˆˆˆˆˆˆÿøˆˆˆˆˆˆ‡ÿÿÿ÷ˆˆÿxˆ‡ÿÿÿøˆˆˆˆˆˆˆÿøˆˆˆˆˆˆˆÿÿÿ÷xÿxwÿÿÿÿˆˆˆˆˆˆˆˆÿøˆˆˆˆˆˆˆˆÿÿÿ÷ÿwÿÿÿÿxˆˆˆˆˆˆˆˆÿøˆˆˆˆˆˆˆˆ‡ÿÿÿ÷ÿwÿÿÿ÷ˆˆˆˆˆˆˆˆˆÿxˆˆˆˆˆˆˆˆˆ‡ÿÿ÷ÿwÿÿ÷ˆˆˆˆˆˆˆˆˆˆÿxˆˆˆˆˆˆˆˆˆˆ‡wxÿxwwˆˆˆˆˆˆˆˆˆˆˆ‡wˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆpion-5.0.4+dfsg.orig/build/mac_switch_gcc.sh0000755000372000001440000000043712215647065020344 0ustar robertousers#!/bin/sh echo Switching to gcc-$1 ln -sf /usr/bin/gcc-$1 /usr/bin/cc ln -sf /usr/bin/gcc-$1 /usr/bin/CC ln -sf /usr/bin/gcc-$1 /usr/bin/gcc ln -sf /usr/bin/cpp-$1 /usr/bin/cpp ln -sf /usr/bin/c++-$1 /usr/bin/c++ ln -sf /usr/bin/g++-$1 /usr/bin/g++ ln -sf /usr/bin/gcov-$1 /usr/bin/gcov pion-5.0.4+dfsg.orig/build/third_party_libs_x64.props0000644000372000001440000001004712215647065022176 0ustar robertousers C:\boost\include\boost-1_51 C:\boost\lib\x64 C:\bzip2-1.0.6\lib64 C:\iconv-1.9.2\include C:\iconv-1.9.2\bin\x64 C:\icu4c-49_1_2\icu\include C:\icu4c-49_1_2\icu\lib64 C:\libxml2-2.9.0\include C:\libxml2-2.9.0\bin\x64 C:\log4cplus-1.0.4.1\include C:\log4cplus-1.0.4.1\bin\x64 C:\openssl-1.0.1c\inc64 C:\openssl-1.0.1c\bin\x64 C:\Python26\x64\include C:\Python26\x64\libs C:\yajl-2.0.5\include C:\yajl-2.0.5\lib\Release\x64 C:\zlib-1.2.7\include C:\zlib-1.2.7\bin\x64 $(BOOST_LIB);$(BZIP2_LIB);$(ICONV_LIB);$(ICU_LIB);$(LIBXML_LIB);$(LOG4CPLUS_LIB);$(OPENSSL_LIB);$(YAJL_LIB);$(ZLIB_LIB);$(PATH) C:\sqlite-3.7.14.1\ C:\sqlite-3.7.14.1\lib64\ <_ProjectFileVersion>10.0.40219.1 $(BOOST_INC);$(ICONV_INC);$(ICU_INC);$(LIBXML_INC);$(LOG4CPLUS_INC);$(OPENSSL_INC);$(PYTHON_INC);$(YAJL_INC);$(ZLIB_INC);%(AdditionalIncludeDirectories) $(BOOST_LIB);$(BZIP2_LIB);$(ICONV_LIB);$(ICU_LIB);$(LIBXML_LIB);$(LOG4CPLUS_LIB);$(OPENSSL_LIB);$(PYTHON_LIB);$(YAJL_LIB);$(ZLIB_LIB);%(AdditionalLibraryDirectories) $(BOOST_INC) $(BOOST_LIB) $(BZIP2_LIB) $(ICONV_INC) $(ICONV_LIB) $(ICU_INC) $(ICU_LIB) $(LIBXML_INC) $(LIBXML_LIB) $(LOG4CPLUS_INC) $(LOG4CPLUS_LIB) $(OPENSSL_INC) $(OPENSSL_LIB) $(PYTHON_INC) $(PYTHON_LIB) $(YAJL_INC) $(YAJL_LIB) $(ZLIB_INC) $(ZLIB_LIB) $(PION_PATH) $(SQLITE_INC) $(SQLITE_LIB) pion-5.0.4+dfsg.orig/build/winrun.bat0000644000372000001440000000062312215647065017057 0ustar robertousers@ECHO OFF SET PION_LIBS=C:\Atomic Labs\pion-libraries SETLOCAL EnableDelayedExpansion SET PATH=%PION_LIBS%\boost-1.37.0\lib;%PION_LIBS%\bzip2-1.0.5\bin;%PION_LIBS%\iconv-1.9.2\bin;%PION_LIBS%\libxml2-2.6.30\bin;%PION_LIBS%\log4cplus-1.0.3\bin;%PION_LIBS%\openssl-0.9.8l\bin;%PION_LIBS%\sqlapi-3.7.24\bin;%PION_LIBS%\yajl-1.0.5\bin;%PION_LIBS%\zlib-1.2.3\bin;%PION_LIBS%\WpdPack-4.0.2\Bin;%PATH% %* pion-5.0.4+dfsg.orig/build/Release_DLL_pion.props0000644000372000001440000000167312215647065021240 0ustar robertousers <_ProjectFileVersion>10.0.40219.1 false /GL %(AdditionalOptions) BOOST_ALL_DYN_LINK;NDEBUG;%(PreprocessorDefinitions) MultiThreadedDLL ProgramDatabase true UseLinkTimeCodeGeneration pion-5.0.4+dfsg.orig/build/ax_boost_base.m40000644000372000001440000001510712215647065020122 0ustar robertousers##### http://autoconf-archive.cryp.to/ax_boost_base.html # # SYNOPSIS # # AX_BOOST_BASE([MINIMUM-VERSION]) # # DESCRIPTION # # Test for the Boost C++ libraries of a particular version (or newer) # # If no path to the installed boost library is given the macro # searchs under /usr, /usr/local, and /opt, and evaluates the # $BOOST_ROOT environment variable. Further documentation is # available at . # # This macro calls: # # AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS) # # And sets: # # HAVE_BOOST # # LAST MODIFICATION # # 2007-03-15 # # COPYLEFT # # Copyright (c) 2007 Thomas Porschberg # # Copying and distribution of this file, with or without # modification, are permitted in any medium without royalty provided # the copyright notice and this notice are preserved. AC_DEFUN([AX_BOOST_BASE], [ AC_ARG_WITH([boost], AS_HELP_STRING([--with-boost@<:@=DIR@:>@], [use boost (default is yes) - it is possible to specify the root directory for boost (optional)]), [ if test "$withval" = "no"; then want_boost="no" elif test "$withval" = "yes"; then want_boost="yes" ac_boost_path="" else want_boost="yes" ac_boost_path="$withval" fi ], [want_boost="yes"]) if test "x$want_boost" = "xyes"; then boost_lib_version_req=ifelse([$1], ,1.20.0,$1) boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'` boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'` boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'` boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` if test "x$boost_lib_version_req_sub_minor" = "x" ; then boost_lib_version_req_sub_minor="0" fi WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req) succeeded=no dnl first we check the system location for boost libraries dnl this location ist chosen if boost libraries are installed with the --layout=system option dnl or if you install boost with RPM if test "$ac_boost_path" != ""; then BOOST_HOME_DIR="$ac_boost_path" BOOST_LDFLAGS="-L$ac_boost_path/lib" BOOST_CPPFLAGS="-I$ac_boost_path/include" else for ac_boost_path_tmp in /usr /usr/local /opt ; do if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then BOOST_HOME_DIR="$ac_boost_path_tmp" BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib" BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" break; fi done fi CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ]])],[ AC_MSG_RESULT(yes) succeeded=yes found_system=yes ],[ ]) AC_LANG_POP([C++]) dnl if we found no boost with system layout we search for boost libraries dnl built and installed without the --layout=system option or for a staged(not installed) version if test "x$succeeded" != "xyes"; then _version=0 if test "$ac_boost_path" != ""; then BOOST_HOME_DIR="$ac_boost_path" BOOST_LDFLAGS="-L$ac_boost_path/lib" if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp fi VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" done fi else for ac_boost_path in /usr /usr/local /opt ; do if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp best_path=$ac_boost_path fi done fi done VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" BOOST_LDFLAGS="-L$best_path/lib" BOOST_HOME_DIR="$best_path" if test "x$BOOST_ROOT" != "x"; then if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'` V_CHECK=`expr $stage_version_shorten \>\= $_version` if test "$V_CHECK" = "1" ; then AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT) BOOST_CPPFLAGS="-I$BOOST_ROOT" BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib" fi fi fi fi CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ]])],[ AC_MSG_RESULT(yes) succeeded=yes found_system=yes ],[ ]) AC_LANG_POP([C++]) fi if test "$succeeded" != "yes" ; then if test "$_version" = "0" ; then AC_MSG_ERROR([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation.]]) else AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).]) fi else AC_SUBST(BOOST_HOME_DIR) AC_SUBST(BOOST_CPPFLAGS) AC_SUBST(BOOST_LDFLAGS) AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available]) fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" fi ]) pion-5.0.4+dfsg.orig/build/Debug_static_pion.props0000644000372000001440000000143412215647065021555 0ustar robertousers <_ProjectFileVersion>10.0.40219.1 Disabled PION_STATIC_LINKING;_DEBUG;PION_FULL;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL EditAndContinue pion-5.0.4+dfsg.orig/build/third_party_static_libs_x64.props0000644000372000001440000001063212215647065023545 0ustar robertousers C:\boost\include\boost-1_51 C:\boost\lib\x64 C:\bzip2-1.0.6\include C:\bzip2-1.0.6\lib C:\iconv-1.9.2\include C:\iconv-1.9.2\lib\x64 C:\icu4c-49_1_2\icu\include C:\icu4c-49_1_2\icu\lib64 C:\libxml2-2.9.0\include C:\libxml2-2.9.0\lib\x64 C:\log4cplus-1.0.4.1\include C:\log4cplus-1.0.4.1\bin\x64 C:\apache\apache-log4cxx-0.10.0\src\main\include C:\apache\apache-log4cxx-0.10.0\bin C:\openssl-1.0.1c\inc64 C:\openssl-1.0.1c\lib\x64 C:\Python26\include C:\Python26\libs C:\yajl-2.0.5\include C:\yajl-2.0.5\bin C:\zlib-1.2.7\include C:\zlib-1.2.7\lib\x64 <_ProjectFileVersion>10.0.40219.1 $(BOOST_INC);$(BZIP2_INC);$(ICONV_INC);$(ICU_INC);$(LIBXML_INC);$(LOG4CPLUS_INC);$(LOG4CXX_INC);$(OPENSSL_INC);$(PYTHON_INC);$(YAJL_INC);$(ZLIB_INC);%(AdditionalIncludeDirectories) LOG4CPLUS_STATIC;LOG4CXX_STATIC;U_STATIC_IMPLEMENTATION;LIBXML_STATIC;%(PreprocessorDefinitions) $(BOOST_LIB);$(BZIP2_LIB);$(ICONV_LIB);$(ICU_LIB);$(LIBXML_LIB);$(LOG4CPLUS_LIB);$(LOG4CXX_LIB);$(OPENSSL_LIB);$(PYTHON_LIB);$(YAJL_LIB);$(ZLIB_LIB);%(AdditionalLibraryDirectories) $(BOOST_LIB);$(BZIP2_LIB);$(ICONV_LIB);$(ICU_LIB);$(LIBXML_LIB);$(LOG4CPLUS_LIB);$(OPENSSL_LIB);$(PYTHON_LIB);$(YAJL_LIB);$(ZLIB_LIB);%(AdditionalLibraryDirectories) $(BOOST_INC) $(BOOST_LIB) $(BZIP2_INC) $(BZIP2_LIB) $(ICONV_INC) $(ICONV_LIB) $(ICU_INC) $(ICU_LIB) $(LIBXML_INC) $(LIBXML_LIB) $(LOG4CPLUS_INC) $(LOG4CPLUS_LIB) $(LOG4CXX_INC) $(LOG4CXX_LIB) $(OPENSSL_INC) $(OPENSSL_LIB) $(PYTHON_INC) $(PYTHON_LIB) $(YAJL_INC) $(YAJL_LIB) $(ZLIB_INC) $(ZLIB_LIB) pion-5.0.4+dfsg.orig/build/pion_plugin.props0000644000372000001440000000234712215647065020462 0ustar robertousers $(PION_HOME)\platform\reactors\$(Configuration)_$(Platform) $(PION_HOME)\platform\databases\$(Configuration)_$(Platform) $(PION_HOME)\platform\protocols\$(Configuration)_$(Platform) $(PION_HOME)\platform\services\$(Configuration)_$(Platform) <_ProjectFileVersion>10.0.40219.1 $(Configuration)_$(PlatformName)\ $(REACTORS_DIR) $(DATABASES_DIR) $(PROTOCOLS_DIR) $(SERVICES_DIR) pion-5.0.4+dfsg.orig/build/make_rpm.pl0000644000372000001440000002062412215647065017200 0ustar robertousers#!/usr/bin/perl # -------------------------------------------------- # make_rpm.pl: script for building pion rpm packages # -------------------------------------------------- use Cwd; use File::Spec; use File::Path; use File::Copy; use File::Glob ':glob'; # include perl source with common subroutines require File::Spec->catfile( ("..", "pion-core", "common", "build"), "common.pl"); # ----------------------------------- # process argv & set global variables # ----------------------------------- # check command line parameters die("usage: make_rpm.pl [--nostrip]") if ($#ARGV < 1 || $#ARGV > 2 || ($#ARGV == 2 && $ARGV[2] ne "--nostrip")); # must be run as root die("This script must be run as root!") if $>!=0; # set some global variables $VERSION = $ARGV[0]; $RELEASE = $ARGV[1]; # check for --nostrip option if ($ARGV[2] eq "--nostrip") { $INSTALL_BIN = 'install'; $SPEC_OPTIONS = '%define __os_install_post %{nil}'; } else { $INSTALL_BIN = 'install -s'; $SPEC_OPTIONS = ''; } # check validity of RELEASE parameter die("Second parameter must be format (i.e. \"1.el5\")") if ($RELEASE !~ m/^\d+\..+$/); # find binary directory $BIN_DIR = "bin"; $RPMS_DIR = "/usr/src/redhat/RPMS"; $BUILD_DIR = "/usr/src/redhat/BUILD"; $DIR_GLOB = $BIN_DIR . "/pion-*" . $VERSION; @PACKAGES = bsd_glob( $DIR_GLOB ); die("error: unable to find binary directory") if ($#PACKAGES != 0); $EDITION = $PACKAGE_BASE = $PACKAGE_DIR = $PACKAGES[0]; if ( $PACKAGE_DIR =~ m/.*pion-[a-z]+-.*/ ) { $PACKAGE_BASE =~ s/.*(pion-[a-z]+)-.*/$1/; $EDITION =~ s/.*pion-([a-z]+)-.*/$1/; } else { $PACKAGE_BASE =~ s/.*(pion)-.*/$1/; $EDITION = ""; } $BIN_SRC_BASE = $PACKAGE_BASE . "-" . $VERSION . "-" . $RELEASE; $BIN_SRC_DIR = "$BUILD_DIR/$BIN_SRC_BASE"; $SPEC_FILE_NAME = "/tmp/$BIN_SRC_BASE.spec"; $CONFIG_DIR = File::Spec->catdir( ($PACKAGE_DIR, "config") ); $PLUGINS_DIR = File::Spec->catdir( ($PACKAGE_DIR, "plugins") ); $LIBS_DIR = File::Spec->catdir( ($PACKAGE_DIR, "libs") ); $UI_DIR = File::Spec->catdir( ($PACKAGE_DIR, "ui") ); # ------------ # main process # ------------ die("error: $PACKAGE_DIR is not a directory") if (! -d $PACKAGE_DIR); die("error: $CONFIG_DIR is not a directory") if (! -d $CONFIG_DIR); die("error: $PLUGINS_DIR is not a directory") if (! -d $PLUGINS_DIR); die("error: $LIBS_DIR is not a directory") if (! -d $LIBS_DIR); die("error: $UI_DIR is not a directory") if (! -d $UI_DIR); print "* Building RPM binary package for " . $TARBALL_BASE . "\n"; print "* Generating RPM spec file..\n"; # prepare some vars for spec file if ($EDITION eq "core") { $spec_license = "GPL"; $config_file_glob = "*.{xml,txt,pem}"; $install_perl_scripts = ""; $extra_config_files = ""; } else { $spec_license = "commercial"; $config_file_glob = "*.{xml,txt,pem}"; $install_perl_scripts = "install -m 660 $BIN_SRC_DIR/config/*.pl \$RPM_BUILD_ROOT/var/lib/pion"; $extra_config_files = "\%config /etc/pion/SearchEngines.xml\n\%config(noreplace) /etc/pion/ReplayQueries.xml\n\%config(noreplace) /etc/pion/robots.xml"; } $SPEC_POST="/sbin/ldconfig"; $SPEC_POSTUN="/sbin/ldconfig"; @spec_libs = bsd_glob($LIBS_DIR . "/*"); @purge_scripts = bsd_glob($CONFIG_DIR . "/*.pl"); # open and write the spec file open(SPEC_FILE, ">$SPEC_FILE_NAME") or die("Unable to open spec file: $SPEC_FILE_NAME"); print SPEC_FILE << "END_SPEC_FILE"; Summary: Software for real-time data capture, processing and integration Name: $PACKAGE_BASE Version: $VERSION Release: $RELEASE Vendor: Atomic Labs, Inc. License: $spec_license Group: System Environment/Daemons BuildRoot: /tmp/\%{name}-buildroot \%define debug_package \%{nil} \%description Pion captures millions of events per second from hard to manage sources such as log files, live network traffic and clickstream data. Data is filtered and sorted before being delivered to Pion's visual event processing interface. Events captured by Pion are processed in real-time through Pion's visual event processing interface. Data can easily be filtered, transformed, sessionized and aggregated before being delivered to the data warehouse for storage and future use. Data can be easily loaded into a variety of popular databases, or into an embedded SQLite database for quick access. Connect Pion's data up to your reporting packages and real-time dashboards for up-to-the-minute operational intelligence. \%prep \%build \%pre useradd -r -c "Pion" pion 2> /dev/null || true \%post $SPEC_POST \%postun #userdel pion 2> /dev/null || true $SPEC_POSTUN \%install rm -rf \$RPM_BUILD_ROOT mkdir -p \$RPM_BUILD_ROOT/etc/rc.d/init.d mkdir -p \$RPM_BUILD_ROOT/etc/pion mkdir -p \$RPM_BUILD_ROOT/etc/pion/vocabularies mkdir -p \$RPM_BUILD_ROOT/etc/pion/pymodules mkdir -p \$RPM_BUILD_ROOT/var/log/pion mkdir -p \$RPM_BUILD_ROOT/var/lib/pion mkdir -p \$RPM_BUILD_ROOT/usr/bin mkdir -p \$RPM_BUILD_ROOT/usr/lib mkdir -p \$RPM_BUILD_ROOT/usr/share/pion/ui mkdir -p \$RPM_BUILD_ROOT/usr/share/pion/plugins mkdir -p \$RPM_BUILD_ROOT/usr/share/doc/$PACKAGE_BASE-$VERSION install -m 660 $BIN_SRC_DIR/config/$config_file_glob \$RPM_BUILD_ROOT/etc/pion $install_perl_scripts install -m 660 $BIN_SRC_DIR/config/vocabularies/*.xml \$RPM_BUILD_ROOT/etc/pion/vocabularies install -m 660 $BIN_SRC_DIR/config/pymodules/*.py \$RPM_BUILD_ROOT/etc/pion/pymodules install -m 775 $BIN_SRC_DIR/pion.service \$RPM_BUILD_ROOT/etc/rc.d/init.d/pion $INSTALL_BIN $BIN_SRC_DIR/plugins/* \$RPM_BUILD_ROOT/usr/share/pion/plugins $INSTALL_BIN $BIN_SRC_DIR/libs/* \$RPM_BUILD_ROOT/usr/lib $INSTALL_BIN $BIN_SRC_DIR/pion \$RPM_BUILD_ROOT/usr/bin/pion $INSTALL_BIN $BIN_SRC_DIR/piondb \$RPM_BUILD_ROOT/usr/bin/piondb install $BIN_SRC_DIR/pget.py \$RPM_BUILD_ROOT/usr/bin/pget.py install $BIN_SRC_DIR/pmon.py \$RPM_BUILD_ROOT/usr/bin/pmon.py install $BIN_SRC_DIR/pupgrade.py \$RPM_BUILD_ROOT/usr/bin/pupgrade.py install $BIN_SRC_DIR/httpbl.py \$RPM_BUILD_ROOT/usr/bin/httpbl.py cp -r $BIN_SRC_DIR/ui/* \$RPM_BUILD_ROOT/usr/share/pion/ui cp $BIN_SRC_DIR/*.txt $BIN_SRC_DIR/*.pdf \$RPM_BUILD_DIR \%clean rm -rf \$RPM_BUILD_ROOT %define debug_package %{nil} $SPEC_OPTIONS \%files \%defattr(-,pion,pion) \%dir /etc/pion/ \%config /etc/pion/pymodules \%config /etc/pion/logconfig.txt \%config(noreplace) /etc/pion/codecs.xml \%config(noreplace) /etc/pion/databases.xml \%config(noreplace) /etc/pion/dbengines.xml \%config(noreplace) /etc/pion/platform.xml \%config(noreplace) /etc/pion/protocols.xml \%config(noreplace) /etc/pion/reactors.xml \%config(noreplace) /etc/pion/services.xml \%config(noreplace) /etc/pion/sslkey.pem \%config(noreplace) /etc/pion/users.xml \%config(noreplace) /etc/pion/vocabularies.xml \%config(noreplace) /etc/pion/vocabularies $extra_config_files \%dir /var/lib/pion \%dir /var/log/pion \%defattr(-,root,root) \%doc HISTORY.txt \%doc LICENSE.txt \%doc README.txt \%doc pion-overview.pdf \%doc pion-replay-guide.pdf \%doc pion-setup-wizard.pdf \%defattr(755,root,root) /usr/bin/pion /usr/bin/piondb /usr/bin/pget.py* /usr/bin/pmon.py* /usr/bin/pupgrade.py* /usr/bin/httpbl.py* \%defattr(-,root,root) /usr/share/pion/ui \%defattr(755,root,root) /etc/rc.d/init.d/pion /usr/share/pion/plugins END_SPEC_FILE # output library file names foreach $_ (@spec_libs) { s[$LIBS_DIR][/usr/lib]; print SPEC_FILE $_ . "\n"; } # output purge scripts (if any) foreach $_ (@purge_scripts) { s[$CONFIG_DIR][/var/lib/pion]; print SPEC_FILE $_ . "\n"; } # close the spec file close(SPEC_FILE); print "* Preparing binary source directory..\n"; `rm -rf $BIN_SRC_DIR`; copyDirWithoutDotFiles($PACKAGE_DIR, $BIN_SRC_DIR); if ($EDITION eq "core") { copyDirWithoutDotFiles("platform/build/rpm", $BIN_SRC_DIR); } else { # find the pion-core directory $_ = getcwd(); if (/pion-[^-]+-/) { s,/$,,; s,\\$,,; s,pion-[^-]+-(.*),pion-core-$1,; if (-d $_) { $PION_PLATFORM_DIR = $_; } else { $PION_PLATFORM_DIR = File::Spec->catdir( ("..", "pion-core") ); } } else { $PION_PLATFORM_DIR = File::Spec->catdir( ("..", "pion-core") ); } die("Could not find pion-core directory: $PION_CORE_DIR") if (! -d $PION_PLATFORM_DIR); copyDirWithoutDotFiles($PION_PLATFORM_DIR . "/platform/build/rpm", $BIN_SRC_DIR); copyDirWithoutDotFiles("enterprise/build/rpm", $BIN_SRC_DIR); } print "* Creating RPM files..\n"; `rpmbuild --quiet -bb $SPEC_FILE_NAME`; print "* Cleaning up..\n"; `mv $RPMS_DIR/*/* .`; `rm $SPEC_FILE_NAME`; `rm -rf $BIN_SRC_DIR`; print "* Done.\n"; pion-5.0.4+dfsg.orig/build/ax_compiler_vendor.m40000644000372000001440000000570412215647065021173 0ustar robertousers##### http://autoconf-archive.cryp.to/ax_compiler_vendor.html # # SYNOPSIS # # AX_COMPILER_VENDOR # # DESCRIPTION # # Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm, # sun, hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, # microsoft, watcom, etc. The vendor is returned in the cache # variable $ax_cv_c_compiler_vendor for C and # $ax_cv_cxx_compiler_vendor for C++. # # LAST MODIFICATION # # 2005-05-30 # # COPYLEFT # # Copyright (c) 2005 Steven G. Johnson # Copyright (c) 2005 Matteo Frigo # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # # As a special exception, the respective Autoconf Macro's copyright # owner gives unlimited permission to copy, distribute and modify the # configure scripts that are the output of Autoconf when processing # the Macro. You need not follow the terms of the GNU General Public # License when using or distributing such scripts, even though # portions of the text of the Macro appear in them. The GNU General # Public License (GPL) does govern all other use of the material that # constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the # Autoconf Macro released by the Autoconf Macro Archive. When you # make and distribute a modified version of the Autoconf Macro, you # may extend this special exception to the GPL to apply to your # modified version as well. AC_DEFUN([AX_COMPILER_VENDOR], [ AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown # note: don't check for gcc first since some other compilers define __GNUC__ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ #if !($vencpp) thisisanerror; #endif ])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break]) done ]) ]) pion-5.0.4+dfsg.orig/build/link_log4cxx.sh0000755000372000001440000001021612215647065020010 0ustar robertousers#!/bin/sh cd src/main/cpp g++ -shared -nostdlib /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtbeginS.o \ .libs/action.o .libs/appenderattachableimpl.o .libs/appenderskeleton.o .libs/aprinitializer.o .libs/asyncappender.o .libs/basicconfigurator.o \ .libs/bufferedwriter.o .libs/bytearrayinputstream.o .libs/bytearrayoutputstream.o .libs/bytebuffer.o .libs/cacheddateformat.o \ .libs/charsetdecoder.o .libs/charsetencoder.o .libs/class.o .libs/classnamepatternconverter.o .libs/classregistration.o .libs/condition.o \ .libs/configurator.o .libs/consoleappender.o .libs/cyclicbuffer.o .libs/dailyrollingfileappender.o .libs/datagrampacket.o .libs/datagramsocket.o \ .libs/date.o .libs/dateformat.o .libs/datelayout.o .libs/datepatternconverter.o .libs/defaultloggerfactory.o .libs/defaultconfigurator.o \ .libs/defaultrepositoryselector.o .libs/domconfigurator.o .libs/exception.o .libs/fallbackerrorhandler.o .libs/file.o .libs/fileappender.o \ .libs/filedatepatternconverter.o .libs/fileinputstream.o .libs/filelocationpatternconverter.o .libs/fileoutputstream.o .libs/filerenameaction.o \ .libs/filewatchdog.o .libs/filter.o .libs/filterbasedtriggeringpolicy.o .libs/fixedwindowrollingpolicy.o .libs/formattinginfo.o \ .libs/fulllocationpatternconverter.o .libs/gzcompressaction.o .libs/hierarchy.o .libs/htmllayout.o .libs/inetaddress.o .libs/inputstream.o \ .libs/inputstreamreader.o .libs/integer.o .libs/integerpatternconverter.o .libs/layout.o .libs/level.o .libs/levelmatchfilter.o \ .libs/levelrangefilter.o .libs/levelpatternconverter.o .libs/linelocationpatternconverter.o .libs/lineseparatorpatternconverter.o \ .libs/literalpatternconverter.o .libs/loggerpatternconverter.o .libs/loggingeventpatternconverter.o .libs/loader.o .libs/locale.o \ .libs/locationinfo.o .libs/logger.o .libs/loggingevent.o .libs/loglog.o .libs/logmanager.o .libs/logstream.o .libs/manualtriggeringpolicy.o \ .libs/messagebuffer.o .libs/messagepatternconverter.o .libs/methodlocationpatternconverter.o .libs/mdc.o .libs/mutex.o .libs/nameabbreviator.o \ .libs/namepatternconverter.o .libs/ndcpatternconverter.o .libs/ndc.o .libs/nteventlogappender.o .libs/objectimpl.o .libs/objectptr.o \ .libs/objectoutputstream.o .libs/obsoleterollingfileappender.o .libs/odbcappender.o .libs/onlyonceerrorhandler.o .libs/optionconverter.o \ .libs/outputdebugstringappender.o .libs/outputstream.o .libs/outputstreamwriter.o .libs/patternconverter.o .libs/patternlayout.o \ .libs/patternparser.o .libs/pool.o .libs/properties.o .libs/propertiespatternconverter.o .libs/propertyconfigurator.o \ .libs/propertyresourcebundle.o .libs/propertysetter.o .libs/reader.o .libs/relativetimedateformat.o .libs/relativetimepatternconverter.o \ .libs/resourcebundle.o .libs/rollingfileappender.o .libs/rollingpolicy.o .libs/rollingpolicybase.o .libs/rolloverdescription.o .libs/rootlogger.o \ .libs/serversocket.o .libs/simpledateformat.o .libs/simplelayout.o .libs/sizebasedtriggeringpolicy.o .libs/smtpappender.o .libs/socket.o \ .libs/socketappender.o .libs/socketappenderskeleton.o .libs/sockethubappender.o .libs/socketoutputstream.o .libs/strftimedateformat.o \ .libs/stringhelper.o .libs/stringmatchfilter.o .libs/stringtokenizer.o .libs/synchronized.o .libs/syslogappender.o .libs/syslogwriter.o \ .libs/system.o .libs/systemerrwriter.o .libs/systemoutwriter.o .libs/telnetappender.o .libs/threadcxx.o .libs/threadlocal.o \ .libs/threadspecificdata.o .libs/threadpatternconverter.o .libs/throwableinformationpatternconverter.o .libs/timezone.o \ .libs/timebasedrollingpolicy.o .libs/transform.o .libs/triggeringpolicy.o .libs/transcoder.o .libs/ttcclayout.o .libs/writer.o \ .libs/writerappender.o .libs/xmllayout.o .libs/xmlsocketappender.o .libs/zipcompressaction.o /usr/lib64/libaprutil-1.so -lldap -llber -ldb-4.3 \ -lexpat /usr/lib64/libapr-1.so -lpthread -ldl -L/usr/lib/gcc/x86_64-redhat-linux/4.1.2 -L/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64 \ -L/lib/../lib64 -L/usr/lib/../lib64 -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtendS.o \ /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crtn.o -Wl,-soname -Wl,liblog4cxx.so.10 -o .libs/liblog4cxx.so.10.0.0 pion-5.0.4+dfsg.orig/build/third_party_static_libs_win32.props0000644000372000001440000001127012215647065024065 0ustar robertousers C:\boost\include\boost-1_51 C:\boost\lib C:\bzip2-1.0.6\include C:\bzip2-1.0.6\lib C:\iconv-1.9.2\include C:\iconv-1.9.2\lib C:\icu4c-49_1_2\icu\include C:\icu4c-49_1_2\icu\lib C:\libxml2-2.9.0\include C:\libxml2-2.9.0\lib C:\log4cplus-1.0.4.1\include C:\log4cplus-1.0.4.1\bin C:\apache\apache-log4cxx-0.10.0\src\main\include C:\apache\apache-log4cxx-0.10.0\bin C:\openssl-1.0.1c\inc32 C:\openssl-1.0.1c\lib C:\Python26\include C:\Python26\libs C:\yajl-2.0.5\include C:\yajl-2.0.5\bin C:\zlib-1.2.7\include C:\zlib-1.2.7\lib C:\sqlite-3.7.14.1\ C:\sqlite-3.7.14.1\lib\ <_ProjectFileVersion>10.0.40219.1 $(BOOST_INC);$(BZIP2_INC);$(ICONV_INC);$(ICU_INC);$(LIBXML_INC);$(LOG4CPLUS_INC);$(LOG4CXX_INC);$(OPENSSL_INC);$(PYTHON_INC);$(YAJL_INC);$(ZLIB_INC);$(SQLITE_INC);%(AdditionalIncludeDirectories) LOG4CPLUS_STATIC;LOG4CXX_STATIC;U_STATIC_IMPLEMENTATION;LIBXML_STATIC;%(PreprocessorDefinitions) $(BOOST_LIB);$(BZIP2_LIB);$(ICONV_LIB);$(ICU_LIB);$(LIBXML_LIB);$(LOG4CPLUS_LIB);$(LOG4CXX_LIB);$(OPENSSL_LIB);$(PYTHON_LIB);$(YAJL_LIB);$(ZLIB_LIB);%(AdditionalLibraryDirectories) $(BOOST_LIB);$(BZIP2_LIB);$(ICONV_LIB);$(ICU_LIB);$(LIBXML_LIB);$(LOG4CPLUS_LIB);$(OPENSSL_LIB);$(PYTHON_LIB);$(YAJL_LIB);$(ZLIB_LIB);$(SQLITE_LIB);%(AdditionalLibraryDirectories) $(BOOST_INC) $(BOOST_LIB) $(BZIP2_INC) $(BZIP2_LIB) $(ICONV_INC) $(ICONV_LIB) $(ICU_INC) $(ICU_LIB) $(LIBXML_INC) $(LIBXML_LIB) $(LOG4CPLUS_INC) $(LOG4CPLUS_LIB) $(LOG4CXX_INC) $(LOG4CXX_LIB) $(OPENSSL_INC) $(OPENSSL_LIB) $(PYTHON_INC) $(PYTHON_LIB) $(YAJL_INC) $(YAJL_LIB) $(ZLIB_INC) $(ZLIB_LIB) $(SQLITE_INC) $(SQLITE_LIB) pion-5.0.4+dfsg.orig/build/ax_prog_doxygen.m40000644000372000001440000004277412215647065020520 0ustar robertousers# =========================================================================== # http://autoconf-archive.cryp.to/ax_prog_doxygen.html # =========================================================================== # # SYNOPSIS # # DX_INIT_DOXYGEN(PROJECT-NAME, DOXYFILE-PATH, [OUTPUT-DIR]) # DX_DOXYGEN_FEATURE(ON|OFF) # DX_DOT_FEATURE(ON|OFF) # DX_HTML_FEATURE(ON|OFF) # DX_CHM_FEATURE(ON|OFF) # DX_CHI_FEATURE(ON|OFF) # DX_MAN_FEATURE(ON|OFF) # DX_RTF_FEATURE(ON|OFF) # DX_XML_FEATURE(ON|OFF) # DX_PDF_FEATURE(ON|OFF) # DX_PS_FEATURE(ON|OFF) # # DESCRIPTION # # The DX_*_FEATURE macros control the default setting for the given # Doxygen feature. Supported features are 'DOXYGEN' itself, 'DOT' for # generating graphics, 'HTML' for plain HTML, 'CHM' for compressed HTML # help (for MS users), 'CHI' for generating a seperate .chi file by the # .chm file, and 'MAN', 'RTF', 'XML', 'PDF' and 'PS' for the appropriate # output formats. The environment variable DOXYGEN_PAPER_SIZE may be # specified to override the default 'a4wide' paper size. # # By default, HTML, PDF and PS documentation is generated as this seems to # be the most popular and portable combination. MAN pages created by # Doxygen are usually problematic, though by picking an appropriate subset # and doing some massaging they might be better than nothing. CHM and RTF # are specific for MS (note that you can't generate both HTML and CHM at # the same time). The XML is rather useless unless you apply specialized # post-processing to it. # # The macros mainly control the default state of the feature. The use can # override the default by specifying --enable or --disable. The macros # ensure that contradictory flags are not given (e.g., # --enable-doxygen-html and --enable-doxygen-chm, # --enable-doxygen-anything with --disable-doxygen, etc.) Finally, each # feature will be automatically disabled (with a warning) if the required # programs are missing. # # Once all the feature defaults have been specified, call DX_INIT_DOXYGEN # with the following parameters: a one-word name for the project for use # as a filename base etc., an optional configuration file name (the # default is 'Doxyfile', the same as Doxygen's default), and an optional # output directory name (the default is 'doxygen-doc'). # # Automake Support # # The following is a template aminclude.am file for use with Automake. # Make targets and variables values are controlled by the various # DX_COND_* conditionals set by autoconf. # # The provided targets are: # # doxygen-doc: Generate all doxygen documentation. # # doxygen-run: Run doxygen, which will generate some of the # documentation (HTML, CHM, CHI, MAN, RTF, XML) # but will not do the post processing required # for the rest of it (PS, PDF, and some MAN). # # doxygen-man: Rename some doxygen generated man pages. # # doxygen-ps: Generate doxygen PostScript documentation. # # doxygen-pdf: Generate doxygen PDF documentation. # # Note that by default these are not integrated into the automake targets. # If doxygen is used to generate man pages, you can achieve this # integration by setting man3_MANS to the list of man pages generated and # then adding the dependency: # # $(man3_MANS): doxygen-doc # # This will cause make to run doxygen and generate all the documentation. # # The following variable is intended for use in Makefile.am: # # DX_CLEANFILES = everything to clean. # # Then add this variable to MOSTLYCLEANFILES. # # ----- begin aminclude.am ------------------------------------- # # ## --------------------------------- ## # ## Format-independent Doxygen rules. ## # ## --------------------------------- ## # # if DX_COND_doc # # ## ------------------------------- ## # ## Rules specific for HTML output. ## # ## ------------------------------- ## # # if DX_COND_html # # DX_CLEAN_HTML = @DX_DOCDIR@/html # # endif DX_COND_html # # ## ------------------------------ ## # ## Rules specific for CHM output. ## # ## ------------------------------ ## # # if DX_COND_chm # # DX_CLEAN_CHM = @DX_DOCDIR@/chm # # if DX_COND_chi # # DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi # # endif DX_COND_chi # # endif DX_COND_chm # # ## ------------------------------ ## # ## Rules specific for MAN output. ## # ## ------------------------------ ## # # if DX_COND_man # # DX_CLEAN_MAN = @DX_DOCDIR@/man # # endif DX_COND_man # # ## ------------------------------ ## # ## Rules specific for RTF output. ## # ## ------------------------------ ## # # if DX_COND_rtf # # DX_CLEAN_RTF = @DX_DOCDIR@/rtf # # endif DX_COND_rtf # # ## ------------------------------ ## # ## Rules specific for XML output. ## # ## ------------------------------ ## # # if DX_COND_xml # # DX_CLEAN_XML = @DX_DOCDIR@/xml # # endif DX_COND_xml # # ## ----------------------------- ## # ## Rules specific for PS output. ## # ## ----------------------------- ## # # if DX_COND_ps # # DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps # # DX_PS_GOAL = doxygen-ps # # doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps # # @DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag # cd @DX_DOCDIR@/latex; \ # rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ # $(DX_LATEX) refman.tex; \ # $(MAKEINDEX_PATH) refman.idx; \ # $(DX_LATEX) refman.tex; \ # countdown=5; \ # while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ # refman.log > /dev/null 2>&1 \ # && test $$countdown -gt 0; do \ # $(DX_LATEX) refman.tex; \ # countdown=`expr $$countdown - 1`; \ # done; \ # $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi # # endif DX_COND_ps # # ## ------------------------------ ## # ## Rules specific for PDF output. ## # ## ------------------------------ ## # # if DX_COND_pdf # # DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf # # DX_PDF_GOAL = doxygen-pdf # # doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf # # @DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag # cd @DX_DOCDIR@/latex; \ # rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ # $(DX_PDFLATEX) refman.tex; \ # $(DX_MAKEINDEX) refman.idx; \ # $(DX_PDFLATEX) refman.tex; \ # countdown=5; \ # while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ # refman.log > /dev/null 2>&1 \ # && test $$countdown -gt 0; do \ # $(DX_PDFLATEX) refman.tex; \ # countdown=`expr $$countdown - 1`; \ # done; \ # mv refman.pdf ../@PACKAGE@.pdf # # endif DX_COND_pdf # # ## ------------------------------------------------- ## # ## Rules specific for LaTeX (shared for PS and PDF). ## # ## ------------------------------------------------- ## # # if DX_COND_latex # # DX_CLEAN_LATEX = @DX_DOCDIR@/latex # # endif DX_COND_latex # # .PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL) # # .INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) # # doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag # # doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) # # @DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS) # rm -rf @DX_DOCDIR@ # $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG) # # DX_CLEANFILES = \ # @DX_DOCDIR@/@PACKAGE@.tag \ # -r \ # $(DX_CLEAN_HTML) \ # $(DX_CLEAN_CHM) \ # $(DX_CLEAN_CHI) \ # $(DX_CLEAN_MAN) \ # $(DX_CLEAN_RTF) \ # $(DX_CLEAN_XML) \ # $(DX_CLEAN_PS) \ # $(DX_CLEAN_PDF) \ # $(DX_CLEAN_LATEX) # # endif DX_COND_doc # # ----- end aminclude.am --------------------------------------- # # LAST MODIFICATION # # 2008-04-12 # # COPYLEFT # # Copyright (c) 2008 Oren Ben-Kiki # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. ## ----------## ## Defaults. ## ## ----------## DX_ENV="" AC_DEFUN([DX_FEATURE_doc], OFF) AC_DEFUN([DX_FEATURE_dot], OFF) AC_DEFUN([DX_FEATURE_man], OFF) AC_DEFUN([DX_FEATURE_html], ON) AC_DEFUN([DX_FEATURE_chm], OFF) AC_DEFUN([DX_FEATURE_chi], OFF) AC_DEFUN([DX_FEATURE_rtf], OFF) AC_DEFUN([DX_FEATURE_xml], OFF) AC_DEFUN([DX_FEATURE_pdf], OFF) AC_DEFUN([DX_FEATURE_ps], OFF) ## --------------- ## ## Private macros. ## ## --------------- ## # DX_ENV_APPEND(VARIABLE, VALUE) # ------------------------------ # Append VARIABLE="VALUE" to DX_ENV for invoking doxygen. AC_DEFUN([DX_ENV_APPEND], [AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])]) # DX_DIRNAME_EXPR # --------------- # Expand into a shell expression prints the directory part of a path. AC_DEFUN([DX_DIRNAME_EXPR], [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']]) # DX_IF_FEATURE(FEATURE, IF-ON, IF-OFF) # ------------------------------------- # Expands according to the M4 (static) status of the feature. AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])]) # DX_REQUIRE_PROG(VARIABLE, PROGRAM) # ---------------------------------- # Require the specified program to be found for the DX_CURRENT_FEATURE to work. AC_DEFUN([DX_REQUIRE_PROG], [ AC_PATH_TOOL([$1], [$2]) if test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION]) # Fixing for autoconf 2.59 and above -- TaO090102 AC_SUBST([DX_FLAG_]DX_CURRENT_FEATURE, 0) # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi ]) # DX_TEST_FEATURE(FEATURE) # ------------------------ # Expand to a shell expression testing whether the feature is active. AC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1]) # DX_CHECK_DEPEND(REQUIRED_FEATURE, REQUIRED_STATE) # ------------------------------------------------- # Verify that a required features has the right state before trying to turn on # the DX_CURRENT_FEATURE. AC_DEFUN([DX_CHECK_DEPEND], [ test "$DX_FLAG_$1" = "$2" \ || AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1, requires, contradicts) doxygen-DX_CURRENT_FEATURE]) ]) # DX_CLEAR_DEPEND(FEATURE, REQUIRED_FEATURE, REQUIRED_STATE) # ---------------------------------------------------------- # Turn off the DX_CURRENT_FEATURE if the required feature is off. AC_DEFUN([DX_CLEAR_DEPEND], [ # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_$1" = "$2" || AC_SUBST([DX_FLAG_]DX_CURRENT_FEATURE, 0) #test "$DX_FLAG_$1" = "$2" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) ]) # DX_FEATURE_ARG(FEATURE, DESCRIPTION, # CHECK_DEPEND, CLEAR_DEPEND, # REQUIRE, DO-IF-ON, DO-IF-OFF) # -------------------------------------------- # Parse the command-line option controlling a feature. CHECK_DEPEND is called # if the user explicitly turns the feature on (and invokes DX_CHECK_DEPEND), # otherwise CLEAR_DEPEND is called to turn off the default state if a required # feature is disabled (using DX_CLEAR_DEPEND). REQUIRE performs additional # requirement tests (DX_REQUIRE_PROG). Finally, an automake flag is set and # DO-IF-ON or DO-IF-OFF are called according to the final state of the feature. AC_DEFUN([DX_ARG_ABLE], [ AC_DEFUN([DX_CURRENT_FEATURE], [$1]) AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2]) AC_ARG_ENABLE(doxygen-$1, [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1], [--enable-doxygen-$1]), DX_IF_FEATURE([$1], [don't $2], [$2]))], [ case "$enableval" in #( y|Y|yes|Yes|YES) AC_SUBST([DX_FLAG_$1], 1) $3 ;; #( n|N|no|No|NO) AC_SUBST([DX_FLAG_$1], 0) ;; #( *) AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1]) ;; esac ], [ AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)]) $4 ]) if DX_TEST_FEATURE([$1]); then $5 : fi if DX_TEST_FEATURE([$1]); then AM_CONDITIONAL(DX_COND_$1, :) $6 : else AM_CONDITIONAL(DX_COND_$1, false) $7 : fi ]) ## -------------- ## ## Public macros. ## ## -------------- ## # DX_XXX_FEATURE(DEFAULT_STATE) # ----------------------------- AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc], [$1])]) AC_DEFUN([DX_MAN_FEATURE], [AC_DEFUN([DX_FEATURE_man], [$1])]) AC_DEFUN([DX_HTML_FEATURE], [AC_DEFUN([DX_FEATURE_html], [$1])]) AC_DEFUN([DX_CHM_FEATURE], [AC_DEFUN([DX_FEATURE_chm], [$1])]) AC_DEFUN([DX_CHI_FEATURE], [AC_DEFUN([DX_FEATURE_chi], [$1])]) AC_DEFUN([DX_RTF_FEATURE], [AC_DEFUN([DX_FEATURE_rtf], [$1])]) AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) AC_DEFUN([DX_PDF_FEATURE], [AC_DEFUN([DX_FEATURE_pdf], [$1])]) AC_DEFUN([DX_PS_FEATURE], [AC_DEFUN([DX_FEATURE_ps], [$1])]) # DX_INIT_DOXYGEN(PROJECT, [CONFIG-FILE], [OUTPUT-DOC-DIR]) # --------------------------------------------------------- # PROJECT also serves as the base name for the documentation files. # The default CONFIG-FILE is "Doxyfile" and OUTPUT-DOC-DIR is "doxygen-doc". AC_DEFUN([DX_INIT_DOXYGEN], [ # Files: AC_SUBST([DX_PROJECT], [$1]) AC_SUBST([DX_CONFIG], [ifelse([$2], [], Doxyfile, [$2])]) AC_SUBST([DX_DOCDIR], [ifelse([$3], [], doxygen-doc, [$3])]) # Environment variables used inside doxygen.cfg: DX_ENV_APPEND(SRCDIR, $srcdir) DX_ENV_APPEND(PROJECT, $DX_PROJECT) DX_ENV_APPEND(DOCDIR, $DX_DOCDIR) DX_ENV_APPEND(VERSION, $PACKAGE_VERSION) # Doxygen itself: DX_ARG_ABLE(doc, [generate any doxygen documentation], [], [], [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen) DX_REQUIRE_PROG([DX_PERL], perl)], [DX_ENV_APPEND(PERL_PATH, $DX_PERL)]) # Dot for graphics: DX_ARG_ABLE(dot, [generate graphics for doxygen documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_DOT], dot)], [DX_ENV_APPEND(HAVE_DOT, YES) DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])], [DX_ENV_APPEND(HAVE_DOT, NO)]) # Man pages generation: DX_ARG_ABLE(man, [generate doxygen manual pages], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [], [DX_ENV_APPEND(GENERATE_MAN, YES)], [DX_ENV_APPEND(GENERATE_MAN, NO)]) # RTF file generation: DX_ARG_ABLE(rtf, [generate doxygen RTF documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [], [DX_ENV_APPEND(GENERATE_RTF, YES)], [DX_ENV_APPEND(GENERATE_RTF, NO)]) # XML file generation: DX_ARG_ABLE(xml, [generate doxygen XML documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [], [DX_ENV_APPEND(GENERATE_XML, YES)], [DX_ENV_APPEND(GENERATE_XML, NO)]) # (Compressed) HTML help generation: DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_HHC], hhc)], [DX_ENV_APPEND(HHC_PATH, $DX_HHC) DX_ENV_APPEND(GENERATE_HTML, YES) DX_ENV_APPEND(GENERATE_HTMLHELP, YES)], [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)]) # Seperate CHI file generation. DX_ARG_ABLE(chi, [generate doxygen seperate compressed HTML help index file], [DX_CHECK_DEPEND(chm, 1)], [DX_CLEAR_DEPEND(chm, 1)], [], [DX_ENV_APPEND(GENERATE_CHI, YES)], [DX_ENV_APPEND(GENERATE_CHI, NO)]) # Plain HTML pages generation: DX_ARG_ABLE(html, [generate doxygen plain HTML documentation], [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)], [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)], [], [DX_ENV_APPEND(GENERATE_HTML, YES)], [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)]) # PostScript file generation: DX_ARG_ABLE(ps, [generate doxygen PostScript documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_LATEX], latex) DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) DX_REQUIRE_PROG([DX_DVIPS], dvips) DX_REQUIRE_PROG([DX_EGREP], egrep)]) # PDF file generation: DX_ARG_ABLE(pdf, [generate doxygen PDF documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex) DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) DX_REQUIRE_PROG([DX_EGREP], egrep)]) # LaTeX generation for PS and/or PDF: if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then AM_CONDITIONAL(DX_COND_latex, :) DX_ENV_APPEND(GENERATE_LATEX, YES) else AM_CONDITIONAL(DX_COND_latex, false) DX_ENV_APPEND(GENERATE_LATEX, NO) fi # Paper size for PS and/or PDF: AC_ARG_VAR(DOXYGEN_PAPER_SIZE, [a4wide (default), a4, letter, legal or executive]) case "$DOXYGEN_PAPER_SIZE" in #( "") AC_SUBST(DOXYGEN_PAPER_SIZE, "") ;; #( a4wide|a4|letter|legal|executive) DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE) ;; #( *) AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE']) ;; esac #For debugging: #echo DX_FLAG_doc=$DX_FLAG_doc #echo DX_FLAG_dot=$DX_FLAG_dot #echo DX_FLAG_man=$DX_FLAG_man #echo DX_FLAG_html=$DX_FLAG_html #echo DX_FLAG_chm=$DX_FLAG_chm #echo DX_FLAG_chi=$DX_FLAG_chi #echo DX_FLAG_rtf=$DX_FLAG_rtf #echo DX_FLAG_xml=$DX_FLAG_xml #echo DX_FLAG_pdf=$DX_FLAG_pdf #echo DX_FLAG_ps=$DX_FLAG_ps #echo DX_ENV=$DX_ENV ]) pion-5.0.4+dfsg.orig/build/depth_3_pion-common.props0000644000372000001440000000076012215647065021775 0ustar robertousers ../.. <_ProjectFileVersion>10.0.40219.1 $(PION_COMMON_HOME) pion-5.0.4+dfsg.orig/build/pion.props0000644000372000001440000000226112215647065017077 0ustar robertousers <_ProjectFileVersion>10.0.40219.1 $(SolutionDir)bin\$(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ $(PION_COMMON_HOME)\include;%(AdditionalIncludeDirectories) WIN32;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;_WIN32_WINNT=0x0500;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions) true Level3 4267;4311;4312;4250;4251;4275;4503;%(DisableSpecificWarnings) Windows MachineX86 pion-5.0.4+dfsg.orig/build/pion-net.props0000644000372000001440000000072312215647065017664 0ustar robertousers <_ProjectFileVersion>10.0.40219.1 $(PION_NET_HOME)\include;%(AdditionalIncludeDirectories) pion-5.0.4+dfsg.orig/build/common.inc0000644000372000001440000000025412215647065017030 0ustar robertousers# --------------------------------------- # pion-common automake configuration file # --------------------------------------- docs: doxygen-doc clean-docs: doxygen-clean pion-5.0.4+dfsg.orig/build/Debug_DLL_pion.props0000644000372000001440000000162412215647065020702 0ustar robertousers <_ProjectFileVersion>10.0.40219.1 true Disabled BOOST_ALL_DYN_LINK;_DEBUG;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL EditAndContinue true pion-5.0.4+dfsg.orig/build/make_config.pl0000644000372000001440000000372312215647065017650 0ustar robertousers#!/usr/bin/perl # -------------------------------------------------- # pion-platform configuration directory build script # -------------------------------------------------- use File::Spec; use File::Path; use File::Copy; use File::Glob ':glob'; # include perl source with common subroutines require File::Spec->catfile( ("common", "build"), "common.pl"); # ----------------------------------- # process argv & set global variables # ----------------------------------- # check command line parameters die("usage: make_config.pl [=]+") if ($#ARGV < 1); # set some global variables $SRCDIR = $ARGV[0]; $DESTDIR = $ARGV[1]; # ------------ # main process # ------------ # check source directory die "Source directory does not exist: $SRCDIR" if (! -d $SRCDIR); # build template parameter hash (start with default values) my %templates = ("PION_PLUGINS_DIRECTORY" => "../../platform/codecs/.libs/../../platform/databases/.libs/../../platform/reactors/.libs../../platform/protocols/.libs/../../platform/services/.libs/../../net/services/.libs/", "PION_DATA_DIRECTORY" => ".", "PION_UI_DIRECTORY" => "../../platform/ui", "PION_LOG_CONFIG" => "logconfig.txt", "PION_CONFIG_CHANGE_LOG" => "config.log"); # update template parameter hash using values provided my $do_merge = 0; for ($n = 2; $n <= $#ARGV; ++$n) { die "Bad template argument: \"$ARGV[$n]\"" if (! ($ARGV[$n] =~ m/([^=]+)=(.*)/) ); if ($1 eq "MERGE") { $do_merge = 1 } else { $templates{$1} = $2; } } # clear out old files and directories at destination if (not $do_merge) { @oldfiles = bsd_glob($DESTDIR . "/*"); foreach (@oldfiles) { rmtree($_); } } # copy files using templates copyDirWithoutDotFiles($SRCDIR, $DESTDIR, %templates); print "* Done building configuration directory ($SRCDIR => $DESTDIR)\n"; pion-5.0.4+dfsg.orig/build/doxygen.inc0000644000372000001440000000670712215647065017226 0ustar robertousers## --------------------------------- ## ## Format-independent Doxygen rules. ## ## --------------------------------- ## if DX_COND_doc ## ------------------------------- ## ## Rules specific for HTML output. ## ## ------------------------------- ## if DX_COND_html DX_CLEAN_HTML = @DX_DOCDIR@/html endif DX_COND_html ## ------------------------------ ## ## Rules specific for CHM output. ## ## ------------------------------ ## if DX_COND_chm DX_CLEAN_CHM = @DX_DOCDIR@/chm if DX_COND_chi DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi endif DX_COND_chi endif DX_COND_chm ## ------------------------------ ## ## Rules specific for MAN output. ## ## ------------------------------ ## if DX_COND_man DX_CLEAN_MAN = @DX_DOCDIR@/man endif DX_COND_man ## ------------------------------ ## ## Rules specific for RTF output. ## ## ------------------------------ ## if DX_COND_rtf DX_CLEAN_RTF = @DX_DOCDIR@/rtf endif DX_COND_rtf ## ------------------------------ ## ## Rules specific for XML output. ## ## ------------------------------ ## if DX_COND_xml DX_CLEAN_XML = @DX_DOCDIR@/xml endif DX_COND_xml ## ----------------------------- ## ## Rules specific for PS output. ## ## ----------------------------- ## if DX_COND_ps DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps DX_PS_GOAL = doxygen-ps doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps @DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag cd @DX_DOCDIR@/latex; \ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ $(DX_LATEX) refman.tex; \ $(MAKEINDEX_PATH) refman.idx; \ $(DX_LATEX) refman.tex; \ countdown=5; \ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ refman.log > /dev/null 2>&1 \ && test $$countdown -gt 0; do \ $(DX_LATEX) refman.tex; \ countdown=`expr $$countdown - 1`; \ done; \ $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi endif DX_COND_ps ## ------------------------------ ## ## Rules specific for PDF output. ## ## ------------------------------ ## if DX_COND_pdf DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf DX_PDF_GOAL = doxygen-pdf doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf @DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag cd @DX_DOCDIR@/latex; \ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ $(DX_PDFLATEX) refman.tex; \ $(DX_MAKEINDEX) refman.idx; \ $(DX_PDFLATEX) refman.tex; \ countdown=5; \ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ refman.log > /dev/null 2>&1 \ && test $$countdown -gt 0; do \ $(DX_PDFLATEX) refman.tex; \ countdown=`expr $$countdown - 1`; \ done; \ mv refman.pdf ../@PACKAGE@.pdf endif DX_COND_pdf ## ------------------------------------------------- ## ## Rules specific for LaTeX (shared for PS and PDF). ## ## ------------------------------------------------- ## if DX_COND_latex DX_CLEAN_LATEX = @DX_DOCDIR@/latex endif DX_COND_latex ## --------------- ## ## Global settings ## ## --------------- ## DX_CLEANFILES = \ @DX_DOCDIR@/@PACKAGE@.tag \ $(DX_CLEAN_HTML) \ $(DX_CLEAN_CHM) \ $(DX_CLEAN_CHI) \ $(DX_CLEAN_MAN) \ $(DX_CLEAN_RTF) \ $(DX_CLEAN_XML) \ $(DX_CLEAN_PS) \ $(DX_CLEAN_PDF) \ $(DX_CLEAN_LATEX) .PHONY: doxygen-run doxygen-doc doxygen-clean $(DX_PS_GOAL) $(DX_PDF_GOAL) .INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) @DX_DOCDIR@/@PACKAGE@.tag: $(srcdir)/$(DX_CONFIG) rm -rf $(DX_CLEANFILES) $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG) doxygen-clean: rm -rf $(DX_CLEANFILES) endif DX_COND_doc pion-5.0.4+dfsg.orig/build/third_party_libs_win32.props0000644000372000001440000001212312215647065022514 0ustar robertousers C:\boost\include\boost-1_51 C:\boost\lib C:\bzip2-1.0.6\include C:\bzip2-1.0.6\lib C:\iconv-1.9.2\include C:\iconv-1.9.2\lib C:\iconv-1.9.2\bin C:\icu4c-49_1_2\icu\include C:\icu4c-49_1_2\icu\lib C:\icu4c-49_1_2\icu\bin C:\libxml2-2.9.0\include C:\libxml2-2.9.0\lib C:\libxml2-2.9.0\bin C:\log4cplus-1.0.4.1\include C:\log4cplus-1.0.4.1\bin C:\apache\apache-log4cxx-0.10.0\src\main\include C:\apache\apache-log4cxx-0.10.0\bin C:\openssl-1.0.1c\inc32 C:\openssl-1.0.1c\bin C:\Python26\include C:\Python26\libs C:\yajl-2.0.5\include C:\yajl-2.0.5\lib\Release C:\zlib-1.2.7\include C:\zlib-1.2.7\lib C:\zlib-1.2.7\bin $(BOOST_LIB);$(BZIP2_BIN);$(ICONV_BIN);$(ICU_BIN);$(LIBXML_BIN);$(LOG4CPLUS_LIB);$(LOG4CXX_LIB);$(OPENSSL_LIB);$(PYTHON_LIB);$(YAJL_LIB);$(ZLIB_BIN);$(PATH) C:\sqlite-3.7.14.1\ C:\sqlite-3.7.14.1\lib\ <_ProjectFileVersion>10.0.40219.1 $(BOOST_INC);$(BZIP2_INC);$(ICONV_INC);$(ICU_INC);$(LIBXML_INC);$(LOG4CPLUS_INC);$(LOG4CXX_INC);$(OPENSSL_INC);$(PYTHON_INC);$(YAJL_INC);$(ZLIB_INC);$(SQLITE_INC);%(AdditionalIncludeDirectories) $(BOOST_LIB);$(BZIP2_LIB);$(ICONV_LIB);$(ICU_LIB);$(LIBXML_LIB);$(LOG4CPLUS_LIB);$(LOG4CXX_LIB);$(OPENSSL_LIB);$(PYTHON_LIB);$(YAJL_LIB);$(ZLIB_LIB);$(SQLITE_LIB);%(AdditionalLibraryDirectories) $(BOOST_INC) $(BOOST_LIB) $(BZIP2_INC) $(BZIP2_LIB) $(ICONV_INC) $(ICONV_LIB) $(ICONV_BIN) $(ICU_INC) $(ICU_LIB) $(ICU_BIN) $(LIBXML_INC) $(LIBXML_LIB) $(LIBXML_BIN) $(LOG4CPLUS_INC) $(LOG4CPLUS_LIB) $(LOG4CXX_INC) $(LOG4CXX_LIB) $(OPENSSL_INC) $(OPENSSL_LIB) $(PYTHON_INC) $(PYTHON_LIB) $(YAJL_INC) $(YAJL_LIB) $(ZLIB_INC) $(ZLIB_LIB) $(ZLIB_BIN) $(PION_PATH) $(SQLITE_INC) $(SQLITE_LIB) pion-5.0.4+dfsg.orig/build/pion-config.inc0000644000372000001440000002565012215647065017757 0ustar robertousers# -------------------------------- # Pion autoconf configuration file # -------------------------------- # Set Pion version information PION_LIBRARY_VERSION=`echo $PACKAGE_VERSION | sed 's;^\([[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\).*$;\1;'` # AC_MSG_NOTICE("Pion Library Version: $PION_LIBRARY_VERSION") AC_SUBST(PION_LIBRARY_VERSION) AC_DEFINE_UNQUOTED([PION_VERSION],["$PACKAGE_VERSION"],[Define to the version number of Pion.]) # Note: AM_CONFIG_HEADER is deprecated AC_CONFIG_HEADERS(include/pion/config.hpp) # Check for --with-cygwin AC_MSG_CHECKING([for cygwin directory]) AC_ARG_WITH([cygwin], AC_HELP_STRING([--with-cygwin@<:@=DIR@:>@],[directory where cygwin is installed (Windows only)]), [with_cygwin=$withval], [with_cygwin=maybe]) if test "$with_cygwin" = "maybe"; then case "$build_os" in *cygwin*) PION_CYGWIN_DIRECTORY="c:/cygwin" AC_MSG_RESULT($PION_CYGWIN_DIRECTORY) ;; *) AC_MSG_RESULT(no) ;; esac elif test "$with_cygwin" != "no"; then PION_CYGWIN_DIRECTOR="$with_cygwin" AC_MSG_RESULT($PION_CYGWIN_DIRECTORY) else AC_MSG_RESULT(no) fi AC_DEFINE_UNQUOTED([PION_CYGWIN_DIRECTORY],["$PION_CYGWIN_DIRECTORY"],[Define to the directory where cygwin is installed.]) AC_SUBST(PION_CYGWIN_DIRECTORY) # Check for malloc_trim support AC_MSG_CHECKING(for malloc_trim() support) AC_TRY_LINK([#include ], [ malloc_trim(0); ], [ AC_MSG_RESULT(yes) AC_DEFINE([PION_HAVE_MALLOC_TRIM],[1],[Define to 1 if C library supports malloc_trim()]) ], [ AC_MSG_RESULT(no) ]) # Check for unordered container support AC_CHECK_HEADERS([tr1/unordered_map],[unordered_map_type=tr1_unordered_map],[]) if test "x$unordered_map_type" = "xtr1_unordered_map"; then # test to make sure it's good enough AC_MSG_CHECKING(if unordered_map is ok) AC_TRY_LINK([#include ],[ #if defined(__APPLE__) #error completely broken on OSX, even for gcc 4.2 #elif !defined(__GNUC__) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) return(0); #else #error only use gcc versions 4.1 or greater #endif ], [ AC_MSG_RESULT(ok) ], [ AC_MSG_RESULT(failed) unordered_map_type="" ]) fi if test "x$unordered_map_type" = "x"; then AC_CHECK_HEADERS([ext/hash_map],[unordered_map_type=ext_hash_map],[]) fi if test "x$unordered_map_type" = "x"; then AC_CHECK_HEADERS([hash_map],[unordered_map_type=hash_map],[]) fi if test "$unordered_map_type" = "tr1_unordered_map"; then AC_DEFINE([PION_HAVE_UNORDERED_MAP],[1],[Define to 1 if you have the header file.]) elif test "$unordered_map_type" = "ext_hash_map"; then AC_DEFINE([PION_HAVE_EXT_HASH_MAP],[1],[Define to 1 if you have the header file.]) elif test "$unordered_map_type" = "hash_map"; then AC_DEFINE([PION_HAVE_HASH_MAP],[1],[Define to 1 if you have the header file.]) else AC_MSG_ERROR([C++ compiler does not seem to support unordered containers]) fi # Check for zlib AC_MSG_CHECKING([for gzip compression support (zlib)]) AC_ARG_WITH([zlib], AC_HELP_STRING([--with-zlib@<:@=DIR@:>@],[location of zlib library (for gzip compression); use --without-zlib to disable]), [ zlib_location=$withval ], [ zlib_location=yes ]) # Check if zlib location is specified if test "x_$zlib_location" != "x_no"; then AC_MSG_RESULT(yes) if test "x_$zlib_location" != "x_yes"; then # alternative location provided CPPFLAGS="$CPPFLAGS -I$zlib_location/include" LDFLAGS="$LDFLAGS -L$zlib_location/lib" fi # Check for zlib headers AC_CHECK_HEADERS([zlib.h],,AC_MSG_ERROR([Unable to find the zlib headers])) # Check for zlib library LIBS="$LIBS_SAVED -lz" AC_MSG_CHECKING(linking with zlib) AC_TRY_LINK([#include ],[ zlibVersion(); return(0); ], [ AC_MSG_RESULT(ok) ], [ AC_MSG_RESULT(failed) AC_MSG_ERROR(Unable to link with the zlib library) ]) LIBS="$LIBS_SAVED" PION_ZLIB="-lz" # Found the zlib library AC_DEFINE([PION_HAVE_ZLIB],[1],[Define to 1 if you have the `zlib' library.]) else # zlib is disabled AC_MSG_RESULT(no) fi AC_SUBST(PION_ZLIB) # Check for bzlib AC_MSG_CHECKING([for bzip2 compression support (bzlib)]) AC_ARG_WITH([bzlib], AC_HELP_STRING([--with-bzlib@<:@=DIR@:>@],[location of bzlib library (for bzip2 compression); use --without-bzlib to disable]), [ bzlib_location=$withval ], [ bzlib_location=yes ]) # Check if bzlib location is specified if test "x_$bzlib_location" != "x_no"; then AC_MSG_RESULT(yes) if test "x_$bzlib_location" != "x_yes"; then # alternative location provided CPPFLAGS="$CPPFLAGS -I$bzlib_location/include" LDFLAGS="$LDFLAGS -L$bzlib_location/lib" fi # Check for bzlib headers AC_CHECK_HEADERS([bzlib.h],,AC_MSG_ERROR([Unable to find the bzlib headers])) # Check for bzlib library LIBS="$LIBS_SAVED -lbz2" AC_MSG_CHECKING(linking with bzlib) AC_TRY_LINK([#include ],[ BZ2_bzlibVersion(); return(0); ], [ AC_MSG_RESULT(ok) ], [ AC_MSG_RESULT(failed) AC_MSG_ERROR(Unable to link with the bzlib library; use --without-bzlib to disable) ]) LIBS="$LIBS_SAVED" PION_BZLIB="-lbz2" # Found the bzlib library AC_DEFINE([PION_HAVE_BZLIB],[1],[Define to 1 if you have the `bzlib' library.]) else # bzlib is disabled AC_MSG_RESULT(no) fi AC_SUBST(PION_BZLIB) # Check for OpenSSL AC_MSG_CHECKING([for SSL support (openssl)]) AC_ARG_WITH([openssl], AC_HELP_STRING([--with-openssl@<:@=DIR@:>@],[location of OpenSSL library (enables SSL support); use --without-openssl to disable]), [ openssl_location=$withval ], [ openssl_location=yes ]) # Check if openssl location is specified if test "x_$openssl_location" != "x_no"; then AC_MSG_RESULT(yes) if test "x_$openssl_location" != "x_yes"; then # alternative location provided CPPFLAGS="$CPPFLAGS -I$openssl_location/include" LDFLAGS="$LDFLAGS -L$openssl_location/lib" fi # Check for OpenSSL headers AC_CHECK_HEADERS([openssl/ssl.h],,AC_MSG_ERROR([Unable to find the OpenSSL headers])) # Check for OpenSSL library LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -lssl -lcrypto" AC_MSG_CHECKING(linking with openssl) AC_TRY_LINK([#include ],[ SSL_library_init(); return(0); ], [ AC_MSG_RESULT(ok) ], [ AC_MSG_RESULT(failed) AC_MSG_ERROR(Unable to link with the openssl library; use --without-openssl to disable) ]) LIBS="$LIBS_SAVED" PION_SSL_LIB="-lssl -lcrypto" # Found the OpenSSL library AC_MSG_NOTICE(Building Pion with support for SSL (using OpenSSL)) AC_DEFINE([PION_HAVE_SSL],[1],[Define to 1 if you have the `OpenSSL' library.]) else # SSL is disabled AC_MSG_RESULT(no) fi AC_SUBST(PION_SSL_LIB) # Check for logging support AC_ARG_ENABLE([logging], AC_HELP_STRING([--disable-logging],[disable all logging support (including std::ostream)]), [enable_logging=$enableval], [enable_logging=yes]) AC_ARG_WITH([ostream-logging], AC_HELP_STRING([--with-ostream-logging],[use std::ostream logging instead of library]), [ ostream_logging=yes ], [ ostream_logging=no ]) AC_ARG_WITH([log4cplus], AC_HELP_STRING([--with-log4cplus@<:@=DIR@:>@],[location of log4cplus library (recommended)]), [ log4cplus_location=$withval without_log4cxx=true without_log4cpp=true], []) AC_ARG_WITH([log4cxx], AC_HELP_STRING([--with-log4cxx@<:@=DIR@:>@],[location of log4cxx library]), [ log4cxx_location=$withval without_log4cplus=true without_log4cpp=true], []) AC_ARG_WITH([log4cpp], AC_HELP_STRING([--with-log4cpp@<:@=DIR@:>@],[location of log4cpp library]), [ log4cpp_location=$withval without_log4cplus=true without_log4cxx=true], []) if test "x$enable_logging" == "xno"; then # Display notice if no logging found AC_MSG_NOTICE(Logging has been disabled) AC_DEFINE([PION_DISABLE_LOGGING],[1],[Define to 1 to disable logging.]) elif test "x$ostream_logging" == "xyes"; then AC_MSG_NOTICE(Using std::ostream for logging) AC_DEFINE([PION_USE_OSTREAM_LOGGING],[1],[Define to 1 to use std::cout and std::cerr for logging.]) else # check for an available logging library (log4cplus, then log4cxx, then log4cpp) # log4cplus if test "$without_log4cplus" != "true"; then # Check if log4cplus location is specified if test "x$log4cplus_location" != "xyes" then CPPFLAGS="$CPPFLAGS -I$log4cplus_location/include" LDFLAGS="$LDFLAGS -L$log4cplus_location/lib" fi # Check for log4cplus library LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -llog4cplus" AC_MSG_CHECKING(log4cplus library) AC_TRY_LINK([#include ],[ log4cplus::Logger::getRoot(); return 0; ], [ # Found the log4cplus library AC_MSG_RESULT(ok) AC_DEFINE([PION_USE_LOG4CPLUS],[1],[Define to 1 if you have the `log4cplus' library (-llog4cplus).]) AC_MSG_NOTICE(Using log4cplus for logging) without_log4cxx=true without_log4cpp=true PION_LOG_LIB="-llog4cplus" ], [ AC_MSG_RESULT(no) ]) LIBS="$LIBS_SAVED" fi # log4cxx if test "$without_log4cxx" != "true"; then # Check if log4cxx location is specified if test "x$log4cxx_location" != "xyes" then CPPFLAGS="$CPPFLAGS -I$log4cxx_location/include" LDFLAGS="$LDFLAGS -L$log4cxx_location/lib" fi # Check for log4cxx library LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -llog4cxx" AC_MSG_CHECKING(log4cxx library) AC_TRY_LINK([#include ],[ log4cxx::Logger::getRootLogger(); return 0; ], [ # Found the log4cxx library AC_MSG_RESULT(ok) AC_DEFINE([PION_USE_LOG4CXX],[1],[Define to 1 if you have the `log4cxx' library (-llog4cxx).]) AC_MSG_NOTICE(Using log4cxx for logging) without_log4cplus=true without_log4cpp=true PION_LOG_LIB="-llog4cxx" ], [ AC_MSG_RESULT(no) ]) LIBS="$LIBS_SAVED" fi # log4cpp if test "$without_log4cpp" != "true"; then # Check if log4cpp location is specified if test "x$log4cpp_location" != "xyes" then CPPFLAGS="$CPPFLAGS -I$log4cpp_location/include" LDFLAGS="$LDFLAGS -L$log4cpp_location/lib" fi # Check for log4cpp library LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -llog4cpp" AC_MSG_CHECKING(log4cpp library) AC_TRY_LINK([#include ],[ log4cpp::Category::getRoot(); return 0; ], [ # Found the log4cpp library AC_MSG_RESULT(ok) AC_DEFINE([PION_USE_LOG4CPP],[1],[Define to 1 if you have the `log4cpp' library (-llog4cpp).]) AC_MSG_NOTICE(Using log4cpp for logging) without_log4cplus=true without_log4cxx=true PION_LOG_LIB="-llog4cpp" ], [ AC_MSG_RESULT(no) ]) LIBS="$LIBS_SAVED" fi # no log library found if test "x$PION_LOG_LIB" == "x"; then if test "x$ostream_logging" == "xno"; then AC_MSG_WARN(No logging library found - disabling logging) AC_DEFINE([PION_DISABLE_LOGGING],[1],[Define to 1 to disable logging.]) else AC_MSG_WARN(No logging library found - using std::ostream for logging) AC_DEFINE([PION_USE_OSTREAM_LOGGING],[1],[Define to 1 to use std::cout and std::cerr for logging.]) fi fi fi AC_SUBST(PION_LOG_LIB) # Set external library dependencies PION_EXTERNAL_LIBS="$BOOST_THREAD_LIB $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_REGEX_LIB $BOOST_DATE_TIME_LIB $PION_LOG_LIB $PION_SSL_LIB $PION_ZLIB $PION_BZLIB $PION_EXTERNAL_LIBS" AC_SUBST(PION_EXTERNAL_LIBS) pion-5.0.4+dfsg.orig/build/pion-setup.inc0000644000372000001440000001246512215647065017652 0ustar robertousers# -------------------------------------- # pion-setup autoconf configuration file # -------------------------------------- # DO NOT USE autoheader (the .hpp.in file is not automanaged) AUTOHEADER="echo autoheader ignored" # Check for programs AC_PROG_CXX AC_PROG_INSTALL # Use C++ language AC_LANG_CPLUSPLUS AX_COMPILER_VENDOR # library to link with for dlopen, etc. PION_DLOPEN_LIBS=$lt_cv_dlopen_libs AC_SUBST(PION_DLOPEN_LIBS) # Set basic compiler options case "$build_os" in *solaris*) if test "$ax_cv_cxx_compiler_vendor" = "sun"; then # Solaris: Sun Studio C++ compiler CPPFLAGS="$CPPFLAGS -mt -library=stlport4" LDFLAGS="$LDFLAGS -mt -library=stlport4" PION_OPT_FLAGS="-O2 -DNDEBUG" PION_DEBUG_FLAGS="-g" else # Solaris: GCC compiler CPPFLAGS="$CPPFLAGS -pthreads -D_REENTRANT" LDFLAGS="$LDFLAGS -pthreads" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" fi PION_EXTERNAL_LIBS="-lsocket -lnsl -lposix4" ;; *darwin*) # Mac OS X: GCC compiler # -pthread is implied (automatically set by compiler) CPPFLAGS="$CPPFLAGS -D_REENTRANT" #LDFLAGS="$LDFLAGS" PION_OPT_FLAGS="-O3 -ggdb -fomit-frame-pointer -fstrict-aliasing -fno-tree-pre -falign-loops -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" # Check for OSX binary architecture AC_MSG_CHECKING([for OSX binary architectures]) AC_ARG_WITH([arch], AC_HELP_STRING([--with-arch@<:@=LIST@:>@],[specify comma-separated list of OSX architectures]), [with_arch=$withval], [with_arch=default]) if test "$with_arch" = "no"; then AC_MSG_RESULT(no) elif test "$with_arch" = "default"; then AC_MSG_RESULT(no) # Note: Pion seems to crashe consistently when built with x86_64 # AC_MSG_RESULT(x86_64) # with_arch="-arch x86_64" # PION_OPT_FLAGS="$PION_OPT_FLAGS $with_arch" # PION_DEBUG_FLAGS="$PION_DEBUG_FLAGS $with_arch" else AC_MSG_RESULT($with_arch) with_arch="-arch `echo $with_arch | sed 's#,# -arch #g'`" PION_OPT_FLAGS="$PION_OPT_FLAGS $with_arch" PION_DEBUG_FLAGS="$PION_DEBUG_FLAGS $with_arch" fi ;; *cygwin*) # Cygwin GCC compiler (Windows) CPPFLAGS="$CPPFLAGS -mthreads -D_REENTRANT -DPION_WIN32 -D__USE_W32_SOCKETS" LDFLAGS="$LDFLAGS -mthreads -Wl,-E" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" PION_EXTERNAL_LIBS="-lws2_32 -lmswsock" ;; *freebsd*) # FreeBSD: GCC compiler CPPFLAGS="$CPPFLAGS -pthread -D_REENTRANT" LDFLAGS="$LDFLAGS -pthread -Wl,-E" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" ;; *) # Other (Linux): GCC compiler CPPFLAGS="$CPPFLAGS -pthread -D_REENTRANT" LDFLAGS="$LDFLAGS -pthread -lrt -ldl -Wl,-E" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" ;; esac # Check for --with-cpu (gcc CPU architecture) AC_MSG_CHECKING([for specific CPU architecture]) AC_ARG_WITH([cpu], AC_HELP_STRING([--with-cpu@<:@=MARCH@:>@],[specify specific CPU architecture for gcc]), [with_cpu=$withval], [with_cpu=default]) if test "$with_cpu" = "no"; then AC_MSG_RESULT(no) else if test "$with_cpu" = "default"; then if test "$with_arch" = "no" || test "$with_arch" = "default" ; then if test "$ax_cv_cxx_compiler_vendor" = "gnu"; then # check __x86_64__ to determine default AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ #if defined(__x86_64__) // x86_64 defined -> leave undefined #else #error __x86_64__ not defined -> i686 #endif ]])], [], [with_cpu="i686"]) fi fi fi if test "$with_cpu" = "default"; then AC_MSG_RESULT(no) else # check to make sure it works CFLAGS_SAVED=$CFLAGS CXXFLAGS_SAVED=$CXXFLAGS CFLAGS="$CFLAGS -march=$with_cpu" CXXFLAGS="$CXXFLAGS -march=$with_cpu" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [ AC_MSG_RESULT($with_cpu) PION_OPT_FLAGS="$PION_OPT_FLAGS -march=$with_cpu" PION_DEBUG_FLAGS="$PION_DEBUG_FLAGS -march=$with_cpu" ], [ AC_MSG_RESULT(no) ]) CFLAGS=$CFLAGS_SAVED CXXFLAGS=$CXXFLAGS_SAVED fi fi # Check for debug AC_MSG_CHECKING([for debugging]) AC_ARG_WITH([debug], AC_HELP_STRING([--with-debug],[build with debugging information]), [with_debug=$withval], [with_debug=no]) if test "$with_debug" = "no"; then AC_MSG_RESULT(no) CFLAGS="$CFLAGS $PION_OPT_FLAGS" CXXFLAGS="$CXXFLAGS $PION_OPT_FLAGS" else AC_MSG_RESULT(yes) CFLAGS="$CFLAGS $PION_DEBUG_FLAGS" CXXFLAGS="$CXXFLAGS $PION_DEBUG_FLAGS" fi # Check for --with-plugins AC_MSG_CHECKING([for plug-ins directory]) AC_ARG_WITH([plugins], AC_HELP_STRING([--with-plugins@<:@=DIR@:>@],[directory where Pion Plug-ins are installed]), [with_plugins=$withval], [with_plugins=no]) if test "$with_plugins" = "no"; then if test "x$prefix" = "xNONE"; then PION_PLUGINS_DIRECTORY=/usr/local/share/pion/plugins else PION_PLUGINS_DIRECTORY=${prefix}/share/pion/plugins fi else PION_PLUGINS_DIRECTORY=$with_plugins fi AC_MSG_RESULT($PION_PLUGINS_DIRECTORY) AC_DEFINE_UNQUOTED([PION_PLUGINS_DIRECTORY],["$PION_PLUGINS_DIRECTORY"],[Define to the directory where Pion Plug-ins are installed.]) AC_SUBST(PION_PLUGINS_DIRECTORY) pion-5.0.4+dfsg.orig/build/depth_2_pion-net.props0000644000372000001440000000133612215647065021272 0ustar robertousers ..\..\common .. <_ProjectFileVersion>10.0.40219.1 $(PION_COMMON_HOME) $(PION_NET_HOME) pion-5.0.4+dfsg.orig/src/0000755000372000001440000000000012215647145014533 5ustar robertouserspion-5.0.4+dfsg.orig/src/http_server.cpp0000644000372000001440000003342112215647065017610 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // static members of server const unsigned int server::MAX_REDIRECTS = 10; // server member functions void server::handle_connection(tcp::connection_ptr& tcp_conn) { request_reader_ptr my_reader_ptr; my_reader_ptr = request_reader::create(tcp_conn, boost::bind(&server::handle_request, this, _1, _2, _3)); my_reader_ptr->set_max_content_length(m_max_content_length); my_reader_ptr->receive(); } void server::handle_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const boost::system::error_code& ec) { if (ec || ! http_request_ptr->is_valid()) { tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); // make sure it will get closed if (tcp_conn->is_open() && (ec.category() == http::parser::get_error_category())) { // HTTP parser error PION_LOG_INFO(m_logger, "Invalid HTTP request (" << ec.message() << ")"); m_bad_request_handler(http_request_ptr, tcp_conn); } else { static const boost::system::error_condition ERRCOND_CANCELED(boost::system::errc::operation_canceled, boost::system::system_category()), ERRCOND_EOF(boost::asio::error::eof, boost::asio::error::misc_category); if (ec == ERRCOND_CANCELED || ec == ERRCOND_EOF) { // don't spam the log with common (non-)errors that happen during normal operation PION_LOG_DEBUG(m_logger, "Lost connection on port " << get_port() << " (" << ec.message() << ")"); } else { PION_LOG_INFO(m_logger, "Lost connection on port " << get_port() << " (" << ec.message() << ")"); } tcp_conn->finish(); } return; } PION_LOG_DEBUG(m_logger, "Received a valid HTTP request"); // strip off trailing slash if the request has one std::string resource_requested(strip_trailing_slash(http_request_ptr->get_resource())); // apply any redirection redirect_map_t::const_iterator it = m_redirects.find(resource_requested); unsigned int num_redirects = 0; while (it != m_redirects.end()) { if (++num_redirects > MAX_REDIRECTS) { PION_LOG_ERROR(m_logger, "Maximum number of redirects (server::MAX_REDIRECTS) exceeded for requested resource: " << http_request_ptr->get_original_resource()); m_server_error_handler(http_request_ptr, tcp_conn, "Maximum number of redirects (server::MAX_REDIRECTS) exceeded for requested resource"); return; } resource_requested = it->second; http_request_ptr->change_resource(resource_requested); it = m_redirects.find(resource_requested); } // if authentication activated, check current request if (m_auth_ptr) { // try to verify authentication if (! m_auth_ptr->handle_request(http_request_ptr, tcp_conn)) { // the HTTP 401 message has already been sent by the authentication object PION_LOG_DEBUG(m_logger, "Authentication required for HTTP resource: " << resource_requested); if (http_request_ptr->get_resource() != http_request_ptr->get_original_resource()) { PION_LOG_DEBUG(m_logger, "Original resource requested was: " << http_request_ptr->get_original_resource()); } return; } } // search for a handler matching the resource requested request_handler_t request_handler; if (find_request_handler(resource_requested, request_handler)) { // try to handle the request try { request_handler(http_request_ptr, tcp_conn); PION_LOG_DEBUG(m_logger, "Found request handler for HTTP resource: " << resource_requested); if (http_request_ptr->get_resource() != http_request_ptr->get_original_resource()) { PION_LOG_DEBUG(m_logger, "Original resource requested was: " << http_request_ptr->get_original_resource()); } } catch (std::bad_alloc&) { // propagate memory errors (FATAL) throw; } catch (std::exception& e) { // recover gracefully from other exceptions thrown by request handlers PION_LOG_ERROR(m_logger, "HTTP request handler: " << pion::diagnostic_information(e)); m_server_error_handler(http_request_ptr, tcp_conn, e.what()); } catch (boost::exception& e) { // recover gracefully from boost exceptions thrown by request handlers PION_LOG_ERROR(m_logger, "HTTP request handler: " << pion::diagnostic_information(e)); m_server_error_handler(http_request_ptr, tcp_conn, pion::diagnostic_information(e)); } } else { // no web services found that could handle the request PION_LOG_INFO(m_logger, "No HTTP request handlers found for resource: " << resource_requested); if (http_request_ptr->get_resource() != http_request_ptr->get_original_resource()) { PION_LOG_DEBUG(m_logger, "Original resource requested was: " << http_request_ptr->get_original_resource()); } m_not_found_handler(http_request_ptr, tcp_conn); } } bool server::find_request_handler(const std::string& resource, request_handler_t& request_handler) const { // first make sure that HTTP resources are registered boost::mutex::scoped_lock resource_lock(m_resource_mutex); if (m_resources.empty()) return false; // iterate through each resource entry that may match the resource resource_map_t::const_iterator i = m_resources.upper_bound(resource); while (i != m_resources.begin()) { --i; // check for a match if the first part of the strings match if (i->first.empty() || resource.compare(0, i->first.size(), i->first) == 0) { // only if the resource matches the plug-in's identifier // or if resource is followed first with a '/' character if (resource.size() == i->first.size() || resource[i->first.size()]=='/') { request_handler = i->second; return true; } } } return false; } void server::add_resource(const std::string& resource, request_handler_t request_handler) { boost::mutex::scoped_lock resource_lock(m_resource_mutex); const std::string clean_resource(strip_trailing_slash(resource)); m_resources.insert(std::make_pair(clean_resource, request_handler)); PION_LOG_INFO(m_logger, "Added request handler for HTTP resource: " << clean_resource); } void server::remove_resource(const std::string& resource) { boost::mutex::scoped_lock resource_lock(m_resource_mutex); const std::string clean_resource(strip_trailing_slash(resource)); m_resources.erase(clean_resource); PION_LOG_INFO(m_logger, "Removed request handler for HTTP resource: " << clean_resource); } void server::add_redirect(const std::string& requested_resource, const std::string& new_resource) { boost::mutex::scoped_lock resource_lock(m_resource_mutex); const std::string clean_requested_resource(strip_trailing_slash(requested_resource)); const std::string clean_new_resource(strip_trailing_slash(new_resource)); m_redirects.insert(std::make_pair(clean_requested_resource, clean_new_resource)); PION_LOG_INFO(m_logger, "Added redirection for HTTP resource " << clean_requested_resource << " to resource " << clean_new_resource); } void server::handle_bad_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { static const std::string BAD_REQUEST_HTML = "\n" "400 Bad Request\n" "\n" "

Bad Request

\n" "

Your browser sent a request that this server could not understand.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_BAD_REQUEST); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_BAD_REQUEST); writer->write_no_copy(BAD_REQUEST_HTML); writer->send(); } void server::handle_not_found_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { static const std::string NOT_FOUND_HTML_START = "\n" "404 Not Found\n" "\n" "

Not Found

\n" "

The requested URL "; static const std::string NOT_FOUND_HTML_FINISH = " was not found on this server.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_NOT_FOUND); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NOT_FOUND); writer->write_no_copy(NOT_FOUND_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(NOT_FOUND_HTML_FINISH); writer->send(); } void server::handle_server_error(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string& error_msg) { static const std::string SERVER_ERROR_HTML_START = "\n" "500 Server Error\n" "\n" "

Internal Server Error

\n" "

The server encountered an internal error: "; static const std::string SERVER_ERROR_HTML_FINISH = "

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_SERVER_ERROR); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_SERVER_ERROR); writer->write_no_copy(SERVER_ERROR_HTML_START); writer << algorithm::xml_encode(error_msg); writer->write_no_copy(SERVER_ERROR_HTML_FINISH); writer->send(); } void server::handle_forbidden_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string& error_msg) { static const std::string FORBIDDEN_HTML_START = "\n" "403 Forbidden\n" "\n" "

Forbidden

\n" "

User not authorized to access the requested URL "; static const std::string FORBIDDEN_HTML_MIDDLE = "

\n"; static const std::string FORBIDDEN_HTML_FINISH = "

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_FORBIDDEN); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_FORBIDDEN); writer->write_no_copy(FORBIDDEN_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(FORBIDDEN_HTML_MIDDLE); writer << error_msg; writer->write_no_copy(FORBIDDEN_HTML_FINISH); writer->send(); } void server::handle_method_not_allowed(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string& allowed_methods) { static const std::string NOT_ALLOWED_HTML_START = "\n" "405 Method Not Allowed\n" "\n" "

Not Allowed

\n" "

The requested method "; static const std::string NOT_ALLOWED_HTML_FINISH = " is not allowed on this server.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_METHOD_NOT_ALLOWED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_METHOD_NOT_ALLOWED); if (! allowed_methods.empty()) writer->get_response().add_header("Allow", allowed_methods); writer->write_no_copy(NOT_ALLOWED_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_method()); writer->write_no_copy(NOT_ALLOWED_HTML_FINISH); writer->send(); } } // end namespace http } // end namespace pion pion-5.0.4+dfsg.orig/src/pion.vcxproj0000644000372000001440000004302612215647065017123 0ustar robertousers Debug_DLL_full Win32 Debug_DLL_full x64 Debug_static Win32 Debug_static x64 Release_DLL_full Win32 Release_DLL_full x64 Release_static Win32 Release_static x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62} pion-net Win32Proj DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.40219.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp _LIB;%(PreprocessorDefinitions) Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp X64 _LIB;%(PreprocessorDefinitions) ProgramDatabase Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp _LIB;%(PreprocessorDefinitions) MultiThreadedDLL Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp X64 _LIB;%(PreprocessorDefinitions) MultiThreadedDLL Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp PION_EXPORTS;PION_FULL;_USRDLL;%(PreprocessorDefinitions) false Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp X64 PION_EXPORTS;PION_FULL;_USRDLL;%(PreprocessorDefinitions) ProgramDatabase false MachineX64 Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp PION_EXPORTS;PION_FULL;_USRDLL;%(PreprocessorDefinitions) false zdll.lib;%(AdditionalDependencies) Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp X64 PION_EXPORTS;PION_FULL;_USRDLL;%(PreprocessorDefinitions) false MachineX64 zdll.lib;%(AdditionalDependencies) pion-5.0.4+dfsg.orig/src/tcp_server.cpp0000644000372000001440000002533312215647065017422 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include namespace pion { // begin namespace pion namespace tcp { // begin namespace tcp // tcp::server member functions server::server(scheduler& sched, const unsigned int tcp_port) : m_logger(PION_GET_LOGGER("pion.tcp.server")), m_active_scheduler(sched), m_tcp_acceptor(m_active_scheduler.get_io_service()), #ifdef PION_HAVE_SSL m_ssl_context(m_active_scheduler.get_io_service(), boost::asio::ssl::context::sslv23), #else m_ssl_context(0), #endif m_endpoint(boost::asio::ip::tcp::v4(), tcp_port), m_ssl_flag(false), m_is_listening(false) {} server::server(scheduler& sched, const boost::asio::ip::tcp::endpoint& endpoint) : m_logger(PION_GET_LOGGER("pion.tcp.server")), m_active_scheduler(sched), m_tcp_acceptor(m_active_scheduler.get_io_service()), #ifdef PION_HAVE_SSL m_ssl_context(m_active_scheduler.get_io_service(), boost::asio::ssl::context::sslv23), #else m_ssl_context(0), #endif m_endpoint(endpoint), m_ssl_flag(false), m_is_listening(false) {} server::server(const unsigned int tcp_port) : m_logger(PION_GET_LOGGER("pion.tcp.server")), m_default_scheduler(), m_active_scheduler(m_default_scheduler), m_tcp_acceptor(m_active_scheduler.get_io_service()), #ifdef PION_HAVE_SSL m_ssl_context(m_active_scheduler.get_io_service(), boost::asio::ssl::context::sslv23), #else m_ssl_context(0), #endif m_endpoint(boost::asio::ip::tcp::v4(), tcp_port), m_ssl_flag(false), m_is_listening(false) {} server::server(const boost::asio::ip::tcp::endpoint& endpoint) : m_logger(PION_GET_LOGGER("pion.tcp.server")), m_default_scheduler(), m_active_scheduler(m_default_scheduler), m_tcp_acceptor(m_active_scheduler.get_io_service()), #ifdef PION_HAVE_SSL m_ssl_context(m_active_scheduler.get_io_service(), boost::asio::ssl::context::sslv23), #else m_ssl_context(0), #endif m_endpoint(endpoint), m_ssl_flag(false), m_is_listening(false) {} void server::start(void) { // lock mutex for thread safety boost::mutex::scoped_lock server_lock(m_mutex); if (! m_is_listening) { PION_LOG_INFO(m_logger, "Starting server on port " << get_port()); before_starting(); // configure the acceptor service try { // get admin permissions in case we're binding to a privileged port pion::admin_rights use_admin_rights(get_port() < 1024); m_tcp_acceptor.open(m_endpoint.protocol()); // allow the acceptor to reuse the address (i.e. SO_REUSEADDR) // ...except when running not on Windows - see http://msdn.microsoft.com/en-us/library/ms740621%28VS.85%29.aspx #ifndef _MSC_VER m_tcp_acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); #endif m_tcp_acceptor.bind(m_endpoint); if (m_endpoint.port() == 0) { // update the endpoint to reflect the port chosen by bind m_endpoint = m_tcp_acceptor.local_endpoint(); } m_tcp_acceptor.listen(); } catch (std::exception& e) { PION_LOG_ERROR(m_logger, "Unable to bind to port " << get_port() << ": " << e.what()); throw; } m_is_listening = true; // unlock the mutex since listen() requires its own lock server_lock.unlock(); listen(); // notify the thread scheduler that we need it now m_active_scheduler.add_active_user(); } } void server::stop(bool wait_until_finished) { // lock mutex for thread safety boost::mutex::scoped_lock server_lock(m_mutex); if (m_is_listening) { PION_LOG_INFO(m_logger, "Shutting down server on port " << get_port()); m_is_listening = false; // this terminates any connections waiting to be accepted m_tcp_acceptor.close(); if (! wait_until_finished) { // this terminates any other open connections std::for_each(m_conn_pool.begin(), m_conn_pool.end(), boost::bind(&connection::close, _1)); } // wait for all pending connections to complete while (! m_conn_pool.empty()) { // try to prun connections that didn't finish cleanly if (prune_connections() == 0) break; // if no more left, then we can stop waiting // sleep for up to a quarter second to give open connections a chance to finish PION_LOG_INFO(m_logger, "Waiting for open connections to finish"); scheduler::sleep(m_no_more_connections, server_lock, 0, 250000000); } // notify the thread scheduler that we no longer need it m_active_scheduler.remove_active_user(); // all done! after_stopping(); m_server_has_stopped.notify_all(); } } void server::join(void) { boost::mutex::scoped_lock server_lock(m_mutex); while (m_is_listening) { // sleep until server_has_stopped condition is signaled m_server_has_stopped.wait(server_lock); } } void server::set_ssl_key_file(const std::string& pem_key_file) { // configure server for SSL set_ssl_flag(true); #ifdef PION_HAVE_SSL m_ssl_context.set_options(boost::asio::ssl::context::default_workarounds | boost::asio::ssl::context::no_sslv2 | boost::asio::ssl::context::single_dh_use); m_ssl_context.use_certificate_file(pem_key_file, boost::asio::ssl::context::pem); m_ssl_context.use_private_key_file(pem_key_file, boost::asio::ssl::context::pem); #endif } void server::listen(void) { // lock mutex for thread safety boost::mutex::scoped_lock server_lock(m_mutex); if (m_is_listening) { // create a new TCP connection object tcp::connection_ptr new_connection(connection::create(get_io_service(), m_ssl_context, m_ssl_flag, boost::bind(&server::finish_connection, this, _1))); // prune connections that finished uncleanly prune_connections(); // keep track of the object in the server's connection pool m_conn_pool.insert(new_connection); // use the object to accept a new connection new_connection->async_accept(m_tcp_acceptor, boost::bind(&server::handle_accept, this, new_connection, boost::asio::placeholders::error)); } } void server::handle_accept(tcp::connection_ptr& tcp_conn, const boost::system::error_code& accept_error) { if (accept_error) { // an error occured while trying to a accept a new connection // this happens when the server is being shut down if (m_is_listening) { listen(); // schedule acceptance of another connection PION_LOG_WARN(m_logger, "Accept error on port " << get_port() << ": " << accept_error.message()); } finish_connection(tcp_conn); } else { // got a new TCP connection PION_LOG_DEBUG(m_logger, "New" << (tcp_conn->get_ssl_flag() ? " SSL " : " ") << "connection on port " << get_port()); // schedule the acceptance of another new connection // (this returns immediately since it schedules it as an event) if (m_is_listening) listen(); // handle the new connection #ifdef PION_HAVE_SSL if (tcp_conn->get_ssl_flag()) { tcp_conn->async_handshake_server(boost::bind(&server::handle_ssl_handshake, this, tcp_conn, boost::asio::placeholders::error)); } else #endif // not SSL -> call the handler immediately handle_connection(tcp_conn); } } void server::handle_ssl_handshake(tcp::connection_ptr& tcp_conn, const boost::system::error_code& handshake_error) { if (handshake_error) { // an error occured while trying to establish the SSL connection PION_LOG_WARN(m_logger, "SSL handshake failed on port " << get_port() << " (" << handshake_error.message() << ')'); finish_connection(tcp_conn); } else { // handle the new connection PION_LOG_DEBUG(m_logger, "SSL handshake succeeded on port " << get_port()); handle_connection(tcp_conn); } } void server::finish_connection(tcp::connection_ptr& tcp_conn) { boost::mutex::scoped_lock server_lock(m_mutex); if (m_is_listening && tcp_conn->get_keep_alive()) { // keep the connection alive handle_connection(tcp_conn); } else { PION_LOG_DEBUG(m_logger, "Closing connection on port " << get_port()); // remove the connection from the server's management pool ConnectionPool::iterator conn_itr = m_conn_pool.find(tcp_conn); if (conn_itr != m_conn_pool.end()) m_conn_pool.erase(conn_itr); // trigger the no more connections condition if we're waiting to stop if (!m_is_listening && m_conn_pool.empty()) m_no_more_connections.notify_all(); } } std::size_t server::prune_connections(void) { // assumes that a server lock has already been acquired ConnectionPool::iterator conn_itr = m_conn_pool.begin(); while (conn_itr != m_conn_pool.end()) { if (conn_itr->unique()) { PION_LOG_WARN(m_logger, "Closing orphaned connection on port " << get_port()); ConnectionPool::iterator erase_itr = conn_itr; ++conn_itr; (*erase_itr)->close(); m_conn_pool.erase(erase_itr); } else { ++conn_itr; } } // return the number of connections remaining return m_conn_pool.size(); } std::size_t server::get_connections(void) const { boost::mutex::scoped_lock server_lock(m_mutex); return (m_is_listening ? (m_conn_pool.size() - 1) : m_conn_pool.size()); } } // end namespace tcp } // end namespace pion pion-5.0.4+dfsg.orig/src/http_auth.cpp0000644000372000001440000000566612215647065017255 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // auth member functions void auth::add_restrict(const std::string& resource) { boost::mutex::scoped_lock resource_lock(m_resource_mutex); const std::string clean_resource(http::server::strip_trailing_slash(resource)); m_restrict_list.insert(clean_resource); PION_LOG_INFO(m_logger, "Set authentication restrictions for HTTP resource: " << clean_resource); } void auth::add_permit(const std::string& resource) { boost::mutex::scoped_lock resource_lock(m_resource_mutex); const std::string clean_resource(http::server::strip_trailing_slash(resource)); m_white_list.insert(clean_resource); PION_LOG_INFO(m_logger, "Set authentication permission for HTTP resource: " << clean_resource); } bool auth::need_authentication(const http::request_ptr& http_request_ptr) const { // if no users are defined, authentication is never required if (m_user_manager->empty()) return false; // strip off trailing slash if the request has one std::string resource(http::server::strip_trailing_slash(http_request_ptr->get_resource())); boost::mutex::scoped_lock resource_lock(m_resource_mutex); // just return false if restricted list is empty if (m_restrict_list.empty()) return false; // try to find resource in restricted list if (find_resource(m_restrict_list, resource)) { // return true if white list is empty if (m_white_list.empty()) return true; // return false if found in white list, or true if not found return ( ! find_resource(m_white_list, resource) ); } // resource not found in restricted list return false; } bool auth::find_resource(const resource_set_type& resource_set, const std::string& resource) const { resource_set_type::const_iterator i = resource_set.upper_bound(resource); while (i != resource_set.begin()) { --i; // check for a match if the first part of the strings match if (i->empty() || resource.compare(0, i->size(), *i) == 0) { // only if the resource matches exactly // or if resource is followed first with a '/' character if (resource.size() == i->size() || resource[i->size()]=='/') { return true; } } } return false; } } // end namespace http } // end namespace pion pion-5.0.4+dfsg.orig/src/spdy_parser.cpp0000644000372000001440000004127612215647065017605 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace spdy { // begin namespace spdy parser::error_category_t * parser::m_error_category_ptr = NULL; boost::once_flag parser::m_instance_flag = BOOST_ONCE_INIT; // parser member functions parser::parser() : m_read_ptr(NULL), m_uncompressed_ptr(NULL), m_current_data_chunk_ptr(NULL), m_last_data_chunk_ptr(NULL), m_logger(PION_GET_LOGGER("pion.spdy.parser")) {} boost::tribool parser::parse(http_protocol_info& http_info, boost::system::error_code& ec, decompressor_ptr& decompressor, const char *packet_ptr, boost::uint32_t& length_packet, boost::uint32_t current_stream_count) { // initialize read position set_read_ptr(packet_ptr); // Parse the frame return parse_spdy_frame(ec, decompressor, http_info, length_packet, current_stream_count); } bool parser::is_spdy_control_frame(const char *ptr) { // Parse further for higher accuracy // Get the control bit boost::uint8_t control_bit; boost::uint16_t version, type; boost::uint16_t byte_value = algorithm::to_uint16(ptr); control_bit = byte_value >> (sizeof(short) * CHAR_BIT - 1); if (!control_bit) return false; // Control bit is set; This is a control frame // Get the version number boost::uint16_t two_bytes = algorithm::to_uint16(ptr); version = two_bytes & 0x7FFF; if(version < 1 || version > 3){ // SPDY does not have a version higher than 3 and lower than 1 at the moment return false; } // Increment the read pointer ptr += 2; type = algorithm::to_uint16(ptr); if (type >= SPDY_INVALID) { // Not among the recognized SPDY types return false; } return true; } spdy_frame_type parser::get_spdy_frame_type(const char *ptr) { // Determine if this a SPDY frame BOOST_ASSERT(ptr); /* * The first byte of a SPDY frame must be either 0 or * 0x80. If it's not, assume that this is not SPDY. * (In theory, a data frame could have a stream ID * >= 2^24, in which case it won't have 0 for a first * byte, but this is a pretty reliable heuristic for * now.) */ spdy_frame_type spdy_frame; boost::uint8_t first_byte = *((unsigned char *)ptr); if(first_byte == 0x80){ spdy_frame = spdy_control_frame; }else if(first_byte == 0x0){ spdy_frame = spdy_data_frame; }else{ spdy_frame = spdy_invalid_frame; } return spdy_frame; } boost::uint32_t parser::get_control_frame_stream_id(const char *ptr) { // The stream ID for control frames is at a 8 bit offser from start ptr += 8; boost::uint32_t four_bytes = algorithm::to_uint32(ptr); return four_bytes & 0x7FFFFFFF; } boost::tribool parser::parse_spdy_frame(boost::system::error_code& ec, decompressor_ptr& decompressor, http_protocol_info& http_info, boost::uint32_t& length_packet, boost::uint32_t current_stream_count) { boost::tribool rc = true; // Verify that this is a spdy frame BOOST_ASSERT(m_read_ptr); boost::uint8_t first_byte = (boost::uint8_t)*m_read_ptr; if (first_byte != 0x80 && first_byte != 0x0) { // This is not a SPDY frame, throw an error PION_LOG_ERROR(m_logger, "Invalid SPDY Frame"); set_error(ec, ERROR_INVALID_SPDY_FRAME); return false; } boost::uint8_t control_bit; spdy_control_frame_info frame; boost::uint32_t stream_id = 0; ec.clear(); // Populate the frame bool populate_frame_result = populate_frame(ec, frame, length_packet, stream_id, http_info); if(!populate_frame_result){ /// There was an error; No need to further parse. return false; } BOOST_ASSERT(stream_id != 0); control_bit = (boost::uint8_t)frame.control_bit; // There is a possibility that there are more than one SPDY frames in one TCP frame if(length_packet > frame.length){ m_current_data_chunk_ptr = m_read_ptr + frame.length; length_packet -= frame.length; rc = boost::indeterminate; } if (!control_bit) { // Parse the data packet parse_spdy_data(ec, frame, stream_id, http_info); } /* Abort here if the version is too low. */ if (frame.version > MIN_SPDY_VERSION) { // Version less that min SPDY version, throw an error PION_LOG_ERROR(m_logger, "Invalid SPDY Version Number"); set_error(ec, ERROR_INVALID_SPDY_VERSION); return false; } if(frame.type == SPDY_SYN_STREAM){ http_info.http_type = HTTP_REQUEST; }else if (frame.type == SPDY_SYN_REPLY){ http_info.http_type = HTTP_RESPONSE; }else if (frame.type == SPDY_DATA){ http_info.http_type = HTTP_DATA; } switch (frame.type) { case SPDY_SYN_STREAM: case SPDY_SYN_REPLY: case SPDY_HEADERS: parse_header_payload(ec, decompressor, frame, http_info, current_stream_count); break; case SPDY_RST_STREAM: parse_spdy_rst_stream(ec, frame); http_info.http_type = SPDY_CONTROL; break; case SPDY_SETTINGS: parse_spdy_settings_frame(ec, frame); http_info.http_type = SPDY_CONTROL; break; case SPDY_PING: parse_spdy_ping_frame(ec, frame); http_info.http_type = SPDY_CONTROL; break; case SPDY_GOAWAY: parse_spdy_goaway_frame(ec, frame); http_info.http_type = SPDY_CONTROL; break; case SPDY_WINDOW_UPDATE: parse_spdy_window_update_frame(ec, frame); http_info.http_type = SPDY_CONTROL; break; case SPDY_CREDENTIAL: // We dont need to parse this for now http_info.http_type = SPDY_CONTROL; break; default: break; } if (ec) return false; m_last_data_chunk_ptr = m_read_ptr; m_read_ptr = m_current_data_chunk_ptr; return rc; } void parser::create_error_category(void) { static error_category_t UNIQUE_ERROR_CATEGORY; m_error_category_ptr = &UNIQUE_ERROR_CATEGORY; } bool parser::populate_frame(boost::system::error_code& ec, spdy_control_frame_info& frame, boost::uint32_t& length_packet, boost::uint32_t& stream_id, http_protocol_info& http_info) { // Get the control bit boost::uint8_t control_bit; boost::uint16_t byte_value = algorithm::to_uint16(m_read_ptr); control_bit = byte_value >> (sizeof(short) * CHAR_BIT - 1); frame.control_bit = (bool)control_bit; if(control_bit){ // Control bit is set; This is a control frame // Get the version number boost::uint16_t two_bytes = algorithm::to_uint16(m_read_ptr); frame.version = two_bytes & 0x7FFF; // Increment the read pointer m_read_ptr += 2; length_packet -= 2; http_info.data_offset +=2; // Get the type frame.type = algorithm::to_uint16(m_read_ptr); if (frame.type >= SPDY_INVALID) { // SPDY Frame is invalid // This is not a SPDY frame, throw an error PION_LOG_ERROR(m_logger, "Invalid SPDY Frame"); set_error(ec, ERROR_INVALID_SPDY_FRAME); return false; } }else { // Control bit is not set; This is a data frame frame.type = SPDY_DATA; frame.version = 0; /* Version doesn't apply to DATA. */ // Get the stream id boost::uint32_t four_bytes = algorithm::to_uint32(m_read_ptr); stream_id = four_bytes & 0x7FFFFFFF; http_info.stream_id = stream_id; m_read_ptr +=2; http_info.data_offset +=2; length_packet -= 2; } // Increment the read pointer m_read_ptr += 2; length_packet -= 2; http_info.data_offset +=2; // Get the flags frame.flags = (boost::uint8_t)*m_read_ptr; // Increment the read pointer // Get the length boost::uint32_t four_bytes = algorithm::to_uint32(m_read_ptr); frame.length = four_bytes & 0xFFFFFF; // Increment the read pointer m_read_ptr += 4; length_packet -= 4; http_info.data_offset +=4; http_info.data_size = frame.length; if(control_bit){ four_bytes = algorithm::to_uint32(m_read_ptr); stream_id = four_bytes & 0x7FFFFFFF; } return true; } void parser::parse_header_payload(boost::system::error_code &ec, decompressor_ptr& decompressor, const spdy_control_frame_info& frame, http_protocol_info& http_info, boost::uint32_t current_stream_count) { boost::uint32_t stream_id = 0; boost::uint32_t associated_stream_id; boost::uint32_t header_block_length = frame.length; // Get the 31 bit stream id boost::uint32_t four_bytes = algorithm::to_uint32(m_read_ptr); stream_id = four_bytes & 0x7FFFFFFF; m_read_ptr += 4; http_info.stream_id = stream_id; // Get SYN_STREAM-only fields. if (frame.type == SPDY_SYN_STREAM) { // Get associated stream ID. boost::uint32_t four_bytes = algorithm::to_uint32(m_read_ptr); associated_stream_id = four_bytes & 0x7FFFFFFF; m_read_ptr += 4; // The next bits are priority, unused, and slot. // Disregard these for now as we dont need them m_read_ptr +=2 ; } else if( frame.type == SPDY_SYN_REPLY || frame.type == SPDY_HEADERS ) { // Unused bits m_read_ptr +=2 ; } // Get our header block length. switch (frame.type) { case SPDY_SYN_STREAM: header_block_length -= 10; break; case SPDY_SYN_REPLY: case SPDY_HEADERS: // This is a very important distinction. // It should be 6 bytes for SPDYv2 and 4 bytes for SPDYv3. header_block_length -= 6; break; default: // Unhandled case. This should never happen. PION_LOG_ERROR(m_logger, "Invalid SPDY Frame Type"); set_error(ec, ERROR_INVALID_SPDY_FRAME); return; } // Decompress header block as necessary. m_uncompressed_ptr = decompressor->decompress(m_read_ptr, stream_id, frame, header_block_length); if (!m_uncompressed_ptr) { set_error(ec, ERROR_DECOMPRESSION); return; } // Now parse the name/value pairs // The number of name/value pairs is 16 bit SPDYv2 // and it is 32 bit in SPDYv3 // TBD : Add support for SPDYv3 boost::uint16_t num_name_val_pairs = algorithm::to_uint16(m_uncompressed_ptr); m_uncompressed_ptr += 2; std::string content_type = ""; std::string content_encoding = ""; for(boost::uint16_t count = 0; count < num_name_val_pairs; ++count){ // Get the length of the name boost::uint16_t length_name = algorithm::to_uint16(m_uncompressed_ptr); std::string name = ""; m_uncompressed_ptr += 2; { for(boost::uint16_t count = 0; count < length_name; ++count){ name.push_back(*(m_uncompressed_ptr+count)); } m_uncompressed_ptr += length_name; } // Get the length of the value boost::uint16_t length_value = algorithm::to_uint16(m_uncompressed_ptr); std::string value = ""; m_uncompressed_ptr += 2; { for(boost::uint16_t count = 0; count < length_value; ++count){ value.push_back(*(m_uncompressed_ptr+count)); } m_uncompressed_ptr += length_value; } // Save these headers http_info.http_headers.insert(std::make_pair(name, value)); } } void parser::parse_spdy_data(boost::system::error_code &ec, const spdy_control_frame_info& frame, boost::uint32_t stream_id, http_protocol_info& http_info) { // This marks the finish flag if (frame.flags & SPDY_FLAG_FIN){ http_info.last_chunk = true; } } void parser::parse_spdy_rst_stream(boost::system::error_code &ec, const spdy_control_frame_info& frame) { boost::uint32_t stream_id = 0; boost::uint32_t status_code = 0; // First complete the check for size and flag // The flag for RST frame should be 0, The length should be 8 if(frame.flags != 0 || frame.length != 8 ){ return; } // Get the 31 bit stream id boost::uint32_t four_bytes = algorithm::to_uint32(m_read_ptr); stream_id = four_bytes & 0x7FFFFFFF; m_read_ptr += 4; // Get the status code status_code = algorithm::to_uint32(m_read_ptr); // Check the index before using the stream status array if(status_code >=1 && status_code <= 12){ PION_LOG_INFO(m_logger, "SPDY " << "Status Code is : " << rst_stream_status_names[status_code].str); }else{ PION_LOG_INFO(m_logger, "SPDY RST Invalid status code : " << status_code); } } void parser::parse_spdy_ping_frame(boost::system::error_code &ec, const spdy_control_frame_info& frame) { // First complete the check for size // The length should be 4 always if(frame.length != 4){ return; } boost::uint32_t ping_id = 0; // Get the 32 bit ping id ping_id = algorithm::to_uint32(m_read_ptr); m_read_ptr += 4; PION_LOG_INFO(m_logger, "SPDY " << "Ping ID is : " << ping_id); } void parser::parse_spdy_settings_frame(boost::system::error_code &ec, const spdy_control_frame_info& frame) { // Can ignore this frame for our purposes } void parser::parse_spdy_goaway_frame(boost::system::error_code &ec, const spdy_control_frame_info& frame) { // First complete the check for size // The length should be 4 always if(frame.length != 4){ return; } boost::uint32_t last_good_stream_id = 0; boost::uint32_t status_code = 0; // Get the 31 bit stream id boost::uint32_t four_bytes = algorithm::to_uint32(m_read_ptr); last_good_stream_id = four_bytes & 0x7FFFFFFF; m_read_ptr += 4; // Get the status code status_code = algorithm::to_uint32(m_read_ptr); // Chek if there was an error if(status_code == 1){ PION_LOG_ERROR(m_logger, "There was a Protocol Error"); set_error(ec, ERROR_PROTOCOL_ERROR); return; }else if (status_code == 11) { PION_LOG_ERROR(m_logger, "There was an Internal Error"); set_error(ec, ERROR_INTERNAL_SPDY_ERROR); return; } PION_LOG_INFO(m_logger, "SPDY " << "Status Code is : " << status_code); } void parser::parse_spdy_window_update_frame(boost::system::error_code &ec, const spdy_control_frame_info& frame) { // TBD : Do we really need this for our purpose } } // end namespace spdy } // end namespace pion pion-5.0.4+dfsg.orig/src/http_writer.cpp0000644000372000001440000000623112215647065017615 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // writer member functions void writer::prepare_write_buffers(http::message::write_buffers_t& write_buffers, const bool send_final_chunk) { // check if the HTTP headers have been sent yet if (! m_sent_headers) { // initialize write buffers for send operation prepare_buffers_for_send(write_buffers); // only send the headers once m_sent_headers = true; } // combine I/O write buffers (headers and content) so that everything // can be sent together; otherwise, we would have to send headers // and content separately, which would not be as efficient // don't send anything if there is no data in content buffers if (m_content_length > 0) { if (supports_chunked_messages() && sending_chunked_message()) { // prepare the next chunk of data to send // write chunk length in hex char cast_buf[35]; sprintf(cast_buf, "%lx", static_cast(m_content_length)); // add chunk length as a string at the back of the text cache m_text_cache.push_back(cast_buf); // append length of chunk to write_buffers write_buffers.push_back(boost::asio::buffer(m_text_cache.back())); // append an extra CRLF for chunk formatting write_buffers.push_back(boost::asio::buffer(http::types::STRING_CRLF)); // append response content buffers write_buffers.insert(write_buffers.end(), m_content_buffers.begin(), m_content_buffers.end()); // append an extra CRLF for chunk formatting write_buffers.push_back(boost::asio::buffer(http::types::STRING_CRLF)); } else { // append response content buffers write_buffers.insert(write_buffers.end(), m_content_buffers.begin(), m_content_buffers.end()); } } // prepare a zero-byte (final) chunk if (send_final_chunk && supports_chunked_messages() && sending_chunked_message()) { // add chunk length as a string at the back of the text cache m_text_cache.push_back("0"); // append length of chunk to write_buffers write_buffers.push_back(boost::asio::buffer(m_text_cache.back())); // append an extra CRLF for chunk formatting write_buffers.push_back(boost::asio::buffer(http::types::STRING_CRLF)); write_buffers.push_back(boost::asio::buffer(http::types::STRING_CRLF)); } } } // end namespace http } // end namespace pion pion-5.0.4+dfsg.orig/src/Makefile.am0000644000372000001440000000124312215647065016570 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- AM_CPPFLAGS = -I../include lib_LTLIBRARIES = libpion.la libpion_la_SOURCES = \ admin_rights.cpp algorithm.cpp logger.cpp plugin.cpp process.cpp scheduler.cpp \ spdy_decompressor.cpp spdy_parser.cpp \ tcp_server.cpp tcp_timer.cpp \ http_auth.cpp http_basic_auth.cpp http_cookie_auth.cpp http_message.cpp \ http_parser.cpp http_plugin_server.cpp http_reader.cpp http_server.cpp \ http_types.cpp http_writer.cpp libpion_la_LDFLAGS = -no-undefined -release $(PION_LIBRARY_VERSION) libpion_la_LIBADD = @PION_EXTERNAL_LIBS@ EXTRA_DIST = *.vcxproj *.vcxproj.filters pion-5.0.4+dfsg.orig/src/http_types.cpp0000644000372000001440000001501512215647065017445 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // generic strings used by HTTP const std::string types::STRING_EMPTY; const std::string types::STRING_CRLF("\x0D\x0A"); const std::string types::STRING_HTTP_VERSION("HTTP/"); const std::string types::HEADER_NAME_VALUE_DELIMITER(": "); const std::string types::COOKIE_NAME_VALUE_DELIMITER("="); // common HTTP header names const std::string types::HEADER_HOST("Host"); const std::string types::HEADER_COOKIE("Cookie"); const std::string types::HEADER_SET_COOKIE("Set-Cookie"); const std::string types::HEADER_CONNECTION("Connection"); const std::string types::HEADER_CONTENT_TYPE("Content-Type"); const std::string types::HEADER_CONTENT_LENGTH("Content-Length"); const std::string types::HEADER_CONTENT_LOCATION("Content-Location"); const std::string types::HEADER_CONTENT_ENCODING("Content-Encoding"); const std::string types::HEADER_CONTENT_DISPOSITION("Content-Disposition"); const std::string types::HEADER_LAST_MODIFIED("Last-Modified"); const std::string types::HEADER_IF_MODIFIED_SINCE("If-Modified-Since"); const std::string types::HEADER_TRANSFER_ENCODING("Transfer-Encoding"); const std::string types::HEADER_LOCATION("Location"); const std::string types::HEADER_AUTHORIZATION("Authorization"); const std::string types::HEADER_REFERER("Referer"); const std::string types::HEADER_USER_AGENT("User-Agent"); const std::string types::HEADER_X_FORWARDED_FOR("X-Forwarded-For"); const std::string types::HEADER_CLIENT_IP("Client-IP"); // common HTTP content types const std::string types::CONTENT_TYPE_HTML("text/html"); const std::string types::CONTENT_TYPE_TEXT("text/plain"); const std::string types::CONTENT_TYPE_XML("text/xml"); const std::string types::CONTENT_TYPE_URLENCODED("application/x-www-form-urlencoded"); const std::string types::CONTENT_TYPE_MULTIPART_FORM_DATA("multipart/form-data"); // common HTTP request methods const std::string types::REQUEST_METHOD_HEAD("HEAD"); const std::string types::REQUEST_METHOD_GET("GET"); const std::string types::REQUEST_METHOD_PUT("PUT"); const std::string types::REQUEST_METHOD_POST("POST"); const std::string types::REQUEST_METHOD_DELETE("DELETE"); // common HTTP response messages const std::string types::RESPONSE_MESSAGE_OK("OK"); const std::string types::RESPONSE_MESSAGE_CREATED("Created"); const std::string types::RESPONSE_MESSAGE_ACCEPTED("Accepted"); const std::string types::RESPONSE_MESSAGE_NO_CONTENT("No Content"); const std::string types::RESPONSE_MESSAGE_FOUND("Found"); const std::string types::RESPONSE_MESSAGE_UNAUTHORIZED("Unauthorized"); const std::string types::RESPONSE_MESSAGE_FORBIDDEN("Forbidden"); const std::string types::RESPONSE_MESSAGE_NOT_FOUND("Not Found"); const std::string types::RESPONSE_MESSAGE_METHOD_NOT_ALLOWED("Method Not Allowed"); const std::string types::RESPONSE_MESSAGE_NOT_MODIFIED("Not Modified"); const std::string types::RESPONSE_MESSAGE_BAD_REQUEST("Bad Request"); const std::string types::RESPONSE_MESSAGE_SERVER_ERROR("Server Error"); const std::string types::RESPONSE_MESSAGE_NOT_IMPLEMENTED("Not Implemented"); const std::string types::RESPONSE_MESSAGE_CONTINUE("Continue"); // common HTTP response codes const unsigned int types::RESPONSE_CODE_OK = 200; const unsigned int types::RESPONSE_CODE_CREATED = 201; const unsigned int types::RESPONSE_CODE_ACCEPTED = 202; const unsigned int types::RESPONSE_CODE_NO_CONTENT = 204; const unsigned int types::RESPONSE_CODE_FOUND = 302; const unsigned int types::RESPONSE_CODE_UNAUTHORIZED = 401; const unsigned int types::RESPONSE_CODE_FORBIDDEN = 403; const unsigned int types::RESPONSE_CODE_NOT_FOUND = 404; const unsigned int types::RESPONSE_CODE_METHOD_NOT_ALLOWED = 405; const unsigned int types::RESPONSE_CODE_NOT_MODIFIED = 304; const unsigned int types::RESPONSE_CODE_BAD_REQUEST = 400; const unsigned int types::RESPONSE_CODE_SERVER_ERROR = 500; const unsigned int types::RESPONSE_CODE_NOT_IMPLEMENTED = 501; const unsigned int types::RESPONSE_CODE_CONTINUE = 100; // static member functions std::string types::get_date_string(const time_t t) { // use mutex since time functions are normally not thread-safe static boost::mutex time_mutex; static const char *TIME_FORMAT = "%a, %d %b %Y %H:%M:%S GMT"; static const unsigned int TIME_BUF_SIZE = 100; char time_buf[TIME_BUF_SIZE+1]; boost::mutex::scoped_lock time_lock(time_mutex); if (strftime(time_buf, TIME_BUF_SIZE, TIME_FORMAT, gmtime(&t)) == 0) time_buf[0] = '\0'; // failed; resulting buffer is indeterminate time_lock.unlock(); return std::string(time_buf); } std::string types::make_query_string(const ihash_multimap& query_params) { std::string query_string; for (ihash_multimap::const_iterator i = query_params.begin(); i != query_params.end(); ++i) { if (i != query_params.begin()) query_string += '&'; query_string += algorithm::url_encode(i->first); query_string += '='; query_string += algorithm::url_encode(i->second); } return query_string; } std::string types::make_set_cookie_header(const std::string& name, const std::string& value, const std::string& path, const bool has_max_age, const unsigned long max_age) { // note: according to RFC6265, attributes should not be quoted std::string set_cookie_header(name); set_cookie_header += "=\""; set_cookie_header += value; set_cookie_header += "\"; Version=1"; if (! path.empty()) { set_cookie_header += "; Path="; set_cookie_header += path; } if (has_max_age) { set_cookie_header += "; Max-Age="; set_cookie_header += boost::lexical_cast(max_age); } return set_cookie_header; } } // end namespace http } // end namespace pion pion-5.0.4+dfsg.orig/src/plugin.cpp0000644000372000001440000003631212215647065016543 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #ifdef PION_WIN32 #include #else #include #endif namespace pion { // begin namespace pion // static members of plugin const std::string plugin::PION_PLUGIN_CREATE("pion_create_"); const std::string plugin::PION_PLUGIN_DESTROY("pion_destroy_"); #ifdef PION_WIN32 const std::string plugin::PION_PLUGIN_EXTENSION(".dll"); #else const std::string plugin::PION_PLUGIN_EXTENSION(".so"); #endif const std::string plugin::PION_CONFIG_EXTENSION(".conf"); boost::once_flag plugin::m_instance_flag = BOOST_ONCE_INIT; plugin::config_type *plugin::m_config_ptr = NULL; // plugin member functions void plugin::create_plugin_config(void) { static config_type UNIQUE_PION_PLUGIN_CONFIG; m_config_ptr = &UNIQUE_PION_PLUGIN_CONFIG; } void plugin::check_cygwin_path(boost::filesystem::path& final_path, const std::string& start_path) { #if defined(PION_WIN32) && defined(PION_CYGWIN_DIRECTORY) // try prepending PION_CYGWIN_DIRECTORY if not complete if (! final_path.is_complete() && final_path.has_root_directory()) { final_path = boost::filesystem::path(std::string(PION_CYGWIN_DIRECTORY) + start_path); } #endif } void plugin::add_plugin_directory(const std::string& dir) { boost::filesystem::path plugin_path = boost::filesystem::system_complete(dir); check_cygwin_path(plugin_path, dir); if (! boost::filesystem::exists(plugin_path) ) BOOST_THROW_EXCEPTION( error::directory_not_found() << error::errinfo_dir_name(dir) ); config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 cfg.m_plugin_dirs.push_back(plugin_path.string()); #else cfg.m_plugin_dirs.push_back(plugin_path.directory_string()); #endif } void plugin::reset_plugin_directories(void) { config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); cfg.m_plugin_dirs.clear(); } void plugin::open(const std::string& plugin_name) { // check first if name matches an existing plugin name { config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); map_type::iterator itr = cfg.m_plugin_map.find(plugin_name); if (itr != cfg.m_plugin_map.end()) { release_data(); // make sure we're not already pointing to something m_plugin_data = itr->second; ++ m_plugin_data->m_references; return; } } // nope, look for shared library file std::string plugin_file; if (!find_plugin_file(plugin_file, plugin_name)) BOOST_THROW_EXCEPTION( error::plugin_not_found() << error::errinfo_plugin_name(plugin_name) ); open_file(plugin_file); } void plugin::open_file(const std::string& plugin_file) { release_data(); // make sure we're not already pointing to something // use a temporary object first since open_plugin() may throw data_type plugin_data(get_plugin_name(plugin_file)); // check to see if we already have a matching shared library config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); map_type::iterator itr = cfg.m_plugin_map.find(plugin_data.m_plugin_name); if (itr == cfg.m_plugin_map.end()) { // no plug-ins found with the same name // open up the shared library using our temporary data object open_plugin(plugin_file, plugin_data); // may throw // all is good -> insert it into the plug-in map m_plugin_data = new data_type(plugin_data); cfg.m_plugin_map.insert( std::make_pair(m_plugin_data->m_plugin_name, m_plugin_data) ); } else { // found an existing plug-in with the same name m_plugin_data = itr->second; } // increment the number of references ++ m_plugin_data->m_references; } void plugin::release_data(void) { if (m_plugin_data != NULL) { config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); // double-check after locking mutex if (m_plugin_data != NULL && --m_plugin_data->m_references == 0) { // no more references to the plug-in library // make sure it's not a static library if (m_plugin_data->m_lib_handle != NULL) { // release the shared object close_dynamic_library(m_plugin_data->m_lib_handle); // remove it from the plug-in map map_type::iterator itr = cfg.m_plugin_map.find(m_plugin_data->m_plugin_name); // check itr just to be safe (it SHOULD always find a match) if (itr != cfg.m_plugin_map.end()) cfg.m_plugin_map.erase(itr); // release the heap object delete m_plugin_data; } } m_plugin_data = NULL; } } void plugin::grab_data(const plugin& p) { release_data(); // make sure we're not already pointing to something config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); m_plugin_data = const_cast(p.m_plugin_data); if (m_plugin_data != NULL) { ++ m_plugin_data->m_references; } } bool plugin::find_file(std::string& path_to_file, const std::string& name, const std::string& extension) { // first, try the name as-is if (check_for_file(path_to_file, name, "", extension)) return true; // nope, check search paths config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); for (std::vector::iterator i = cfg.m_plugin_dirs.begin(); i != cfg.m_plugin_dirs.end(); ++i) { if (check_for_file(path_to_file, *i, name, extension)) return true; } // no plug-in file found return false; } bool plugin::check_for_file(std::string& final_path, const std::string& start_path, const std::string& name, const std::string& extension) { // check for cygwin path oddities boost::filesystem::path cygwin_safe_path(start_path); check_cygwin_path(cygwin_safe_path, start_path); boost::filesystem::path test_path(cygwin_safe_path); // if a name is specified, append it to the test path if (! name.empty()) test_path /= name; // check for existence of file (without extension) try { // is_regular may throw if directory is not readable if (boost::filesystem::is_regular(test_path)) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 final_path = test_path.string(); #else final_path = test_path.file_string(); #endif return true; } } catch (...) {} // next, try appending the extension if (name.empty()) { // no "name" specified -> append it directly to start_path test_path = boost::filesystem::path(start_path + extension); // in this case, we need to re-check for the cygwin oddities check_cygwin_path(test_path, start_path + extension); } else { // name is specified, so we can just re-use cygwin_safe_path test_path = cygwin_safe_path / boost::filesystem::path(name + extension); } // re-check for existence of file (after adding extension) try { // is_regular may throw if directory is not readable if (boost::filesystem::is_regular(test_path)) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 final_path = test_path.string(); #else final_path = test_path.file_string(); #endif return true; } } catch (...) {} // no plug-in file found return false; } void plugin::open_plugin(const std::string& plugin_file, data_type& plugin_data) { // get the name of the plugin (for create/destroy symbol names) plugin_data.m_plugin_name = get_plugin_name(plugin_file); // attempt to open the plugin; note that this tries all search paths // and also tries a variety of platform-specific extensions plugin_data.m_lib_handle = load_dynamic_library(plugin_file.c_str()); if (plugin_data.m_lib_handle == NULL) { #ifndef PION_WIN32 const char *error_msg = dlerror(); if (error_msg != NULL) { std::string error_str(plugin_file); error_str += " ("; error_str += error_msg; error_str += ')'; BOOST_THROW_EXCEPTION( error::open_plugin() << error::errinfo_plugin_name(plugin_data.m_plugin_name) << error::errinfo_message(error_str) ); } else #endif BOOST_THROW_EXCEPTION( error::open_plugin() << error::errinfo_plugin_name(plugin_data.m_plugin_name) ); } // find the function used to create new plugin objects plugin_data.m_create_func = get_library_symbol(plugin_data.m_lib_handle, PION_PLUGIN_CREATE + plugin_data.m_plugin_name); if (plugin_data.m_create_func == NULL) { close_dynamic_library(plugin_data.m_lib_handle); BOOST_THROW_EXCEPTION( error::plugin_missing_symbol() << error::errinfo_plugin_name(plugin_data.m_plugin_name) << error::errinfo_symbol_name(PION_PLUGIN_CREATE + plugin_data.m_plugin_name) ); } // find the function used to destroy existing plugin objects plugin_data.m_destroy_func = get_library_symbol(plugin_data.m_lib_handle, PION_PLUGIN_DESTROY + plugin_data.m_plugin_name); if (plugin_data.m_destroy_func == NULL) { close_dynamic_library(plugin_data.m_lib_handle); BOOST_THROW_EXCEPTION( error::plugin_missing_symbol() << error::errinfo_plugin_name(plugin_data.m_plugin_name) << error::errinfo_symbol_name(PION_PLUGIN_DESTROY + plugin_data.m_plugin_name) ); } } std::string plugin::get_plugin_name(const std::string& plugin_file) { return boost::filesystem::basename(boost::filesystem::path(plugin_file)); } void plugin::get_all_plugin_names(std::vector& plugin_names) { // Iterate through all the Plugin directories. std::vector::iterator it; config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); for (it = cfg.m_plugin_dirs.begin(); it != cfg.m_plugin_dirs.end(); ++it) { // Find all shared libraries in the directory and add them to the list of Plugin names. boost::filesystem::directory_iterator end; for (boost::filesystem::directory_iterator it2(*it); it2 != end; ++it2) { if (boost::filesystem::is_regular(*it2)) { if (boost::filesystem::extension(it2->path()) == plugin::PION_PLUGIN_EXTENSION) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 plugin_names.push_back(plugin::get_plugin_name(it2->path().filename().string())); #else plugin_names.push_back(plugin::get_plugin_name(it2->path().leaf())); #endif } } } } // Append static-linked libraries for (map_type::const_iterator itr = cfg.m_plugin_map.begin(); itr != cfg.m_plugin_map.end(); ++itr) { const data_type& plugin_data = *(itr->second); if (plugin_data.m_lib_handle == NULL) { plugin_names.push_back(plugin_data.m_plugin_name); } } } void *plugin::load_dynamic_library(const std::string& plugin_file) { #ifdef PION_WIN32 #ifdef _MSC_VER return LoadLibraryA(plugin_file.c_str()); #else return LoadLibrary(plugin_file.c_str()); #endif #else // convert into a full/absolute/complete path since dlopen() // does not always search the CWD on some operating systems # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 const boost::filesystem::path full_path = boost::filesystem::absolute(plugin_file); #else const boost::filesystem::path full_path = boost::filesystem::complete(plugin_file); #endif // NOTE: you must load shared libraries using RTLD_GLOBAL on Unix platforms // due to a bug in GCC (or Boost::any, depending on which crowd you want to believe). // see: http://svn.boost.org/trac/boost/ticket/754 # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 return dlopen(full_path.string().c_str(), RTLD_LAZY | RTLD_GLOBAL); #else return dlopen(full_path.file_string().c_str(), RTLD_LAZY | RTLD_GLOBAL); #endif #endif } void plugin::close_dynamic_library(void *lib_handle) { #ifdef PION_WIN32 // Apparently, FreeLibrary sometimes causes crashes when running // unit tests under Windows. // It's hard to pin down, because many things can suppress the crashes, // such as enabling logging or setting breakpoints (i.e. things that // might help pin it down.) Also, it's very intermittent, and can be // strongly affected by other processes that are running. // So, please don't call FreeLibrary here unless you've been able to // reproduce and fix the crashing of the unit tests. //FreeLibrary((HINSTANCE) lib_handle); #else dlclose(lib_handle); #endif } void *plugin::get_library_symbol(void *lib_handle, const std::string& symbol) { #ifdef PION_WIN32 return (void*)GetProcAddress((HINSTANCE) lib_handle, symbol.c_str()); #else return dlsym(lib_handle, symbol.c_str()); #endif } void plugin::add_static_entry_point(const std::string& plugin_name, void *create_func, void *destroy_func) { // check for duplicate config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); map_type::iterator itr = cfg.m_plugin_map.find(plugin_name); if (itr == cfg.m_plugin_map.end()) { // no plug-ins found with the same name // all is good -> insert it into the plug-in map data_type *plugin_data = new data_type(plugin_name); plugin_data->m_lib_handle = NULL; // this will indicate that we are using statically linked plug-in plugin_data->m_create_func = create_func; plugin_data->m_destroy_func = destroy_func; cfg.m_plugin_map.insert(std::make_pair(plugin_name, plugin_data)); } } } // end namespace pion pion-5.0.4+dfsg.orig/src/http_cookie_auth.cpp0000644000372000001440000002646012215647065020601 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // static members of cookie_auth const unsigned int cookie_auth::CACHE_EXPIRATION = 3600; // 1 hour const unsigned int cookie_auth::RANDOM_COOKIE_BYTES = 20; const std::string cookie_auth::AUTH_COOKIE_NAME = "pion_session_id"; // cookie_auth member functions cookie_auth::cookie_auth(user_manager_ptr userManager, const std::string& login, const std::string& logout, const std::string& redirect) : http::auth(userManager), m_login(login), m_logout(logout), m_redirect(redirect), m_random_gen(), m_random_range(0, 255), m_random_die(m_random_gen, m_random_range), m_cache_cleanup_time(boost::posix_time::second_clock::universal_time()) { // set logger for this class set_logger(PION_GET_LOGGER("pion.http.cookie_auth")); // Seed random number generator with current time as time_t int value, cast to the required type. // (Note that boost::mt19937::result_type is boost::uint32_t, and casting to an unsigned n-bit integer is // defined by the standard to keep the lower n bits. Since ::time() returns seconds since Jan 1, 1970, // it will be a long time before we lose any entropy here, even if time_t is a 64-bit int.) m_random_gen.seed(static_cast(::time(NULL))); // generate some random numbers to increase entropy of the rng for (unsigned int n = 0; n < 100; ++n) m_random_die(); } bool cookie_auth::handle_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { if (process_login(http_request_ptr,tcp_conn)) { return false; // we processed login/logout request, no future processing for this request permitted } if (!need_authentication(http_request_ptr)) { return true; // this request does not require authentication } // check if it is redirection page.. If yes, then do not test its credentials ( as used for login) if (!m_redirect.empty() && m_redirect==http_request_ptr->get_resource()) { return true; // this request does not require authentication } // check cache for expiration boost::posix_time::ptime time_now(boost::posix_time::second_clock::universal_time()); expire_cache(time_now); // if we are here, we need to check if access authorized... const std::string auth_cookie(http_request_ptr->get_cookie(AUTH_COOKIE_NAME)); if (! auth_cookie.empty()) { // check if this cookie is in user cache boost::mutex::scoped_lock cache_lock(m_cache_mutex); user_cache_type::iterator user_cache_itr=m_user_cache.find(auth_cookie); if (user_cache_itr != m_user_cache.end()) { // we find those credential in our cache... // we can approve authorization now! http_request_ptr->set_user(user_cache_itr->second.second); // and update cache timeout user_cache_itr->second.first = time_now; return true; } } // user not found handle_unauthorized(http_request_ptr,tcp_conn); return false; } void cookie_auth::set_option(const std::string& name, const std::string& value) { if (name=="login") m_login = value; else if (name=="logout") m_logout = value; else if (name=="redirect") m_redirect = value; else BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } bool cookie_auth::process_login(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { // strip off trailing slash if the request has one std::string resource(http::server::strip_trailing_slash(http_request_ptr->get_resource())); if (resource != m_login && resource != m_logout) { return false; // no login processing done } std::string redirect_url = http_request_ptr->get_query("url"); std::string new_cookie; bool delete_cookie = false; if (resource == m_login) { // process login // check username std::string username = http_request_ptr->get_query("user"); std::string password = http_request_ptr->get_query("pass"); // match username/password user_ptr user=m_user_manager->get_user(username,password); if (!user) { // authentication failed, process as in case of failed authentication... handle_unauthorized(http_request_ptr,tcp_conn); return true; } // ok we have a new user session, create a new cookie, add to cache // create random cookie std::string rand_binary; rand_binary.reserve(RANDOM_COOKIE_BYTES); for (unsigned int i=0; i(m_random_die()); } algorithm::base64_encode(rand_binary, new_cookie); // add new session to cache boost::posix_time::ptime time_now(boost::posix_time::second_clock::universal_time()); boost::mutex::scoped_lock cache_lock(m_cache_mutex); m_user_cache.insert(std::make_pair(new_cookie,std::make_pair(time_now,user))); } else { // process logout sequence // if auth cookie presented - clean cache out const std::string auth_cookie(http_request_ptr->get_cookie(AUTH_COOKIE_NAME)); if (! auth_cookie.empty()) { boost::mutex::scoped_lock cache_lock(m_cache_mutex); user_cache_type::iterator user_cache_itr=m_user_cache.find(auth_cookie); if (user_cache_itr!=m_user_cache.end()) { m_user_cache.erase(user_cache_itr); } } // and remove cookie from browser delete_cookie = true; } // if redirect defined - send redirect if (! redirect_url.empty()) { handle_redirection(http_request_ptr,tcp_conn,redirect_url,new_cookie,delete_cookie); } else { // otherwise - OK handle_ok(http_request_ptr,tcp_conn,new_cookie,delete_cookie); } // yes, we processed login/logout somehow return true; } void cookie_auth::handle_unauthorized(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { // if redirection option is used, send redirect if (!m_redirect.empty()) { handle_redirection(http_request_ptr,tcp_conn,m_redirect,"",false); return; } // authentication failed, send 401..... static const std::string CONTENT = " " "" "" "Error" "" "" "

401 Unauthorized.

" " "; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_UNAUTHORIZED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_UNAUTHORIZED); writer->write_no_copy(CONTENT); writer->send(); } void cookie_auth::handle_redirection(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string &redirection_url, const std::string &new_cookie, bool delete_cookie ) { // authentication failed, send 302..... static const std::string CONTENT = " " "" "" "Redirect" "" "" "

302 Found.

" " "; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_FOUND); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_FOUND); writer->get_response().add_header(http::types::HEADER_LOCATION, redirection_url); // Note: use empty pass "" while setting cookies to workaround IE/FF difference // It is assumed that request url points to the root // ToDo: find a better workaround if (delete_cookie) { // remove cookie writer->get_response().delete_cookie(AUTH_COOKIE_NAME,""); } else if (!new_cookie.empty()) { // set up a new cookie writer->get_response().set_cookie(AUTH_COOKIE_NAME, new_cookie,""); } writer->write_no_copy(CONTENT); writer->send(); } void cookie_auth::handle_ok(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string &new_cookie, bool delete_cookie ) { // send 204 (No Content) response http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_NO_CONTENT); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NO_CONTENT); // Note: use empty pass "" while setting cookies to workaround IE/FF difference // It is assumed that request url points to the root // ToDo: find a better workaround if (delete_cookie) { // remove cookie writer->get_response().delete_cookie(AUTH_COOKIE_NAME,""); } else if(!new_cookie.empty()) { // set up a new cookie writer->get_response().set_cookie(AUTH_COOKIE_NAME, new_cookie,""); } writer->send(); } void cookie_auth::expire_cache(const boost::posix_time::ptime &time_now) { if (time_now > m_cache_cleanup_time + boost::posix_time::seconds(CACHE_EXPIRATION)) { // expire cache boost::mutex::scoped_lock cache_lock(m_cache_mutex); user_cache_type::iterator i; user_cache_type::iterator next=m_user_cache.begin(); while (next!=m_user_cache.end()) { i=next; ++next; if (time_now > i->second.first + boost::posix_time::seconds(CACHE_EXPIRATION)) { // ok - this is an old record.. expire it now m_user_cache.erase(i); } } m_cache_cleanup_time = time_now; } } } // end namespace http } // end namespace pion pion-5.0.4+dfsg.orig/src/http_plugin_server.cpp0000644000372000001440000002526412215647065021174 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // plugin_server member functions void plugin_server::add_service(const std::string& resource, http::plugin_service *service_ptr) { plugin_ptr plugin_ptr; const std::string clean_resource(strip_trailing_slash(resource)); service_ptr->set_resource(clean_resource); m_services.add(clean_resource, service_ptr); http::server::add_resource(clean_resource, boost::ref(*service_ptr)); PION_LOG_INFO(m_logger, "Loaded static web service for resource (" << clean_resource << ")"); } void plugin_server::load_service(const std::string& resource, const std::string& service_name) { const std::string clean_resource(strip_trailing_slash(resource)); http::plugin_service *service_ptr; service_ptr = m_services.load(clean_resource, service_name); http::server::add_resource(clean_resource, boost::ref(*service_ptr)); service_ptr->set_resource(clean_resource); PION_LOG_INFO(m_logger, "Loaded web service plug-in for resource (" << clean_resource << "): " << service_name); } void plugin_server::set_service_option(const std::string& resource, const std::string& name, const std::string& value) { const std::string clean_resource(strip_trailing_slash(resource)); m_services.run(clean_resource, boost::bind(&http::plugin_service::set_option, _1, name, value)); PION_LOG_INFO(m_logger, "Set web service option for resource (" << resource << "): " << name << '=' << value); } void plugin_server::load_service_config(const std::string& config_name) { std::string config_file; if (! plugin::find_config_file(config_file, config_name)) BOOST_THROW_EXCEPTION( error::file_not_found() << error::errinfo_file_name(config_name) ); // open the file for reading std::ifstream config_stream; config_stream.open(config_file.c_str(), std::ios::in); if (! config_stream.is_open()) BOOST_THROW_EXCEPTION( error::open_file() << error::errinfo_file_name(config_name) ); // parse the contents of the file http::auth_ptr my_auth_ptr; enum ParseState { PARSE_NEWLINE, PARSE_COMMAND, PARSE_RESOURCE, PARSE_VALUE, PARSE_COMMENT, PARSE_USERNAME } parse_state = PARSE_NEWLINE; std::string command_string; std::string resource_string; std::string username_string; std::string value_string; std::string option_name_string; std::string option_value_string; int c = config_stream.get(); // read the first character while (config_stream) { switch(parse_state) { case PARSE_NEWLINE: // parsing command portion (or beginning of line) if (c == '#') { // line is a comment parse_state = PARSE_COMMENT; } else if (isalpha(c)) { // first char in command parse_state = PARSE_COMMAND; // ignore case for commands command_string += tolower(c); } else if (c != '\r' && c != '\n') { // check for blank lines BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); } break; case PARSE_COMMAND: // parsing command portion (or beginning of line) if (c == ' ' || c == '\t') { // command finished -> check if valid if (command_string=="path" || command_string=="auth" || command_string=="restrict") { value_string.clear(); parse_state = PARSE_VALUE; } else if (command_string=="service" || command_string=="option") { resource_string.clear(); parse_state = PARSE_RESOURCE; } else if (command_string=="user") { username_string.clear(); parse_state = PARSE_USERNAME; } else { BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); } } else if (! isalpha(c)) { // commands may only contain alpha chars BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); } else { // ignore case for commands command_string += tolower(c); } break; case PARSE_RESOURCE: // parsing resource portion (/hello) if (c == ' ' || c == '\t') { // check for leading whitespace if (! resource_string.empty()) { // resource finished value_string.clear(); parse_state = PARSE_VALUE; } } else if (c == '\r' || c == '\n') { // line truncated before value BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); } else { // add char to resource resource_string += c; } break; case PARSE_USERNAME: // parsing username for user command if (c == ' ' || c == '\t') { // check for leading whitespace if (! username_string.empty()) { // username finished value_string.clear(); parse_state = PARSE_VALUE; } } else if (c == '\r' || c == '\n') { // line truncated before value (missing username) BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); } else { // add char to username username_string += c; } break; case PARSE_VALUE: // parsing value portion if (c == '\r' || c == '\n') { // value is finished if (value_string.empty()) { // value must not be empty BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); } else if (command_string == "path") { // finished path command try { plugin::add_plugin_directory(value_string); } catch (std::exception& e) { PION_LOG_WARN(m_logger, boost::diagnostic_information(e)); } } else if (command_string == "auth") { // finished auth command user_manager_ptr user_mgr(new user_manager); if (value_string == "basic"){ my_auth_ptr.reset(new http::basic_auth(user_mgr)); } else if (value_string == "cookie"){ my_auth_ptr.reset(new http::cookie_auth(user_mgr)); } else { // only basic and cookie authentications are supported BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); } } else if (command_string == "restrict") { // finished restrict command if (! my_auth_ptr) // Authentication type must be defined before restrict BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); else if (value_string.empty()) // No service defined for restrict parameter BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); my_auth_ptr->add_restrict(value_string); } else if (command_string == "user") { // finished user command if (! my_auth_ptr) // Authentication type must be defined before users BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); else if (value_string.empty()) // No password defined for user parameter BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); my_auth_ptr->add_user(username_string, value_string); } else if (command_string == "service") { // finished service command load_service(resource_string, value_string); } else if (command_string == "option") { // finished option command std::string::size_type pos = value_string.find('='); if (pos == std::string::npos) BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); option_name_string = value_string.substr(0, pos); option_value_string = value_string.substr(pos + 1); set_service_option(resource_string, option_name_string, option_value_string); } command_string.clear(); parse_state = PARSE_NEWLINE; } else if (c == ' ' || c == '\t') { // only skip leading whitespace (value may contain spaces, etc) if (! value_string.empty()) value_string += c; } else { // add char to value value_string += c; } break; case PARSE_COMMENT: // skipping comment line if (c == '\r' || c == '\n') parse_state = PARSE_NEWLINE; break; } // read the next character c = config_stream.get(); } // update authentication configuration for the server set_authentication(my_auth_ptr); } } // end namespace http } // end namespace pion pion-5.0.4+dfsg.orig/src/algorithm.cpp0000644000372000001440000003333212215647065017232 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include // macro to shift bitmask by a single bit #define SHIFT_BITMASK(ptr, mask) if (mask & 0x01) { mask = 0x80; ++ptr; } else mask >>= 1; namespace pion { // begin namespace pion bool algorithm::base64_decode(const std::string &input, std::string &output) { static const char nop = -1; static const char decoding_data[] = { nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop, 62, nop,nop,nop, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,nop,nop, nop,nop,nop,nop, nop, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,nop, nop,nop,nop,nop, nop,26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop }; unsigned int input_length=input.size(); const char * input_ptr = input.data(); // allocate space for output string output.clear(); output.reserve(((input_length+2)/3)*4); // for each 4-bytes sequence from the input, extract 4 6-bits sequences by droping first two bits // and regenerate into 3 8-bits sequence for (unsigned int i=0; i(input_ptr[i])]; if(base64code0==nop) // non base64 character return false; if(!(++i(input_ptr[i])]; if(base64code1==nop) // non base64 character return false; output += ((base64code0 << 2) | ((base64code1 >> 4) & 0x3)); if(++i(input_ptr[i])]; if(base64code2==nop) // non base64 character return false; output += ((base64code1 << 4) & 0xf0) | ((base64code2 >> 2) & 0x0f); } if(++i(input_ptr[i])]; if(base64code3==nop) // non base64 character return false; output += (((base64code2 << 6) & 0xc0) | base64code3 ); } } return true; } bool algorithm::base64_encode(const std::string &input, std::string &output) { static const char encoding_data[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; unsigned int input_length=input.size(); const char * input_ptr = input.data(); // allocate space for output string output.clear(); output.reserve(((input_length+2)/3)*4); // for each 3-bytes sequence from the input, extract 4 6-bits sequences and encode using // encoding_data lookup table. // if input do not contains enough chars to complete 3-byte sequence,use pad char '=' for (unsigned int i=0; i> 2) & 0x3f; // 1-byte 6 bits output += encoding_data[base64code0]; base64code1 = (input_ptr[i] << 4 ) & 0x3f; // 1-byte 2 bits + if (++i < input_length) { base64code1 |= (input_ptr[i] >> 4) & 0x0f; // 2-byte 4 bits output += encoding_data[base64code1]; base64code2 = (input_ptr[i] << 2) & 0x3f; // 2-byte 4 bits + if (++i < input_length) { base64code2 |= (input_ptr[i] >> 6) & 0x03; // 3-byte 2 bits base64code3 = input_ptr[i] & 0x3f; // 3-byte 6 bits output += encoding_data[base64code2]; output += encoding_data[base64code3]; } else { output += encoding_data[base64code2]; output += '='; } } else { output += encoding_data[base64code1]; output += '='; output += '='; } } return true; } std::string algorithm::url_decode(const std::string& str) { char decode_buf[3]; std::string result; result.reserve(str.size()); for (std::string::size_type pos = 0; pos < str.size(); ++pos) { switch(str[pos]) { case '+': // convert to space character result += ' '; break; case '%': // decode hexidecimal value if (pos + 2 < str.size()) { decode_buf[0] = str[++pos]; decode_buf[1] = str[++pos]; decode_buf[2] = '\0'; result += static_cast( strtol(decode_buf, 0, 16) ); } else { // recover from error by not decoding character result += '%'; } break; default: // character does not need to be escaped result += str[pos]; } }; return result; } std::string algorithm::url_encode(const std::string& str) { char encode_buf[4]; std::string result; encode_buf[0] = '%'; result.reserve(str.size()); // character selection for this algorithm is based on the following url: // http://www.blooberry.com/indexdot/html/topics/urlencoding.htm for (std::string::size_type pos = 0; pos < str.size(); ++pos) { switch(str[pos]) { default: if (str[pos] > 32 && str[pos] < 127) { // character does not need to be escaped result += str[pos]; break; } // else pass through to next case case ' ': case '$': case '&': case '+': case ',': case '/': case ':': case ';': case '=': case '?': case '@': case '"': case '<': case '>': case '#': case '%': case '{': case '}': case '|': case '\\': case '^': case '~': case '[': case ']': case '`': // the character needs to be encoded sprintf(encode_buf+1, "%.2X", (unsigned char)(str[pos])); result += encode_buf; break; } }; return result; } // TODO //std::string algorithm::xml_decode(const std::string& str) //{ //} std::string algorithm::xml_encode(const std::string& str) { std::string result; result.reserve(str.size() + 20); // Assume ~5 characters converted (length increases) const unsigned char *ptr = reinterpret_cast(str.c_str()); const unsigned char *end_ptr = ptr + str.size(); while (ptr < end_ptr) { // check byte ranges for valid UTF-8 // see http://en.wikipedia.org/wiki/UTF-8 // also, see http://www.w3.org/TR/REC-xml/#charsets // this implementation is the strictest subset of both if ((*ptr >= 0x20 && *ptr <= 0x7F) || *ptr == 0x9 || *ptr == 0xa || *ptr == 0xd) { // regular ASCII character switch(*ptr) { // Escape special XML characters. case '&': result += "&"; break; case '<': result += "<"; break; case '>': result += ">"; break; case '\"': result += """; break; case '\'': result += "'"; break; default: result += *ptr; } } else if (*ptr >= 0xC2 && *ptr <= 0xDF) { // two-byte sequence if (*(ptr+1) >= 0x80 && *(ptr+1) <= 0xBF) { result += *ptr; result += *(++ptr); } else { // insert replacement char result += 0xef; result += 0xbf; result += 0xbd; } } else if (*ptr >= 0xE0 && *ptr <= 0xEF) { // three-byte sequence if (*(ptr+1) >= 0x80 && *(ptr+1) <= 0xBF && *(ptr+2) >= 0x80 && *(ptr+2) <= 0xBF) { result += *ptr; result += *(++ptr); result += *(++ptr); } else { // insert replacement char result += 0xef; result += 0xbf; result += 0xbd; } } else if (*ptr >= 0xF0 && *ptr <= 0xF4) { // four-byte sequence if (*(ptr+1) >= 0x80 && *(ptr+1) <= 0xBF && *(ptr+2) >= 0x80 && *(ptr+2) <= 0xBF && *(ptr+3) >= 0x80 && *(ptr+3) <= 0xBF) { result += *ptr; result += *(++ptr); result += *(++ptr); result += *(++ptr); } else { // insert replacement char result += 0xef; result += 0xbf; result += 0xbd; } } else { // insert replacement char result += 0xef; result += 0xbf; result += 0xbd; } ++ptr; } return result; } void algorithm::float_from_bytes(long double& value, const unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits) { // get sign of the number from the first bit const int value_sign = (*ptr & 0x80) ? -1 : 1; // build exponent value from bitstream unsigned char mask = 0x80; boost::int16_t exponent = 0; for (size_t n = 0; n < num_exp_bits; ++n) { SHIFT_BITMASK(ptr, mask); exponent *= 2; if (*ptr & mask) exponent += 1; } // build significand from bitstream long double significand = exponent ? 1.0 : 0.0; long double significand_value = 1.0; while (num_fraction_bits) { SHIFT_BITMASK(ptr, mask); significand_value /= 2; if (*ptr & mask) significand += significand_value; --num_fraction_bits; } // calculate final value exponent -= (::pow((long double)2, (int)(num_exp_bits - 1)) - 1); value = value_sign * significand * ::pow((long double)2, exponent); } void algorithm::float_to_bytes(long double value, unsigned char *buf, size_t num_exp_bits, size_t num_fraction_bits) { // first initialize output buffer to zeros unsigned char *ptr = buf; memset(ptr, 0x00, ::ceil(static_cast(num_exp_bits + num_fraction_bits + 1) / 8)); // initialize first byte starting with sign of number if (value < 0) { *ptr = 0x80; value *= -1; } // break down numbers >= 1.0 by incrementing the exponent & dividing by 2 boost::int16_t exponent = 0; while (value >= 1) { value /= 2; ++exponent; } // skip past exponent bits because we don't know the value yet unsigned char mask = 0x40; for (size_t n = num_exp_bits; n > 0; --n) { if (n >= 8) { ++ptr; n -= 7; } else { SHIFT_BITMASK(ptr, mask); } } // serialize fractional value < 1.0 bool got_exponent = false; boost::uint16_t num_bits = 0; while (value && num_bits < num_fraction_bits) { value *= 2; if (got_exponent) { if (value >= 1.0) { *ptr |= mask; value -= 1.0; } SHIFT_BITMASK(ptr, mask); ++num_bits; } else { --exponent; if (value >= 1.0) { value -= 1.0; got_exponent = true; } } } // normalize exponent. // note: we should have a zero exponent if value == 0 boost::int32_t high_bit = ::pow((long double)2, (int)(num_exp_bits - 1)); if (got_exponent) exponent += (high_bit - 1); else exponent = 0; // serialize exponent bits ptr = buf; mask = 0x80; for (size_t n = 0; n < num_exp_bits; ++n) { SHIFT_BITMASK(ptr, mask); if (exponent >= high_bit) { *ptr |= mask; exponent -= high_bit; } high_bit /= 2; } } } // end namespace pion pion-5.0.4+dfsg.orig/src/Makefile.in0000644000372000001440000005163512215647101016602 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libpion_la_DEPENDENCIES = am_libpion_la_OBJECTS = admin_rights.lo algorithm.lo logger.lo \ plugin.lo process.lo scheduler.lo spdy_decompressor.lo \ spdy_parser.lo tcp_server.lo tcp_timer.lo http_auth.lo \ http_basic_auth.lo http_cookie_auth.lo http_message.lo \ http_parser.lo http_plugin_server.lo http_reader.lo \ http_server.lo http_types.lo http_writer.lo libpion_la_OBJECTS = $(am_libpion_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent libpion_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(libpion_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/pion depcomp = $(SHELL) $(top_srcdir)/m4/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_$(V)) am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_$(V)) am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libpion_la_SOURCES) DIST_SOURCES = $(libpion_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I../include lib_LTLIBRARIES = libpion.la libpion_la_SOURCES = \ admin_rights.cpp algorithm.cpp logger.cpp plugin.cpp process.cpp scheduler.cpp \ spdy_decompressor.cpp spdy_parser.cpp \ tcp_server.cpp tcp_timer.cpp \ http_auth.cpp http_basic_auth.cpp http_cookie_auth.cpp http_message.cpp \ http_parser.cpp http_plugin_server.cpp http_reader.cpp http_server.cpp \ http_types.cpp http_writer.cpp libpion_la_LDFLAGS = -no-undefined -release $(PION_LIBRARY_VERSION) libpion_la_LIBADD = @PION_EXTERNAL_LIBS@ EXTRA_DIST = *.vcxproj *.vcxproj.filters all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libpion.la: $(libpion_la_OBJECTS) $(libpion_la_DEPENDENCIES) $(AM_V_CXXLD)$(libpion_la_LINK) -rpath $(libdir) $(libpion_la_OBJECTS) $(libpion_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/admin_rights.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/algorithm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_auth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_basic_auth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_cookie_auth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_message.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_parser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_plugin_server.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_reader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_server.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_types.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_writer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logger.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scheduler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spdy_decompressor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spdy_parser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcp_server.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcp_timer.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.4+dfsg.orig/src/http_basic_auth.cpp0000644000372000001440000001333012215647065020401 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // static members of basic_auth const unsigned int basic_auth::CACHE_EXPIRATION = 300; // 5 minutes // basic_auth member functions basic_auth::basic_auth(user_manager_ptr userManager, const std::string& realm) : http::auth(userManager), m_realm(realm), m_cache_cleanup_time(boost::posix_time::second_clock::universal_time()) { set_logger(PION_GET_LOGGER("pion.http.basic_auth")); } bool basic_auth::handle_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { if (!need_authentication(http_request_ptr)) { return true; // this request does not require authentication } boost::posix_time::ptime time_now(boost::posix_time::second_clock::universal_time()); if (time_now > m_cache_cleanup_time + boost::posix_time::seconds(CACHE_EXPIRATION)) { // expire cache boost::mutex::scoped_lock cache_lock(m_cache_mutex); user_cache_type::iterator i; user_cache_type::iterator next=m_user_cache.begin(); while (next!=m_user_cache.end()) { i=next; ++next; if (time_now > i->second.first + boost::posix_time::seconds(CACHE_EXPIRATION)) { // ok - this is an old record.. expire it now m_user_cache.erase(i); } } m_cache_cleanup_time = time_now; } // if we are here, we need to check if access authorized... std::string authorization = http_request_ptr->get_header(http::types::HEADER_AUTHORIZATION); if (!authorization.empty()) { std::string credentials; if (parse_authorization(authorization, credentials)) { // to do - use fast cache to match with active credentials boost::mutex::scoped_lock cache_lock(m_cache_mutex); user_cache_type::iterator user_cache_ptr=m_user_cache.find(credentials); if (user_cache_ptr!=m_user_cache.end()) { // we found the credentials in our cache... // we can approve authorization now! http_request_ptr->set_user(user_cache_ptr->second.second); user_cache_ptr->second.first = time_now; return true; } std::string username; std::string password; if (parse_credentials(credentials, username, password)) { // match username/password user_ptr user=m_user_manager->get_user(username, password); if (user) { // add user to the cache m_user_cache.insert(std::make_pair(credentials, std::make_pair(time_now, user))); // add user credentials to the request object http_request_ptr->set_user(user); return true; } } } } // user not found handle_unauthorized(http_request_ptr, tcp_conn); return false; } void basic_auth::set_option(const std::string& name, const std::string& value) { if (name=="realm") m_realm = value; else BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } bool basic_auth::parse_authorization(const std::string& authorization, std::string &credentials) { if (!boost::algorithm::starts_with(authorization, "Basic ")) return false; credentials = authorization.substr(6); if (credentials.empty()) return false; return true; } bool basic_auth::parse_credentials(const std::string &credentials, std::string &username, std::string &password) { std::string user_password; if (! algorithm::base64_decode(credentials, user_password)) return false; // find ':' symbol std::string::size_type i = user_password.find(':'); if (i==0 || i==std::string::npos) return false; username = user_password.substr(0, i); password = user_password.substr(i+1); return true; } void basic_auth::handle_unauthorized(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { // authentication failed, send 401..... static const std::string CONTENT = " " "" "" "Error" "" "" "

401 Unauthorized.

" " "; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_UNAUTHORIZED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_UNAUTHORIZED); writer->get_response().add_header("WWW-Authenticate", "Basic realm=\"" + m_realm + "\""); writer->write_no_copy(CONTENT); writer->send(); } } // end namespace http } // end namespace pion pion-5.0.4+dfsg.orig/src/spdy_decompressor.cpp0000644000372000001440000001522312215647065021007 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include namespace pion { // begin namespace pion namespace spdy { // begin namespace spdy // decompressor static members const char decompressor::SPDY_ZLIB_DICTIONARY[] = "optionsgetheadpostputdeletetraceacceptaccept-charsetaccept-encodingaccept-" "languageauthorizationexpectfromhostif-modified-sinceif-matchif-none-matchi" "f-rangeif-unmodifiedsincemax-forwardsproxy-authorizationrangerefererteuser" "-agent10010120020120220320420520630030130230330430530630740040140240340440" "5406407408409410411412413414415416417500501502503504505accept-rangesageeta" "glocationproxy-authenticatepublicretry-afterservervarywarningwww-authentic" "ateallowcontent-basecontent-encodingcache-controlconnectiondatetrailertran" "sfer-encodingupgradeviawarningcontent-languagecontent-lengthcontent-locati" "oncontent-md5content-rangecontent-typeetagexpireslast-modifiedset-cookieMo" "ndayTuesdayWednesdayThursdayFridaySaturdaySundayJanFebMarAprMayJunJulAugSe" "pOctNovDecchunkedtext/htmlimage/pngimage/jpgimage/gifapplication/xmlapplic" "ation/xhtmltext/plainpublicmax-agecharset=iso-8859-1utf-8gzipdeflateHTTP/1" ".1statusversionurl"; // decompressor member functions decompressor::decompressor() : m_request_zstream(NULL), m_response_zstream(NULL) { m_request_zstream = (z_streamp)malloc(sizeof(z_stream)); BOOST_ASSERT(m_request_zstream); m_request_zstream->zalloc = Z_NULL; m_request_zstream->zfree = Z_NULL; m_request_zstream->opaque = Z_NULL; m_request_zstream->next_in = Z_NULL; m_request_zstream->next_out = Z_NULL; m_request_zstream->avail_in = 0; m_request_zstream->avail_out = 0; m_response_zstream = (z_streamp)malloc(sizeof(z_stream)); BOOST_ASSERT(m_response_zstream); m_response_zstream->zalloc = Z_NULL; m_response_zstream->zfree = Z_NULL; m_response_zstream->opaque = Z_NULL; m_response_zstream->next_in = Z_NULL; m_response_zstream->next_out = Z_NULL; m_response_zstream->avail_in = 0; m_response_zstream->avail_out = 0; int retcode = inflateInit2(m_request_zstream, MAX_WBITS); if (retcode == Z_OK) { retcode = inflateInit2(m_response_zstream, MAX_WBITS); if (retcode == Z_OK) { // Get the dictionary id m_dictionary_id = adler32(0L, Z_NULL, 0); m_dictionary_id = adler32(m_dictionary_id, (const Bytef *)SPDY_ZLIB_DICTIONARY, sizeof(SPDY_ZLIB_DICTIONARY)); } } } decompressor::~decompressor() { inflateEnd(m_request_zstream); inflateEnd(m_response_zstream); free(m_request_zstream); free(m_response_zstream); } char* decompressor::decompress(const char *compressed_data_ptr, boost::uint32_t stream_id, const spdy_control_frame_info& frame, boost::uint32_t header_block_length) { /// Get our decompressor. z_streamp decomp = NULL; if (stream_id % 2 == 0) { // Even streams are server-initiated and should never get a // client-initiated header block. Use reply decompressor. decomp = m_response_zstream; } else if (frame.type == SPDY_HEADERS) { // Odd streams are client-initiated, but may have HEADERS from either // side. Currently, no known clients send HEADERS so we assume they are // all from the server. decomp = m_response_zstream; } else if (frame.type == SPDY_SYN_STREAM) { decomp = m_request_zstream; } else if (frame.type == SPDY_SYN_REPLY) { decomp = m_response_zstream; } else { // Unhandled case. This should never happen. BOOST_ASSERT(false); } BOOST_ASSERT(decomp); // Decompress the data boost::uint32_t uncomp_length = 0; // Catch decompression failures. if (!spdy_decompress_header(compressed_data_ptr, decomp, header_block_length, uncomp_length)) { // Error in decompressing // This error is not catastrophic as many times we might get inconsistent // spdy header frames and we should just log error and continue. // No need to call SetError() return NULL; } return reinterpret_cast(m_uncompressed_header); } bool decompressor::spdy_decompress_header(const char *compressed_data_ptr, z_streamp decomp, boost::uint32_t length, boost::uint32_t& uncomp_length) { int retcode; const boost::uint8_t *hptr = (boost::uint8_t *)compressed_data_ptr; decomp->next_in = (Bytef *)hptr; decomp->avail_in = length; decomp->next_out = m_uncompressed_header; decomp->avail_out = MAX_UNCOMPRESSED_DATA_BUF_SIZE; retcode = inflate(decomp, Z_SYNC_FLUSH); if (retcode == Z_NEED_DICT) { if (decomp->adler != m_dictionary_id) { // Decompressor wants a different dictionary id } else { retcode = inflateSetDictionary(decomp, (const Bytef *)SPDY_ZLIB_DICTIONARY, sizeof(SPDY_ZLIB_DICTIONARY)); if (retcode == Z_OK) { retcode = inflate(decomp, Z_SYNC_FLUSH); } } } // Handle Errors. if (retcode != Z_OK) { // This error is not catastrophic as many times we might get inconsistent // spdy header frames and we should just log error and continue. // No need to call SetError() return false; } // Handle successful inflation. uncomp_length = MAX_UNCOMPRESSED_DATA_BUF_SIZE - decomp->avail_out; if (decomp->avail_in != 0) { // Error condition // This error is not catastrophic as many times we might get inconsistent // spdy header frames and we should just log error and continue. // No need to call SetError() return false; } return true; } } // end namespace spdy } // end namespace pion pion-5.0.4+dfsg.orig/src/pion.vcxproj.filters0000644000372000001440000001344412215647065020573 0ustar robertousers {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files pion-5.0.4+dfsg.orig/src/http_message.cpp0000644000372000001440000002066012215647065017727 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // static members of message const boost::regex message::REGEX_ICASE_CHUNKED(".*chunked.*", boost::regex::icase); // message member functions std::size_t message::send(tcp::connection& tcp_conn, boost::system::error_code& ec, bool headers_only) { // initialize write buffers for send operation using HTTP headers write_buffers_t write_buffers; prepare_buffers_for_send(write_buffers, tcp_conn.get_keep_alive(), false); // append payload content to write buffers (if there is any) if (!headers_only && get_content_length() > 0 && get_content() != NULL) write_buffers.push_back(boost::asio::buffer(get_content(), get_content_length())); // send the message and return the result return tcp_conn.write(write_buffers, ec); } std::size_t message::receive(tcp::connection& tcp_conn, boost::system::error_code& ec, parser& http_parser) { std::size_t last_bytes_read = 0; // make sure that we start out with an empty message clear(); if (tcp_conn.get_pipelined()) { // there are pipelined messages available in the connection's read buffer const char *read_ptr; const char *read_end_ptr; tcp_conn.load_read_pos(read_ptr, read_end_ptr); last_bytes_read = (read_end_ptr - read_ptr); http_parser.set_read_buffer(read_ptr, last_bytes_read); } else { // read buffer is empty (not pipelined) -> read some bytes from the connection last_bytes_read = tcp_conn.read_some(ec); if (ec) return 0; BOOST_ASSERT(last_bytes_read > 0); http_parser.set_read_buffer(tcp_conn.get_read_buffer().data(), last_bytes_read); } // incrementally read and parse bytes from the connection bool force_connection_closed = false; boost::tribool parse_result; while (true) { // parse bytes available in the read buffer parse_result = http_parser.parse(*this, ec); if (! boost::indeterminate(parse_result)) break; // read more bytes from the connection last_bytes_read = tcp_conn.read_some(ec); if (ec || last_bytes_read == 0) { if (http_parser.check_premature_eof(*this)) { // premature EOF encountered if (! ec) ec = make_error_code(boost::system::errc::io_error); return http_parser.get_total_bytes_read(); } else { // EOF reached when content length unknown // assume it is the correct end of content // and everything is OK force_connection_closed = true; parse_result = true; ec.clear(); break; } break; } // update the HTTP parser's read buffer http_parser.set_read_buffer(tcp_conn.get_read_buffer().data(), last_bytes_read); } if (parse_result == false) { // an error occurred while parsing the message headers return http_parser.get_total_bytes_read(); } // set the connection's lifecycle type if (!force_connection_closed && check_keep_alive()) { if ( http_parser.eof() ) { // the connection should be kept alive, but does not have pipelined messages tcp_conn.set_lifecycle(tcp::connection::LIFECYCLE_KEEPALIVE); } else { // the connection has pipelined messages tcp_conn.set_lifecycle(tcp::connection::LIFECYCLE_PIPELINED); // save the read position as a bookmark so that it can be retrieved // by a new HTTP parser, which will be created after the current // message has been handled const char *read_ptr; const char *read_end_ptr; http_parser.load_read_pos(read_ptr, read_end_ptr); tcp_conn.save_read_pos(read_ptr, read_end_ptr); } } else { // default to close the connection tcp_conn.set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); // save the read position as a bookmark so that it can be retrieved // by a new HTTP parser if (http_parser.get_parse_headers_only()) { const char *read_ptr; const char *read_end_ptr; http_parser.load_read_pos(read_ptr, read_end_ptr); tcp_conn.save_read_pos(read_ptr, read_end_ptr); } } return (http_parser.get_total_bytes_read()); } std::size_t message::receive(tcp::connection& tcp_conn, boost::system::error_code& ec, bool headers_only, std::size_t max_content_length) { http::parser http_parser(dynamic_cast(this) != NULL); http_parser.parse_headers_only(headers_only); http_parser.set_max_content_length(max_content_length); return receive(tcp_conn, ec, http_parser); } std::size_t message::write(std::ostream& out, boost::system::error_code& ec, bool headers_only) { // reset error_code ec.clear(); // initialize write buffers for send operation using HTTP headers write_buffers_t write_buffers; prepare_buffers_for_send(write_buffers, true, false); // append payload content to write buffers (if there is any) if (!headers_only && get_content_length() > 0 && get_content() != NULL) write_buffers.push_back(boost::asio::buffer(get_content(), get_content_length())); // write message to the output stream std::size_t bytes_out = 0; for (write_buffers_t::const_iterator i=write_buffers.begin(); i!=write_buffers.end(); ++i) { const char *ptr = boost::asio::buffer_cast(*i); size_t len = boost::asio::buffer_size(*i); out.write(ptr, len); bytes_out += len; } return bytes_out; } std::size_t message::read(std::istream& in, boost::system::error_code& ec, parser& http_parser) { // make sure that we start out with an empty message & clear error_code clear(); ec.clear(); // parse data from file one byte at a time boost::tribool parse_result; char c; while (in) { in.read(&c, 1); if ( ! in ) { ec = make_error_code(boost::system::errc::io_error); break; } http_parser.set_read_buffer(&c, 1); parse_result = http_parser.parse(*this, ec); if (! boost::indeterminate(parse_result)) break; } if (boost::indeterminate(parse_result)) { if (http_parser.check_premature_eof(*this)) { // premature EOF encountered if (! ec) ec = make_error_code(boost::system::errc::io_error); } else { // EOF reached when content length unknown // assume it is the correct end of content // and everything is OK parse_result = true; ec.clear(); } } return (http_parser.get_total_bytes_read()); } std::size_t message::read(std::istream& in, boost::system::error_code& ec, bool headers_only, std::size_t max_content_length) { http::parser http_parser(dynamic_cast(this) != NULL); http_parser.parse_headers_only(headers_only); http_parser.set_max_content_length(max_content_length); return read(in, ec, http_parser); } void message::concatenate_chunks(void) { set_content_length(m_chunk_cache.size()); char *post_buffer = create_content_buffer(); if (m_chunk_cache.size() > 0) std::copy(m_chunk_cache.begin(), m_chunk_cache.end(), post_buffer); } } // end namespace http } // end namespace pion pion-5.0.4+dfsg.orig/src/logger.cpp0000644000372000001440000000122212215647065016514 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include namespace pion { // begin namespace pion // static members of logger #if defined(PION_USE_OSTREAM_LOGGING) logger::log_priority_type logger::m_priority = logger::LOG_LEVEL_INFO; #endif } // end namespace pion pion-5.0.4+dfsg.orig/src/scheduler.cpp0000644000372000001440000001377212215647065017230 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include namespace pion { // begin namespace pion // static members of scheduler const boost::uint32_t scheduler::DEFAULT_NUM_THREADS = 8; const boost::uint32_t scheduler::NSEC_IN_SECOND = 1000000000; // (10^9) const boost::uint32_t scheduler::MICROSEC_IN_SECOND = 1000000; // (10^6) const boost::uint32_t scheduler::KEEP_RUNNING_TIMER_SECONDS = 5; // scheduler member functions void scheduler::shutdown(void) { // lock mutex for thread safety boost::mutex::scoped_lock scheduler_lock(m_mutex); if (m_is_running) { PION_LOG_INFO(m_logger, "Shutting down the thread scheduler"); while (m_active_users > 0) { // first, wait for any active users to exit PION_LOG_INFO(m_logger, "Waiting for " << m_active_users << " scheduler users to finish"); m_no_more_active_users.wait(scheduler_lock); } // shut everything down m_is_running = false; stop_services(); stop_threads(); finish_services(); finish_threads(); PION_LOG_INFO(m_logger, "The thread scheduler has shutdown"); // Make sure anyone waiting on shutdown gets notified m_scheduler_has_stopped.notify_all(); } else { // stop and finish everything to be certain that no events are pending stop_services(); stop_threads(); finish_services(); finish_threads(); // Make sure anyone waiting on shutdown gets notified // even if the scheduler did not startup successfully m_scheduler_has_stopped.notify_all(); } } void scheduler::join(void) { boost::mutex::scoped_lock scheduler_lock(m_mutex); while (m_is_running) { // sleep until scheduler_has_stopped condition is signaled m_scheduler_has_stopped.wait(scheduler_lock); } } void scheduler::keep_running(boost::asio::io_service& my_service, boost::asio::deadline_timer& my_timer) { if (m_is_running) { // schedule this again to make sure the service doesn't complete my_timer.expires_from_now(boost::posix_time::seconds(KEEP_RUNNING_TIMER_SECONDS)); my_timer.async_wait(boost::bind(&scheduler::keep_running, this, boost::ref(my_service), boost::ref(my_timer))); } } void scheduler::add_active_user(void) { if (!m_is_running) startup(); boost::mutex::scoped_lock scheduler_lock(m_mutex); ++m_active_users; } void scheduler::remove_active_user(void) { boost::mutex::scoped_lock scheduler_lock(m_mutex); if (--m_active_users == 0) m_no_more_active_users.notify_all(); } boost::system_time scheduler::get_wakeup_time(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec) { return boost::get_system_time() + boost::posix_time::seconds(sleep_sec) + boost::posix_time::microseconds(sleep_nsec / 1000); } void scheduler::process_service_work(boost::asio::io_service& service) { while (m_is_running) { try { service.run(); } catch (std::exception& e) { PION_LOG_ERROR(m_logger, boost::diagnostic_information(e)); } catch (...) { PION_LOG_ERROR(m_logger, "caught unrecognized exception"); } } } // single_service_scheduler member functions void single_service_scheduler::startup(void) { // lock mutex for thread safety boost::mutex::scoped_lock scheduler_lock(m_mutex); if (! m_is_running) { PION_LOG_INFO(m_logger, "Starting thread scheduler"); m_is_running = true; // schedule a work item to make sure that the service doesn't complete m_service.reset(); keep_running(m_service, m_timer); // start multiple threads to handle async tasks for (boost::uint32_t n = 0; n < m_num_threads; ++n) { boost::shared_ptr new_thread(new boost::thread( boost::bind(&scheduler::process_service_work, this, boost::ref(m_service)) )); m_thread_pool.push_back(new_thread); } } } // one_to_one_scheduler member functions void one_to_one_scheduler::startup(void) { // lock mutex for thread safety boost::mutex::scoped_lock scheduler_lock(m_mutex); if (! m_is_running) { PION_LOG_INFO(m_logger, "Starting thread scheduler"); m_is_running = true; // make sure there are enough services initialized while (m_service_pool.size() < m_num_threads) { boost::shared_ptr service_ptr(new service_pair_type()); m_service_pool.push_back(service_ptr); } // schedule a work item for each service to make sure that it doesn't complete for (service_pool_type::iterator i = m_service_pool.begin(); i != m_service_pool.end(); ++i) { keep_running((*i)->first, (*i)->second); } // start multiple threads to handle async tasks for (boost::uint32_t n = 0; n < m_num_threads; ++n) { boost::shared_ptr new_thread(new boost::thread( boost::bind(&scheduler::process_service_work, this, boost::ref(m_service_pool[n]->first)) )); m_thread_pool.push_back(new_thread); } } } } // end namespace pion pion-5.0.4+dfsg.orig/src/http_parser.cpp0000644000372000001440000017713112215647065017605 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // static members of parser const boost::uint32_t parser::STATUS_MESSAGE_MAX = 1024; // 1 KB const boost::uint32_t parser::METHOD_MAX = 1024; // 1 KB const boost::uint32_t parser::RESOURCE_MAX = 256 * 1024; // 256 KB const boost::uint32_t parser::QUERY_STRING_MAX = 1024 * 1024; // 1 MB const boost::uint32_t parser::HEADER_NAME_MAX = 1024; // 1 KB const boost::uint32_t parser::HEADER_VALUE_MAX = 1024 * 1024; // 1 MB const boost::uint32_t parser::QUERY_NAME_MAX = 1024; // 1 KB const boost::uint32_t parser::QUERY_VALUE_MAX = 1024 * 1024; // 1 MB const boost::uint32_t parser::COOKIE_NAME_MAX = 1024; // 1 KB const boost::uint32_t parser::COOKIE_VALUE_MAX = 1024 * 1024; // 1 MB const std::size_t parser::DEFAULT_CONTENT_MAX = 1024 * 1024; // 1 MB parser::error_category_t * parser::m_error_category_ptr = NULL; boost::once_flag parser::m_instance_flag = BOOST_ONCE_INIT; // parser member functions boost::tribool parser::parse(http::message& http_msg, boost::system::error_code& ec) { BOOST_ASSERT(! eof() ); boost::tribool rc = boost::indeterminate; std::size_t total_bytes_parsed = 0; if(http_msg.has_missing_packets()) { http_msg.set_data_after_missing_packet(true); } do { switch (m_message_parse_state) { // just started parsing the HTTP message case PARSE_START: m_message_parse_state = PARSE_HEADERS; // step through to PARSE_HEADERS // parsing the HTTP headers case PARSE_HEADERS: case PARSE_FOOTERS: rc = parse_headers(http_msg, ec); total_bytes_parsed += m_bytes_last_read; // check if we have finished parsing HTTP headers if (rc == true && m_message_parse_state == PARSE_HEADERS) { // finish_header_parsing() updates m_message_parse_state // We only call this for Headers and not Footers rc = finish_header_parsing(http_msg, ec); } break; // parsing chunked payload content case PARSE_CHUNKS: rc = parse_chunks(http_msg.get_chunk_cache(), ec); total_bytes_parsed += m_bytes_last_read; // check if we have finished parsing all chunks if (rc == true && !m_payload_handler) { http_msg.concatenate_chunks(); // Handle footers if present rc = ((m_message_parse_state == PARSE_FOOTERS) ? boost::indeterminate : (boost::tribool)true); } break; // parsing regular payload content with a known length case PARSE_CONTENT: rc = consume_content(http_msg, ec); total_bytes_parsed += m_bytes_last_read; break; // parsing payload content with no length (until EOF) case PARSE_CONTENT_NO_LENGTH: consume_content_as_next_chunk(http_msg.get_chunk_cache()); total_bytes_parsed += m_bytes_last_read; break; // finished parsing the HTTP message case PARSE_END: rc = true; break; } } while ( boost::indeterminate(rc) && ! eof() ); // check if we've finished parsing the HTTP message if (rc == true) { m_message_parse_state = PARSE_END; finish(http_msg); } else if(rc == false) { compute_msg_status(http_msg, false); } // update bytes last read (aggregate individual operations for caller) m_bytes_last_read = total_bytes_parsed; return rc; } boost::tribool parser::parse_missing_data(http::message& http_msg, std::size_t len, boost::system::error_code& ec) { static const char MISSING_DATA_CHAR = 'X'; boost::tribool rc = boost::indeterminate; http_msg.set_missing_packets(true); switch (m_message_parse_state) { // cannot recover from missing data while parsing HTTP headers case PARSE_START: case PARSE_HEADERS: case PARSE_FOOTERS: set_error(ec, ERROR_MISSING_HEADER_DATA); rc = false; break; // parsing chunked payload content case PARSE_CHUNKS: // parsing chunk data -> we can only recover if data fits into current chunk if (m_chunked_content_parse_state == PARSE_CHUNK && m_bytes_read_in_current_chunk < m_size_of_current_chunk && (m_size_of_current_chunk - m_bytes_read_in_current_chunk) >= len) { // use dummy content for missing data if (m_payload_handler) { for (std::size_t n = 0; n < len; ++n) m_payload_handler(&MISSING_DATA_CHAR, 1); } else { for (std::size_t n = 0; n < len && http_msg.get_chunk_cache().size() < m_max_content_length; ++n) http_msg.get_chunk_cache().push_back(MISSING_DATA_CHAR); } m_bytes_read_in_current_chunk += len; m_bytes_last_read = len; m_bytes_total_read += len; m_bytes_content_read += len; if (m_bytes_read_in_current_chunk == m_size_of_current_chunk) { m_chunked_content_parse_state = PARSE_EXPECTING_CR_AFTER_CHUNK; } } else { // cannot recover from missing data set_error(ec, ERROR_MISSING_CHUNK_DATA); rc = false; } break; // parsing regular payload content with a known length case PARSE_CONTENT: // parsing content (with length) -> we can only recover if data fits into content if (m_bytes_content_remaining == 0) { // we have all of the remaining payload content rc = true; } else if (m_bytes_content_remaining < len) { // cannot recover from missing data set_error(ec, ERROR_MISSING_TOO_MUCH_CONTENT); rc = false; } else { // make sure content buffer is not already full if (m_payload_handler) { for (std::size_t n = 0; n < len; ++n) m_payload_handler(&MISSING_DATA_CHAR, 1); } else if ( (m_bytes_content_read+len) <= m_max_content_length) { // use dummy content for missing data for (std::size_t n = 0; n < len; ++n) http_msg.get_content()[m_bytes_content_read++] = MISSING_DATA_CHAR; } else { m_bytes_content_read += len; } m_bytes_content_remaining -= len; m_bytes_total_read += len; m_bytes_last_read = len; if (m_bytes_content_remaining == 0) rc = true; } break; // parsing payload content with no length (until EOF) case PARSE_CONTENT_NO_LENGTH: // use dummy content for missing data if (m_payload_handler) { for (std::size_t n = 0; n < len; ++n) m_payload_handler(&MISSING_DATA_CHAR, 1); } else { for (std::size_t n = 0; n < len && http_msg.get_chunk_cache().size() < m_max_content_length; ++n) http_msg.get_chunk_cache().push_back(MISSING_DATA_CHAR); } m_bytes_last_read = len; m_bytes_total_read += len; m_bytes_content_read += len; break; // finished parsing the HTTP message case PARSE_END: rc = true; break; } // check if we've finished parsing the HTTP message if (rc == true) { m_message_parse_state = PARSE_END; finish(http_msg); } else if(rc == false) { compute_msg_status(http_msg, false); } return rc; } boost::tribool parser::parse_headers(http::message& http_msg, boost::system::error_code& ec) { // // note that boost::tribool may have one of THREE states: // // false: encountered an error while parsing HTTP headers // true: finished successfully parsing the HTTP headers // indeterminate: parsed bytes, but the HTTP headers are not yet finished // const char *read_start_ptr = m_read_ptr; m_bytes_last_read = 0; while (m_read_ptr < m_read_end_ptr) { if (m_save_raw_headers) m_raw_headers += *m_read_ptr; switch (m_headers_parse_state) { case PARSE_METHOD_START: // we have not yet started parsing the HTTP method string if (*m_read_ptr != ' ' && *m_read_ptr!='\r' && *m_read_ptr!='\n') { // ignore leading whitespace if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) { set_error(ec, ERROR_METHOD_CHAR); return false; } m_headers_parse_state = PARSE_METHOD; m_method.erase(); m_method.push_back(*m_read_ptr); } break; case PARSE_METHOD: // we have started parsing the HTTP method string if (*m_read_ptr == ' ') { m_resource.erase(); m_headers_parse_state = PARSE_URI_STEM; } else if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) { set_error(ec, ERROR_METHOD_CHAR); return false; } else if (m_method.size() >= METHOD_MAX) { set_error(ec, ERROR_METHOD_SIZE); return false; } else { m_method.push_back(*m_read_ptr); } break; case PARSE_URI_STEM: // we have started parsing the URI stem (or resource name) if (*m_read_ptr == ' ') { m_headers_parse_state = PARSE_HTTP_VERSION_H; } else if (*m_read_ptr == '?') { m_query_string.erase(); m_headers_parse_state = PARSE_URI_QUERY; } else if (*m_read_ptr == '\r') { http_msg.set_version_major(0); http_msg.set_version_minor(0); m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { http_msg.set_version_major(0); http_msg.set_version_minor(0); m_headers_parse_state = PARSE_EXPECTING_CR; } else if (is_control(*m_read_ptr)) { set_error(ec, ERROR_URI_CHAR); return false; } else if (m_resource.size() >= RESOURCE_MAX) { set_error(ec, ERROR_URI_SIZE); return false; } else { m_resource.push_back(*m_read_ptr); } break; case PARSE_URI_QUERY: // we have started parsing the URI query string if (*m_read_ptr == ' ') { m_headers_parse_state = PARSE_HTTP_VERSION_H; } else if (*m_read_ptr == '\r') { http_msg.set_version_major(0); http_msg.set_version_minor(0); m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { http_msg.set_version_major(0); http_msg.set_version_minor(0); m_headers_parse_state = PARSE_EXPECTING_CR; } else if (is_control(*m_read_ptr)) { set_error(ec, ERROR_QUERY_CHAR); return false; } else if (m_query_string.size() >= QUERY_STRING_MAX) { set_error(ec, ERROR_QUERY_SIZE); return false; } else { m_query_string.push_back(*m_read_ptr); } break; case PARSE_HTTP_VERSION_H: // parsing "HTTP" if (*m_read_ptr == '\r') { // should only happen for requests (no HTTP/VERSION specified) if (! m_is_request) { set_error(ec, ERROR_VERSION_EMPTY); return false; } http_msg.set_version_major(0); http_msg.set_version_minor(0); m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { // should only happen for requests (no HTTP/VERSION specified) if (! m_is_request) { set_error(ec, ERROR_VERSION_EMPTY); return false; } http_msg.set_version_major(0); http_msg.set_version_minor(0); m_headers_parse_state = PARSE_EXPECTING_CR; } else if (*m_read_ptr != 'H') { set_error(ec, ERROR_VERSION_CHAR); return false; } m_headers_parse_state = PARSE_HTTP_VERSION_T_1; break; case PARSE_HTTP_VERSION_T_1: // parsing "HTTP" if (*m_read_ptr != 'T') { set_error(ec, ERROR_VERSION_CHAR); return false; } m_headers_parse_state = PARSE_HTTP_VERSION_T_2; break; case PARSE_HTTP_VERSION_T_2: // parsing "HTTP" if (*m_read_ptr != 'T') { set_error(ec, ERROR_VERSION_CHAR); return false; } m_headers_parse_state = PARSE_HTTP_VERSION_P; break; case PARSE_HTTP_VERSION_P: // parsing "HTTP" if (*m_read_ptr != 'P') { set_error(ec, ERROR_VERSION_CHAR); return false; } m_headers_parse_state = PARSE_HTTP_VERSION_SLASH; break; case PARSE_HTTP_VERSION_SLASH: // parsing slash after "HTTP" if (*m_read_ptr != '/') { set_error(ec, ERROR_VERSION_CHAR); return false; } m_headers_parse_state = PARSE_HTTP_VERSION_MAJOR_START; break; case PARSE_HTTP_VERSION_MAJOR_START: // parsing the first digit of the major version number if (!is_digit(*m_read_ptr)) { set_error(ec, ERROR_VERSION_CHAR); return false; } http_msg.set_version_major(*m_read_ptr - '0'); m_headers_parse_state = PARSE_HTTP_VERSION_MAJOR; break; case PARSE_HTTP_VERSION_MAJOR: // parsing the major version number (not first digit) if (*m_read_ptr == '.') { m_headers_parse_state = PARSE_HTTP_VERSION_MINOR_START; } else if (is_digit(*m_read_ptr)) { http_msg.set_version_major( (http_msg.get_version_major() * 10) + (*m_read_ptr - '0') ); } else { set_error(ec, ERROR_VERSION_CHAR); return false; } break; case PARSE_HTTP_VERSION_MINOR_START: // parsing the first digit of the minor version number if (!is_digit(*m_read_ptr)) { set_error(ec, ERROR_VERSION_CHAR); return false; } http_msg.set_version_minor(*m_read_ptr - '0'); m_headers_parse_state = PARSE_HTTP_VERSION_MINOR; break; case PARSE_HTTP_VERSION_MINOR: // parsing the major version number (not first digit) if (*m_read_ptr == ' ') { // ignore trailing spaces after version in request if (! m_is_request) { m_headers_parse_state = PARSE_STATUS_CODE_START; } } else if (*m_read_ptr == '\r') { // should only happen for requests if (! m_is_request) { set_error(ec, ERROR_STATUS_EMPTY); return false; } m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { // should only happen for requests if (! m_is_request) { set_error(ec, ERROR_STATUS_EMPTY); return false; } m_headers_parse_state = PARSE_EXPECTING_CR; } else if (is_digit(*m_read_ptr)) { http_msg.set_version_minor( (http_msg.get_version_minor() * 10) + (*m_read_ptr - '0') ); } else { set_error(ec, ERROR_VERSION_CHAR); return false; } break; case PARSE_STATUS_CODE_START: // parsing the first digit of the response status code if (!is_digit(*m_read_ptr)) { set_error(ec, ERROR_STATUS_CHAR); return false; } m_status_code = (*m_read_ptr - '0'); m_headers_parse_state = PARSE_STATUS_CODE; break; case PARSE_STATUS_CODE: // parsing the response status code (not first digit) if (*m_read_ptr == ' ') { m_status_message.erase(); m_headers_parse_state = PARSE_STATUS_MESSAGE; } else if (is_digit(*m_read_ptr)) { m_status_code = ( (m_status_code * 10) + (*m_read_ptr - '0') ); } else if (*m_read_ptr == '\r') { // recover from status message not sent m_status_message.erase(); m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { // recover from status message not sent m_status_message.erase(); m_headers_parse_state = PARSE_EXPECTING_CR; } else { set_error(ec, ERROR_STATUS_CHAR); return false; } break; case PARSE_STATUS_MESSAGE: // parsing the response status message if (*m_read_ptr == '\r') { m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { m_headers_parse_state = PARSE_EXPECTING_CR; } else if (is_control(*m_read_ptr)) { set_error(ec, ERROR_STATUS_CHAR); return false; } else if (m_status_message.size() >= STATUS_MESSAGE_MAX) { set_error(ec, ERROR_STATUS_CHAR); return false; } else { m_status_message.push_back(*m_read_ptr); } break; case PARSE_EXPECTING_NEWLINE: // we received a CR; expecting a newline to follow if (*m_read_ptr == '\n') { m_headers_parse_state = PARSE_HEADER_START; } else if (*m_read_ptr == '\r') { // we received two CR's in a row // assume CR only is (incorrectly) being used for line termination // therefore, the message is finished ++m_read_ptr; m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; return true; } else if (*m_read_ptr == '\t' || *m_read_ptr == ' ') { m_headers_parse_state = PARSE_HEADER_WHITESPACE; } else if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) { set_error(ec, ERROR_HEADER_CHAR); return false; } else { // assume it is the first character for the name of a header m_header_name.erase(); m_header_name.push_back(*m_read_ptr); m_headers_parse_state = PARSE_HEADER_NAME; } break; case PARSE_EXPECTING_CR: // we received a newline without a CR if (*m_read_ptr == '\r') { m_headers_parse_state = PARSE_HEADER_START; } else if (*m_read_ptr == '\n') { // we received two newlines in a row // assume newline only is (incorrectly) being used for line termination // therefore, the message is finished ++m_read_ptr; m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; return true; } else if (*m_read_ptr == '\t' || *m_read_ptr == ' ') { m_headers_parse_state = PARSE_HEADER_WHITESPACE; } else if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) { set_error(ec, ERROR_HEADER_CHAR); return false; } else { // assume it is the first character for the name of a header m_header_name.erase(); m_header_name.push_back(*m_read_ptr); m_headers_parse_state = PARSE_HEADER_NAME; } break; case PARSE_HEADER_WHITESPACE: // parsing whitespace before a header name if (*m_read_ptr == '\r') { m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { m_headers_parse_state = PARSE_EXPECTING_CR; } else if (*m_read_ptr != '\t' && *m_read_ptr != ' ') { if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) set_error(ec, ERROR_HEADER_CHAR); return false; // assume it is the first character for the name of a header m_header_name.erase(); m_header_name.push_back(*m_read_ptr); m_headers_parse_state = PARSE_HEADER_NAME; } break; case PARSE_HEADER_START: // parsing the start of a new header if (*m_read_ptr == '\r') { m_headers_parse_state = PARSE_EXPECTING_FINAL_NEWLINE; } else if (*m_read_ptr == '\n') { m_headers_parse_state = PARSE_EXPECTING_FINAL_CR; } else if (*m_read_ptr == '\t' || *m_read_ptr == ' ') { m_headers_parse_state = PARSE_HEADER_WHITESPACE; } else if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) { set_error(ec, ERROR_HEADER_CHAR); return false; } else { // first character for the name of a header m_header_name.erase(); m_header_name.push_back(*m_read_ptr); m_headers_parse_state = PARSE_HEADER_NAME; } break; case PARSE_HEADER_NAME: // parsing the name of a header if (*m_read_ptr == ':') { m_header_value.erase(); m_headers_parse_state = PARSE_SPACE_BEFORE_HEADER_VALUE; } else if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) { set_error(ec, ERROR_HEADER_CHAR); return false; } else if (m_header_name.size() >= HEADER_NAME_MAX) { set_error(ec, ERROR_HEADER_NAME_SIZE); return false; } else { // character (not first) for the name of a header m_header_name.push_back(*m_read_ptr); } break; case PARSE_SPACE_BEFORE_HEADER_VALUE: // parsing space character before a header's value if (*m_read_ptr == ' ') { m_headers_parse_state = PARSE_HEADER_VALUE; } else if (*m_read_ptr == '\r') { http_msg.add_header(m_header_name, m_header_value); m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { http_msg.add_header(m_header_name, m_header_value); m_headers_parse_state = PARSE_EXPECTING_CR; } else if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) { set_error(ec, ERROR_HEADER_CHAR); return false; } else { // assume it is the first character for the value of a header m_header_value.push_back(*m_read_ptr); m_headers_parse_state = PARSE_HEADER_VALUE; } break; case PARSE_HEADER_VALUE: // parsing the value of a header if (*m_read_ptr == '\r') { http_msg.add_header(m_header_name, m_header_value); m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { http_msg.add_header(m_header_name, m_header_value); m_headers_parse_state = PARSE_EXPECTING_CR; } else if (*m_read_ptr != '\t' && is_control(*m_read_ptr)) { // RFC 2616, 2.2 basic Rules. // TEXT = // LWS = [CRLF] 1*( SP | HT ) // // TODO: parsing of folding LWS in multiple lines headers // doesn't work properly still set_error(ec, ERROR_HEADER_CHAR); return false; } else if (m_header_value.size() >= HEADER_VALUE_MAX) { set_error(ec, ERROR_HEADER_VALUE_SIZE); return false; } else { // character (not first) for the value of a header m_header_value.push_back(*m_read_ptr); } break; case PARSE_EXPECTING_FINAL_NEWLINE: if (*m_read_ptr == '\n') ++m_read_ptr; m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; return true; case PARSE_EXPECTING_FINAL_CR: if (*m_read_ptr == '\r') ++m_read_ptr; m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; return true; } ++m_read_ptr; } m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; return boost::indeterminate; } void parser::update_message_with_header_data(http::message& http_msg) const { if (is_parsing_request()) { // finish an HTTP request message http::request& http_request(dynamic_cast(http_msg)); http_request.set_method(m_method); http_request.set_resource(m_resource); http_request.set_query_string(m_query_string); // parse query pairs from the URI query string if (! m_query_string.empty()) { if (! parse_url_encoded(http_request.get_queries(), m_query_string.c_str(), m_query_string.size())) PION_LOG_WARN(m_logger, "Request query string parsing failed (URI)"); } // parse "Cookie" headers in request std::pair cookie_pair = http_request.get_headers().equal_range(http::types::HEADER_COOKIE); for (ihash_multimap::const_iterator cookie_iterator = cookie_pair.first; cookie_iterator != http_request.get_headers().end() && cookie_iterator != cookie_pair.second; ++cookie_iterator) { if (! parse_cookie_header(http_request.get_cookies(), cookie_iterator->second, false) ) PION_LOG_WARN(m_logger, "Cookie header parsing failed"); } } else { // finish an HTTP response message http::response& http_response(dynamic_cast(http_msg)); http_response.set_status_code(m_status_code); http_response.set_status_message(m_status_message); // parse "Set-Cookie" headers in response std::pair cookie_pair = http_response.get_headers().equal_range(http::types::HEADER_SET_COOKIE); for (ihash_multimap::const_iterator cookie_iterator = cookie_pair.first; cookie_iterator != http_response.get_headers().end() && cookie_iterator != cookie_pair.second; ++cookie_iterator) { if (! parse_cookie_header(http_response.get_cookies(), cookie_iterator->second, true) ) PION_LOG_WARN(m_logger, "Set-Cookie header parsing failed"); } } } boost::tribool parser::finish_header_parsing(http::message& http_msg, boost::system::error_code& ec) { boost::tribool rc = boost::indeterminate; m_bytes_content_remaining = m_bytes_content_read = 0; http_msg.set_content_length(0); http_msg.update_transfer_encoding_using_header(); update_message_with_header_data(http_msg); if (http_msg.is_chunked()) { // content is encoded using chunks m_message_parse_state = PARSE_CHUNKS; // return true if parsing headers only if (m_parse_headers_only) rc = true; } else if (http_msg.is_content_length_implied()) { // content length is implied to be zero m_message_parse_state = PARSE_END; rc = true; } else { // content length should be specified in the headers if (http_msg.has_header(http::types::HEADER_CONTENT_LENGTH)) { // message has a content-length header try { http_msg.update_content_length_using_header(); } catch (...) { PION_LOG_ERROR(m_logger, "Unable to update content length"); set_error(ec, ERROR_INVALID_CONTENT_LENGTH); return false; } // check if content-length header == 0 if (http_msg.get_content_length() == 0) { m_message_parse_state = PARSE_END; rc = true; } else { m_message_parse_state = PARSE_CONTENT; m_bytes_content_remaining = http_msg.get_content_length(); // check if content-length exceeds maximum allowed if (m_bytes_content_remaining > m_max_content_length) http_msg.set_content_length(m_max_content_length); if (m_parse_headers_only) { // return true if parsing headers only rc = true; } else { // allocate a buffer for payload content (may be zero-size) http_msg.create_content_buffer(); } } } else { // no content-length specified, and the content length cannot // otherwise be determined // only if not a request, read through the close of the connection if (! m_is_request) { // clear the chunk buffers before we start http_msg.get_chunk_cache().clear(); // continue reading content until there is no more data m_message_parse_state = PARSE_CONTENT_NO_LENGTH; // return true if parsing headers only if (m_parse_headers_only) rc = true; } else { m_message_parse_state = PARSE_END; rc = true; } } } finished_parsing_headers(ec); return rc; } bool parser::parse_uri(const std::string& uri, std::string& proto, std::string& host, boost::uint16_t& port, std::string& path, std::string& query) { size_t proto_end = uri.find("://"); size_t proto_len = 0; if(proto_end != std::string::npos) { proto = uri.substr(0, proto_end); proto_len = proto_end + 3; // add :// } else { proto.clear(); } // find a first slash charact // that indicates the end of the : part size_t server_port_end = uri.find('/', proto_len); if(server_port_end == std::string::npos) { return false; } // copy : into temp string std::string t; t = uri.substr(proto_len, server_port_end - proto_len); size_t port_pos = t.find(':', 0); // assign output host and port parameters host = t.substr(0, port_pos); // if port_pos == npos, copy whole string if(host.length() == 0) { return false; } // parse the port, if it's not empty if(port_pos != std::string::npos) { try { port = boost::lexical_cast(t.substr(port_pos+1)); } catch (boost::bad_lexical_cast &) { return false; } } else if (proto == "http" || proto == "HTTP") { port = 80; } else if (proto == "https" || proto == "HTTPS") { port = 443; } else { port = 0; } // copy the rest of the URI into path part path = uri.substr(server_port_end); // split the path and the query string parts size_t query_pos = path.find('?', 0); if(query_pos != std::string::npos) { query = path.substr(query_pos + 1, path.length() - query_pos - 1); path = path.substr(0, query_pos); } else { query.clear(); } return true; } bool parser::parse_url_encoded(ihash_multimap& dict, const char *ptr, const size_t len) { // sanity check if (ptr == NULL || len == 0) return true; // used to track whether we are parsing the name or value enum QueryParseState { QUERY_PARSE_NAME, QUERY_PARSE_VALUE } parse_state = QUERY_PARSE_NAME; // misc other variables used for parsing const char * const end = ptr + len; std::string query_name; std::string query_value; // iterate through each encoded character while (ptr < end) { switch (parse_state) { case QUERY_PARSE_NAME: // parsing query name if (*ptr == '=') { // end of name found (OK if empty) parse_state = QUERY_PARSE_VALUE; } else if (*ptr == '&') { // if query name is empty, just skip it (i.e. "&&") if (! query_name.empty()) { // assume that "=" is missing -- it's OK if the value is empty dict.insert( std::make_pair(algorithm::url_decode(query_name), algorithm::url_decode(query_value)) ); query_name.erase(); } } else if (*ptr == '\r' || *ptr == '\n' || *ptr == '\t') { // ignore linefeeds, carriage return and tabs (normally within POST content) } else if (is_control(*ptr) || query_name.size() >= QUERY_NAME_MAX) { // control character detected, or max sized exceeded return false; } else { // character is part of the name query_name.push_back(*ptr); } break; case QUERY_PARSE_VALUE: // parsing query value if (*ptr == '&') { // end of value found (OK if empty) if (! query_name.empty()) { dict.insert( std::make_pair(algorithm::url_decode(query_name), algorithm::url_decode(query_value)) ); query_name.erase(); } query_value.erase(); parse_state = QUERY_PARSE_NAME; } else if (*ptr == ',') { // end of value found in multi-value list (OK if empty) if (! query_name.empty()) dict.insert( std::make_pair(algorithm::url_decode(query_name), algorithm::url_decode(query_value)) ); query_value.erase(); } else if (*ptr == '\r' || *ptr == '\n' || *ptr == '\t') { // ignore linefeeds, carriage return and tabs (normally within POST content) } else if (is_control(*ptr) || query_value.size() >= QUERY_VALUE_MAX) { // control character detected, or max sized exceeded return false; } else { // character is part of the value query_value.push_back(*ptr); } break; } ++ptr; } // handle last pair in string if (! query_name.empty()) dict.insert( std::make_pair(algorithm::url_decode(query_name), algorithm::url_decode(query_value)) ); return true; } bool parser::parse_multipart_form_data(ihash_multimap& dict, const std::string& content_type, const char *ptr, const size_t len) { // sanity check if (ptr == NULL || len == 0) return true; // parse field boundary std::size_t pos = content_type.find("boundary="); if (pos == std::string::npos) return false; const std::string boundary = std::string("--") + content_type.substr(pos+9); // used to track what we are parsing enum MultiPartParseState { MP_PARSE_START, MP_PARSE_HEADER_CR, MP_PARSE_HEADER_LF, MP_PARSE_HEADER_NAME, MP_PARSE_HEADER_SPACE, MP_PARSE_HEADER_VALUE, MP_PARSE_HEADER_LAST_LF, MP_PARSE_FIELD_DATA } parse_state = MP_PARSE_START; // a few variables used for parsing std::string header_name; std::string header_value; std::string field_name; std::string field_value; bool found_parameter = false; bool save_current_field = true; const char * const end_ptr = ptr + len; ptr = std::search(ptr, end_ptr, boundary.begin(), boundary.end()); while (ptr != NULL && ptr < end_ptr) { switch (parse_state) { case MP_PARSE_START: // start parsing a new field header_name.clear(); header_value.clear(); field_name.clear(); field_value.clear(); save_current_field = true; ptr += boundary.size() - 1; parse_state = MP_PARSE_HEADER_CR; break; case MP_PARSE_HEADER_CR: // expecting CR while parsing headers if (*ptr == '\r') { // got it -> look for linefeed parse_state = MP_PARSE_HEADER_LF; } else if (*ptr == '\n') { // got a linefeed? try to ignore and start parsing header parse_state = MP_PARSE_HEADER_NAME; } else if (*ptr == '-' && ptr+1 < end_ptr && ptr[1] == '-') { // end of multipart content return true; } else return false; break; case MP_PARSE_HEADER_LF: // expecting LF while parsing headers if (*ptr == '\n') { // got it -> start parsing header name parse_state = MP_PARSE_HEADER_NAME; } else return false; break; case MP_PARSE_HEADER_NAME: // parsing the name of a header if (*ptr == '\r' || *ptr == '\n') { if (header_name.empty()) { // got CR or LF at beginning; skip to data parse_state = (*ptr == '\r' ? MP_PARSE_HEADER_LAST_LF : MP_PARSE_FIELD_DATA); } else { // premature CR or LF -> just ignore and start parsing next header parse_state = (*ptr == '\r' ? MP_PARSE_HEADER_LF : MP_PARSE_HEADER_NAME); } } else if (*ptr == ':') { // done parsing header name -> consume space next parse_state = MP_PARSE_HEADER_SPACE; } else { // one more byte for header name header_name += *ptr; } break; case MP_PARSE_HEADER_SPACE: // expecting a space before header value if (*ptr == '\r') { // premature CR -> just ignore and start parsing next header parse_state = MP_PARSE_HEADER_LF; } else if (*ptr == '\n') { // premature LF -> just ignore and start parsing next header parse_state = MP_PARSE_HEADER_NAME; } else if (*ptr != ' ') { // not a space -> assume it's a value char header_value += *ptr; parse_state = MP_PARSE_HEADER_VALUE; } // otherwise just ignore the space(s) break; case MP_PARSE_HEADER_VALUE: // parsing the value of a header if (*ptr == '\r' || *ptr == '\n') { // reached the end of the value -> check if it's important if (boost::algorithm::iequals(header_name, types::HEADER_CONTENT_TYPE)) { // only keep fields that have a text type or no type save_current_field = boost::algorithm::iequals(header_value.substr(0, 5), "text/"); } else if (boost::algorithm::iequals(header_name, types::HEADER_CONTENT_DISPOSITION)) { // get current field from content-disposition header std::size_t name_pos = header_value.find("name=\""); if (name_pos != std::string::npos) { for (name_pos += 6; name_pos < header_value.size() && header_value[name_pos] != '\"'; ++name_pos) { field_name += header_value[name_pos]; } } } // clear values and start parsing next header header_name.clear(); header_value.clear(); parse_state = (*ptr == '\r' ? MP_PARSE_HEADER_LF : MP_PARSE_HEADER_NAME); } else { // one more byte for header value header_value += *ptr; } break; case MP_PARSE_HEADER_LAST_LF: // expecting final linefeed to terminate headers and begin field data if (*ptr == '\n') { // got it if (save_current_field && !field_name.empty()) { // parse the field if we care & know enough about it parse_state = MP_PARSE_FIELD_DATA; } else { // otherwise skip ahead to next field parse_state = MP_PARSE_START; ptr = std::search(ptr, end_ptr, boundary.begin(), boundary.end()); } } else return false; break; case MP_PARSE_FIELD_DATA: // parsing the value of a field -> find the end of it const char *field_end_ptr = end_ptr; const char *next_ptr = std::search(ptr, end_ptr, boundary.begin(), boundary.end()); if (next_ptr) { // don't include CRLF before next boundary const char *temp_ptr = next_ptr - 2; if (temp_ptr[0] == '\r' && temp_ptr[1] == '\n') field_end_ptr = temp_ptr; else field_end_ptr = next_ptr; } field_value.assign(ptr, field_end_ptr - ptr); // add the field to the query dictionary dict.insert( std::make_pair(field_name, field_value) ); found_parameter = true; // skip ahead to next field parse_state = MP_PARSE_START; ptr = next_ptr; break; } // we've already bumped position if MP_PARSE_START if (parse_state != MP_PARSE_START) ++ptr; } return found_parameter; } bool parser::parse_cookie_header(ihash_multimap& dict, const char *ptr, const size_t len, bool set_cookie_header) { // BASED ON RFC 2109 // http://www.ietf.org/rfc/rfc2109.txt // // The current implementation ignores cookie attributes which begin with '$' // (i.e. $Path=/, $Domain=, etc.) // used to track what we are parsing enum CookieParseState { COOKIE_PARSE_NAME, COOKIE_PARSE_VALUE, COOKIE_PARSE_IGNORE } parse_state = COOKIE_PARSE_NAME; // misc other variables used for parsing const char * const end = ptr + len; std::string cookie_name; std::string cookie_value; char value_quote_character = '\0'; // iterate through each character while (ptr < end) { switch (parse_state) { case COOKIE_PARSE_NAME: // parsing cookie name if (*ptr == '=') { // end of name found (OK if empty) value_quote_character = '\0'; parse_state = COOKIE_PARSE_VALUE; } else if (*ptr == ';' || *ptr == ',') { // ignore empty cookie names since this may occur naturally // when quoted values are encountered if (! cookie_name.empty()) { // value is empty (OK) if (! is_cookie_attribute(cookie_name, set_cookie_header)) dict.insert( std::make_pair(cookie_name, cookie_value) ); cookie_name.erase(); } } else if (*ptr != ' ') { // ignore whitespace // check if control character detected, or max sized exceeded if (is_control(*ptr) || cookie_name.size() >= COOKIE_NAME_MAX) return false; // character is part of the name cookie_name.push_back(*ptr); } break; case COOKIE_PARSE_VALUE: // parsing cookie value if (value_quote_character == '\0') { // value is not (yet) quoted if (*ptr == ';' || *ptr == ',') { // end of value found (OK if empty) if (! is_cookie_attribute(cookie_name, set_cookie_header)) dict.insert( std::make_pair(cookie_name, cookie_value) ); cookie_name.erase(); cookie_value.erase(); parse_state = COOKIE_PARSE_NAME; } else if (*ptr == '\'' || *ptr == '"') { if (cookie_value.empty()) { // begin quoted value value_quote_character = *ptr; } else if (cookie_value.size() >= COOKIE_VALUE_MAX) { // max size exceeded return false; } else { // assume character is part of the (unquoted) value cookie_value.push_back(*ptr); } } else if (*ptr != ' ' || !cookie_value.empty()) { // ignore leading unquoted whitespace // check if control character detected, or max sized exceeded if (is_control(*ptr) || cookie_value.size() >= COOKIE_VALUE_MAX) return false; // character is part of the (unquoted) value cookie_value.push_back(*ptr); } } else { // value is quoted if (*ptr == value_quote_character) { // end of value found (OK if empty) if (! is_cookie_attribute(cookie_name, set_cookie_header)) dict.insert( std::make_pair(cookie_name, cookie_value) ); cookie_name.erase(); cookie_value.erase(); parse_state = COOKIE_PARSE_IGNORE; } else if (cookie_value.size() >= COOKIE_VALUE_MAX) { // max size exceeded return false; } else { // character is part of the (quoted) value cookie_value.push_back(*ptr); } } break; case COOKIE_PARSE_IGNORE: // ignore everything until we reach a comma "," or semicolon ";" if (*ptr == ';' || *ptr == ',') parse_state = COOKIE_PARSE_NAME; break; } ++ptr; } // handle last cookie in string if (! is_cookie_attribute(cookie_name, set_cookie_header)) dict.insert( std::make_pair(cookie_name, cookie_value) ); return true; } boost::tribool parser::parse_chunks(http::message::chunk_cache_t& chunks, boost::system::error_code& ec) { // // note that boost::tribool may have one of THREE states: // // false: encountered an error while parsing message // true: finished successfully parsing the message // indeterminate: parsed bytes, but the message is not yet finished // const char *read_start_ptr = m_read_ptr; m_bytes_last_read = 0; while (m_read_ptr < m_read_end_ptr) { switch (m_chunked_content_parse_state) { case PARSE_CHUNK_SIZE_START: // we have not yet started parsing the next chunk size if (is_hex_digit(*m_read_ptr)) { m_chunk_size_str.erase(); m_chunk_size_str.push_back(*m_read_ptr); m_chunked_content_parse_state = PARSE_CHUNK_SIZE; } else if (*m_read_ptr == ' ' || *m_read_ptr == '\x09' || *m_read_ptr == '\x0D' || *m_read_ptr == '\x0A') { // Ignore leading whitespace. Technically, the standard probably doesn't allow white space here, // but we'll be flexible, since there's no ambiguity. break; } else { set_error(ec, ERROR_CHUNK_CHAR); return false; } break; case PARSE_CHUNK_SIZE: if (is_hex_digit(*m_read_ptr)) { m_chunk_size_str.push_back(*m_read_ptr); } else if (*m_read_ptr == '\x0D') { m_chunked_content_parse_state = PARSE_EXPECTING_LF_AFTER_CHUNK_SIZE; } else if (*m_read_ptr == ' ' || *m_read_ptr == '\x09') { // Ignore trailing tabs or spaces. Technically, the standard probably doesn't allow this, // but we'll be flexible, since there's no ambiguity. m_chunked_content_parse_state = PARSE_EXPECTING_CR_AFTER_CHUNK_SIZE; } else if (*m_read_ptr == ';') { // Following the semicolon we have text which will be ignored till we encounter // a CRLF m_chunked_content_parse_state = PARSE_EXPECTING_IGNORED_TEXT_AFTER_CHUNK_SIZE; } else { set_error(ec, ERROR_CHUNK_CHAR); return false; } break; case PARSE_EXPECTING_IGNORED_TEXT_AFTER_CHUNK_SIZE: if (*m_read_ptr == '\x0D') { m_chunked_content_parse_state = PARSE_EXPECTING_LF_AFTER_CHUNK_SIZE; } break; case PARSE_EXPECTING_CR_AFTER_CHUNK_SIZE: if (*m_read_ptr == '\x0D') { m_chunked_content_parse_state = PARSE_EXPECTING_LF_AFTER_CHUNK_SIZE; } else if (*m_read_ptr == ' ' || *m_read_ptr == '\x09') { // Ignore trailing tabs or spaces. Technically, the standard probably doesn't allow this, // but we'll be flexible, since there's no ambiguity. break; } else { set_error(ec, ERROR_CHUNK_CHAR); return false; } break; case PARSE_EXPECTING_LF_AFTER_CHUNK_SIZE: // We received a CR; expecting LF to follow. We can't be flexible here because // if we see anything other than LF, we can't be certain where the chunk starts. if (*m_read_ptr == '\x0A') { m_bytes_read_in_current_chunk = 0; m_size_of_current_chunk = strtol(m_chunk_size_str.c_str(), 0, 16); if (m_size_of_current_chunk == 0) { m_chunked_content_parse_state = PARSE_EXPECTING_FINAL_CR_OR_FOOTERS_AFTER_LAST_CHUNK; } else { m_chunked_content_parse_state = PARSE_CHUNK; } } else { set_error(ec, ERROR_CHUNK_CHAR); return false; } break; case PARSE_CHUNK: if (m_bytes_read_in_current_chunk < m_size_of_current_chunk) { if (m_payload_handler) { const std::size_t bytes_avail = bytes_available(); const std::size_t bytes_in_chunk = m_size_of_current_chunk - m_bytes_read_in_current_chunk; const std::size_t len = (bytes_in_chunk > bytes_avail) ? bytes_avail : bytes_in_chunk; m_payload_handler(m_read_ptr, len); m_bytes_read_in_current_chunk += len; if (len > 1) m_read_ptr += (len - 1); } else if (chunks.size() < m_max_content_length) { chunks.push_back(*m_read_ptr); m_bytes_read_in_current_chunk++; } } if (m_bytes_read_in_current_chunk == m_size_of_current_chunk) { m_chunked_content_parse_state = PARSE_EXPECTING_CR_AFTER_CHUNK; } break; case PARSE_EXPECTING_CR_AFTER_CHUNK: // we've read exactly m_size_of_current_chunk bytes since starting the current chunk if (*m_read_ptr == '\x0D') { m_chunked_content_parse_state = PARSE_EXPECTING_LF_AFTER_CHUNK; } else { set_error(ec, ERROR_CHUNK_CHAR); return false; } break; case PARSE_EXPECTING_LF_AFTER_CHUNK: // we received a CR; expecting LF to follow if (*m_read_ptr == '\x0A') { m_chunked_content_parse_state = PARSE_CHUNK_SIZE_START; } else { set_error(ec, ERROR_CHUNK_CHAR); return false; } break; case PARSE_EXPECTING_FINAL_CR_OR_FOOTERS_AFTER_LAST_CHUNK: // we've read the final chunk; expecting final CRLF if (*m_read_ptr == '\x0D') { m_chunked_content_parse_state = PARSE_EXPECTING_FINAL_LF_AFTER_LAST_CHUNK; } else { // Packet contains footers; Chunk parsing is commplete // Footer data contains name value pairs to be added to HTTP Message m_message_parse_state = PARSE_FOOTERS; m_headers_parse_state = PARSE_HEADER_START; m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; m_bytes_content_read += m_bytes_last_read; PION_LOG_DEBUG(m_logger, "Parsed " << m_bytes_last_read << " chunked payload content bytes; chunked content complete."); return true; } break; case PARSE_EXPECTING_FINAL_LF_AFTER_LAST_CHUNK: // we received the final CR; expecting LF to follow if (*m_read_ptr == '\x0A') { ++m_read_ptr; m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; m_bytes_content_read += m_bytes_last_read; PION_LOG_DEBUG(m_logger, "Parsed " << m_bytes_last_read << " chunked payload content bytes; chunked content complete."); return true; } else { set_error(ec, ERROR_CHUNK_CHAR); return false; } } ++m_read_ptr; } m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; m_bytes_content_read += m_bytes_last_read; return boost::indeterminate; } boost::tribool parser::consume_content(http::message& http_msg, boost::system::error_code& ec) { size_t content_bytes_to_read; size_t content_bytes_available = bytes_available(); boost::tribool rc = boost::indeterminate; if (m_bytes_content_remaining == 0) { // we have all of the remaining payload content return true; } else { if (content_bytes_available >= m_bytes_content_remaining) { // we have all of the remaining payload content rc = true; content_bytes_to_read = m_bytes_content_remaining; } else { // only some of the payload content is available content_bytes_to_read = content_bytes_available; } m_bytes_content_remaining -= content_bytes_to_read; } // make sure content buffer is not already full if (m_payload_handler) { m_payload_handler(m_read_ptr, content_bytes_to_read); } else if (m_bytes_content_read < m_max_content_length) { if (m_bytes_content_read + content_bytes_to_read > m_max_content_length) { // read would exceed maximum size for content buffer // copy only enough bytes to fill up the content buffer memcpy(http_msg.get_content() + m_bytes_content_read, m_read_ptr, m_max_content_length - m_bytes_content_read); } else { // copy all bytes available memcpy(http_msg.get_content() + m_bytes_content_read, m_read_ptr, content_bytes_to_read); } } m_read_ptr += content_bytes_to_read; m_bytes_content_read += content_bytes_to_read; m_bytes_total_read += content_bytes_to_read; m_bytes_last_read = content_bytes_to_read; return rc; } std::size_t parser::consume_content_as_next_chunk(http::message::chunk_cache_t& chunks) { if (bytes_available() == 0) { m_bytes_last_read = 0; } else { // note: m_bytes_last_read must be > 0 because of bytes_available() check m_bytes_last_read = (m_read_end_ptr - m_read_ptr); if (m_payload_handler) { m_payload_handler(m_read_ptr, m_bytes_last_read); m_read_ptr += m_bytes_last_read; } else { while (m_read_ptr < m_read_end_ptr) { if (chunks.size() < m_max_content_length) chunks.push_back(*m_read_ptr); ++m_read_ptr; } } m_bytes_total_read += m_bytes_last_read; m_bytes_content_read += m_bytes_last_read; } return m_bytes_last_read; } void parser::finish(http::message& http_msg) const { switch (m_message_parse_state) { case PARSE_START: http_msg.set_is_valid(false); http_msg.set_content_length(0); http_msg.create_content_buffer(); return; case PARSE_END: http_msg.set_is_valid(true); break; case PARSE_HEADERS: case PARSE_FOOTERS: http_msg.set_is_valid(false); update_message_with_header_data(http_msg); http_msg.set_content_length(0); http_msg.create_content_buffer(); break; case PARSE_CONTENT: http_msg.set_is_valid(false); if (get_content_bytes_read() < m_max_content_length) // NOTE: we can read more than we have allocated/stored http_msg.set_content_length(get_content_bytes_read()); break; case PARSE_CHUNKS: http_msg.set_is_valid(m_chunked_content_parse_state==PARSE_CHUNK_SIZE_START); if (!m_payload_handler) http_msg.concatenate_chunks(); break; case PARSE_CONTENT_NO_LENGTH: http_msg.set_is_valid(true); if (!m_payload_handler) http_msg.concatenate_chunks(); break; } compute_msg_status(http_msg, http_msg.is_valid()); if (is_parsing_request() && !m_payload_handler && !m_parse_headers_only) { // Parse query pairs from post content if content type is x-www-form-urlencoded. // Type could be followed by parameters (as defined in section 3.6 of RFC 2616) // e.g. Content-Type: application/x-www-form-urlencoded; charset=UTF-8 http::request& http_request(dynamic_cast(http_msg)); const std::string& content_type_header = http_request.get_header(http::types::HEADER_CONTENT_TYPE); if (content_type_header.compare(0, http::types::CONTENT_TYPE_URLENCODED.length(), http::types::CONTENT_TYPE_URLENCODED) == 0) { if (! parse_url_encoded(http_request.get_queries(), http_request.get_content(), http_request.get_content_length())) PION_LOG_WARN(m_logger, "Request form data parsing failed (POST urlencoded)"); } else if (content_type_header.compare(0, http::types::CONTENT_TYPE_MULTIPART_FORM_DATA.length(), http::types::CONTENT_TYPE_MULTIPART_FORM_DATA) == 0) { if (! parse_multipart_form_data(http_request.get_queries(), content_type_header, http_request.get_content(), http_request.get_content_length())) PION_LOG_WARN(m_logger, "Request form data parsing failed (POST multipart)"); } } } void parser::compute_msg_status(http::message& http_msg, bool msg_parsed_ok ) { http::message::data_status_t st = http::message::STATUS_NONE; if(http_msg.has_missing_packets()) { st = http_msg.has_data_after_missing_packets() ? http::message::STATUS_PARTIAL : http::message::STATUS_TRUNCATED; } else { st = msg_parsed_ok ? http::message::STATUS_OK : http::message::STATUS_TRUNCATED; } http_msg.set_status(st); } void parser::create_error_category(void) { static error_category_t UNIQUE_ERROR_CATEGORY; m_error_category_ptr = &UNIQUE_ERROR_CATEGORY; } bool parser::parse_forwarded_for(const std::string& header, std::string& public_ip) { // static regex's used to check for ipv4 address static const boost::regex IPV4_ADDR_RX("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}"); /// static regex used to check for private/local networks: /// 10.* /// 127.* /// 192.168.* /// 172.16-31.* static const boost::regex PRIVATE_NET_RX("(10\\.[0-9]{1,3}|127\\.[0-9]{1,3}|192\\.168|172\\.1[6-9]|172\\.2[0-9]|172\\.3[0-1])\\.[0-9]{1,3}\\.[0-9]{1,3}"); // sanity check if (header.empty()) return false; // local variables re-used by while loop boost::match_results m; std::string::const_iterator start_it = header.begin(); // search for next ip address within the header while (boost::regex_search(start_it, header.end(), m, IPV4_ADDR_RX)) { // get ip that matched std::string ip_str(m[0].first, m[0].second); // check if public network ip address if (! boost::regex_match(ip_str, PRIVATE_NET_RX) ) { // match found! public_ip = ip_str; return true; } // update search starting position start_it = m[0].second; } // no matches found return false; } } // end namespace http } // end namespace pion pion-5.0.4+dfsg.orig/src/tcp_timer.cpp0000644000372000001440000000265312215647065017234 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include namespace pion { // begin namespace pion namespace tcp { // begin namespace tcp // timer member functions timer::timer(tcp::connection_ptr& conn_ptr) : m_conn_ptr(conn_ptr), m_timer(conn_ptr->get_io_service()), m_timer_active(false), m_was_cancelled(false) { } void timer::start(const boost::uint32_t seconds) { boost::mutex::scoped_lock timer_lock(m_mutex); m_timer_active = true; m_timer.expires_from_now(boost::posix_time::seconds(seconds)); m_timer.async_wait(boost::bind(&timer::timer_callback, shared_from_this(), _1)); } void timer::cancel(void) { boost::mutex::scoped_lock timer_lock(m_mutex); m_was_cancelled = true; if (m_timer_active) m_timer.cancel(); } void timer::timer_callback(const boost::system::error_code& ec) { boost::mutex::scoped_lock timer_lock(m_mutex); m_timer_active = false; if (! m_was_cancelled) m_conn_ptr->cancel(); } } // end namespace tcp } // end namespace pion pion-5.0.4+dfsg.orig/src/admin_rights.cpp0000644000372000001440000001015112215647065017706 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #ifndef _MSC_VER #include #include #include #include #include #include #include #endif namespace pion { // begin namespace pion // static members of admin_rights const boost::int16_t admin_rights::ADMIN_USER_ID = 0; boost::mutex admin_rights::m_mutex; // admin_rights member functions #ifdef _MSC_VER admin_rights::admin_rights(bool use_log) : m_logger(PION_GET_LOGGER("pion.admin_rights")), m_lock(m_mutex), m_user_id(-1), m_has_rights(false), m_use_log(use_log) {} void admin_rights::release(void) {} long admin_rights::run_as_user(const std::string& user_name) { return -1; } long admin_rights::run_as_group(const std::string& group_name) { return -1; } long admin_rights::find_system_id(const std::string& name, const std::string& file) { return -1; } #else // NOT #ifdef _MSC_VER admin_rights::admin_rights(bool use_log) : m_logger(PION_GET_LOGGER("pion.admin_rights")), m_lock(m_mutex), m_user_id(-1), m_has_rights(false), m_use_log(use_log) { m_user_id = geteuid(); if ( seteuid(ADMIN_USER_ID) != 0 ) { if (m_use_log) PION_LOG_ERROR(m_logger, "Unable to upgrade to administrative rights"); m_lock.unlock(); return; } else { m_has_rights = true; if (m_use_log) PION_LOG_DEBUG(m_logger, "Upgraded to administrative rights"); } } void admin_rights::release(void) { if (m_has_rights) { if ( seteuid(m_user_id) == 0 ) { if (m_use_log) PION_LOG_DEBUG(m_logger, "Released administrative rights"); } else { if (m_use_log) PION_LOG_ERROR(m_logger, "Unable to release administrative rights"); } m_has_rights = false; m_lock.unlock(); } } long admin_rights::run_as_user(const std::string& user_name) { long user_id = find_system_id(user_name, "/etc/passwd"); if (user_id != -1) { if ( seteuid(user_id) != 0 ) user_id = -1; } else { user_id = geteuid(); } return user_id; } long admin_rights::run_as_group(const std::string& group_name) { long group_id = find_system_id(group_name, "/etc/group"); if (group_id != -1) { if ( setegid(group_id) != 0 ) group_id = -1; } else { group_id = getegid(); } return group_id; } long admin_rights::find_system_id(const std::string& name, const std::string& file) { // check if name is the system id const boost::regex just_numbers("\\d+"); if (boost::regex_match(name, just_numbers)) { return boost::lexical_cast(name); } // open system file std::ifstream system_file(file.c_str()); if (! system_file.is_open()) { return -1; } // find id in system file typedef boost::tokenizer > Tok; boost::char_separator sep(":"); std::string line; boost::int32_t system_id = -1; while (std::getline(system_file, line, '\n')) { Tok tokens(line, sep); Tok::const_iterator token_it = tokens.begin(); if (token_it != tokens.end() && *token_it == name) { // found line matching name if (++token_it != tokens.end() && ++token_it != tokens.end() && boost::regex_match(*token_it, just_numbers)) { // found id as third parameter system_id = boost::lexical_cast(*token_it); } break; } } return system_id; } #endif // #ifdef _MSC_VER } // end namespace pion pion-5.0.4+dfsg.orig/src/http_reader.cpp0000644000372000001440000001321312215647065017541 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // reader static members const boost::uint32_t reader::DEFAULT_READ_TIMEOUT = 10; // reader member functions void reader::receive(void) { if (m_tcp_conn->get_pipelined()) { // there are pipelined messages available in the connection's read buffer m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); // default to close the connection m_tcp_conn->load_read_pos(m_read_ptr, m_read_end_ptr); consume_bytes(); } else { // no pipelined messages available in the read buffer -> read bytes from the socket m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); // default to close the connection read_bytes_with_timeout(); } } void reader::consume_bytes(const boost::system::error_code& read_error, std::size_t bytes_read) { // cancel read timer if operation didn't time-out if (m_timer_ptr) { m_timer_ptr->cancel(); m_timer_ptr.reset(); } if (read_error) { // a read error occured handle_read_error(read_error); return; } PION_LOG_DEBUG(m_logger, "Read " << bytes_read << " bytes from HTTP " << (is_parsing_request() ? "request" : "response")); // set pointers for new HTTP header data to be consumed set_read_buffer(m_tcp_conn->get_read_buffer().data(), bytes_read); consume_bytes(); } void reader::consume_bytes(void) { // parse the bytes read from the last operation // // note that boost::tribool may have one of THREE states: // // false: encountered an error while parsing message // true: finished successfully parsing the message // indeterminate: parsed bytes, but the message is not yet finished // boost::system::error_code ec; boost::tribool result = parse(get_message(), ec); if (gcount() > 0) { // parsed > 0 bytes in HTTP headers PION_LOG_DEBUG(m_logger, "Parsed " << gcount() << " HTTP bytes"); } if (result == true) { // finished reading HTTP message and it is valid // set the connection's lifecycle type if (get_message().check_keep_alive()) { if ( eof() ) { // the connection should be kept alive, but does not have pipelined messages m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_KEEPALIVE); } else { // the connection has pipelined messages m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_PIPELINED); // save the read position as a bookmark so that it can be retrieved // by a new HTTP parser, which will be created after the current // message has been handled m_tcp_conn->save_read_pos(m_read_ptr, m_read_end_ptr); PION_LOG_DEBUG(m_logger, "HTTP pipelined " << (is_parsing_request() ? "request (" : "response (") << bytes_available() << " bytes available)"); } } else { m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); } // we have finished parsing the HTTP message finished_reading(ec); } else if (result == false) { // the message is invalid or an error occured m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); // make sure it will get closed get_message().set_is_valid(false); finished_reading(ec); } else { // not yet finished parsing the message -> read more data read_bytes_with_timeout(); } } void reader::read_bytes_with_timeout(void) { if (m_read_timeout > 0) { m_timer_ptr.reset(new tcp::timer(m_tcp_conn)); m_timer_ptr->start(m_read_timeout); } else if (m_timer_ptr) { m_timer_ptr.reset(); } read_bytes(); } void reader::handle_read_error(const boost::system::error_code& read_error) { // close the connection, forcing the client to establish a new one m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); // make sure it will get closed // check if this is just a message with unknown content length if (! check_premature_eof(get_message())) { boost::system::error_code ec; // clear error code finished_reading(ec); return; } // only log errors if the parsing has already begun if (get_total_bytes_read() > 0) { if (read_error == boost::asio::error::operation_aborted) { // if the operation was aborted, the acceptor was stopped, // which means another thread is shutting-down the server PION_LOG_INFO(m_logger, "HTTP " << (is_parsing_request() ? "request" : "response") << " parsing aborted (shutting down)"); } else { PION_LOG_INFO(m_logger, "HTTP " << (is_parsing_request() ? "request" : "response") << " parsing aborted (" << read_error.message() << ')'); } } finished_reading(read_error); } } // end namespace http } // end namespace pion pion-5.0.4+dfsg.orig/src/process.cpp0000644000372000001440000000613512215647065016723 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #ifdef _MSC_VER #include #else #include #include #include #endif #include #include namespace pion { // begin namespace pion // static members of process boost::once_flag process::m_instance_flag = BOOST_ONCE_INIT; process::config_type *process::m_config_ptr = NULL; // process member functions void process::shutdown(void) { config_type& cfg = get_config(); boost::mutex::scoped_lock shutdown_lock(cfg.shutdown_mutex); if (! cfg.shutdown_now) { cfg.shutdown_now = true; cfg.shutdown_cond.notify_all(); } } void process::wait_for_shutdown(void) { config_type& cfg = get_config(); boost::mutex::scoped_lock shutdown_lock(cfg.shutdown_mutex); while (! cfg.shutdown_now) cfg.shutdown_cond.wait(shutdown_lock); } void process::create_config(void) { static config_type UNIQUE_PION_PROCESS_CONFIG; m_config_ptr = &UNIQUE_PION_PROCESS_CONFIG; } #ifdef _MSC_VER BOOL WINAPI console_ctrl_handler(DWORD ctrl_type) { switch(ctrl_type) { case CTRL_C_EVENT: case CTRL_BREAK_EVENT: case CTRL_CLOSE_EVENT: case CTRL_SHUTDOWN_EVENT: process::shutdown(); return TRUE; default: return FALSE; } } void process::initialize(void) { SetConsoleCtrlHandler(console_ctrl_handler, TRUE); } void process::daemonize(void) { // not supported } #else // NOT #ifdef _MSC_VER void handle_signal(int sig) { process::shutdown(); } void process::initialize(void) { signal(SIGPIPE, SIG_IGN); signal(SIGCHLD, SIG_IGN); signal(SIGTSTP, SIG_IGN); signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); signal(SIGHUP, SIG_IGN); signal(SIGINT, handle_signal); signal(SIGTERM, handle_signal); } void process::daemonize(void) { // adopted from "Unix Daemon Server Programming" // http://www.enderunix.org/docs/eng/daemon.php // return early if already running as a daemon if(getppid()==1) return; // for out the process int i = fork(); if (i<0) exit(1); // error forking if (i>0) exit(0); // exit if parent // child (daemon process) continues here after the fork... // obtain a new process group setsid(); // close all descriptors for (i=getdtablesize();i>=0;--i) close(i); // bind stdio to /dev/null (ignore errors) i=open("/dev/null",O_RDWR); if (i != -1) { if (dup(i) == -1) {} if (dup(i) == -1) {} } // restrict file creation mode to 0750 umask(027); } #endif // #ifdef _MSC_VER } // end namespace pion pion-5.0.4+dfsg.orig/TODO0000644000372000001440000000004712215647065014436 0ustar robertousersSee https://github.com/cloudmeter/pion pion-5.0.4+dfsg.orig/configure.ac0000644000372000001440000000256112215647065016237 0ustar robertousers# ------------------------------------------------ # Pion Network Library autoconf configuration file # ------------------------------------------------ # Set pion version information AC_INIT([pion], [5.0.4], [pion-users@lists.sourceforge.net]) # Initialize some other things AC_PREREQ([2.59]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR([m4]) AC_CONFIG_SRCDIR(src/algorithm.cpp) # package and version args are now taken from AC_INIT() AM_INIT_AUTOMAKE([foreign]) # Use "silent mode" for less verbose build commands in automake 1.11+ m4_ifdef( [AM_SILENT_RULES], [AM_SILENT_RULES([yes])] ) # Needed to set per-target compilation flags AM_PROG_CC_C_O # Setup libtool AC_LIBTOOL_WIN32_DLL AC_LIBTOOL_DLOPEN AC_PROG_LIBTOOL # Setup doxygen support DX_DOXYGEN_FEATURE(ON) DX_HTML_FEATURE(ON) DX_INIT_DOXYGEN(pion, doc/Doxyfile, doc) # Define CXXFLAGS before AC_PROG_CXX to suppress the default autoconf # compiler options CFLAGS="$CFLAGS -DPION" CXXFLAGS="$CXXFLAGS -DPION" # Include pion-config.inc m4_include([build/pion-setup.inc]) m4_include([build/pion-boost.inc]) m4_include([build/pion-config.inc]) # Output Makefiles AC_OUTPUT(pion.pc Makefile include/Makefile include/pion/Makefile include/pion/tcp/Makefile include/pion/http/Makefile include/pion/test/Makefile include/pion/spdy/Makefile src/Makefile services/Makefile utils/Makefile tests/Makefile tests/plugins/Makefile) pion-5.0.4+dfsg.orig/PionNetServices.vcxproj0000644000372000001440000002433712215647065020453 0ustar robertousers Debug_DLL_full Win32 Debug_DLL_full x64 Debug_static Win32 Debug_static x64 Release_DLL_full Win32 Release_DLL_full x64 Release_static Win32 Release_static x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F} PionNetServices Utility Utility Utility Utility Utility Utility Utility Utility <_ProjectFileVersion>10.0.40219.1 Remove all files from services\.libs if exist services\.libs del /Q services\.libs\*.* Copy the plugin DLLs for the current configuration into services\.libs if not exist services\.libs md services\.libs copy services\$(Configuration)_$(Platform)\*.dll services\.libs Remove all files from services\.libs if exist services\.libs del /Q services\.libs\*.* X64 Copy the plugin DLLs for the current configuration into services\.libs if not exist services\.libs md services\.libs copy services\$(Configuration)_$(Platform)\*.dll services\.libs Remove all files from services\.libs if exist services\.libs del /Q services\.libs\*.* Copy the plugin DLLs for the current configuration into services\.libs if not exist services\.libs md services\.libs copy services\$(Configuration)_$(Platform)\*.dll services\.libs Remove all files from services\.libs if exist services\.libs del /Q services\.libs\*.* X64 Copy the plugin DLLs for the current configuration into services\.libs if not exist services\.libs md services\.libs copy services\$(Configuration)_$(Platform)\*.dll services\.libs X64 X64 {8c8a8e46-4588-4ce1-b624-89c36ea5209e} false {1cf012d8-a47c-4d2b-952d-d90d19795a07} false {09c3d3d7-7ce0-48d1-994f-eb534c07cf8b} false {70ca1fa9-ba9a-4ea4-9b7b-c747238991c1} false {9ee2433a-b460-45e0-8968-ec5ce8ef9875} false {12f95fe7-ace1-4281-86bf-4117ae2d633e} false pion-5.0.4+dfsg.orig/utils/0000755000372000001440000000000012215647145015104 5ustar robertouserspion-5.0.4+dfsg.orig/utils/sslkey.pem0000644000372000001440000000347712215647065017135 0ustar robertousers-----BEGIN CERTIFICATE----- MIICmzCCAgSgAwIBAgIJAKwms4sSPw+/MA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNV BAYTAlVTMQswCQYDVQQIEwJDQTEQMA4GA1UEChMHbGlicGlvbjEQMA4GA1UEAxMH bGlicGlvbjAeFw0wNzA2MDEwMTEzMDBaFw0wODA1MzEwMTEzMDBaMD4xCzAJBgNV BAYTAlVTMQswCQYDVQQIEwJDQTEQMA4GA1UEChMHbGlicGlvbjEQMA4GA1UEAxMH bGlicGlvbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwZDYFDNhlL4P1XHL lk0WtoBViGDd5yhLCUj/vDz3GIY9sufJHMBqZNZGovOOFOWH+m3yS1NPaUqzqWvz juMkCh3NsUZHWINJWb218bzj8ExOBJ0pgRL5anw96JN5hQ4/mr4x1v+5LcVyQVYU M2KYiLDBP+QHsWbOnQvmU3Re4vcCAwEAAaOBoDCBnTAdBgNVHQ4EFgQUg0XgzuBc fuCL2uTcHcqULKhVg3gwbgYDVR0jBGcwZYAUg0XgzuBcfuCL2uTcHcqULKhVg3ih QqRAMD4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEQMA4GA1UEChMHbGlicGlv bjEQMA4GA1UEAxMHbGlicGlvboIJAKwms4sSPw+/MAwGA1UdEwQFMAMBAf8wDQYJ KoZIhvcNAQEFBQADgYEAOOot4Yynj5Cg65+Nt5vGcIhC9321ywUnDRKEk7yu3UXA 1llqxiZE8thH0JUMoNcEWxVdEvHM8OUWaWzyyqcVZ4GyCidmE8JJUULB81b4qA+x 7rqsuTi7yLbHP3vAaZyhL0cmsxPyPB1XxQRvyAIAPWAKtJOOlQV0e055I1FyDAg= -----END CERTIFICATE----- -----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQDBkNgUM2GUvg/VccuWTRa2gFWIYN3nKEsJSP+8PPcYhj2y58kc wGpk1kai844U5Yf6bfJLU09pSrOpa/OO4yQKHc2xRkdYg0lZvbXxvOPwTE4EnSmB EvlqfD3ok3mFDj+avjHW/7ktxXJBVhQzYpiIsME/5AexZs6dC+ZTdF7i9wIDAQAB AoGBAIUJ/LnFpugIyfE2SWuAiH/fLOqTSXE7bHdxSPQkIuEkQvvX+45bYcT00Y/m Pl12dUNWlhXXqNkBkwJ7Q+eNjpKDTTPCNo6Padg9ouHgJ5pRA9SdTTsR44UdAJpB qsuJAwYcxketfwQ5QJpZZx7slA2dl92dvo+GDGxARHKEjCQBAkEA5XzR+o/XiIjz K81aq7bw5CdD+fkm4xfEYW4Mqpbg7iM0Rt4unH+savS6ghCdJescRpa4YrVuHObh 3rx917AydwJBANftn7bHEl7juu+wQnta0GQME7ipUHB/YNsmHQzvNLARCd/aNrjk J5P6bQOzPtQ/ED6T8sB5OHbTmV43zLHmc4ECQQCT8dZE3DqtMOzjzi2oCfZef9nY 64DgYlAeJ55O05oKq/NlxJL0HXMAOOmMND27VkkSUNRp/mEQjOAMgiP2ywadAkAT eoQl4N9vX+vFI4lbx111KQG+bseq3lLGcjG8sPd3ypGxd+Xn1+0aFEUxSEIqs2Wr v3zukADf90amkTIN+lQBAkEA3pBbxrW0cYU4YfZmPqP4ABCBNedU3g1TDQbUYZ+2 MfMhjws5yzwGhqwaLJzsJOUL4wmvji/LP4gNw7l3B9qaBA== -----END RSA PRIVATE KEY----- pion-5.0.4+dfsg.orig/utils/testservices.html0000644000372000001440000000132412215647065020516 0ustar robertousers Test Website

Test Website


Demonstration of Authentication interface

pion-5.0.4+dfsg.orig/utils/Makefile.am0000644000372000001440000000077312215647065017150 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- AM_CPPFLAGS = -I../include bin_PROGRAMS = helloserver piond helloserver_SOURCES = helloserver.cpp helloserver_LDADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ helloserver_DEPENDENCIES = ../src/libpion.la piond_SOURCES = piond.cpp piond_LDADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ piond_DEPENDENCIES = ../src/libpion.la EXTRA_DIST = sslkey.pem testservices.html *.conf *.vcxproj *.vcxproj.filters pion-5.0.4+dfsg.orig/utils/piond.cpp0000644000372000001440000001574612215647065016737 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include // these are used only when linking to static web service libraries // #ifdef PION_STATIC_LINKING PION_DECLARE_PLUGIN(EchoService) PION_DECLARE_PLUGIN(FileService) PION_DECLARE_PLUGIN(HelloService) PION_DECLARE_PLUGIN(LogService) PION_DECLARE_PLUGIN(CookieService) using namespace std; using namespace pion; /// displays an error message if the arguments are invalid void argument_error(void) { std::cerr << "usage: piond [OPTIONS] RESOURCE WEBSERVICE" << std::endl << " piond [OPTIONS] -c SERVICE_CONFIG_FILE" << std::endl << "options: [-ssl PEM_FILE] [-i IP] [-p PORT] [-d PLUGINS_DIR] [-o OPTION=VALUE] [-v]" << std::endl; } /// main control function int main (int argc, char *argv[]) { static const unsigned int DEFAULT_PORT = 8080; // used to keep track of web service name=value options typedef std::vector > ServiceOptionsType; ServiceOptionsType service_options; // parse command line: determine port number, RESOURCE and WEBSERVICE boost::asio::ip::tcp::endpoint cfg_endpoint(boost::asio::ip::tcp::v4(), DEFAULT_PORT); std::string service_config_file; std::string resource_name; std::string service_name; std::string ssl_pem_file; bool ssl_flag = false; bool verbose_flag = false; for (int argnum=1; argnum < argc; ++argnum) { if (argv[argnum][0] == '-') { if (argv[argnum][1] == 'p' && argv[argnum][2] == '\0' && argnum+1 < argc) { // set port number ++argnum; cfg_endpoint.port(strtoul(argv[argnum], 0, 10)); if (cfg_endpoint.port() == 0) cfg_endpoint.port(DEFAULT_PORT); } else if (argv[argnum][1] == 'i' && argv[argnum][2] == '\0' && argnum+1 < argc) { // set ip address cfg_endpoint.address(boost::asio::ip::address::from_string(argv[++argnum])); } else if (argv[argnum][1] == 'c' && argv[argnum][2] == '\0' && argnum+1 < argc) { service_config_file = argv[++argnum]; } else if (argv[argnum][1] == 'd' && argv[argnum][2] == '\0' && argnum+1 < argc) { // add the service plug-ins directory to the search path try { plugin::add_plugin_directory(argv[++argnum]); } catch (error::directory_not_found&) { std::cerr << "piond: Web service plug-ins directory does not exist: " << argv[argnum] << std::endl; return 1; } } else if (argv[argnum][1] == 'o' && argv[argnum][2] == '\0' && argnum+1 < argc) { std::string option_name(argv[++argnum]); std::string::size_type pos = option_name.find('='); if (pos == std::string::npos) { argument_error(); return 1; } std::string option_value(option_name, pos + 1); option_name.resize(pos); service_options.push_back( std::make_pair(option_name, option_value) ); } else if (argv[argnum][1] == 's' && argv[argnum][2] == 's' && argv[argnum][3] == 'l' && argv[argnum][4] == '\0' && argnum+1 < argc) { ssl_flag = true; ssl_pem_file = argv[++argnum]; } else if (argv[argnum][1] == 'v' && argv[argnum][2] == '\0') { verbose_flag = true; } else { argument_error(); return 1; } } else if (argnum+2 == argc) { // second to last argument = RESOURCE resource_name = argv[argnum]; } else if (argnum+1 == argc) { // last argument = WEBSERVICE service_name = argv[argnum]; } else { argument_error(); return 1; } } if (service_config_file.empty() && (resource_name.empty() || service_name.empty())) { argument_error(); return 1; } // initialize signal handlers, etc. process::initialize(); // initialize log system (use simple configuration) logger main_log(PION_GET_LOGGER("piond")); logger pion_log(PION_GET_LOGGER("pion")); if (verbose_flag) { PION_LOG_SETLEVEL_DEBUG(main_log); PION_LOG_SETLEVEL_DEBUG(pion_log); } else { PION_LOG_SETLEVEL_INFO(main_log); PION_LOG_SETLEVEL_INFO(pion_log); } PION_LOG_CONFIG_BASIC; try { // add the Pion plug-ins installation directory to our path try { plugin::add_plugin_directory(PION_PLUGINS_DIRECTORY); } catch (error::directory_not_found&) { PION_LOG_WARN(main_log, "Default plug-ins directory does not exist: " << PION_PLUGINS_DIRECTORY); } // add the directory of the program we're running to our path try { plugin::add_plugin_directory(boost::filesystem::path(argv[0]).branch_path().string()); } catch (error::directory_not_found&) { PION_LOG_WARN(main_log, "Directory of current executable does not exist: " << boost::filesystem::path(argv[0]).branch_path()); } // create a server for HTTP & add the Hello Service http::plugin_server web_server(cfg_endpoint); if (ssl_flag) { #ifdef PION_HAVE_SSL // configure server for SSL web_server.set_ssl_key_file(ssl_pem_file); PION_LOG_INFO(main_log, "SSL support enabled using key file: " << ssl_pem_file); #else PION_LOG_ERROR(main_log, "SSL support is not enabled"); #endif } if (service_config_file.empty()) { // load a single web service using the command line arguments web_server.load_service(resource_name, service_name); // set web service options if any are defined for (ServiceOptionsType::iterator i = service_options.begin(); i != service_options.end(); ++i) { web_server.set_service_option(resource_name, i->first, i->second); } } else { // load services using the configuration file web_server.load_service_config(service_config_file); } // startup the server web_server.start(); process::wait_for_shutdown(); } catch (std::exception& e) { PION_LOG_FATAL(main_log, pion::diagnostic_information(e)); } return 0; } pion-5.0.4+dfsg.orig/utils/testservices.conf0000644000372000001440000000236512215647065020505 0ustar robertousers## ## Simple configuration file to test pion-net web services ## ## Adds path to compiled web services built from source tarball ## path ../services/.libs path ../bin/Debug ## Hello World Service ## service /hello HelloService ## Service to echo requests ## service /echo EchoService ## Service to display & update cookies ## service /cookie CookieService ## Service to display log events ## service /log LogService ## Service to serve pion-net documentation ## service /doc FileService option /doc directory=../doc/html option /doc file=../doc/html/index.html option /doc cache=2 option /doc scan=3 ## Use testservices.html as an index page ## service /index.html FileService option /index.html file=../utils/testservices.html ## service / FileService option / file=../utils/testservices.html ## Service to demonstrate Authentication interface ## service /auth EchoService ## ## define type of authentication ## ## MUST be a first command in configuration file ## auth type can be defined once and only once! ## auth cookie ## ## Add /auth resource to set of password protected ## restrict /auth ## ## Add /protected resource to set of password protected ## restrict /protected ## ## define user ## user stas 123456 ## ## define user ## user mike 123456 pion-5.0.4+dfsg.orig/utils/helloserver.cpp0000644000372000001440000000443712215647065020153 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include using namespace std; using namespace pion; /// simple TCP server that just sends "Hello there!" to each connection class HelloServer : public tcp::server { public: HelloServer(const unsigned int tcp_port) : tcp::server(tcp_port) {} virtual ~HelloServer() {} virtual void handle_connection(tcp::connection_ptr& tcp_conn) { static const std::string HELLO_MESSAGE("Hello there!\x0D\x0A"); tcp_conn->set_lifecycle(pion::tcp::connection::LIFECYCLE_CLOSE); // make sure it will get closed tcp_conn->async_write(boost::asio::buffer(HELLO_MESSAGE), boost::bind(&pion::tcp::connection::finish, tcp_conn)); } }; /// main control function int main (int argc, char *argv[]) { static const unsigned int DEFAULT_PORT = 8080; // parse command line: determine port number unsigned int port = DEFAULT_PORT; if (argc == 2) { port = strtoul(argv[1], 0, 10); if (port == 0) port = DEFAULT_PORT; } else if (argc != 1) { std::cerr << "usage: helloserver [port]" << std::endl; return 1; } // initialize signal handlers, etc. process::initialize(); // initialize log system (use simple configuration) logger main_log(PION_GET_LOGGER("helloserver")); logger pion_log(PION_GET_LOGGER("pion")); PION_LOG_SETLEVEL_INFO(main_log); PION_LOG_SETLEVEL_INFO(pion_log); PION_LOG_CONFIG_BASIC; try { // create a new server to handle the Hello TCP protocol tcp::server_ptr hello_server(new HelloServer(port)); hello_server->start(); process::wait_for_shutdown(); } catch (std::exception& e) { PION_LOG_FATAL(main_log, pion::diagnostic_information(e)); } return 0; } pion-5.0.4+dfsg.orig/utils/Makefile.in0000644000372000001440000004550712215647102017155 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = helloserver$(EXEEXT) piond$(EXEEXT) subdir = utils DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_helloserver_OBJECTS = helloserver.$(OBJEXT) helloserver_OBJECTS = $(am_helloserver_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent am_piond_OBJECTS = piond.$(OBJEXT) piond_OBJECTS = $(am_piond_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/pion depcomp = $(SHELL) $(top_srcdir)/m4/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_$(V)) am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_$(V)) am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(helloserver_SOURCES) $(piond_SOURCES) DIST_SOURCES = $(helloserver_SOURCES) $(piond_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I../include helloserver_SOURCES = helloserver.cpp helloserver_LDADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ helloserver_DEPENDENCIES = ../src/libpion.la piond_SOURCES = piond.cpp piond_LDADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ piond_DEPENDENCIES = ../src/libpion.la EXTRA_DIST = sslkey.pem testservices.html *.conf *.vcxproj *.vcxproj.filters all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign utils/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list helloserver$(EXEEXT): $(helloserver_OBJECTS) $(helloserver_DEPENDENCIES) @rm -f helloserver$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(helloserver_OBJECTS) $(helloserver_LDADD) $(LIBS) piond$(EXEEXT): $(piond_OBJECTS) $(piond_DEPENDENCIES) @rm -f piond$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(piond_OBJECTS) $(piond_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/helloserver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/piond.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.4+dfsg.orig/utils/piond.vcxproj0000644000372000001440000004132112215647065017634 0ustar robertousers Debug_DLL_full Win32 Debug_DLL_full x64 Debug_static Win32 Debug_static x64 Release_DLL_full Win32 Release_DLL_full x64 Release_static Win32 Release_static x64 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853} PionWebServer Win32Proj Application true Application Application Application Application true Application Application Application <_ProjectFileVersion>10.0.40219.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset _CONSOLE;%(PreprocessorDefinitions) %(AdditionalDependencies) ..\services\.libs;%(AdditionalLibraryDirectories) Console false X64 _CONSOLE;%(PreprocessorDefinitions) ProgramDatabase %(AdditionalDependencies) ..\services\.libs;%(AdditionalLibraryDirectories) Console false MachineX64 _CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL %(AdditionalDependencies) ..\services\.libs;%(AdditionalLibraryDirectories) Console false X64 _CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL %(AdditionalDependencies) ..\services\.libs;%(AdditionalLibraryDirectories) Console false MachineX64 _CONSOLE;PION_FULL;%(PreprocessorDefinitions) Console false X64 _CONSOLE;PION_FULL;%(PreprocessorDefinitions) ProgramDatabase Console false MachineX64 _CONSOLE;PION_FULL;%(PreprocessorDefinitions) Console false X64 _CONSOLE;PION_FULL;%(PreprocessorDefinitions) Console false MachineX64 {1cf012d8-a47c-4d2b-952d-d90d19795a07} {09c3d3d7-7ce0-48d1-994f-eb534c07cf8b} {70ca1fa9-ba9a-4ea4-9b7b-c747238991c1} {9ee2433a-b460-45e0-8968-ec5ce8ef9875} {12f95fe7-ace1-4281-86bf-4117ae2d633e} {61f4b4d5-3608-4264-9f4b-b0da3e3fdf62} false pion-5.0.4+dfsg.orig/utils/piond.vcxproj.filters0000644000372000001440000000200712215647065021301 0ustar robertousers {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files pion-5.0.4+dfsg.orig/index.html0000644000372000001440000000077612215647065015754 0ustar robertousers Boost.Name Documentation Automatic redirection failed, please go to doc/html/index.html pion-5.0.4+dfsg.orig/autogen.sh0000755000372000001440000000045712215647065015754 0ustar robertousers#!/bin/sh # # This script initializes the GNU autotools environment for Pion # # DO NOT USE autoheader -> config.h.in file is NOT automanaged!!! AUTOHEADER=`which true` export AUTOHEADER # Make sure m4 directory exists if [ ! -d "m4" ]; then mkdir m4 fi # Generate configure script autoreconf -ifs pion-5.0.4+dfsg.orig/doc/0000755000372000001440000000000012215647143014507 5ustar robertouserspion-5.0.4+dfsg.orig/doc/Doxyfile0000644000372000001440000014551512215647065016233 0ustar robertousers# Doxyfile 1.5.2 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file that # follow. The default is UTF-8 which is also the encoding used for all text before # the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into # libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of # possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = pion # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = 5.0.4 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doc # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, # Italian, Japanese, Japanese-en (Japanese with English messages), Korean, # Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, # Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explicit @brief command for a brief description. JAVADOC_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = YES # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to # include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from the # version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = include src services utils # This tag can be used to specify the character encoding of the source files that # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default # input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. # See http://www.gnu.org/software/libiconv for the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the output. # The symbol name can be a fully qualified name, a word, or if the wildcard * is used, # a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentstion. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = doc/pion-net.tag # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = NO # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to # produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to # specify the directory where the mscgen tool resides. If left empty the tool is assumed to # be found in the default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a caller dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable caller graphs for selected # functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen will always # show the root nodes and its direct children regardless of this setting. DOT_GRAPH_MAX_NODES = 50 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO pion-5.0.4+dfsg.orig/doc/README.linux0000644000372000001440000001377512215647065016545 0ustar robertousersLinux Build Instructions ======================== The Easy Way: ------------- Atomic Labs has a tarball available from the "Third Party Libraries" page on our website that contains all of the required libraries to build Pion for certain versions of Redhat Linux. To get started quickly, just download and uncompress this file into your /usr/local/ directory, and you should be able to skip down to the last step! Installing ICU: --------------- Boost requires the ICU library for i18n support. This library is normally pre-installed on Linux. If you do not have it already, you should be able to grab the latest version using your favorite package manager: # yum install libicu libicu-devel # up2date libicu libicu-devel Installing Boost: ----------------- Please see the README.boost file for instructions. If you have an older version of Boost (pre-1.35) already installed, you will likely will need to first uninstall it so that gcc and libtool do not get confused: # rpm -e boost boost-devel If you're using RHEL/CentOS 4 (or earlier), please note that Boost 1.37.0 does not seem to work with gcc 3.x. You should use gcc4 instead: # yum install gcc4 gcc4-c++ Before running "make" to build the Boost libraries, edit the tools/build/v2/user-config.jam file and change this: using gcc ; to this: using gcc : : g++4 ; Installing zlib, bzlib & openssl: --------------------------------- Pion requires zlib, bzlib and openssl for compression and SSL/TLS encryption support, respectively. These libraries are normally pre-installed on Linux. If you do not have them already, you should be able to use your favorite package manager (yum, up2date or aptget) to install the latest versions: # yum install openssl openssl-devel zlib zlib-devel bzip2 bzip2-devel bzip2-libs # up2date openssl openssl-devel zlib zlib-devel bzip2 bzip2-devel bzip2-libs Installing log4cplus: --------------------- Note that the use of a logging framework is entirely optional, so you may skip this step if you like. We recommend that you use log4cplus for logging. Please visit the "Third Party Libraries" page on our website to obtain the source code tarball for log4cplus. Then, just run: # tar xvfj log4cplus-.tar.bz2 # cd log4cplus- # ./configure --enable-threads=yes # make all # make install Installing libxml2: ------------------- The Pion Platform requires the libxml2 development library for manipulating configuration files, and other things. This library is not used by the Pion Network Library, so you may skip this step if you are only building the Network Library. The libxml2 library is normally pre-installed on Linux. If you do not have it already, you should be able to grab the latest version using your favorite package manager: # yum install libxml2 libxml2-devel # up2date libxml2 libxml2-devel Installing Python: ------------------ Pion's PythonReactor requires Python version 2.4 or greater. You may skip this step if you do not want to build support for Python. Python 2.4 (or greater) is already pre-installed and should work out of the box on most Linux systems. If you do not have it already, you should be able to grab the latest version using your favorite package manager: # yum install python python-devel # up2date python python-devel RHEL/CentOS 4 shipped with Python 2.3. For this platform, we recommend that you download, build and install Python 2.6 into your /usr/local directories. You can download the source code from: http://www.python.org # tar xvfj Python-2.6.X.tar.bz2 # cd Python-2.6.X # ./configure --with-threads # make all # make install When you run the "configure" script for Pion, add the "--with-python" option to use the new version installed in /usr/local/bin instead of the default one: # ./configure --with-python=/usr/local/bin/python Installing lxml: ---------------- Pion's pupgrade.py script requires that you have the lxml library installed. The easiest way to do this is using the easy_install utility: # yum install python-setuptools libxml2-devel libxslt-devel # easy_install lxml You can also obtain lxml RPMs from either the RPMforge or EPEL (Extra Packages for Enterprise Linux) repositories. We recommend that you use EPEL since it is more up-to-date. On EL5, you can use the following command to set up this repository: (32-bit) # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm (64-bit) # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm You can then use yum to install the library with the following command: # yum install python-lxml Installing YAJL: ---------------- YAJL ("Yet Another JSON Library") is required to build support for the JSONCodec plugin. You may skip this step if you do not want to build support for JSON. To build YAJL, you must first have Ruby and CMake installed on your system. If you do not have them already, you should be able to grab the latest versions using your favorite package manager: # yum install ruby cmake # up2date ruby cmake You can download the source code tarball for YAJL from the "Third Party Libraries" page on our website. After downloading it, just run: # tar xvfz yajl-.tgz # cd yajl- # ./configure # make To install YAJL, we recommend that you just move the build files in the "build/yajl-" subdirectory into /usr/local: # sudo mv build/yajl-/lib/* /usr/local/lib # sudo mv build/yajl-/include/yajl /usr/local/include Building and installing Pion: ----------------------------- Now you should be able to build and install Pion: # tar xvfz pion--.tar.gz # cd pion-- # ./configure # make all # make install To build and run Pion's unit tests, run "make check" Note: if you're using RHEL/CentOS 4 with Boost 1.37.0 & gcc4, use: # CC="gcc4" CXX="g++4" ./configure ... Known Problems -------------- The Pion executables may complain about loading shared libraries if the Boost and/or other libraries are not in your search path. Try this: export LD_LIBRARY_PATH=/usr/local/lib pion-5.0.4+dfsg.orig/doc/html/0000755000372000001440000000000012215647143015453 5ustar robertouserspion-5.0.4+dfsg.orig/doc/html/process_8cpp_source.html0000644000372000001440000003276712215647143022350 0ustar robertousers pion: src/process.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/response__reader_8hpp_source.html0000644000372000001440000003744212215647142024210 0ustar robertousers pion: include/pion/http/response_reader.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1plugin_1_1data__type.html0000644000372000001440000001467112215647143025135 0ustar robertousers pion: pion::plugin::data_type Struct Reference

pion::plugin::data_type Struct Reference

#include <plugin.hpp>

List of all members.

Public Member Functions

 data_type (void)
 default constructors for convenience
 data_type (const std::string &plugin_name)
 data_type (const data_type &p)

Public Attributes

void * m_lib_handle
 symbol library loaded from a shared object file
void * m_create_func
 function used to create instances of the plug-in object
void * m_destroy_func
 function used to destroy instances of the plug-in object
std::string m_plugin_name
 the name of the plugin (must be unique per process)
unsigned long m_references
 number of references to this class

Detailed Description

data_type: object to hold shared library symbols

Definition at line 139 of file plugin.hpp.


The documentation for this struct was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1spdy_1_1__http__protocol__info__t-members.html0000644000372000001440000000725012215647143031321 0ustar robertousers pion: Member List
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1read__file-members.html0000644000372000001440000000662112215647143026135 0ustar robertousers pion: Member List

pion::error::read_file Member List

This is the complete list of members for pion::error::read_file, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/cookie__auth_8hpp_source.html0000644000372000001440000002125512215647142023315 0ustar robertousers pion: include/pion/http/cookie_auth.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/request_8hpp_source.html0000644000372000001440000006350012215647142022353 0ustar robertousers pion: include/pion/http/request.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1tcp_1_1stream.html0000644000372000001440000004755412215647143023376 0ustar robertousers pion: pion::tcp::stream Class Reference

pion::tcp::stream Class Reference

#include <stream.hpp>

Inherits std::basic_iostream< char, std::char_traits< char > >.

List of all members.

Public Types

typedef char char_type
typedef std::char_traits< char >
::int_type 
int_type
typedef std::char_traits< char >
::off_type 
off_type
typedef std::char_traits< char >
::pos_type 
pos_type
typedef std::char_traits< char > traits_type

Public Member Functions

 stream (tcp::connection_ptr &conn_ptr)
 stream (boost::asio::io_service &io_service, const bool ssl_flag=false)
 stream (boost::asio::io_service &io_service, connection::ssl_context_type &ssl_context)
boost::system::error_code accept (boost::asio::ip::tcp::acceptor &tcp_acceptor)
boost::system::error_code connect (boost::asio::ip::tcp::endpoint &tcp_endpoint)
boost::system::error_code connect (const boost::asio::ip::address &remote_addr, const unsigned int remote_port)
void close (void)
 closes the tcp connection
bool is_open (void) const
 returns true if the connection is currently open
bool get_ssl_flag (void) const
 returns true if the connection is encrypted using SSL
boost::asio::ip::address get_remote_ip (void) const
 returns the client's IP address
stream_bufferrdbuf (void)
 returns a pointer to the stream buffer in use

Detailed Description

stream: std::basic_iostream wrapper for TCP network connections

Definition at line 323 of file stream.hpp.


Constructor & Destructor Documentation

pion::tcp::stream::stream ( tcp::connection_ptr &  conn_ptr  )  [inline, explicit]

constructs a TCP stream object for an existing TCP connection

Parameters:
conn_ptr pointer to the TCP connection to use for reading & writing

Definition at line 341 of file stream.hpp.

pion::tcp::stream::stream ( boost::asio::io_service &  io_service,
const bool  ssl_flag = false 
) [inline, explicit]

constructs a TCP stream object for a new TCP connection

Parameters:
io_service asio service associated with the connection
ssl_flag if true then the connection will be encrypted using SSL

Definition at line 357 of file stream.hpp.

pion::tcp::stream::stream ( boost::asio::io_service &  io_service,
connection::ssl_context_type ssl_context 
) [inline]

constructs a TCP stream object for a new SSL/TCP connection

Parameters:
io_service asio service associated with the connection
ssl_context asio ssl context associated with the connection

Definition at line 374 of file stream.hpp.


Member Function Documentation

boost::system::error_code pion::tcp::stream::accept ( boost::asio::ip::tcp::acceptor &  tcp_acceptor  )  [inline]

accepts a new tcp connection and performs SSL handshake if necessary

Parameters:
tcp_acceptor object used to accept new connections
Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::basic_socket_acceptor::accept()

Definition at line 393 of file stream.hpp.

References pion::tcp::connection::accept(), pion::tcp::stream_buffer::get_connection(), get_ssl_flag(), and pion::tcp::connection::handshake_server().

boost::system::error_code pion::tcp::stream::connect ( const boost::asio::ip::address &  remote_addr,
const unsigned int  remote_port 
) [inline]

connects to a (IPv4) remote endpoint and performs SSL handshake if necessary

Parameters:
remote_addr remote IP address (v4) to connect to
remote_port remote port number to connect to
Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::basic_socket_acceptor::connect()

Definition at line 424 of file stream.hpp.

References pion::tcp::connection::connect(), pion::tcp::stream_buffer::get_connection(), get_ssl_flag(), and pion::tcp::connection::handshake_client().

boost::system::error_code pion::tcp::stream::connect ( boost::asio::ip::tcp::endpoint &  tcp_endpoint  )  [inline]

connects to a remote endpoint and performs SSL handshake if necessary

Parameters:
tcp_endpoint remote endpoint to connect to
Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::basic_socket_acceptor::connect()

Definition at line 408 of file stream.hpp.

References pion::tcp::connection::connect(), pion::tcp::stream_buffer::get_connection(), get_ssl_flag(), and pion::tcp::connection::handshake_client().


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1plugin__missing__symbol-members.html0000644000372000001440000000666612215647143031007 0ustar robertousers pion: Member List

pion::error::plugin_missing_symbol Member List

This is the complete list of members for pion::error::plugin_missing_symbol, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/request__reader_8hpp_source.html0000644000372000001440000003652312215647142024041 0ustar robertousers pion: include/pion/http/request_reader.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/http__writer_8cpp_source.html0000644000372000001440000002145412215647143023373 0ustar robertousers pion: src/http_writer.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1response__writer.html0000644000372000001440000005573712215647143025667 0ustar robertousers pion: pion::http::response_writer Class Reference

pion::http::response_writer Class Reference

#include <response_writer.hpp>

Inherits pion::http::writer.

List of all members.

Public Member Functions

virtual ~response_writer ()
 default destructor
http::responseget_response (void)
 returns a non-const reference to the response that will be sent

Static Public Member Functions

static boost::shared_ptr
< response_writer
create (tcp::connection_ptr &tcp_conn, http::response_ptr &http_response_ptr, finished_handler_t handler=finished_handler_t())
static boost::shared_ptr
< response_writer
create (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler=finished_handler_t())

Protected Member Functions

 response_writer (tcp::connection_ptr &tcp_conn, http::response_ptr &http_response_ptr, finished_handler_t handler)
 response_writer (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler)
virtual void prepare_buffers_for_send (http::message::write_buffers_t &write_buffers)
virtual write_handler_t bind_to_write_handler (void)
 returns a function bound to http::writer::handle_write()
virtual void handle_write (const boost::system::error_code &write_error, std::size_t bytes_written)

Detailed Description

response_writer: used to asynchronously send HTTP responses

Definition at line 31 of file response_writer.hpp.


Constructor & Destructor Documentation

pion::http::response_writer::response_writer ( tcp::connection_ptr &  tcp_conn,
http::response_ptr &  http_response_ptr,
finished_handler_t  handler 
) [inline, protected]

protected constructor restricts creation of objects (use create())

Parameters:
tcp_conn TCP connection used to send the response
http_response pointer to the response that will be sent
handler function called after the request has been sent

Definition at line 87 of file response_writer.hpp.

pion::http::response_writer::response_writer ( tcp::connection_ptr &  tcp_conn,
const http::request http_request,
finished_handler_t  handler 
) [inline, protected]

protected constructor restricts creation of objects (use create())

Parameters:
tcp_conn TCP connection used to send the response
http_request the request we are responding to
handler function called after the request has been sent

Definition at line 111 of file response_writer.hpp.


Member Function Documentation

static boost::shared_ptr<response_writer> pion::http::response_writer::create ( tcp::connection_ptr &  tcp_conn,
const http::request http_request,
finished_handler_t  handler = finished_handler_t() 
) [inline, static]

creates new response_writer objects

Parameters:
tcp_conn TCP connection used to send the response
http_request the request we are responding to
handler function called after the request has been sent
Returns:
boost::shared_ptr<response_writer> shared pointer to the new writer object that was created

Definition at line 67 of file response_writer.hpp.

static boost::shared_ptr<response_writer> pion::http::response_writer::create ( tcp::connection_ptr &  tcp_conn,
http::response_ptr &  http_response_ptr,
finished_handler_t  handler = finished_handler_t() 
) [inline, static]
virtual void pion::http::response_writer::handle_write ( const boost::system::error_code &  write_error,
std::size_t  bytes_written 
) [inline, protected, virtual]

called after the response is sent

Parameters:
write_error error status from the last write operation
bytes_written number of bytes sent by the last write operation

Implements pion::http::writer.

Definition at line 147 of file response_writer.hpp.

Referenced by bind_to_write_handler().

virtual void pion::http::response_writer::prepare_buffers_for_send ( http::message::write_buffers_t write_buffers  )  [inline, protected, virtual]

initializes a vector of write buffers with the HTTP message information

Parameters:
write_buffers vector of write buffers to initialize

Implements pion::http::writer.

Definition at line 126 of file response_writer.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1spdy_1_1__value__string.html0000644000372000001440000000567612215647143025651 0ustar robertousers pion: pion::spdy::_value_string Struct Reference

pion::spdy::_value_string Struct Reference

SPDY value string data type. More...

#include <types.hpp>

List of all members.

Public Attributes

boost::uint32_t value
std::string str

Detailed Description

SPDY value string data type.

Definition at line 49 of file types.hpp.


The documentation for this struct was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1multi__thread__scheduler.html0000644000372000001440000001456312215647143025743 0ustar robertousers pion: pion::multi_thread_scheduler Class Reference

pion::multi_thread_scheduler Class Reference

#include <scheduler.hpp>

Inherits pion::scheduler.

Inherited by pion::one_to_one_scheduler, and pion::single_service_scheduler.

List of all members.

Public Member Functions

 multi_thread_scheduler (void)
 constructs a new single_service_scheduler
virtual ~multi_thread_scheduler ()
 virtual destructor

Protected Types

typedef std::vector
< boost::shared_ptr
< boost::thread > > 
ThreadPool
 typedef for a pool of worker threads

Protected Member Functions

virtual void stop_threads (void)
 stops all threads used to perform work
virtual void finish_threads (void)
 finishes all threads used to perform work

Protected Attributes

ThreadPool m_thread_pool
 pool of threads used to perform work

Detailed Description

multi_thread_scheduler: uses a pool of threads to perform work

Definition at line 199 of file scheduler.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_hello_service.html0000644000372000001440000000663612215647143025754 0ustar robertousers pion: pion::plugins::HelloService Class Reference

pion::plugins::HelloService Class Reference

#include <HelloService.hpp>

Inherits pion::http::plugin_service.

List of all members.

Public Member Functions

virtual void operator() (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)
 handles requests for HelloService

Detailed Description

HelloService: web service that responds with "Hello World"

Definition at line 22 of file HelloService.hpp.


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_vars.html0000644000372000001440000003066312215647143021414 0ustar robertousers pion: Class Members - Variables
 

- c -

- d -

- h -

- k -

- m -

- n -

- q -

- r -

- s -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x73.html0000644000372000001440000004454512215647143021146 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- s -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugin__ptr-members.html0000644000372000001440000002141512215647143024672 0ustar robertousers pion: Member List

pion::plugin_ptr< InterfaceClassType > Member List

This is the complete list of members for pion::plugin_ptr< InterfaceClassType >, including all inherited members.
add_plugin_directory(const std::string &dir)pion::plugin [static]
add_static_entry_point(const std::string &plugin_name, void *create_func, void *destroy_func)pion::plugin [static]
check_cygwin_path(boost::filesystem::path &final_path, const std::string &path_string)pion::plugin [static]
close(void)pion::plugin [inline]
create(void)pion::plugin_ptr< InterfaceClassType > [inline]
CreateObjectFunction typedefpion::plugin_ptr< InterfaceClassType > [protected]
destroy(InterfaceClassType *object_ptr)pion::plugin_ptr< InterfaceClassType > [inline]
DestroyObjectFunction typedefpion::plugin_ptr< InterfaceClassType > [protected]
find_config_file(std::string &path_to_file, const std::string &name)pion::plugin [inline, static]
find_plugin_file(std::string &path_to_file, const std::string &name)pion::plugin [inline, static]
get_all_plugin_names(std::vector< std::string > &plugin_names)pion::plugin [static]
get_create_function(void)pion::plugin [inline, protected]
get_destroy_function(void)pion::plugin [inline, protected]
get_plugin_name(void) const pion::plugin [inline]
grab_data(const plugin &p)pion::plugin [protected]
is_open(void) const pion::plugin [inline]
open(const std::string &plugin_name)pion::plugin
open_file(const std::string &plugin_file)pion::plugin
operator=(const plugin_ptr &p)pion::plugin_ptr< InterfaceClassType > [inline]
plugin(void)pion::plugin [inline, protected]
plugin(const plugin &p)pion::plugin [inline, protected]
plugin_ptr(void)pion::plugin_ptr< InterfaceClassType > [inline]
plugin_ptr(const plugin_ptr &p)pion::plugin_ptr< InterfaceClassType > [inline]
release_data(void)pion::plugin [protected]
reset_plugin_directories(void)pion::plugin [static]
~plugin() (defined in pion::plugin)pion::plugin [inline, virtual]
~plugin_ptr() (defined in pion::plugin_ptr< InterfaceClassType >)pion::plugin_ptr< InterfaceClassType > [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1tcp_1_1server.html0000644000372000001440000007016212215647143023400 0ustar robertousers pion: pion::tcp::server Class Reference

pion::tcp::server Class Reference

#include <server.hpp>

Inherited by HelloServer, and pion::http::server.

List of all members.

Public Member Functions

virtual ~server ()
 default destructor
void start (void)
 starts listening for new connections
void stop (bool wait_until_finished=false)
void join (void)
 the calling thread will sleep until the server has stopped listening for connections
void set_ssl_key_file (const std::string &pem_key_file)
std::size_t get_connections (void) const
 returns the number of active tcp connections
unsigned int get_port (void) const
 returns tcp port number that the server listens for connections on
void set_port (unsigned int p)
 sets tcp port number that the server listens for connections on
boost::asio::ip::address get_address (void) const
 returns IP address that the server listens for connections on
void set_address (const boost::asio::ip::address &addr)
 sets IP address that the server listens for connections on
const
boost::asio::ip::tcp::endpoint & 
get_endpoint (void) const
 returns tcp endpoint that the server listens for connections on
void set_endpoint (const boost::asio::ip::tcp::endpoint &ep)
 sets tcp endpoint that the server listens for connections on
bool get_ssl_flag (void) const
 returns true if the server uses SSL to encrypt connections
void set_ssl_flag (bool b=true)
 sets value of SSL flag (true if the server uses SSL to encrypt connections)
connection::ssl_context_typeget_ssl_context_type (void)
 returns the SSL context for configuration
bool is_listening (void) const
 returns true if the server is listening for connections
void set_logger (logger log_ptr)
 sets the logger to be used
logger get_logger (void)
 returns the logger currently in use
boost::asio::ip::tcp::acceptor & get_acceptor (void)
 returns mutable reference to the TCP connection acceptor
const
boost::asio::ip::tcp::acceptor & 
get_acceptor (void) const
 returns const reference to the TCP connection acceptor

Protected Member Functions

 server (const unsigned int tcp_port)
 server (const boost::asio::ip::tcp::endpoint &endpoint)
 server (scheduler &sched, const unsigned int tcp_port=0)
 server (scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)
virtual void handle_connection (tcp::connection_ptr &tcp_conn)
virtual void before_starting (void)
 called before the TCP server starts listening for new connections
virtual void after_stopping (void)
 called after the TCP server has stopped listing for new connections
boost::asio::io_service & get_io_service (void)
 returns an async I/O service used to schedule work

Protected Attributes

logger m_logger
 primary logging interface used by this class

Detailed Description

tcp::server: a multi-threaded, asynchronous TCP server

Definition at line 32 of file server.hpp.


Constructor & Destructor Documentation

pion::tcp::server::server ( const unsigned int  tcp_port  )  [explicit, protected]

protected constructor so that only derived objects may be created

Parameters:
tcp_port port number used to listen for new connections (IPv4)

Reimplemented in pion::http::server.

Definition at line 47 of file tcp_server.cpp.

pion::tcp::server::server ( const boost::asio::ip::tcp::endpoint &  endpoint  )  [explicit, protected]

protected constructor so that only derived objects may be created

Parameters:
endpoint TCP endpoint used to listen for new connections (see ASIO docs)

Reimplemented in pion::http::server.

Definition at line 59 of file tcp_server.cpp.

pion::tcp::server::server ( scheduler sched,
const unsigned int  tcp_port = 0 
) [explicit, protected]

protected constructor so that only derived objects may be created

Parameters:
sched the scheduler that will be used to manage worker threads
tcp_port port number used to listen for new connections (IPv4)

Reimplemented in pion::http::server.

Definition at line 23 of file tcp_server.cpp.

pion::tcp::server::server ( scheduler sched,
const boost::asio::ip::tcp::endpoint &  endpoint 
) [protected]

protected constructor so that only derived objects may be created

Parameters:
sched the scheduler that will be used to manage worker threads
endpoint TCP endpoint used to listen for new connections (see ASIO docs)

Reimplemented in pion::http::server.

Definition at line 35 of file tcp_server.cpp.


Member Function Documentation

virtual void pion::tcp::server::handle_connection ( tcp::connection_ptr &  tcp_conn  )  [inline, protected, virtual]

handles a new TCP connection; derived classes SHOULD override this since the default behavior does nothing

Parameters:
tcp_conn the new TCP connection to handle

Reimplemented in pion::http::server.

Definition at line 144 of file server.hpp.

void pion::tcp::server::set_ssl_key_file ( const std::string &  pem_key_file  ) 

configures server for SSL using a PEM-encoded RSA private key file

Parameters:
pem_key_file name of the file containing a PEM-encoded private key

Definition at line 160 of file tcp_server.cpp.

References set_ssl_flag().

void pion::tcp::server::stop ( bool  wait_until_finished = false  ) 

stops listening for new connections

Parameters:
wait_until_finished if true, blocks until all pending connections have closed

Definition at line 113 of file tcp_server.cpp.

References after_stopping(), pion::tcp::connection::close(), get_port(), m_logger, pion::scheduler::remove_active_user(), and pion::scheduler::sleep().


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1single__service__scheduler-members.html0000644000372000001440000003156712215647143027716 0ustar robertousers pion: Member List

pion::single_service_scheduler Member List

This is the complete list of members for pion::single_service_scheduler, including all inherited members.
add_active_user(void)pion::scheduler
DEFAULT_NUM_THREADSpion::scheduler [protected, static]
finish_services(void)pion::single_service_scheduler [inline, protected, virtual]
finish_threads(void)pion::multi_thread_scheduler [inline, protected, virtual]
get_io_service(void)pion::single_service_scheduler [inline, virtual]
get_logger(void)pion::scheduler [inline]
get_num_threads(void) const pion::scheduler [inline]
get_wakeup_time(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [protected, static]
is_running(void) const pion::scheduler [inline]
join(void)pion::scheduler
keep_running(boost::asio::io_service &my_service, boost::asio::deadline_timer &my_timer)pion::scheduler
KEEP_RUNNING_TIMER_SECONDSpion::scheduler [protected, static]
m_active_userspion::scheduler [protected]
m_is_runningpion::scheduler [protected]
m_loggerpion::scheduler [protected]
m_mutexpion::scheduler [protected]
m_no_more_active_userspion::scheduler [protected]
m_num_threadspion::scheduler [protected]
m_scheduler_has_stoppedpion::scheduler [protected]
m_servicepion::single_service_scheduler [protected]
m_thread_poolpion::multi_thread_scheduler [protected]
m_timerpion::single_service_scheduler [protected]
MICROSEC_IN_SECONDpion::scheduler [protected, static]
multi_thread_scheduler(void)pion::multi_thread_scheduler [inline]
NSEC_IN_SECONDpion::scheduler [protected, static]
post(boost::function0< void > work_func)pion::scheduler [inline, virtual]
process_service_work(boost::asio::io_service &service)pion::scheduler
remove_active_user(void)pion::scheduler
scheduler(void)pion::scheduler [inline]
set_logger(logger log_ptr)pion::scheduler [inline]
set_num_threads(const boost::uint32_t n)pion::scheduler [inline]
shutdown(void)pion::scheduler [virtual]
single_service_scheduler(void)pion::single_service_scheduler [inline]
sleep(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
sleep(ConditionType &wakeup_condition, LockType &wakeup_lock, boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
startup(void)pion::single_service_scheduler [virtual]
stop_services(void)pion::single_service_scheduler [inline, protected, virtual]
stop_threads(void)pion::multi_thread_scheduler [inline, protected, virtual]
ThreadPool typedefpion::multi_thread_scheduler [protected]
~multi_thread_scheduler()pion::multi_thread_scheduler [inline, virtual]
~scheduler()pion::scheduler [inline, virtual]
~single_service_scheduler()pion::single_service_scheduler [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/logger_8cpp_source.html0000644000372000001440000000560112215647143022134 0ustar robertousers pion: src/logger.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x65.html0000644000372000001440000001134512215647143021137 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- e -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/spdy_2types_8hpp_source.html0000644000372000001440000002715112215647142023152 0ustar robertousers pion: include/pion/spdy/types.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1plugin__not__found-members.html0000644000372000001440000000664712215647143027743 0ustar robertousers pion: Member List

pion::error::plugin_not_found Member List

This is the complete list of members for pion::error::plugin_not_found, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/_hello_service_8cpp_source.html0000644000372000001440000001302012215647142023630 0ustar robertousers pion: services/HelloService.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/basic__auth_8hpp_source.html0000644000372000001440000001506612215647142023130 0ustar robertousers pion: include/pion/http/basic_auth.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1open__plugin.html0000644000372000001440000000515512215647143025113 0ustar robertousers pion: pion::error::open_plugin Class Reference

pion::error::open_plugin Class Reference

exception thrown if we are unable to open a plugin More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if we are unable to open a plugin

Definition at line 150 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_file_service-members.html0000644000372000001440000001726112215647143027214 0ustar robertousers pion: Member List

pion::plugins::FileService Member List

This is the complete list of members for pion::plugins::FileService, including all inherited members.
addCacheEntry(const std::string &relative_path, const boost::filesystem::path &file_path, const bool placeholder)pion::plugins::FileService [protected]
CacheMap typedefpion::plugins::FileService [protected]
FileService(void) (defined in pion::plugins::FileService)pion::plugins::FileService
findMIMEType(const std::string &file_name)pion::plugins::FileService [protected, static]
get_logger(void)pion::plugins::FileService [inline]
get_relative_resource(const std::string &resource_requested) const pion::http::plugin_service [inline]
get_resource(void) const pion::http::plugin_service [inline]
m_loggerpion::plugins::FileService [protected]
MIMETypeMap typedefpion::plugins::FileService [protected]
operator()(pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)pion::plugins::FileService [virtual]
plugin_service(void)pion::http::plugin_service [inline]
scanDirectory(const boost::filesystem::path &dir_path)pion::plugins::FileService [protected]
sendNotFoundResponse(pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) (defined in pion::plugins::FileService)pion::plugins::FileService [protected]
set_logger(logger log_ptr)pion::plugins::FileService [inline]
set_option(const std::string &name, const std::string &value)pion::plugins::FileService [virtual]
set_resource(const std::string &str)pion::http::plugin_service [inline]
start(void)pion::plugins::FileService [virtual]
stop(void)pion::plugins::FileService [virtual]
~FileService() (defined in pion::plugins::FileService)pion::plugins::FileService [inline, virtual]
~plugin_service()pion::http::plugin_service [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/timer_8hpp_source.html0000644000372000001440000001360312215647142022002 0ustar robertousers pion: include/pion/tcp/timer.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x6e.html0000644000372000001440000000766412215647143021230 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- n -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/http__auth_8cpp_source.html0000644000372000001440000002677712215647142023034 0ustar robertousers pion: src/http_auth.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/doxygen.css0000644000372000001440000001473312215647142017651 0ustar robertousers/* The standard CSS for doxygen */ body, table, div, p, dl { font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; font-size: 12px; } /* @group Heading Levels */ h1 { text-align: center; font-size: 150%; } h2 { font-size: 120%; } h3 { font-size: 100%; } dt { font-weight: bold; } div.multicol { -moz-column-gap: 1em; -webkit-column-gap: 1em; -moz-column-count: 3; -webkit-column-count: 3; } p.startli, p.startdd { margin-top: 2px; } p.endli { margin-bottom: 0px; } p.enddd { margin-bottom: 4px; } /* @end */ caption { font-weight: bold; } span.legend { font-size: 70%; text-align: center; } div.qindex, div.navtab{ background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; padding: 2px; } div.qindex, div.navpath { width: 100%; line-height: 140%; } div.navtab { margin-right: 15px; } /* @group Link Styling */ a { color: #153788; font-weight: normal; text-decoration: none; } .contents a:visited { color: #1b77c5; } a:hover { text-decoration: underline; } a.qindex { font-weight: bold; } a.qindexHL { font-weight: bold; background-color: #6666cc; color: #ffffff; border: 1px double #9295C2; } .contents a.qindexHL:visited { color: #ffffff; } a.el { font-weight: bold; } a.elRef { } a.code { } a.codeRef { } /* @end */ dl.el { margin-left: -1cm; } .fragment { font-family: monospace, fixed; font-size: 105%; } pre.fragment { border: 1px solid #CCCCCC; background-color: #f5f5f5; padding: 4px 6px; margin: 4px 8px 4px 2px; } div.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } div.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold; } div.groupText { margin-left: 16px; font-style: italic; } body { background: white; color: black; margin-right: 20px; margin-left: 20px; } td.indexkey { background-color: #e8eef2; font-weight: bold; border: 1px solid #CCCCCC; margin: 2px 0px 2px 0; padding: 2px 10px; } td.indexvalue { background-color: #e8eef2; border: 1px solid #CCCCCC; padding: 2px 10px; margin: 2px 0px; } tr.memlist { background-color: #f0f0f0; } p.formulaDsp { text-align: center; } img.formulaDsp { } img.formulaInl { vertical-align: middle; } div.center { text-align: center; margin-top: 0px; margin-bottom: 0px; padding: 0px; } div.center img { border: 0px; } img.footer { border: 0px; vertical-align: middle; } /* @group Code Colorization */ span.keyword { color: #008000 } span.keywordtype { color: #604020 } span.keywordflow { color: #e08000 } span.comment { color: #800000 } span.preprocessor { color: #806020 } span.stringliteral { color: #002080 } span.charliteral { color: #008080 } span.vhdldigit { color: #ff00ff } span.vhdlchar { color: #000000 } span.vhdlkeyword { color: #700070 } span.vhdllogic { color: #ff0000 } /* @end */ .search { color: #003399; font-weight: bold; } form.search { margin-bottom: 0px; margin-top: 0px; } input.search { font-size: 75%; color: #000080; font-weight: normal; background-color: #e8eef2; } td.tiny { font-size: 75%; } .dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #84b0c7; } th.dirtab { background: #e8eef2; font-weight: bold; } hr { height: 0; border: none; border-top: 1px solid #666; } /* @group Member Descriptions */ .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { background-color: #FAFAFA; border: none; margin: 4px; padding: 1px 0 0 8px; } .mdescLeft, .mdescRight { padding: 0px 8px 4px 8px; color: #555; } .memItemLeft, .memItemRight, .memTemplParams { border-top: 1px solid #ccc; } .memItemLeft, .memTemplItemLeft { white-space: nowrap; } .memTemplParams { color: #606060; white-space: nowrap; } /* @end */ /* @group Member Details */ /* Styles for detailed member documentation */ .memtemplate { font-size: 80%; color: #606060; font-weight: normal; margin-left: 3px; } .memnav { background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } .memitem { padding: 0; margin-bottom: 10px; } .memname { white-space: nowrap; font-weight: bold; } .memproto, .memdoc { border: 1px solid #84b0c7; } .memproto { padding: 0; background-color: #d5e1e8; font-weight: bold; -webkit-border-top-left-radius: 8px; -webkit-border-top-right-radius: 8px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -moz-border-radius-topleft: 8px; -moz-border-radius-topright: 8px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; } .memdoc { padding: 2px 5px; background-color: #eef3f5; border-top-width: 0; -webkit-border-bottom-left-radius: 8px; -webkit-border-bottom-right-radius: 8px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -moz-border-radius-bottomleft: 8px; -moz-border-radius-bottomright: 8px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; } .paramkey { text-align: right; } .paramtype { white-space: nowrap; } .paramname { color: #602020; white-space: nowrap; } .paramname em { font-style: normal; } /* @end */ /* @group Directory (tree) */ /* for the tree view */ .ftvtree { font-family: sans-serif; margin: 0.5em; } /* these are for tree view when used as main index */ .directory { font-size: 9pt; font-weight: bold; } .directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } /* The following two styles can be used to replace the root node title with an image of your choice. Simply uncomment the next two styles, specify the name of your image and be sure to set 'height' to the proper pixel height of your image. */ /* .directory h3.swap { height: 61px; background-repeat: no-repeat; background-image: url("yourimage.gif"); } .directory h3.swap span { display: none; } */ .directory > h3 { margin-top: 0; } .directory p { margin: 0px; white-space: nowrap; } .directory div { display: none; margin: 0px; } .directory img { vertical-align: -30%; } /* these are for tree view when not used as main index */ .directory-alt { font-size: 100%; font-weight: bold; } .directory-alt h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } .directory-alt > h3 { margin-top: 0; } .directory-alt p { margin: 0px; white-space: nowrap; } .directory-alt div { display: none; margin: 0px; } .directory-alt img { vertical-align: -30%; } /* @end */ address { font-style: normal; color: #333; } pion-5.0.4+dfsg.orig/doc/html/hierarchy.html0000644000372000001440000002172612215647143020327 0ustar robertousers pion: Hierarchical Index

Class Hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_log_service.html0000644000372000001440000001326112215647143025422 0ustar robertousers pion: pion::plugins::LogService Class Reference

pion::plugins::LogService Class Reference

#include <LogService.hpp>

Inherits pion::http::plugin_service.

List of all members.

Public Member Functions

virtual void operator() (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)
 handles a new HTTP request
LogServiceAppendergetLogAppender (void)
 returns the log appender used by LogService

Detailed Description

LogService: web service that displays log messages

Definition at line 121 of file LogService.hpp.


Member Function Documentation

void pion::plugins::LogService::operator() ( pion::http::request_ptr &  http_request_ptr,
pion::tcp::connection_ptr &  tcp_conn 
) [virtual]

The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/class_hello_server-members.html0000644000372000001440000002373112215647143023655 0ustar robertousers pion: Member List

HelloServer Member List

This is the complete list of members for HelloServer, including all inherited members.
after_stopping(void)pion::tcp::server [inline, protected, virtual]
before_starting(void)pion::tcp::server [inline, protected, virtual]
get_acceptor(void)pion::tcp::server [inline]
get_acceptor(void) const pion::tcp::server [inline]
get_address(void) const pion::tcp::server [inline]
get_connections(void) const pion::tcp::server
get_endpoint(void) const pion::tcp::server [inline]
get_io_service(void)pion::tcp::server [inline, protected]
get_logger(void)pion::tcp::server [inline]
get_port(void) const pion::tcp::server [inline]
get_ssl_context_type(void)pion::tcp::server [inline]
get_ssl_flag(void) const pion::tcp::server [inline]
handle_connection(tcp::connection_ptr &tcp_conn) (defined in HelloServer)HelloServer [inline, virtual]
pion::tcp::server::handle_connection(tcp::connection_ptr &tcp_conn)pion::tcp::server [inline, protected, virtual]
HelloServer(const unsigned int tcp_port) (defined in HelloServer)HelloServer [inline]
is_listening(void) const pion::tcp::server [inline]
join(void)pion::tcp::server
m_loggerpion::tcp::server [protected]
server(const unsigned int tcp_port)pion::tcp::server [explicit, protected]
server(const boost::asio::ip::tcp::endpoint &endpoint)pion::tcp::server [explicit, protected]
server(scheduler &sched, const unsigned int tcp_port=0)pion::tcp::server [explicit, protected]
server(scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)pion::tcp::server [protected]
set_address(const boost::asio::ip::address &addr)pion::tcp::server [inline]
set_endpoint(const boost::asio::ip::tcp::endpoint &ep)pion::tcp::server [inline]
set_logger(logger log_ptr)pion::tcp::server [inline]
set_port(unsigned int p)pion::tcp::server [inline]
set_ssl_flag(bool b=true)pion::tcp::server [inline]
set_ssl_key_file(const std::string &pem_key_file)pion::tcp::server
start(void)pion::tcp::server
stop(bool wait_until_finished=false)pion::tcp::server
~HelloServer() (defined in HelloServer)HelloServer [inline, virtual]
~server()pion::tcp::server [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugin.html0000644000372000001440000005761012215647143022224 0ustar robertousers pion: pion::plugin Class Reference

pion::plugin Class Reference

#include <plugin.hpp>

Inherited by pion::plugin_ptr< InterfaceClassType >.

List of all members.

Classes

struct  config_type
 data type for static/global plugin configuration information
struct  data_type

Public Member Functions

bool is_open (void) const
 returns true if a shared library is loaded/open
std::string get_plugin_name (void) const
 returns the name of the plugin that is currently open
void open (const std::string &plugin_name)
void open_file (const std::string &plugin_file)
void close (void)
 closes plug-in library

Static Public Member Functions

static bool find_plugin_file (std::string &path_to_file, const std::string &name)
static bool find_config_file (std::string &path_to_file, const std::string &name)
static void add_static_entry_point (const std::string &plugin_name, void *create_func, void *destroy_func)
static void check_cygwin_path (boost::filesystem::path &final_path, const std::string &path_string)
static void add_plugin_directory (const std::string &dir)
 appends a directory to the plug-in search path
static void reset_plugin_directories (void)
 clears all directories from the plug-in search path
static void get_all_plugin_names (std::vector< std::string > &plugin_names)
 returns a list of all Plugins found in all Plugin directories

Protected Member Functions

 plugin (void)
 default constructor is private (use plugin_ptr class to create objects)
 plugin (const plugin &p)
 copy constructor
pluginoperator= (const plugin &p)
 assignment operator
void * get_create_function (void)
 returns a pointer to the plug-in's "create object" function
void * get_destroy_function (void)
 returns a pointer to the plug-in's "destroy object" function
void release_data (void)
 releases the plug-in's shared library symbols
void grab_data (const plugin &p)
 grabs a reference to another plug-in's shared library symbols

Detailed Description

plugin: base class for plug-in management

Definition at line 30 of file plugin.hpp.


Member Function Documentation

void pion::plugin::add_static_entry_point ( const std::string &  plugin_name,
void *  create_func,
void *  destroy_func 
) [static]

adds an entry point for a plugin that is statically linked NOTE: USE PION_DECLARE_PLUGIN() macro instead!!!

Parameters:
plugin_name the name of the plugin to add
create_func - pointer to the function to be used in to create plugin object
destroy_func - pointer to the function to be used to release plugin object

Definition at line 390 of file plugin.cpp.

References pion::plugin::data_type::m_create_func, pion::plugin::data_type::m_destroy_func, and pion::plugin::data_type::m_lib_handle.

void pion::plugin::check_cygwin_path ( boost::filesystem::path &  final_path,
const std::string &  path_string 
) [static]

updates path for cygwin oddities, if necessary

Parameters:
final_path path object for the file, will be modified if necessary
start_path original path to the file. if final_path is not valid, this will be appended to PION_CYGWIN_DIRECTORY to attempt attempt correction of final_path for cygwin

Definition at line 48 of file plugin.cpp.

Referenced by add_plugin_directory(), and pion::plugins::FileService::set_option().

static bool pion::plugin::find_config_file ( std::string &  path_to_file,
const std::string &  name 
) [inline, static]

searches directories for a valid plug-in configuration file

Parameters:
path_to_file if found, is set to the complete path to the file
name the name of the configuration file to search for
Returns:
true if the configuration file was found

Definition at line 53 of file plugin.hpp.

Referenced by pion::http::plugin_server::load_service_config().

static bool pion::plugin::find_plugin_file ( std::string &  path_to_file,
const std::string &  name 
) [inline, static]

searches directories for a valid plug-in file

Parameters:
path_to_file the path to the plug-in file, if found
the name name of the plug-in to search for
Returns:
true if the plug-in file was found

Definition at line 40 of file plugin.hpp.

Referenced by open().

void pion::plugin::open ( const std::string &  plugin_name  ) 

opens plug-in library within a shared object file. If the library is already being used by another plugin object, then the existing code will be re-used and the reference count will be increased. Beware that this does NOT check the plug-in's base class (InterfaceClassType), so you must be careful to ensure that the namespace is unique between plug-ins that have different base classes. If the plug-in's name matches an existing plug-in of a different base class, the resulting behavior is undefined (it will probably crash your program).

Parameters:
plugin_name name of the plug-in library to open (without extension, etc.)

Definition at line 82 of file plugin.cpp.

References find_plugin_file(), pion::plugin::data_type::m_references, open_file(), and release_data().

Referenced by pion::plugin_manager< PluginType >::load().

void pion::plugin::open_file ( const std::string &  plugin_file  ) 

opens plug-in library within a shared object file. If the library is already being used by another plugin object, then the existing code will be re-used and the reference count will be increased. Beware that this does NOT check the plug-in's base class (InterfaceClassType), so you must be careful to ensure that the namespace is unique between plug-ins that have different base classes. If the plug-in's name matches an existing plug-in of a different base class, the resulting behavior is undefined (it will probably crash your program).

Parameters:
plugin_file shared object file containing the plugin code

Definition at line 106 of file plugin.cpp.

References get_plugin_name(), pion::plugin::data_type::m_plugin_name, pion::plugin::data_type::m_references, and release_data().

Referenced by open().


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_echo_service.html0000644000372000001440000000663312215647143025564 0ustar robertousers pion: pion::plugins::EchoService Class Reference

pion::plugins::EchoService Class Reference

#include <EchoService.hpp>

Inherits pion::http::plugin_service.

List of all members.

Public Member Functions

virtual void operator() (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)
 handles requests for EchoService

Detailed Description

EchoService: web service that echos back requests (to test request parsing)

Definition at line 22 of file EchoService.hpp.


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/spdy__parser_8cpp_source.html0000644000372000001440000014463712215647143023364 0ustar robertousers pion: src/spdy_parser.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x75.html0000644000372000001440000001412212215647143022147 0ustar robertousers pion: Class Members - Functions
 

- u -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/_cookie_service_8hpp_source.html0000644000372000001440000001033512215647142024011 0ustar robertousers pion: services/CookieService.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1test_1_1safe__xml__log__formatter-members.html0000644000372000001440000001370612215647143031073 0ustar robertousers pion: Member List

pion::test::safe_xml_log_formatter Member List

This is the complete list of members for pion::test::safe_xml_log_formatter, including all inherited members.
log_build_info(std::ostream &ostr)pion::test::safe_xml_log_formatter [inline, virtual]
log_entry_finish(std::ostream &ostr)pion::test::safe_xml_log_formatter [inline, virtual]
log_entry_start(std::ostream &ostr, boost::unit_test::log_entry_data const &entry_data, log_entry_types let)pion::test::safe_xml_log_formatter [inline, virtual]
log_entry_value(std::ostream &ostr, boost::unit_test::const_string value)pion::test::safe_xml_log_formatter [inline, virtual]
log_exception(std::ostream &ostr, boost::unit_test::log_checkpoint_data const &checkpoint_data, boost::execution_exception const &ex)pion::test::safe_xml_log_formatter [inline, virtual]
log_finish(std::ostream &ostr)pion::test::safe_xml_log_formatter [inline, virtual]
log_start(std::ostream &ostr, boost::unit_test::counter_t test_cases_amount)pion::test::safe_xml_log_formatter [inline, virtual]
safe_xml_log_formatter()pion::test::safe_xml_log_formatter [inline]
test_unit_finish(std::ostream &ostr, boost::unit_test::test_unit const &tu, unsigned long elapsed)pion::test::safe_xml_log_formatter [inline, virtual]
test_unit_skipped(std::ostream &ostr, boost::unit_test::test_unit const &tu)pion::test::safe_xml_log_formatter [inline, virtual]
test_unit_start(std::ostream &ostr, boost::unit_test::test_unit const &tu)pion::test::safe_xml_log_formatter [inline, virtual]
~safe_xml_log_formatter()pion::test::safe_xml_log_formatter [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1plugin__undefined-members.html0000644000372000001440000000664612215647143027551 0ustar robertousers pion: Member List

pion::error::plugin_undefined Member List

This is the complete list of members for pion::error::plugin_undefined, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1scheduler.html0000644000372000001440000007430512215647143022704 0ustar robertousers pion: pion::scheduler Class Reference

pion::scheduler Class Reference

#include <scheduler.hpp>

Inherited by pion::multi_thread_scheduler.

List of all members.

Public Member Functions

 scheduler (void)
 constructs a new scheduler
virtual ~scheduler ()
 virtual destructor
virtual void startup (void)
 Starts the thread scheduler (this is called automatically when necessary).
virtual void shutdown (void)
 Stops the thread scheduler (this is called automatically when the program exits).
void join (void)
 the calling thread will sleep until the scheduler has stopped
void add_active_user (void)
void remove_active_user (void)
 unregisters an active user with the thread scheduler
bool is_running (void) const
 returns true if the scheduler is running
void set_num_threads (const boost::uint32_t n)
 sets the number of threads to be used (these are shared by all servers)
boost::uint32_t get_num_threads (void) const
 returns the number of threads currently in use
void set_logger (logger log_ptr)
 sets the logger to be used
logger get_logger (void)
 returns the logger currently in use
virtual boost::asio::io_service & get_io_service (void)=0
 returns an async I/O service used to schedule work
virtual void post (boost::function0< void > work_func)
void keep_running (boost::asio::io_service &my_service, boost::asio::deadline_timer &my_timer)
void process_service_work (boost::asio::io_service &service)
 processes work passed to the asio service & handles uncaught exceptions

Static Public Member Functions

static void sleep (boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)
template<typename ConditionType , typename LockType >
static void sleep (ConditionType &wakeup_condition, LockType &wakeup_lock, boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)

Protected Member Functions

virtual void stop_services (void)
 stops all services used to schedule work
virtual void stop_threads (void)
 stops all threads used to perform work
virtual void finish_services (void)
 finishes all services used to schedule work
virtual void finish_threads (void)
 finishes all threads used to perform work

Static Protected Member Functions

static boost::system_time get_wakeup_time (boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)

Protected Attributes

boost::mutex m_mutex
 mutex to make class thread-safe
logger m_logger
 primary logging interface used by this class
boost::condition m_no_more_active_users
 condition triggered when there are no more active users
boost::condition m_scheduler_has_stopped
 condition triggered when the scheduler has stopped
boost::uint32_t m_num_threads
 total number of worker threads in the pool
boost::uint32_t m_active_users
 the scheduler will not shutdown until there are no more active users
bool m_is_running
 true if the thread scheduler is running

Static Protected Attributes

static const boost::uint32_t DEFAULT_NUM_THREADS = 8
 default number of worker threads in the thread pool
static const boost::uint32_t NSEC_IN_SECOND = 1000000000
 number of nanoseconds in one full second (10 ^ 9)
static const boost::uint32_t MICROSEC_IN_SECOND = 1000000
 number of microseconds in one full second (10 ^ 6)
static const boost::uint32_t KEEP_RUNNING_TIMER_SECONDS = 5
 number of seconds a timer should wait for to keep the IO services running

Detailed Description

scheduler: combines Boost.ASIO with a managed thread pool for scheduling

Definition at line 34 of file scheduler.hpp.


Member Function Documentation

void pion::scheduler::add_active_user ( void   ) 

registers an active user with the thread scheduler. Shutdown of the scheduler is deferred until there are no more active users. This ensures that any work queued will not reference destructed objects

Definition at line 88 of file scheduler.cpp.

References m_active_users, m_is_running, m_mutex, and startup().

Referenced by pion::tcp::server::start().

boost::system_time pion::scheduler::get_wakeup_time ( boost::uint32_t  sleep_sec,
boost::uint32_t  sleep_nsec 
) [static, protected]

calculates a wakeup time in boost::system_time format

Parameters:
sleep_sec number of seconds to sleep for
sleep_nsec number of nanoseconds to sleep for
Returns:
boost::system_time time to wake up from sleep

Definition at line 102 of file scheduler.cpp.

void pion::scheduler::keep_running ( boost::asio::io_service &  my_service,
boost::asio::deadline_timer &  my_timer 
)

thread function used to keep the io_service running

Parameters:
my_service IO service used to re-schedule keep_running()
my_timer deadline timer used to keep the IO service active while running

Definition at line 77 of file scheduler.cpp.

References KEEP_RUNNING_TIMER_SECONDS, and m_is_running.

Referenced by pion::one_to_one_scheduler::startup(), and pion::single_service_scheduler::startup().

virtual void pion::scheduler::post ( boost::function0< void >  work_func  )  [inline, virtual]

schedules work to be performed by one of the pooled threads

Parameters:
work_func work function to be executed

Definition at line 88 of file scheduler.hpp.

template<typename ConditionType , typename LockType >
static void pion::scheduler::sleep ( ConditionType &  wakeup_condition,
LockType &  wakeup_lock,
boost::uint32_t  sleep_sec,
boost::uint32_t  sleep_nsec 
) [inline, static]

puts the current thread to sleep for a specific period of time, or until a wakeup condition is signaled

Parameters:
wakeup_condition if signaled, the condition will wakeup the thread early
wakeup_lock scoped lock protecting the wakeup condition
sleep_sec number of entire seconds to sleep for
sleep_nsec number of nanoseconds to sleep for (10^-9 in 1 second)

Definition at line 122 of file scheduler.hpp.

static void pion::scheduler::sleep ( boost::uint32_t  sleep_sec,
boost::uint32_t  sleep_nsec 
) [inline, static]

puts the current thread to sleep for a specific period of time

Parameters:
sleep_sec number of entire seconds to sleep for
sleep_nsec number of nanoseconds to sleep for (10^-9 in 1 second)

Definition at line 107 of file scheduler.hpp.

Referenced by pion::tcp::server::stop().


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugin__manager_1_1map__type-members.html0000644000372000001440000000513412215647143030035 0ustar robertousers pion: Member List

pion::plugin_manager< PluginType >::map_type Member List

This is the complete list of members for pion::plugin_manager< PluginType >::map_type, including all inherited members.
clear(void) (defined in pion::plugin_manager< PluginType >::map_type)pion::plugin_manager< PluginType >::map_type [inline]
map_type(void) (defined in pion::plugin_manager< PluginType >::map_type)pion::plugin_manager< PluginType >::map_type [inline]
~map_type() (defined in pion::plugin_manager< PluginType >::map_type)pion::plugin_manager< PluginType >::map_type [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func.html0000644000372000001440000002055512215647143021373 0ustar robertousers pion: Class Members - Functions
 

- a -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/stream_8hpp_source.html0000644000372000001440000011721012215647142022154 0ustar robertousers pion: include/pion/tcp/stream.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1message-members.html0000644000372000001440000012056212215647143025337 0ustar robertousers pion: Member List

pion::http::message Member List

This is the complete list of members for pion::http::message, including all inherited members.
add_cookie(const std::string &key, const std::string &value)pion::http::message [inline]
add_header(const std::string &key, const std::string &value)pion::http::message [inline]
append_cookie_headers(void)pion::http::message [inline, protected, virtual]
append_headers(write_buffers_t &write_buffers)pion::http::message [inline, protected]
change_cookie(const std::string &key, const std::string &value)pion::http::message [inline]
change_header(const std::string &key, const std::string &value)pion::http::message [inline]
change_value(DictionaryType &dict, const std::string &key, const std::string &value)pion::http::message [inline, protected, static]
check_keep_alive(void) const pion::http::message [inline]
chunk_cache_t typedefpion::http::message
clear(void)pion::http::message [inline, virtual]
clear_content(void)pion::http::message [inline]
clear_first_line(void) const pion::http::message [inline, protected]
concatenate_chunks(void)pion::http::message
CONTENT_TYPE_HTML (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_MULTIPART_FORM_DATA (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_TEXT (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_URLENCODED (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_XML (defined in pion::http::types)pion::http::types [static]
COOKIE_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
create_content_buffer(void)pion::http::message [inline]
data_status_t enum namepion::http::message
delete_cookie(const std::string &key)pion::http::message [inline]
delete_header(const std::string &key)pion::http::message [inline]
delete_value(DictionaryType &dict, const std::string &key)pion::http::message [inline, protected, static]
get_chunk_cache(void)pion::http::message [inline]
get_chunks_supported(void) const pion::http::message [inline]
get_content(void)pion::http::message [inline]
get_content(void) const pion::http::message [inline]
get_content_buffer_size() const pion::http::message [inline]
get_content_length(void) const pion::http::message [inline]
get_cookie(const std::string &key) const pion::http::message [inline]
get_cookies(void)pion::http::message [inline]
get_date_string(const time_t t)pion::http::types [static]
get_first_line(void) const pion::http::message [inline]
get_header(const std::string &key) const pion::http::message [inline]
get_headers(void)pion::http::message [inline]
get_remote_ip(void)pion::http::message [inline]
get_status() const pion::http::message [inline]
get_value(const DictionaryType &dict, const std::string &key)pion::http::message [inline, protected, static]
get_version_major(void) const pion::http::message [inline]
get_version_minor(void) const pion::http::message [inline]
get_version_string(void) const pion::http::message [inline]
has_cookie(const std::string &key) const pion::http::message [inline]
has_data_after_missing_packets() const pion::http::message [inline]
has_header(const std::string &key) const pion::http::message [inline]
has_missing_packets() const pion::http::message [inline]
HEADER_AUTHORIZATION (defined in pion::http::types)pion::http::types [static]
HEADER_CLIENT_IP (defined in pion::http::types)pion::http::types [static]
HEADER_CONNECTION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_DISPOSITION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LENGTH (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_TYPE (defined in pion::http::types)pion::http::types [static]
HEADER_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_HOST (defined in pion::http::types)pion::http::types [static]
HEADER_IF_MODIFIED_SINCE (defined in pion::http::types)pion::http::types [static]
HEADER_LAST_MODIFIED (defined in pion::http::types)pion::http::types [static]
HEADER_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
HEADER_REFERER (defined in pion::http::types)pion::http::types [static]
HEADER_SET_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_TRANSFER_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_USER_AGENT (defined in pion::http::types)pion::http::types [static]
HEADER_X_FORWARDED_FOR (defined in pion::http::types)pion::http::types [static]
is_chunked(void) const pion::http::message [inline]
is_content_buffer_allocated() const pion::http::message [inline]
is_content_length_implied(void) const =0pion::http::message [pure virtual]
is_valid(void) const pion::http::message [inline]
m_first_linepion::http::message [mutable, protected]
make_query_string(const ihash_multimap &query_params)pion::http::types [static]
make_set_cookie_header(const std::string &name, const std::string &value, const std::string &path, const bool has_max_age=false, const unsigned long max_age=0)pion::http::types [static]
message(void)pion::http::message [inline]
message(const message &http_msg)pion::http::message [inline]
operator=(const message &http_msg)pion::http::message [inline]
prepare_buffers_for_send(write_buffers_t &write_buffers, const bool keep_alive, const bool using_chunks)pion::http::message [inline]
prepare_headers_for_send(const bool keep_alive, const bool using_chunks)pion::http::message [inline, protected]
read(std::istream &in, boost::system::error_code &ec, parser &http_parser)pion::http::message
read(std::istream &in, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))pion::http::message
receive(tcp::connection &tcp_conn, boost::system::error_code &ec, parser &http_parser)pion::http::message
receive(tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))pion::http::message
REQUEST_METHOD_DELETE (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_GET (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_HEAD (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_POST (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_PUT (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
send(tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false)pion::http::message
set_chunks_supported(bool b)pion::http::message [inline]
set_content(const std::string &content)pion::http::message [inline]
set_content_length(const boost::uint64_t n)pion::http::message [inline]
set_content_type(const std::string &type)pion::http::message [inline]
set_data_after_missing_packet(bool newVal) (defined in pion::http::message)pion::http::message [inline]
set_do_not_send_content_length(void)pion::http::message [inline]
set_is_valid(bool b=true)pion::http::message [inline]
set_missing_packets(bool newVal)pion::http::message [inline]
set_remote_ip(const boost::asio::ip::address &ip)pion::http::message [inline]
set_status(data_status_t newVal) (defined in pion::http::message)pion::http::message [inline]
set_version_major(const boost::uint16_t n)pion::http::message [inline]
set_version_minor(const boost::uint16_t n)pion::http::message [inline]
STATUS_NONE enum value (defined in pion::http::message)pion::http::message
STATUS_OK enum value (defined in pion::http::message)pion::http::message
STATUS_PARTIAL enum value (defined in pion::http::message)pion::http::message
STATUS_TRUNCATED enum value (defined in pion::http::message)pion::http::message
STRING_CRLF (defined in pion::http::types)pion::http::types [static]
STRING_EMPTY (defined in pion::http::types)pion::http::types [static]
STRING_HTTP_VERSION (defined in pion::http::types)pion::http::types [static]
update_content_length_using_header(void)pion::http::message [inline]
update_first_line(void) const =0pion::http::message [protected, pure virtual]
update_transfer_encoding_using_header(void)pion::http::message [inline]
write(std::ostream &out, boost::system::error_code &ec, bool headers_only=false)pion::http::message
write_buffers_t typedefpion::http::message
~message()pion::http::message [inline, virtual]
~types()pion::http::types [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/_echo_service_8cpp_source.html0000644000372000001440000003301612215647142023452 0ustar robertousers pion: services/EchoService.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1file__not__found.html0000644000372000001440000000500712215647143025721 0ustar robertousers pion: pion::error::file_not_found Class Reference

pion::error::file_not_found Class Reference

exception thrown if a file is not found More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if a file is not found

Definition at line 164 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x6c.html0000644000372000001440000001302412215647143022224 0ustar robertousers pion: Class Members - Functions
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1process_1_1config__type-members.html0000644000372000001440000000505112215647143027271 0ustar robertousers pion: Member List

pion::process::config_type Member List

This is the complete list of members for pion::process::config_type, including all inherited members.
config_type()pion::process::config_type [inline]
shutdown_condpion::process::config_type
shutdown_mutexpion::process::config_type
shutdown_nowpion::process::config_type

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/http__plugin__server_8cpp_source.html0000644000372000001440000007476212215647143025114 0ustar robertousers pion: src/http_plugin_server.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1response.html0000644000372000001440000006622212215647143024123 0ustar robertousers pion: pion::http::response Class Reference

pion::http::response Class Reference

#include <response.hpp>

Inherits pion::http::message.

List of all members.

Public Member Functions

 response (const http::request &http_request_ptr)
 response (const std::string &request_method)
 response (const response &http_response)
 copy constructor
 response (void)
virtual ~response ()
 virtual destructor
virtual void clear (void)
 clears all response data
virtual bool is_content_length_implied (void) const
 the content length may be implied for certain types of responses
void update_request_info (const http::request &http_request)
void set_status_code (unsigned int n)
 sets the HTTP response status code
void set_status_message (const std::string &msg)
 sets the HTTP response status message
unsigned int get_status_code (void) const
 returns the HTTP response status code
const std::string & get_status_message (void) const
 returns the HTTP response status message
void set_cookie (const std::string &name, const std::string &value)
void set_cookie (const std::string &name, const std::string &value, const std::string &path)
void set_cookie (const std::string &name, const std::string &value, const std::string &path, const unsigned long max_age)
void set_cookie (const std::string &name, const std::string &value, const unsigned long max_age)
void delete_cookie (const std::string &name)
 deletes cookie called name by adding a Set-Cookie header (cookie has no path)
void delete_cookie (const std::string &name, const std::string &path)
 deletes cookie called name by adding a Set-Cookie header (cookie has a path)
void set_last_modified (const unsigned long t)
 sets the time that the response was last modified (Last-Modified)

Protected Member Functions

virtual void update_first_line (void) const
 updates the string containing the first line for the HTTP message
virtual void append_cookie_headers (void)
 appends HTTP headers for any cookies defined by the http::message

Detailed Description

response: container for HTTP response information

Definition at line 27 of file response.hpp.


Constructor & Destructor Documentation

pion::http::response::response ( const http::request http_request_ptr  )  [inline]

constructs a new response object for a particular request

Parameters:
http_request_ptr the request that this is responding to

Definition at line 37 of file response.hpp.

References update_request_info().

pion::http::response::response ( const std::string &  request_method  )  [inline]

constructs a new response object for a particular request method

Parameters:
request_method the method used by the HTTP request we are responding to

Definition at line 49 of file response.hpp.

pion::http::response::response ( void   )  [inline]

default constructor: you are strongly encouraged to use one of the other constructors, since response parsing is influenced by the request method

Definition at line 64 of file response.hpp.


Member Function Documentation

void pion::http::response::set_cookie ( const std::string &  name,
const std::string &  value,
const unsigned long  max_age 
) [inline]

sets a cookie by adding a Set-Cookie header (see RFC 2109)

Parameters:
name the name of the cookie
value the value of the cookie
max_age the life of the cookie, in seconds (0 = discard)

Definition at line 169 of file response.hpp.

References pion::http::message::add_header(), and pion::http::types::make_set_cookie_header().

void pion::http::response::set_cookie ( const std::string &  name,
const std::string &  value,
const std::string &  path,
const unsigned long  max_age 
) [inline]

sets a cookie by adding a Set-Cookie header (see RFC 2109)

Parameters:
name the name of the cookie
value the value of the cookie
path the path of the cookie
max_age the life of the cookie, in seconds (0 = discard)

Definition at line 155 of file response.hpp.

References pion::http::message::add_header(), and pion::http::types::make_set_cookie_header().

void pion::http::response::set_cookie ( const std::string &  name,
const std::string &  value,
const std::string &  path 
) [inline]

sets a cookie by adding a Set-Cookie header (see RFC 2109) the cookie will be discarded by the user-agent when it closes

Parameters:
name the name of the cookie
value the value of the cookie
path the path of the cookie

Definition at line 140 of file response.hpp.

References pion::http::message::add_header(), and pion::http::types::make_set_cookie_header().

void pion::http::response::set_cookie ( const std::string &  name,
const std::string &  value 
) [inline]

sets a cookie by adding a Set-Cookie header (see RFC 2109) the cookie will be discarded by the user-agent when it closes

Parameters:
name the name of the cookie
value the value of the cookie

Definition at line 127 of file response.hpp.

References pion::http::message::add_header(), and pion::http::types::make_set_cookie_header().

Referenced by append_cookie_headers().

void pion::http::response::update_request_info ( const http::request http_request  )  [inline]

Updates HTTP request information for the response object (use this if the response cannot be constructed using the request)

Parameters:
http_request the request that this is responding to

Definition at line 95 of file response.hpp.

References pion::http::request::get_method(), pion::http::message::get_version_major(), pion::http::message::get_version_minor(), and pion::http::message::set_chunks_supported().

Referenced by response().


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_file_service.html0000644000372000001440000004140612215647143025562 0ustar robertousers pion: pion::plugins::FileService Class Reference

pion::plugins::FileService Class Reference

#include <FileService.hpp>

Inherits pion::http::plugin_service.

List of all members.

Public Member Functions

virtual void set_option (const std::string &name, const std::string &value)
virtual void operator() (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)
 handles requests for FileService
virtual void start (void)
 called when the web service's server is starting
virtual void stop (void)
 called when the web service's server is stopping
void set_logger (logger log_ptr)
 sets the logger to be used
logger get_logger (void)
 returns the logger currently in use

Protected Types

typedef PION_HASH_MAP
< std::string, DiskFile,
PION_HASH_STRING > 
CacheMap
 data type for map of file names to cache entries
typedef PION_HASH_MAP
< std::string, std::string,
PION_HASH_STRING > 
MIMETypeMap
 data type for map of file extensions to MIME types

Protected Member Functions

void scanDirectory (const boost::filesystem::path &dir_path)
std::pair< CacheMap::iterator,
bool > 
addCacheEntry (const std::string &relative_path, const boost::filesystem::path &file_path, const bool placeholder)
void sendNotFoundResponse (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)

Static Protected Member Functions

static std::string findMIMEType (const std::string &file_name)

Protected Attributes

logger m_logger
 primary logging interface used by this class

Detailed Description

FileService: web service that serves regular files

Definition at line 235 of file FileService.hpp.


Member Function Documentation

std::pair< FileService::CacheMap::iterator, bool > pion::plugins::FileService::addCacheEntry ( const std::string &  relative_path,
const boost::filesystem::path &  file_path,
const bool  placeholder 
) [protected]

adds a single file to the cache

Parameters:
relative_path path for the file relative to the root directory
file_path actual path to the file on disk
placeholder if true, the file's contents are not cached
Returns:
std::pair<CacheMap::iterator, bool> if an entry is added to the cache, second will be true and first will point to the new entry

Definition at line 660 of file FileService.cpp.

References findMIMEType(), pion::plugins::DiskFile::getFileSize(), m_logger, pion::plugins::DiskFile::read(), and pion::plugins::DiskFile::update().

Referenced by scanDirectory(), and start().

std::string pion::plugins::FileService::findMIMEType ( const std::string &  file_name  )  [static, protected]

searches for a MIME type that matches a file

Parameters:
file_name name of the file to search for
Returns:
MIME type corresponding with the file, or DEFAULT_MIME_TYPE if none found

Definition at line 711 of file FileService.cpp.

Referenced by addCacheEntry(), and operator()().

void pion::plugins::FileService::scanDirectory ( const boost::filesystem::path &  dir_path  )  [protected]

adds all files within a directory to the cache

Parameters:
dir_path the directory to scan (sub-directories are included)

Definition at line 620 of file FileService.cpp.

References addCacheEntry(), pion::http::plugin_service::get_resource(), and m_logger.

Referenced by start().

void pion::plugins::FileService::set_option ( const std::string &  name,
const std::string &  value 
) [virtual]

configuration options supported by FileService:

directory: all files within the directory will be made available file: cache: scan: max_chunk_size: writable:

Reimplemented from pion::http::plugin_service.

Definition at line 53 of file FileService.cpp.

References pion::plugin::check_cygwin_path().


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_disk_file_sender-members.html0000644000372000001440000001026112215647143030037 0ustar robertousers pion: Member List

pion::plugins::DiskFileSender Member List

This is the complete list of members for pion::plugins::DiskFileSender, including all inherited members.
create(DiskFile &file, pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn, unsigned long max_chunk_size=0)pion::plugins::DiskFileSender [inline, static]
DiskFileSender(DiskFile &file, pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn, unsigned long max_chunk_size)pion::plugins::DiskFileSender [protected]
get_logger(void)pion::plugins::DiskFileSender [inline]
handle_write(const boost::system::error_code &write_error, std::size_t bytes_written)pion::plugins::DiskFileSender [protected]
m_loggerpion::plugins::DiskFileSender [protected]
send(void)pion::plugins::DiskFileSender
set_logger(logger log_ptr)pion::plugins::DiskFileSender [inline]
~DiskFileSender()pion::plugins::DiskFileSender [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1bad__password__hash-members.html0000644000372000001440000000665212215647143030041 0ustar robertousers pion: Member List

pion::error::bad_password_hash Member List

This is the complete list of members for pion::error::bad_password_hash, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1response__writer-members.html0000644000372000001440000002573612215647143027313 0ustar robertousers pion: Member List

pion::http::response_writer Member List

This is the complete list of members for pion::http::response_writer, including all inherited members.
bind_to_write_handler(void)pion::http::response_writer [inline, protected, virtual]
clear(void)pion::http::writer [inline]
create(tcp::connection_ptr &tcp_conn, http::response_ptr &http_response_ptr, finished_handler_t handler=finished_handler_t())pion::http::response_writer [inline, static]
create(tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler=finished_handler_t())pion::http::response_writer [inline, static]
finished_handler_t typedefpion::http::writer [protected]
finished_writing(const boost::system::error_code &ec)pion::http::writer [inline, protected]
get_connection(void)pion::http::writer [inline]
get_content_length(void) const pion::http::writer [inline]
get_logger(void)pion::http::writer [inline]
get_response(void)pion::http::response_writer [inline]
handle_write(const boost::system::error_code &write_error, std::size_t bytes_written)pion::http::response_writer [inline, protected, virtual]
prepare_buffers_for_send(http::message::write_buffers_t &write_buffers)pion::http::response_writer [inline, protected, virtual]
response_writer(tcp::connection_ptr &tcp_conn, http::response_ptr &http_response_ptr, finished_handler_t handler)pion::http::response_writer [inline, protected]
response_writer(tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler)pion::http::response_writer [inline, protected]
send(void)pion::http::writer [inline]
send(SendHandler send_handler)pion::http::writer [inline]
send_chunk(SendHandler send_handler)pion::http::writer [inline]
send_final_chunk(SendHandler send_handler)pion::http::writer [inline]
send_final_chunk(void)pion::http::writer [inline]
sending_chunked_message() const pion::http::writer [inline]
set_logger(logger log_ptr)pion::http::writer [inline]
supports_chunked_messages(bool b)pion::http::writer [inline]
supports_chunked_messages() const pion::http::writer [inline]
write(const T &data)pion::http::writer [inline]
write(std::ostream &(*iomanip)(std::ostream &)) (defined in pion::http::writer)pion::http::writer [inline]
write(const void *data, size_t length)pion::http::writer [inline]
write_handler_t typedefpion::http::writer [protected]
write_no_copy(const std::string &data)pion::http::writer [inline]
write_no_copy(void *data, size_t length)pion::http::writer [inline]
writer(tcp::connection_ptr &tcp_conn, finished_handler_t handler)pion::http::writer [inline, protected]
~response_writer()pion::http::response_writer [inline, virtual]
~writer()pion::http::writer [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1response__reader.html0000644000372000001440000003656612215647143025614 0ustar robertousers pion: pion::http::response_reader Class Reference

pion::http::response_reader Class Reference

#include <response_reader.hpp>

Inherits pion::http::reader.

List of all members.

Public Types

typedef boost::function3< void,
http::response_ptr,
tcp::connection_ptr, const
boost::system::error_code & > 
finished_handler_t
 function called after the HTTP message has been parsed

Public Member Functions

void set_headers_parsed_callback (finished_handler_t &h)
 sets a function to be called after HTTP headers have been parsed

Static Public Member Functions

static boost::shared_ptr
< response_reader
create (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler)

Protected Member Functions

 response_reader (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler)
virtual void read_bytes (void)
 Reads more bytes from the TCP connection.
virtual void finished_parsing_headers (const boost::system::error_code &ec)
 Called after we have finished parsing the HTTP message headers.
virtual void finished_reading (const boost::system::error_code &ec)
 Called after we have finished reading/parsing the HTTP message.
virtual http::messageget_message (void)
 Returns a reference to the HTTP message being parsed.

Protected Attributes

http::response_ptr m_http_msg
 The new HTTP message container being created.
finished_handler_t m_finished
 function called after the HTTP message has been parsed
finished_handler_t m_parsed_headers
 function called after the HTTP message headers have been parsed

Detailed Description

response_reader: asynchronously reads and parses HTTP responses

Definition at line 31 of file response_reader.hpp.


Constructor & Destructor Documentation

pion::http::response_reader::response_reader ( tcp::connection_ptr &  tcp_conn,
const http::request http_request,
finished_handler_t  handler 
) [inline, protected]

protected constructor restricts creation of objects (use create())

Parameters:
tcp_conn TCP connection containing a new message to parse
http_request the request we are responding to
handler function called after the message has been parsed

Definition at line 74 of file response_reader.hpp.

References m_http_msg, and pion::http::parser::set_logger().

Referenced by create().


Member Function Documentation

static boost::shared_ptr<response_reader> pion::http::response_reader::create ( tcp::connection_ptr &  tcp_conn,
const http::request http_request,
finished_handler_t  handler 
) [inline, static]

creates new response_reader objects

Parameters:
tcp_conn TCP connection containing a new message to parse
http_request the request we are responding to
handler function called after the message has been parsed

Definition at line 54 of file response_reader.hpp.

References response_reader().


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugin__instance__ptr.html0000644000372000001440000002224412215647143025266 0ustar robertousers pion: pion::plugin_instance_ptr< InterfaceClassType > Class Template Reference

pion::plugin_instance_ptr< InterfaceClassType > Class Template Reference

#include <plugin.hpp>

List of all members.

Public Member Functions

 plugin_instance_ptr (void)
 default constructor & destructor
virtual ~plugin_instance_ptr ()
 virtual destructor / may be extended
void reset (void)
 reset the instance pointer
void create (const std::string &plugin_type)
 create a new instance of the given plugin_type
bool empty (void) const
 returns true if pointer is empty
InterfaceClassType * get (void)
 return a raw pointer to the instance
InterfaceClassType & operator* (void)
 return a reference to the instance
const InterfaceClassType & operator* (void) const
 return a const reference to the instance
InterfaceClassType * operator-> (void)
 return a reference to the instance
const InterfaceClassType * operator-> (void) const
 return a const reference to the instance

Protected Attributes

plugin_ptr< InterfaceClassType > m_plugin_ptr
 smart pointer that manages the plugin's dynamic object code
InterfaceClassType * m_instance_ptr
 raw pointer to the plugin instance

Detailed Description

template<typename InterfaceClassType>
class pion::plugin_instance_ptr< InterfaceClassType >

plugin_instance_ptr: smart pointer that manages a plug-in instance

Definition at line 355 of file plugin.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1open__file-members.html0000644000372000001440000000662112215647143026163 0ustar robertousers pion: Member List

pion::error::open_file Member List

This is the complete list of members for pion::error::open_file, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x6f.html0000644000372000001440000001372512215647143022237 0ustar robertousers pion: Class Members - Functions
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1user.html0000644000372000001440000002260512215647143021700 0ustar robertousers pion: pion::user Class Reference

pion::user Class Reference

#include <user.hpp>

List of all members.

Public Member Functions

 user (std::string const &username)
 construct a new user object
 user (std::string const &username, std::string const &password)
 construct a new user object
virtual ~user ()
 virtual destructor
std::string const & get_username () const
 returns user name as a string
std::string const & get_password () const
 returns password for the user (encrypted if SSL is enabled)
virtual bool match_password (const std::string &password) const
virtual void set_password (const std::string &password)
 sets password credentials for given user
virtual void set_password_hash (const std::string &password_hash)
 sets encrypted password credentials for given user

Protected Attributes

const std::string m_username
 username string
std::string m_password
 password string (actual contents depends on implementation)
unsigned char m_password_hash [SHA_DIGEST_LENGTH]
 SHA1 hash of the password.

Detailed Description

user: base class to store user credentials

Definition at line 39 of file user.hpp.


Member Function Documentation

virtual bool pion::user::match_password ( const std::string &  password  )  const [inline, virtual]

matches password credential for given user

Parameters:
password password credentials

Definition at line 70 of file user.hpp.

References m_password, and m_password_hash.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/user_8hpp_source.html0000644000372000001440000006332212215647142021643 0ustar robertousers pion: include/pion/user.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x69.html0000644000372000001440000001343012215647143021140 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- i -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/tab_l.gif0000644000372000001440000000130212215647142017216 0ustar robertousersGIF89a ,Õö÷ùñô÷öøúüýþúûüùúûøùúêïóïóöÆÕßÒÞæØâéÞçíÝæìåìñèîòô÷ùóöø³ÈÕÁÒÝËÙâÏÜäÖá薴ŹɯÂÍ»ÎÙÃÔÞÂÓÝÈ×àÌÚâÕáèÙäê×âèåìðëðó„°ÇÑÞåÜæëãëïëñôîóõ÷úûûüüÿÿÿþþþ, ,ÿ@–P±É`H$!%CqVe2X­ŠÌJ(“Ä +€˜3 2$ÀÆ ¼kvŠä-Ëçõu*…"}ã|}|~q(" $f„ 'Žl(Œ&&$r‘™ › & ! )¢¤›{¨£¥r­ª°©¯„±¯¬´¦·»º³®«§¾¶ÃÂÀ¿²¹ÇÄËÆ²ÌÉεҽͼ„ÔÈÓ×иÙÝÕÏÙÊâÜßãçæê¾äÛÅëÇíáîÖìéïøñ÷õüÑðåùü¤Pß?‚ƒœÇÛBm åAœÎáÀ†%V܈î!Çk÷Ø/áÄ;^¤¨²$Æ–#Mf)f͇(WÎL‰“æKçÒ„° ’I)L:eD ¡Cµ´x*4 U¨h  %A«£^ÁNKb¬Ùe§X±‚´k»x!ÁÖí—2tÝÖ !¯š5tÛæé—À]$¬´%ƒXíâ.i[¬]Y­•ÊfžEëõkg`µ††:zëçÒž;£}ºµj×aa‹–Mš¶é׸cçž½»vïÛºƒóî›8ðáÈ‹'?®¼9óç©G_>Ýyuè¬_ßž]zwêß­‡Ç¾º¼mîæµG~½ûôÞთ/ž>ùööÙ«Ïÿ¿ÿýÿÅà|ÖWà}v;pion-5.0.4+dfsg.orig/doc/html/tab_b.gif0000644000372000001440000000004312215647142017205 0ustar robertousersGIF89a€„°Ç,D;pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1bad__arg-members.html0000644000372000001440000000661312215647143025603 0ustar robertousers pion: Member List

pion::error::bad_arg Member List

This is the complete list of members for pion::error::bad_arg, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x6d.html0000644000372000001440000003012212215647143021210 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- m -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x64.html0000644000372000001440000001245712215647143022156 0ustar robertousers pion: Class Members - Functions
 

- d -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/_log_service_8hpp_source.html0000644000372000001440000003571212215647142023327 0ustar robertousers pion: services/LogService.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1open__file.html0000644000372000001440000000476112215647143024536 0ustar robertousers pion: pion::error::open_file Class Reference

pion::error::open_file Class Reference

exception thrown if we failed to open a file More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if we failed to open a file

Definition at line 143 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_allow_nothing_service.html0000644000372000001440000001231712215647143027506 0ustar robertousers pion: pion::plugins::AllowNothingService Class Reference

pion::plugins::AllowNothingService Class Reference

#include <AllowNothingService.hpp>

Inherits pion::http::plugin_service.

List of all members.

Public Member Functions

virtual void operator() (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)

Detailed Description

This class has a corresponding create function (pion_create_AllowNothingService) and destroy function (pion_destroy_AllowNothingService), as required for use by plugin.

Definition at line 23 of file AllowNothingService.hpp.


Member Function Documentation

void pion::plugins::AllowNothingService::operator() ( pion::http::request_ptr &  http_request_ptr,
pion::tcp::connection_ptr &  tcp_conn 
) [virtual]

attempts to handle a new HTTP request

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Implements pion::http::plugin_service.

Definition at line 20 of file AllowNothingService.cpp.

References pion::http::response_writer::create(), and pion::tcp::connection::finish().


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1one__to__one__scheduler-members.html0000644000372000001440000003260412215647143027171 0ustar robertousers pion: Member List

pion::one_to_one_scheduler Member List

This is the complete list of members for pion::one_to_one_scheduler, including all inherited members.
add_active_user(void)pion::scheduler
DEFAULT_NUM_THREADSpion::scheduler [protected, static]
finish_services(void)pion::one_to_one_scheduler [inline, protected, virtual]
finish_threads(void)pion::multi_thread_scheduler [inline, protected, virtual]
get_io_service(void)pion::one_to_one_scheduler [inline, virtual]
get_io_service(boost::uint32_t n)pion::one_to_one_scheduler [inline, virtual]
get_logger(void)pion::scheduler [inline]
get_num_threads(void) const pion::scheduler [inline]
get_wakeup_time(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [protected, static]
is_running(void) const pion::scheduler [inline]
join(void)pion::scheduler
keep_running(boost::asio::io_service &my_service, boost::asio::deadline_timer &my_timer)pion::scheduler
KEEP_RUNNING_TIMER_SECONDSpion::scheduler [protected, static]
m_active_userspion::scheduler [protected]
m_is_runningpion::scheduler [protected]
m_loggerpion::scheduler [protected]
m_mutexpion::scheduler [protected]
m_next_servicepion::one_to_one_scheduler [protected]
m_no_more_active_userspion::scheduler [protected]
m_num_threadspion::scheduler [protected]
m_scheduler_has_stoppedpion::scheduler [protected]
m_service_poolpion::one_to_one_scheduler [protected]
m_thread_poolpion::multi_thread_scheduler [protected]
MICROSEC_IN_SECONDpion::scheduler [protected, static]
multi_thread_scheduler(void)pion::multi_thread_scheduler [inline]
NSEC_IN_SECONDpion::scheduler [protected, static]
one_to_one_scheduler(void)pion::one_to_one_scheduler [inline]
post(boost::function0< void > work_func)pion::scheduler [inline, virtual]
process_service_work(boost::asio::io_service &service)pion::scheduler
remove_active_user(void)pion::scheduler
scheduler(void)pion::scheduler [inline]
service_pool_type typedefpion::one_to_one_scheduler [protected]
set_logger(logger log_ptr)pion::scheduler [inline]
set_num_threads(const boost::uint32_t n)pion::scheduler [inline]
shutdown(void)pion::scheduler [virtual]
sleep(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
sleep(ConditionType &wakeup_condition, LockType &wakeup_lock, boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
startup(void)pion::one_to_one_scheduler [virtual]
stop_services(void)pion::one_to_one_scheduler [inline, protected, virtual]
stop_threads(void)pion::multi_thread_scheduler [inline, protected, virtual]
ThreadPool typedefpion::multi_thread_scheduler [protected]
~multi_thread_scheduler()pion::multi_thread_scheduler [inline, virtual]
~one_to_one_scheduler()pion::one_to_one_scheduler [inline, virtual]
~scheduler()pion::scheduler [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/tab_r.gif0000644000372000001440000000503112215647142017227 0ustar robertousersGIF89a,Õö÷ùñô÷öøúüýþúûüùúûøùúêïóïóöÆÕßÒÞæØâéÞçíÝæìåìñèîòô÷ùóöø³ÈÕÁÒÝËÙâÏÜäÖá薴ŹɯÂÍ»ÎÙÃÔÞÂÓÝÈ×àÌÚâÕáèÙäê×âèåìðëðó„°ÇÑÞåÜæëãëïëñôîóõ÷úûûüüÿÿÿþþþ,,ÿ@’pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬v •h<¬pkL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~ÏwVa+‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ “*)^,*ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂö)'ÆÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæÚ¥(" ðñòóôõö÷øùúûüýþÿ H° ÁƒòK"ƒRHœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\éÅu&@€ Á²¦Í›8sêÜɳ§Oÿ–(±€DУH“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯S84± ‰hÓª]˶­Û·pãÊK·®Ý»xóêÝË·¯ß¿€Ó} âDÌf(^̸±ãÇ#KžL¹²å˘3kÞ̹³çÏ C‹m¹ðCÄHœXͺµë×°cËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N÷ÃJ” Á®¹óçУKŸN½ºõëØ³kßν»÷ïàËO¾úñ€ dÇ@€‚‚L¤"ÉÈF:ò‘Œ¤$9† (8…&ÉÉNzò“  ¥(G©FB^²!˨)WÉÊVºò•°l¤)1™ wÄò–¸Ì¥.wÊYºäƒà¥0‡IÌbó¾|ÉHpÌf:ó™Ðìe pJ±ˆ€}Ȧ6·ÉÍnzó›à §8û0Â%"¸æ8×ÉÎvºóðŒ§<ÉPÎQ`ò%×$€>÷ÉÏ~úóŸ ¨@JЂô M¨BÊІ:ô¡¨D'ZPKF Ö¼&16ÊÑŽzô£ ©HGJRb ÷Lç5ÏÁÒ–ºô¥ÿ0©LgJÓšš#(e>¯‰Óžúô§@ ªP‡JÔ¢õ¨HMªR—ÊÔ¦:õ©PªT§JÕª&5;%U·ÊÕ®zõ«` «XÇJV«ÂC§‹ÑjY×ÊÖ¶ºõ­p«\ŠU´À¦xÍ«^÷Ê×¾úõ¯ÐÀi)$‚”ô°ˆM¬bËØÆ:vˆ, ಘͬf7ËÙÎzö³  ­hGKÚÒšö´¨M­jWËÚÖºöµ°­*$ÛSPô¶¸Í­nwËÛÞúö·ÀÅm +„â¸ÈM®r—ËÜæ:÷¹ÐE®?±9ÏêZ÷ºØÍ®v¿9€î"‚ºÛ ¯xÇKÞòb—™ÑLÿ¯z×Ë^A¢·½ð¯|ç†÷Ò÷¾øÍ¯0í«ßþú÷¿¡ä/€Là»×ÀN°‚ï(à;øÁ n0„'LaýJ¸ÂÎ0{/¬á{ؘþ°ˆG|Ë“øÄ(¥‰SÌâCrÅ.ޱŒ ãÛøÆv¬1ŽwÌc6ê¸Ç@ÞñƒLd¹ÈHNñ‘“Ìd/¹ÉPÎð“£LeO¹ÊXŽp–·|â+sùËýõ2˜ÇL_1“ùÌí53š×M5³ùÍÇt3œç¼_:ÛÙÂwÎs™õÌgøÊ¹Ï€p ýÌ?úÐ/F´¢ë¼èFãÒÐŽŽt!-éJã‘Ò–Îô1­éN»‘ÓžuÿA-êP“ºÔ>5ª3­êUWºÕ®Ž4¬cÝèYÓZѶ¾õ¡s­ëAóº×€þ5°ù,ìaç¹ØÆ¶3²“=çe3ûÍÎ~öš£-í3S»Úc¾6¶¿¬ímo¹ÛÞÆ2¸ÃMåq“Êæ>7“Ó­n$³»ÝD~7¼,ïyó¸ÞöÆ1¾ómã}óÛÈÿvµ¿Þâ\É/µÁNâ…3ÜÉ÷´Ã#Þá‰S\ÊguÆ-mñO¸ã0ÈC¾à‘“\Ë'_´ÉS^à•³|À.ùc.ó0לÐ4¿9~s®ó=÷¼Ï<ÿy|ƒ.ô4]ÏD?ºz“®ô67]ÙO§3Ó£ÞÌ©SÄW‡vÖÙl>õ­3Úëdî:Øu)ö±?ÚìÙF;˜Ë®öW²½í­|;ÜW)÷¹²îvtÞ˽w¾÷Ý|à×=xÂÞÝA;pion-5.0.4+dfsg.orig/doc/html/spdy_2parser_8hpp_source.html0000644000372000001440000004606512215647142023307 0ustar robertousers pion: include/pion/spdy/parser.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x63.html0000644000372000001440000002625112215647143021137 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- c -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/http__cookie__auth_8cpp_source.html0000644000372000001440000007457512215647142024523 0ustar robertousers pion: src/http_cookie_auth.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1message.html0000644000372000001440000023355612215647143023717 0ustar robertousers pion: pion::http::message Class Reference

pion::http::message Class Reference

#include <message.hpp>

Inherits pion::http::types.

Inherited by pion::http::request, and pion::http::response.

List of all members.

Classes

class  content_buffer_t
 a simple helper class used to manage a fixed-size payload content buffer More...
struct  receive_error_t
 data type for library errors returned during receive() operations More...

Public Types

enum  data_status_t { STATUS_NONE, STATUS_TRUNCATED, STATUS_PARTIAL, STATUS_OK }
 

defines message data integrity status codes


typedef std::vector
< boost::asio::const_buffer > 
write_buffers_t
 data type for I/O write buffers (these wrap existing data to be sent)
typedef std::vector< char > chunk_cache_t
 used to cache chunked data

Public Member Functions

 message (void)
 constructs a new HTTP message object
 message (const message &http_msg)
 copy constructor
messageoperator= (const message &http_msg)
 assignment operator
virtual ~message ()
 virtual destructor
virtual void clear (void)
 clears all message data
virtual bool is_content_length_implied (void) const =0
 should return true if the content length can be implied without headers
bool is_valid (void) const
 returns true if the message is valid
bool get_chunks_supported (void) const
 returns true if chunked transfer encodings are supported
boost::asio::ip::address & get_remote_ip (void)
 returns IP address of the remote endpoint
boost::uint16_t get_version_major (void) const
 returns the major HTTP version number
boost::uint16_t get_version_minor (void) const
 returns the minor HTTP version number
std::string get_version_string (void) const
 returns a string representation of the HTTP version (i.e. "HTTP/1.1")
boost::uint64_t get_content_length (void) const
 returns the length of the payload content (in bytes)
bool is_chunked (void) const
 returns true if the message content is chunked
bool is_content_buffer_allocated () const
 returns true if buffer for content is allocated
std::size_t get_content_buffer_size () const
 returns size of allocated buffer
char * get_content (void)
 returns a pointer to the payload content, or empty string if there is none
const char * get_content (void) const
 returns a const pointer to the payload content, or empty string if there is none
chunk_cache_tget_chunk_cache (void)
 returns a reference to the chunk cache
const std::string & get_header (const std::string &key) const
 returns a value for the header if any are defined; otherwise, an empty string
ihash_multimap & get_headers (void)
 returns a reference to the HTTP headers
bool has_header (const std::string &key) const
 returns true if at least one value for the header is defined
const std::string & get_cookie (const std::string &key) const
ihash_multimap & get_cookies (void)
 returns the cookie parameters
bool has_cookie (const std::string &key) const
void add_cookie (const std::string &key, const std::string &value)
void change_cookie (const std::string &key, const std::string &value)
void delete_cookie (const std::string &key)
const std::string & get_first_line (void) const
 returns a string containing the first line for the HTTP message
bool has_missing_packets () const
 true if there were missing packets
void set_missing_packets (bool newVal)
 set to true when missing packets detected
bool has_data_after_missing_packets () const
 true if more data seen after the missing packets
void set_data_after_missing_packet (bool newVal)
void set_is_valid (bool b=true)
 sets whether or not the message is valid
void set_chunks_supported (bool b)
 set to true if chunked transfer encodings are supported
void set_remote_ip (const boost::asio::ip::address &ip)
 sets IP address of the remote endpoint
void set_version_major (const boost::uint16_t n)
 sets the major HTTP version number
void set_version_minor (const boost::uint16_t n)
 sets the minor HTTP version number
void set_content_length (const boost::uint64_t n)
 sets the length of the payload content (in bytes)
void set_do_not_send_content_length (void)
 if called, the content-length will not be sent in the HTTP headers
data_status_t get_status () const
 return the data receival status
void set_status (data_status_t newVal)
void update_content_length_using_header (void)
 sets the length of the payload content using the Content-Length header
void update_transfer_encoding_using_header (void)
 sets the transfer coding using the Transfer-Encoding header
char * create_content_buffer (void)
void set_content (const std::string &content)
 resets payload content to match the value of a string
void clear_content (void)
 clears payload content buffer
void set_content_type (const std::string &type)
 sets the content type for the message payload
void add_header (const std::string &key, const std::string &value)
 adds a value for the HTTP header named key
void change_header (const std::string &key, const std::string &value)
 changes the value for the HTTP header named key
void delete_header (const std::string &key)
 removes all values for the HTTP header named key
bool check_keep_alive (void) const
 returns true if the HTTP connection may be kept alive
void prepare_buffers_for_send (write_buffers_t &write_buffers, const bool keep_alive, const bool using_chunks)
std::size_t send (tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false)
std::size_t receive (tcp::connection &tcp_conn, boost::system::error_code &ec, parser &http_parser)
std::size_t receive (tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))
std::size_t write (std::ostream &out, boost::system::error_code &ec, bool headers_only=false)
std::size_t read (std::istream &in, boost::system::error_code &ec, parser &http_parser)
std::size_t read (std::istream &in, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))
void concatenate_chunks (void)

Protected Member Functions

void prepare_headers_for_send (const bool keep_alive, const bool using_chunks)
void append_headers (write_buffers_t &write_buffers)
virtual void append_cookie_headers (void)
 appends HTTP headers for any cookies defined by the http::message
void clear_first_line (void) const
virtual void update_first_line (void) const =0
 updates the string containing the first line for the HTTP message

Static Protected Member Functions

template<typename DictionaryType >
static const std::string & get_value (const DictionaryType &dict, const std::string &key)
template<typename DictionaryType >
static void change_value (DictionaryType &dict, const std::string &key, const std::string &value)
template<typename DictionaryType >
static void delete_value (DictionaryType &dict, const std::string &key)

Protected Attributes

std::string m_first_line

Detailed Description

message: base container for HTTP messages

Definition at line 49 of file message.hpp.


Member Function Documentation

void pion::http::message::add_cookie ( const std::string &  key,
const std::string &  value 
) [inline]

adds a value for the cookie since cookie names are insensitive, key should use lowercase alpha chars

Definition at line 240 of file message.hpp.

void pion::http::message::append_headers ( write_buffers_t write_buffers  )  [inline, protected]

appends the message's HTTP headers to a vector of write buffers

Parameters:
write_buffers the buffers to append HTTP headers into

Definition at line 579 of file message.hpp.

void pion::http::message::change_cookie ( const std::string &  key,
const std::string &  value 
) [inline]

changes the value of a cookie since cookie names are insensitive, key should use lowercase alpha chars

Definition at line 246 of file message.hpp.

template<typename DictionaryType >
static void pion::http::message::change_value ( DictionaryType &  dict,
const std::string &  key,
const std::string &  value 
) [inline, static, protected]

Changes the value for a dictionary key. Adds the key if it does not already exist. If multiple values exist for the key, they will be removed and only the new value will remain.

Parameters:
dict the dictionary object to update
key the key to change the value for
value the value to assign to the key

Definition at line 620 of file message.hpp.

Referenced by pion::http::request::change_query().

void pion::http::message::clear_first_line ( void   )  const [inline, protected]

erases the string containing the first line for the HTTP message (it will be updated the next time get_first_line() is called)

Definition at line 662 of file message.hpp.

Referenced by pion::http::request::set_method(), pion::http::request::set_query_string(), pion::http::request::set_resource(), pion::http::response::set_status_code(), and pion::http::response::set_status_message().

void pion::http::message::concatenate_chunks ( void   ) 

pieces together all the received chunks

Definition at line 230 of file http_message.cpp.

References create_content_buffer(), and set_content_length().

Referenced by pion::http::parser::check_premature_eof(), pion::http::parser::finish(), and pion::http::parser::parse().

char* pion::http::message::create_content_buffer ( void   )  [inline]

creates a payload content buffer of size m_content_length and returns a pointer to the new buffer (memory is managed by message class)

Definition at line 332 of file message.hpp.

Referenced by concatenate_chunks(), pion::http::parser::finish(), pion::http::parser::finish_header_parsing(), pion::http::request::set_content(), and pion::http::request::use_query_params_for_post_content().

void pion::http::message::delete_cookie ( const std::string &  key  )  [inline]

removes all values for a cookie since cookie names are insensitive, key should use lowercase alpha chars

Reimplemented in pion::http::response.

Definition at line 252 of file message.hpp.

template<typename DictionaryType >
static void pion::http::message::delete_value ( DictionaryType &  dict,
const std::string &  key 
) [inline, static, protected]

Deletes all values for a key

Parameters:
dict the dictionary object to update
key the key to delete

Definition at line 651 of file message.hpp.

Referenced by pion::http::request::delete_query().

const std::string& pion::http::message::get_cookie ( const std::string &  key  )  const [inline]

returns a value for the cookie if any are defined; otherwise, an empty string since cookie names are insensitive, key should use lowercase alpha chars

Definition at line 223 of file message.hpp.

template<typename DictionaryType >
static const std::string& pion::http::message::get_value ( const DictionaryType &  dict,
const std::string &  key 
) [inline, static, protected]

Returns the first value in a dictionary if key is found; or an empty string if no values are found

Parameters:
dict the dictionary to search for key
key the key to search for
Returns:
value if found; empty string if not

Definition at line 603 of file message.hpp.

Referenced by pion::http::request::get_query().

bool pion::http::message::has_cookie ( const std::string &  key  )  const [inline]

returns true if at least one value for the cookie is defined since cookie names are insensitive, key should use lowercase alpha chars

Definition at line 234 of file message.hpp.

void pion::http::message::prepare_buffers_for_send ( write_buffers_t write_buffers,
const bool  keep_alive,
const bool  using_chunks 
) [inline]

initializes a vector of write buffers with the HTTP message information

Parameters:
write_buffers vector of write buffers to initialize
keep_alive true if the connection should be kept alive
using_chunks true if the payload content will be sent in chunks

Definition at line 385 of file message.hpp.

Referenced by send(), and write().

void pion::http::message::prepare_headers_for_send ( const bool  keep_alive,
const bool  using_chunks 
) [inline, protected]

prepares HTTP headers for a send operation

Parameters:
keep_alive true if the connection should be kept alive
using_chunks true if the payload content will be sent in chunks

Definition at line 562 of file message.hpp.

std::size_t pion::http::message::read ( std::istream &  in,
boost::system::error_code &  ec,
bool  headers_only = false,
std::size_t  max_content_length = static_cast<size_t>(-1) 
)

reads a new message from a std::istream (blocks until finished)

Parameters:
in std::istream to use
ec contains error code if the read fails
headers_only if true then only HTTP headers are read
max_content_length maximum number of content bytes received
Returns:
std::size_t number of bytes read from the connection

Definition at line 219 of file http_message.cpp.

References pion::http::parser::parse_headers_only(), read(), and pion::http::parser::set_max_content_length().

std::size_t pion::http::message::read ( std::istream &  in,
boost::system::error_code &  ec,
parser http_parser 
)

reads a new message from a std::istream (blocks until finished)

Parameters:
in std::istream to use
ec contains error code if the read fails
http_parser http parser object to use
Returns:
std::size_t number of bytes read from the connection

Definition at line 180 of file http_message.cpp.

References pion::http::parser::check_premature_eof(), clear(), pion::http::parser::get_total_bytes_read(), pion::http::parser::parse(), and pion::http::parser::set_read_buffer().

Referenced by read().

std::size_t pion::http::message::receive ( tcp::connection tcp_conn,
boost::system::error_code &  ec,
bool  headers_only = false,
std::size_t  max_content_length = static_cast<size_t>(-1) 
)

receives a new message from a TCP connection (blocks until finished)

Parameters:
tcp_conn TCP connection to use
ec contains error code if the receive fails
headers_only if true then only HTTP headers are received
max_content_length maximum number of content bytes received
Returns:
std::size_t number of bytes read from the connection

Definition at line 143 of file http_message.cpp.

References pion::http::parser::parse_headers_only(), receive(), and pion::http::parser::set_max_content_length().

std::size_t pion::http::message::receive ( tcp::connection tcp_conn,
boost::system::error_code &  ec,
parser http_parser 
)
std::size_t pion::http::message::send ( tcp::connection tcp_conn,
boost::system::error_code &  ec,
bool  headers_only = false 
)

sends the message over a TCP connection (blocks until finished)

Parameters:
tcp_conn TCP connection to use
ec contains error code if the send fails
headers_only if true then only HTTP headers are sent
Returns:
std::size_t number of bytes written to the connection

Definition at line 33 of file http_message.cpp.

References get_content(), get_content_length(), pion::tcp::connection::get_keep_alive(), prepare_buffers_for_send(), and pion::tcp::connection::write().

std::size_t pion::http::message::write ( std::ostream &  out,
boost::system::error_code &  ec,
bool  headers_only = false 
)

writes the message to a std::ostream (blocks until finished)

Parameters:
out std::ostream to use
ec contains error code if the write fails
headers_only if true then only HTTP headers are written
Returns:
std::size_t number of bytes written to the connection

Definition at line 154 of file http_message.cpp.

References get_content(), get_content_length(), and prepare_buffers_for_send().


Member Data Documentation

std::string pion::http::message::m_first_line [mutable, protected]

first line sent in an HTTP message (i.e. "GET / HTTP/1.1" for request, or "HTTP/1.1 200 OK" for response)

Definition at line 672 of file message.hpp.

Referenced by operator=(), pion::http::response::update_first_line(), and pion::http::request::update_first_line().


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1reader-members.html0000644000372000001440000007152012215647143025154 0ustar robertousers pion: Member List

pion::http::reader Member List

This is the complete list of members for pion::http::reader, including all inherited members.
bytes_available(void) const pion::http::parser [inline]
check_premature_eof(http::message &http_msg)pion::http::parser [inline]
compute_msg_status(http::message &http_msg, bool msg_parsed_ok)pion::http::parser [protected, static]
consume_bytes(const boost::system::error_code &read_error, std::size_t bytes_read)pion::http::reader [protected]
consume_bytes(void)pion::http::reader [protected]
consume_content(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
consume_content_as_next_chunk(http::message::chunk_cache_t &chunk_buffers)pion::http::parser [protected]
COOKIE_NAME_MAXpion::http::parser [protected, static]
COOKIE_VALUE_MAXpion::http::parser [protected, static]
create_error_category(void)pion::http::parser [protected, static]
DEFAULT_CONTENT_MAXpion::http::parser [static]
eof(void) const pion::http::parser [inline]
ERROR_CHUNK_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_NAME_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_VALUE_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_INVALID_CONTENT_LENGTH enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_CHUNK_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_HEADER_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_TOO_MUCH_CONTENT enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_EMPTY enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_SIZE enum value (defined in pion::http::parser)pion::http::parser
error_value_t enum namepion::http::parser
ERROR_VERSION_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_VERSION_EMPTY enum value (defined in pion::http::parser)pion::http::parser
finish(http::message &http_msg) const pion::http::parser
finish_header_parsing(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
finished_parsing_headers(const boost::system::error_code &ec)pion::http::parser [inline, protected, virtual]
finished_reading(const boost::system::error_code &ec)=0pion::http::reader [protected, pure virtual]
gcount(void) const pion::http::parser [inline]
get_connection(void)pion::http::reader [inline]
get_content_bytes_read(void) const pion::http::parser [inline]
get_error_category(void)pion::http::parser [inline, static]
get_logger(void)pion::http::parser [inline]
get_max_content_length(void) const pion::http::parser [inline]
get_message(void)=0pion::http::reader [protected, pure virtual]
get_parse_headers_only(void)pion::http::parser [inline]
get_raw_headers(void) const pion::http::parser [inline]
get_save_raw_headers(void) const pion::http::parser [inline]
get_total_bytes_read(void) const pion::http::parser [inline]
HEADER_NAME_MAXpion::http::parser [protected, static]
HEADER_VALUE_MAXpion::http::parser [protected, static]
is_char(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_control(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_cookie_attribute(const std::string &name, bool set_cookie_header) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_hex_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_parsing_request(void) const pion::http::parser [inline]
is_parsing_response(void) const pion::http::parser [inline]
is_special(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
load_read_pos(const char *&read_ptr, const char *&read_end_ptr) const pion::http::parser [inline]
m_is_requestpion::http::parser [protected]
m_loggerpion::http::parser [mutable, protected]
m_read_end_ptrpion::http::parser [protected]
m_read_ptrpion::http::parser [protected]
METHOD_MAXpion::http::parser [protected, static]
parse(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
parse_chunks(http::message::chunk_cache_t &chunk_buffers, boost::system::error_code &ec)pion::http::parser [protected]
parse_cookie_header(ihash_multimap &dict, const char *ptr, const std::size_t len, bool set_cookie_header)pion::http::parser [static]
parse_cookie_header(ihash_multimap &dict, const std::string &cookie_header, bool set_cookie_header)pion::http::parser [inline, static]
parse_forwarded_for(const std::string &header, std::string &public_ip)pion::http::parser [static]
parse_headers(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
parse_headers_only(bool b=true)pion::http::parser [inline]
parse_missing_data(http::message &http_msg, std::size_t len, boost::system::error_code &ec)pion::http::parser
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const std::string &form_data)pion::http::parser [inline, static]
parse_uri(const std::string &uri, std::string &proto, std::string &host, boost::uint16_t &port, std::string &path, std::string &query)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const std::string &query)pion::http::parser [inline, static]
parser(const bool is_request, std::size_t max_content_length=DEFAULT_CONTENT_MAX)pion::http::parser [inline]
payload_handler_t typedefpion::http::parser
QUERY_NAME_MAXpion::http::parser [protected, static]
QUERY_STRING_MAXpion::http::parser [protected, static]
QUERY_VALUE_MAXpion::http::parser [protected, static]
read_bytes(void)=0pion::http::reader [protected, pure virtual]
reader(const bool is_request, tcp::connection_ptr &tcp_conn)pion::http::reader [inline, protected]
receive(void)pion::http::reader
reset(void)pion::http::parser [inline]
reset_max_content_length(void)pion::http::parser [inline]
RESOURCE_MAXpion::http::parser [protected, static]
set_error(boost::system::error_code &ec, error_value_t ev)pion::http::parser [inline, protected, static]
set_logger(logger log_ptr)pion::http::parser [inline]
set_max_content_length(std::size_t n)pion::http::parser [inline]
set_payload_handler(payload_handler_t &h)pion::http::parser [inline]
set_read_buffer(const char *ptr, size_t len)pion::http::parser [inline]
set_save_raw_headers(bool b)pion::http::parser [inline]
set_timeout(boost::uint32_t seconds)pion::http::reader [inline]
skip_header_parsing(http::message &http_msg)pion::http::parser [inline]
STATUS_MESSAGE_MAXpion::http::parser [protected, static]
update_message_with_header_data(http::message &http_msg) const pion::http::parser [protected]
~parser()pion::http::parser [inline, virtual]
~reader() (defined in pion::http::reader)pion::http::reader [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x78.html0000644000372000001440000001004012215647143022145 0ustar robertousers pion: Class Members - Functions
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x62.html0000644000372000001440000001155712215647143021141 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- b -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/plugin__server_8hpp_source.html0000644000372000001440000003010412215647142023700 0ustar robertousers pion: include/pion/http/plugin_server.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1response__reader-members.html0000644000372000001440000007677112215647143027246 0ustar robertousers pion: Member List

pion::http::response_reader Member List

This is the complete list of members for pion::http::response_reader, including all inherited members.
bytes_available(void) const pion::http::parser [inline]
check_premature_eof(http::message &http_msg)pion::http::parser [inline]
compute_msg_status(http::message &http_msg, bool msg_parsed_ok)pion::http::parser [protected, static]
consume_bytes(const boost::system::error_code &read_error, std::size_t bytes_read)pion::http::reader [protected]
consume_bytes(void)pion::http::reader [protected]
consume_content(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
consume_content_as_next_chunk(http::message::chunk_cache_t &chunk_buffers)pion::http::parser [protected]
COOKIE_NAME_MAXpion::http::parser [protected, static]
COOKIE_VALUE_MAXpion::http::parser [protected, static]
create(tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler)pion::http::response_reader [inline, static]
create_error_category(void)pion::http::parser [protected, static]
DEFAULT_CONTENT_MAXpion::http::parser [static]
eof(void) const pion::http::parser [inline]
ERROR_CHUNK_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_NAME_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_VALUE_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_INVALID_CONTENT_LENGTH enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_CHUNK_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_HEADER_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_TOO_MUCH_CONTENT enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_EMPTY enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_SIZE enum value (defined in pion::http::parser)pion::http::parser
error_value_t enum namepion::http::parser
ERROR_VERSION_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_VERSION_EMPTY enum value (defined in pion::http::parser)pion::http::parser
finish(http::message &http_msg) const pion::http::parser
finish_header_parsing(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
finished_handler_t typedefpion::http::response_reader
finished_parsing_headers(const boost::system::error_code &ec)pion::http::response_reader [inline, protected, virtual]
finished_reading(const boost::system::error_code &ec)pion::http::response_reader [inline, protected, virtual]
gcount(void) const pion::http::parser [inline]
get_connection(void)pion::http::reader [inline]
get_content_bytes_read(void) const pion::http::parser [inline]
get_error_category(void)pion::http::parser [inline, static]
get_logger(void)pion::http::parser [inline]
get_max_content_length(void) const pion::http::parser [inline]
get_message(void)pion::http::response_reader [inline, protected, virtual]
get_parse_headers_only(void)pion::http::parser [inline]
get_raw_headers(void) const pion::http::parser [inline]
get_save_raw_headers(void) const pion::http::parser [inline]
get_total_bytes_read(void) const pion::http::parser [inline]
HEADER_NAME_MAXpion::http::parser [protected, static]
HEADER_VALUE_MAXpion::http::parser [protected, static]
is_char(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_control(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_cookie_attribute(const std::string &name, bool set_cookie_header) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_hex_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_parsing_request(void) const pion::http::parser [inline]
is_parsing_response(void) const pion::http::parser [inline]
is_special(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
load_read_pos(const char *&read_ptr, const char *&read_end_ptr) const pion::http::parser [inline]
m_finishedpion::http::response_reader [protected]
m_http_msgpion::http::response_reader [protected]
m_is_requestpion::http::parser [protected]
m_loggerpion::http::parser [mutable, protected]
m_parsed_headerspion::http::response_reader [protected]
m_read_end_ptrpion::http::parser [protected]
m_read_ptrpion::http::parser [protected]
METHOD_MAXpion::http::parser [protected, static]
parse(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
parse_chunks(http::message::chunk_cache_t &chunk_buffers, boost::system::error_code &ec)pion::http::parser [protected]
parse_cookie_header(ihash_multimap &dict, const char *ptr, const std::size_t len, bool set_cookie_header)pion::http::parser [static]
parse_cookie_header(ihash_multimap &dict, const std::string &cookie_header, bool set_cookie_header)pion::http::parser [inline, static]
parse_forwarded_for(const std::string &header, std::string &public_ip)pion::http::parser [static]
parse_headers(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
parse_headers_only(bool b=true)pion::http::parser [inline]
parse_missing_data(http::message &http_msg, std::size_t len, boost::system::error_code &ec)pion::http::parser
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const std::string &form_data)pion::http::parser [inline, static]
parse_uri(const std::string &uri, std::string &proto, std::string &host, boost::uint16_t &port, std::string &path, std::string &query)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const std::string &query)pion::http::parser [inline, static]
parser(const bool is_request, std::size_t max_content_length=DEFAULT_CONTENT_MAX)pion::http::parser [inline]
payload_handler_t typedefpion::http::parser
QUERY_NAME_MAXpion::http::parser [protected, static]
QUERY_STRING_MAXpion::http::parser [protected, static]
QUERY_VALUE_MAXpion::http::parser [protected, static]
read_bytes(void)pion::http::response_reader [inline, protected, virtual]
reader(const bool is_request, tcp::connection_ptr &tcp_conn)pion::http::reader [inline, protected]
receive(void)pion::http::reader
reset(void)pion::http::parser [inline]
reset_max_content_length(void)pion::http::parser [inline]
RESOURCE_MAXpion::http::parser [protected, static]
response_reader(tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler)pion::http::response_reader [inline, protected]
set_error(boost::system::error_code &ec, error_value_t ev)pion::http::parser [inline, protected, static]
set_headers_parsed_callback(finished_handler_t &h)pion::http::response_reader [inline]
set_logger(logger log_ptr)pion::http::parser [inline]
set_max_content_length(std::size_t n)pion::http::parser [inline]
set_payload_handler(payload_handler_t &h)pion::http::parser [inline]
set_read_buffer(const char *ptr, size_t len)pion::http::parser [inline]
set_save_raw_headers(bool b)pion::http::parser [inline]
set_timeout(boost::uint32_t seconds)pion::http::reader [inline]
skip_header_parsing(http::message &http_msg)pion::http::parser [inline]
STATUS_MESSAGE_MAXpion::http::parser [protected, static]
update_message_with_header_data(http::message &http_msg) const pion::http::parser [protected]
~parser()pion::http::parser [inline, virtual]
~reader() (defined in pion::http::reader)pion::http::reader [inline, virtual]
~response_reader() (defined in pion::http::response_reader)pion::http::response_reader [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1ihash.html0000644000372000001440000000540512215647143022234 0ustar robertousers pion: pion::ihash Struct Reference

pion::ihash Struct Reference

#include <hash_map.hpp>

List of all members.

Public Member Functions

std::size_t operator() (std::string const &x) const

Detailed Description

case insensitive hash generic function copied from boost.unordered hash_equality documentation http://www.boost.org/doc/libs/1_50_0/doc/html/unordered/hash_equality.html

Definition at line 76 of file hash_map.hpp.


The documentation for this struct was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1plugin__undefined.html0000644000372000001440000000521512215647143026110 0ustar robertousers pion: pion::error::plugin_undefined Class Reference

pion::error::plugin_undefined Class Reference

exception thrown if a plugin has an undefined state More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if a plugin has an undefined state

Definition at line 199 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/algorithm_8cpp_source.html0000644000372000001440000011633712215647142022653 0ustar robertousers pion: src/algorithm.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1plugin__service.html0000644000372000001440000002760212215647143025441 0ustar robertousers pion: pion::http::plugin_service Class Reference

pion::http::plugin_service Class Reference

#include <plugin_service.hpp>

Inherited by pion::plugins::AllowNothingService, pion::plugins::CookieService, pion::plugins::EchoService, pion::plugins::FileService, pion::plugins::HelloService, and pion::plugins::LogService.

List of all members.

Public Member Functions

 plugin_service (void)
 default constructor
virtual ~plugin_service ()
 virtual destructor
virtual void operator() (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)=0
virtual void set_option (const std::string &name, const std::string &value)
virtual void start (void)
 called when the web service's server is starting
virtual void stop (void)
 called when the web service's server is stopping
void set_resource (const std::string &str)
 sets the URI stem or resource that is bound to the web service
const std::string & get_resource (void) const
 returns the URI stem or resource that is bound to the web service
std::string get_relative_resource (const std::string &resource_requested) const
 returns the path to the resource requested, relative to the web service's location

Detailed Description

plugin_service: interface class for web services

Definition at line 29 of file plugin_service.hpp.


Member Function Documentation

virtual void pion::http::plugin_service::operator() ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [pure virtual]

attempts to handle a new HTTP request

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Implemented in pion::plugins::AllowNothingService, pion::plugins::CookieService, pion::plugins::EchoService, pion::plugins::FileService, pion::plugins::HelloService, and pion::plugins::LogService.

virtual void pion::http::plugin_service::set_option ( const std::string &  name,
const std::string &  value 
) [inline, virtual]

sets a configuration option

Parameters:
name the name of the option to change
value the value of the option

Reimplemented in pion::plugins::FileService.

Definition at line 54 of file plugin_service.hpp.

Referenced by pion::http::plugin_server::set_service_option().


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1directory__not__found-members.html0000644000372000001440000000666012215647143030444 0ustar robertousers pion: Member List

pion::error::directory_not_found Member List

This is the complete list of members for pion::error::directory_not_found, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x71.html0000644000372000001440000001010612215647143021126 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- q -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1admin__rights-members.html0000644000372000001440000000541312215647143025157 0ustar robertousers pion: Member List

pion::admin_rights Member List

This is the complete list of members for pion::admin_rights, including all inherited members.
admin_rights(bool use_log=true)pion::admin_rights
release(void)pion::admin_rights
run_as_group(const std::string &group_name)pion::admin_rights [static]
run_as_user(const std::string &user_name)pion::admin_rights [static]
~admin_rights()pion::admin_rights [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1process_1_1config__type.html0000644000372000001440000001125512215647143025644 0ustar robertousers pion: pion::process::config_type Struct Reference

pion::process::config_type Struct Reference

data type for static/global process configuration information More...

#include <process.hpp>

List of all members.

Public Member Functions

 config_type ()
 constructor just initializes native types

Public Attributes

bool shutdown_now
 true if we should shutdown now
boost::condition shutdown_cond
 triggered when it is time to shutdown
boost::mutex shutdown_mutex
 used to protect the shutdown condition

Detailed Description

data type for static/global process configuration information

Definition at line 53 of file process.hpp.


The documentation for this struct was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1one__to__one__scheduler.html0000644000372000001440000002414712215647143025544 0ustar robertousers pion: pion::one_to_one_scheduler Class Reference

pion::one_to_one_scheduler Class Reference

#include <scheduler.hpp>

Inherits pion::multi_thread_scheduler.

List of all members.

Classes

struct  service_pair_type
 typedef for a pair object where first is an IO service and second is a deadline timer More...

Public Member Functions

 one_to_one_scheduler (void)
 constructs a new one_to_one_scheduler
virtual ~one_to_one_scheduler ()
 virtual destructor
virtual boost::asio::io_service & get_io_service (void)
 returns an async I/O service used to schedule work
virtual boost::asio::io_service & get_io_service (boost::uint32_t n)
virtual void startup (void)
 Starts the thread scheduler (this is called automatically when necessary).

Protected Types

typedef std::vector
< boost::shared_ptr
< service_pair_type > > 
service_pool_type
 typedef for a pool of IO services

Protected Member Functions

virtual void stop_services (void)
 stops all services used to schedule work
virtual void finish_services (void)
 finishes all services used to schedule work

Protected Attributes

service_pool_type m_service_pool
 pool of IO services used to schedule work
boost::uint32_t m_next_service
 the next service to use for scheduling work

Detailed Description

one_to_one_scheduler: uses a single IO service for each thread

Definition at line 286 of file scheduler.hpp.


Member Function Documentation

virtual boost::asio::io_service& pion::one_to_one_scheduler::get_io_service ( boost::uint32_t  n  )  [inline, virtual]

returns an async I/O service used to schedule work (provides direct access to avoid locking when possible)

Parameters:
n integer number representing the service object

Definition at line 318 of file scheduler.hpp.


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/spdy__decompressor_8cpp_source.html0000644000372000001440000004265112215647143024566 0ustar robertousers pion: src/spdy_decompressor.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1parser.html0000644000372000001440000027337612215647143023573 0ustar robertousers pion: pion::http::parser Class Reference

pion::http::parser Class Reference

#include <parser.hpp>

Inherited by pion::http::reader.

List of all members.

Classes

class  error_category_t
 class-specific error category More...

Public Types

enum  error_value_t {
  ERROR_METHOD_CHAR = 1, ERROR_METHOD_SIZE, ERROR_URI_CHAR, ERROR_URI_SIZE,
  ERROR_QUERY_CHAR, ERROR_QUERY_SIZE, ERROR_VERSION_EMPTY, ERROR_VERSION_CHAR,
  ERROR_STATUS_EMPTY, ERROR_STATUS_CHAR, ERROR_HEADER_CHAR, ERROR_HEADER_NAME_SIZE,
  ERROR_HEADER_VALUE_SIZE, ERROR_INVALID_CONTENT_LENGTH, ERROR_CHUNK_CHAR, ERROR_MISSING_CHUNK_DATA,
  ERROR_MISSING_HEADER_DATA, ERROR_MISSING_TOO_MUCH_CONTENT
}
 

class-specific error code values


typedef boost::function2< void,
const char *, std::size_t > 
payload_handler_t
 callback type used to consume payload content

Public Member Functions

 parser (const bool is_request, std::size_t max_content_length=DEFAULT_CONTENT_MAX)
virtual ~parser ()
 default destructor
boost::tribool parse (http::message &http_msg, boost::system::error_code &ec)
boost::tribool parse_missing_data (http::message &http_msg, std::size_t len, boost::system::error_code &ec)
void finish (http::message &http_msg) const
void set_read_buffer (const char *ptr, size_t len)
void load_read_pos (const char *&read_ptr, const char *&read_end_ptr) const
bool check_premature_eof (http::message &http_msg)
void parse_headers_only (bool b=true)
void skip_header_parsing (http::message &http_msg)
void reset (void)
 resets the parser to its initial state
bool eof (void) const
 returns true if there are no more bytes available in the read buffer
std::size_t bytes_available (void) const
 returns the number of bytes available in the read buffer
std::size_t gcount (void) const
 returns the number of bytes read during the last parse operation
std::size_t get_total_bytes_read (void) const
 returns the total number of bytes read while parsing the HTTP message
std::size_t get_content_bytes_read (void) const
 returns the total number of bytes read while parsing the payload content
std::size_t get_max_content_length (void) const
 returns the maximum length for HTTP payload content
const std::string & get_raw_headers (void) const
 returns the raw HTTP headers saved by the parser
bool get_save_raw_headers (void) const
 returns true if the parser is saving raw HTTP header contents
bool get_parse_headers_only (void)
 returns true if parsing headers only
bool is_parsing_request (void) const
 returns true if the parser is being used to parse an HTTP request
bool is_parsing_response (void) const
 returns true if the parser is being used to parse an HTTP response
void set_payload_handler (payload_handler_t &h)
 defines a callback function to be used for consuming payload content
void set_max_content_length (std::size_t n)
 sets the maximum length for HTTP payload content
void reset_max_content_length (void)
 resets the maximum length for HTTP payload content to the default value
void set_save_raw_headers (bool b)
 sets parameter for saving raw HTTP header content
void set_logger (logger log_ptr)
 sets the logger to be used
logger get_logger (void)
 returns the logger currently in use
boost::tribool finish_header_parsing (http::message &http_msg, boost::system::error_code &ec)

Static Public Member Functions

static bool parse_uri (const std::string &uri, std::string &proto, std::string &host, boost::uint16_t &port, std::string &path, std::string &query)
static bool parse_url_encoded (ihash_multimap &dict, const char *ptr, const std::size_t len)
static bool parse_multipart_form_data (ihash_multimap &dict, const std::string &content_type, const char *ptr, const std::size_t len)
static bool parse_cookie_header (ihash_multimap &dict, const char *ptr, const std::size_t len, bool set_cookie_header)
static bool parse_cookie_header (ihash_multimap &dict, const std::string &cookie_header, bool set_cookie_header)
static bool parse_url_encoded (ihash_multimap &dict, const std::string &query)
static bool parse_multipart_form_data (ihash_multimap &dict, const std::string &content_type, const std::string &form_data)
static bool parse_forwarded_for (const std::string &header, std::string &public_ip)
static error_category_tget_error_category (void)
 returns an instance of parser::error_category_t

Static Public Attributes

static const std::size_t DEFAULT_CONTENT_MAX = 1024 * 1024
 maximum length for HTTP payload content

Protected Member Functions

virtual void finished_parsing_headers (const boost::system::error_code &ec)
 Called after we have finished parsing the HTTP message headers.
boost::tribool parse_headers (http::message &http_msg, boost::system::error_code &ec)
void update_message_with_header_data (http::message &http_msg) const
boost::tribool parse_chunks (http::message::chunk_cache_t &chunk_buffers, boost::system::error_code &ec)
boost::tribool consume_content (http::message &http_msg, boost::system::error_code &ec)
std::size_t consume_content_as_next_chunk (http::message::chunk_cache_t &chunk_buffers)

Static Protected Member Functions

static void compute_msg_status (http::message &http_msg, bool msg_parsed_ok)
static void set_error (boost::system::error_code &ec, error_value_t ev)
static void create_error_category (void)
 creates the unique parser error_category_t
static bool is_char (int c)
static bool is_control (int c)
static bool is_special (int c)
static bool is_digit (int c)
static bool is_hex_digit (int c)
static bool is_cookie_attribute (const std::string &name, bool set_cookie_header)

Protected Attributes

logger m_logger
 primary logging interface used by this class
const bool m_is_request
 true if the message is an HTTP request; false if it is an HTTP response
const char * m_read_ptr
 points to the next character to be consumed in the read_buffer
const char * m_read_end_ptr
 points to the end of the read_buffer (last byte + 1)

Static Protected Attributes

static const boost::uint32_t STATUS_MESSAGE_MAX = 1024
 maximum length for response status message
static const boost::uint32_t METHOD_MAX = 1024
 maximum length for the request method
static const boost::uint32_t RESOURCE_MAX = 256 * 1024
 maximum length for the resource requested
static const boost::uint32_t QUERY_STRING_MAX = 1024 * 1024
 maximum length for the query string
static const boost::uint32_t HEADER_NAME_MAX = 1024
 maximum length for an HTTP header name
static const boost::uint32_t HEADER_VALUE_MAX = 1024 * 1024
 maximum length for an HTTP header value
static const boost::uint32_t QUERY_NAME_MAX = 1024
 maximum length for the name of a query string variable
static const boost::uint32_t QUERY_VALUE_MAX = 1024 * 1024
 maximum length for the value of a query string variable
static const boost::uint32_t COOKIE_NAME_MAX = 1024
 maximum length for the name of a cookie name
static const boost::uint32_t COOKIE_VALUE_MAX = 1024 * 1024
 maximum length for the value of a cookie; also used for path and domain

Detailed Description

parser: parses HTTP messages

Definition at line 39 of file parser.hpp.


Constructor & Destructor Documentation

pion::http::parser::parser ( const bool  is_request,
std::size_t  max_content_length = DEFAULT_CONTENT_MAX 
) [inline]

creates new parser objects

Parameters:
is_request if true, the message is parsed as an HTTP request; if false, the message is parsed as an HTTP response
max_content_length maximum length for HTTP payload content

Definition at line 129 of file parser.hpp.


Member Function Documentation

bool pion::http::parser::check_premature_eof ( http::message http_msg  )  [inline]

checks to see if a premature EOF was encountered while parsing. This should be called if there is no more data to parse, and if the last call to the parse() function returned boost::indeterminate

Parameters:
http_msg the HTTP message object being parsed
Returns:
true if premature EOF, false if message is OK & finished parsing

Definition at line 208 of file parser.hpp.

References pion::http::message::concatenate_chunks().

Referenced by pion::http::message::read(), and pion::http::message::receive().

void pion::http::parser::compute_msg_status ( http::message http_msg,
bool  msg_parsed_ok 
) [static, protected]

compute and sets a HTTP Message data integrity status

Parameters:
http_msg target HTTP message
msg_parsed_ok message parsing result

Definition at line 1540 of file http_parser.cpp.

References pion::http::message::has_data_after_missing_packets(), and pion::http::message::has_missing_packets().

Referenced by finish(), parse(), and parse_missing_data().

boost::tribool pion::http::parser::consume_content ( http::message http_msg,
boost::system::error_code &  ec 
) [protected]

consumes payload content in the parser's read buffer

Parameters:
http_msg the HTTP message object to consume content for
ec error_code contains additional information for parsing errors
Returns:
boost::tribool result of parsing: false = message has an error, true = finished parsing message, indeterminate = message is not yet finished

Definition at line 1410 of file http_parser.cpp.

References bytes_available(), pion::http::message::get_content(), and m_read_ptr.

Referenced by parse().

std::size_t pion::http::parser::consume_content_as_next_chunk ( http::message::chunk_cache_t chunk_buffers  )  [protected]

consume the bytes available in the read buffer, converting them into the next chunk for the HTTP message

Parameters:
chunk_buffers buffers to be populated from parsing chunked content
Returns:
std::size_t number of content bytes consumed, if any

Definition at line 1455 of file http_parser.cpp.

References bytes_available(), m_read_end_ptr, and m_read_ptr.

Referenced by parse().

boost::tribool pion::http::parser::finish_header_parsing ( http::message http_msg,
boost::system::error_code &  ec 
)

should be called after parsing HTTP headers, to prepare for payload content parsing available in the read buffer

Parameters:
http_msg the HTTP message object to populate from parsing
ec error_code contains additional information for parsing errors
Returns:
boost::tribool result of parsing: false = message has an error, true = finished parsing HTTP message (no content), indeterminate = payload content is available to be parsed

Definition at line 733 of file http_parser.cpp.

References pion::http::message::create_content_buffer(), finished_parsing_headers(), pion::http::message::get_chunk_cache(), pion::http::message::get_content_length(), pion::http::message::has_header(), pion::http::message::is_chunked(), pion::http::message::is_content_length_implied(), m_is_request, m_logger, pion::http::message::set_content_length(), set_error(), pion::http::message::update_content_length_using_header(), update_message_with_header_data(), and pion::http::message::update_transfer_encoding_using_header().

Referenced by parse().

void pion::http::parser::load_read_pos ( const char *&  read_ptr,
const char *&  read_end_ptr 
) const [inline]

loads a read position bookmark

Parameters:
read_ptr points to the next character to be consumed in the read_buffer
read_end_ptr points to the end of the read_buffer (last byte + 1)

Definition at line 195 of file parser.hpp.

Referenced by pion::http::message::receive().

boost::tribool pion::http::parser::parse ( http::message http_msg,
boost::system::error_code &  ec 
)

parses an HTTP message including all payload content it might contain

Parameters:
http_msg the HTTP message object to populate from parsing
ec error_code contains additional information for parsing errors
Returns:
boost::tribool result of parsing: false = message has an error, true = finished parsing HTTP message, indeterminate = not yet finished parsing HTTP message

Definition at line 46 of file http_parser.cpp.

References compute_msg_status(), pion::http::message::concatenate_chunks(), consume_content(), consume_content_as_next_chunk(), eof(), finish(), finish_header_parsing(), pion::http::message::get_chunk_cache(), pion::http::message::has_missing_packets(), parse_chunks(), and parse_headers().

Referenced by pion::http::reader::consume_bytes(), pion::http::message::read(), and pion::http::message::receive().

boost::tribool pion::http::parser::parse_chunks ( http::message::chunk_cache_t chunk_buffers,
boost::system::error_code &  ec 
) [protected]

parses a chunked HTTP message-body using bytes available in the read buffer

Parameters:
chunk_buffers buffers to be populated from parsing chunked content
ec error_code contains additional information for parsing errors
Returns:
boost::tribool result of parsing: false = message has an error, true = finished parsing message, indeterminate = message is not yet finished

Definition at line 1244 of file http_parser.cpp.

References bytes_available(), m_logger, m_read_end_ptr, m_read_ptr, and set_error().

Referenced by parse().

static bool pion::http::parser::parse_cookie_header ( ihash_multimap &  dict,
const std::string &  cookie_header,
bool  set_cookie_header 
) [inline, static]

parse key-value pairs out of a "Cookie" request header (i.e. this=that; a=value)

Parameters:
dict dictionary for key-values pairs
cookie_header header string to be parsed
set_cookie_header set true if parsing Set-Cookie response header
Returns:
bool true if successful

Definition at line 369 of file parser.hpp.

static bool pion::http::parser::parse_cookie_header ( ihash_multimap &  dict,
const char *  ptr,
const std::size_t  len,
bool  set_cookie_header 
) [static]

parse key-value pairs out of a "Cookie" request header (i.e. this=that; a=value)

Parameters:
dict dictionary for key-values pairs
ptr points to the start of the header string to be parsed
len length of the encoded string, in bytes
set_cookie_header set true if parsing Set-Cookie response header
Returns:
bool true if successful

Referenced by update_message_with_header_data().

bool pion::http::parser::parse_forwarded_for ( const std::string &  header,
std::string &  public_ip 
) [static]

parses an X-Forwarded-For HTTP header, and extracts from it an IP address that best matches the client's public IP address (if any are found)

Parameters:
header the X-Forwarded-For HTTP header to parse
public_ip the extract IP address, if found
Returns:
bool true if a public IP address was found and extracted

static regex used to check for private/local networks: 10.* 127.* 192.168.* 172.16-31.*

Definition at line 1560 of file http_parser.cpp.

boost::tribool pion::http::parser::parse_headers ( http::message http_msg,
boost::system::error_code &  ec 
) [protected]

parses an HTTP message up to the end of the headers using bytes available in the read buffer

Parameters:
http_msg the HTTP message object to populate from parsing
ec error_code contains additional information for parsing errors
Returns:
boost::tribool result of parsing: false = message has an error, true = finished parsing HTTP headers, indeterminate = not yet finished parsing HTTP headers

Definition at line 239 of file http_parser.cpp.

References pion::http::message::add_header(), pion::http::message::get_version_major(), pion::http::message::get_version_minor(), HEADER_NAME_MAX, HEADER_VALUE_MAX, m_is_request, m_read_end_ptr, m_read_ptr, METHOD_MAX, QUERY_STRING_MAX, RESOURCE_MAX, set_error(), pion::http::message::set_version_major(), pion::http::message::set_version_minor(), and STATUS_MESSAGE_MAX.

Referenced by parse().

void pion::http::parser::parse_headers_only ( bool  b = true  )  [inline]

controls headers-only parsing (default is disabled; content parsed also)

Parameters:
b if true, then the parse() function returns true after headers

Definition at line 222 of file parser.hpp.

Referenced by pion::http::message::read(), and pion::http::message::receive().

boost::tribool pion::http::parser::parse_missing_data ( http::message http_msg,
std::size_t  len,
boost::system::error_code &  ec 
)

attempts to continue parsing despite having missed data (length is known but content is not)

Parameters:
http_msg the HTTP message object to populate from parsing
len the length in bytes of the missing data
ec error_code contains additional information for parsing errors
Returns:
boost::tribool result of parsing: false = message has an error, true = finished parsing HTTP message, indeterminate = not yet finished parsing HTTP message

Definition at line 125 of file http_parser.cpp.

References compute_msg_status(), finish(), pion::http::message::get_chunk_cache(), pion::http::message::get_content(), set_error(), and pion::http::message::set_missing_packets().

static bool pion::http::parser::parse_multipart_form_data ( ihash_multimap &  dict,
const std::string &  content_type,
const std::string &  form_data 
) [inline, static]

parse key-value pairs out of a multipart/form-data payload content (http://www.ietf.org/rfc/rfc2388.txt)

Parameters:
dict dictionary for key-values pairs
content_type value of the content-type HTTP header
form_data the encoded form data
Returns:
bool true if successful

Definition at line 400 of file parser.hpp.

static bool pion::http::parser::parse_multipart_form_data ( ihash_multimap &  dict,
const std::string &  content_type,
const char *  ptr,
const std::size_t  len 
) [static]

parse key-value pairs out of a multipart/form-data payload content (http://www.ietf.org/rfc/rfc2388.txt)

Parameters:
dict dictionary for key-values pairs
content_type value of the content-type HTTP header
ptr points to the start of the encoded data
len length of the encoded data, in bytes
Returns:
bool true if successful

Referenced by finish().

bool pion::http::parser::parse_uri ( const std::string &  uri,
std::string &  proto,
std::string &  host,
boost::uint16_t &  port,
std::string &  path,
std::string &  query 
) [static]

parses a URI string

Parameters:
uri the string to parse
proto will be set to the protocol (i.e. "http")
host will be set to the hostname (i.e. "www.cloudmeter.com")
port host port number to use for connection (i.e. 80)
path uri stem or file path
query uri query string
Returns:
true if the URI was successfully parsed, false if there was an error

Definition at line 820 of file http_parser.cpp.

static bool pion::http::parser::parse_url_encoded ( ihash_multimap &  dict,
const std::string &  query 
) [inline, static]

parse key-value pairs out of a url-encoded string (i.e. this=that&a=value)

Parameters:
dict dictionary for key-values pairs
query the encoded query string to be parsed
Returns:
bool true if successful

Definition at line 384 of file parser.hpp.

static bool pion::http::parser::parse_url_encoded ( ihash_multimap &  dict,
const char *  ptr,
const std::size_t  len 
) [static]

parse key-value pairs out of a url-encoded string (i.e. this=that&a=value)

Parameters:
dict dictionary for key-values pairs
ptr points to the start of the encoded string
len length of the encoded string, in bytes
Returns:
bool true if successful

Referenced by finish(), and update_message_with_header_data().

static void pion::http::parser::set_error ( boost::system::error_code &  ec,
error_value_t  ev 
) [inline, static, protected]

sets an error code

Parameters:
ec error code variable to define
ev error value to raise

Definition at line 516 of file parser.hpp.

Referenced by finish_header_parsing(), parse_chunks(), parse_headers(), and parse_missing_data().

void pion::http::parser::set_read_buffer ( const char *  ptr,
size_t  len 
) [inline]

resets the location and size of the read buffer

Parameters:
ptr pointer to the first bytes available to be read
len number of bytes available to be read

Definition at line 184 of file parser.hpp.

Referenced by pion::http::reader::consume_bytes(), pion::http::message::read(), and pion::http::message::receive().

void pion::http::parser::skip_header_parsing ( http::message http_msg  )  [inline]

skip parsing all headers and parse payload content only

Parameters:
http_msg the HTTP message object being parsed

Definition at line 229 of file parser.hpp.

void pion::http::parser::update_message_with_header_data ( http::message http_msg  )  const [protected]

The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/http__basic__auth_8cpp_source.html0000644000372000001440000004172512215647142024322 0ustar robertousers pion: src/http_basic_auth.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x68.html0000644000372000001440000001647112215647143022162 0ustar robertousers pion: Class Members - Functions
 

- h -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x6f.html0000644000372000001440000001377512215647143021231 0ustar robertousers pion: Class Members
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1tcp_1_1connection.html0000644000372000001440000024544512215647143024241 0ustar robertousers pion: pion::tcp::connection Class Reference

pion::tcp::connection Class Reference

#include <connection.hpp>

List of all members.

Public Types

enum  lifecycle_type { LIFECYCLE_CLOSE, LIFECYCLE_KEEPALIVE, LIFECYCLE_PIPELINED }
 

data type for the connection's lifecycle state


enum  { READ_BUFFER_SIZE = 8192 }
 

size of the read buffer


typedef boost::function1< void,
boost::shared_ptr< connection > > 
connection_handler
 data type for a function that handles TCP connection objects
typedef boost::array< char,
READ_BUFFER_SIZE > 
read_buffer_type
 data type for an I/O read buffer
typedef
boost::asio::ip::tcp::socket 
socket_type
 data type for a socket connection
typedef
boost::asio::ssl::stream
< boost::asio::ip::tcp::socket > 
ssl_socket_type
 data type for an SSL socket connection
typedef boost::asio::ssl::context ssl_context_type
 data type for SSL configuration context

Public Member Functions

 connection (boost::asio::io_service &io_service, const bool ssl_flag=false)
 connection (boost::asio::io_service &io_service, ssl_context_type &ssl_context)
bool is_open (void) const
 returns true if the connection is currently open
void close (void)
 closes the tcp socket and cancels any pending asynchronous operations
void cancel (void)
virtual ~connection ()
 virtual destructor
template<typename AcceptHandler >
void async_accept (boost::asio::ip::tcp::acceptor &tcp_acceptor, AcceptHandler handler)
boost::system::error_code accept (boost::asio::ip::tcp::acceptor &tcp_acceptor)
template<typename ConnectHandler >
void async_connect (boost::asio::ip::tcp::endpoint &tcp_endpoint, ConnectHandler handler)
template<typename ConnectHandler >
void async_connect (const boost::asio::ip::address &remote_addr, const unsigned int remote_port, ConnectHandler handler)
boost::system::error_code connect (boost::asio::ip::tcp::endpoint &tcp_endpoint)
boost::system::error_code connect (const boost::asio::ip::address &remote_addr, const unsigned int remote_port)
boost::system::error_code connect (const std::string &remote_server, const unsigned int remote_port)
template<typename SSLHandshakeHandler >
void async_handshake_client (SSLHandshakeHandler handler)
template<typename SSLHandshakeHandler >
void async_handshake_server (SSLHandshakeHandler handler)
boost::system::error_code handshake_client (void)
boost::system::error_code handshake_server (void)
template<typename ReadHandler >
void async_read_some (ReadHandler handler)
template<typename ReadBufferType , typename ReadHandler >
void async_read_some (ReadBufferType read_buffer, ReadHandler handler)
std::size_t read_some (boost::system::error_code &ec)
template<typename ReadBufferType >
std::size_t read_some (ReadBufferType read_buffer, boost::system::error_code &ec)
template<typename CompletionCondition , typename ReadHandler >
void async_read (CompletionCondition completion_condition, ReadHandler handler)
template<typename MutableBufferSequence , typename CompletionCondition , typename ReadHandler >
void async_read (const MutableBufferSequence &buffers, CompletionCondition completion_condition, ReadHandler handler)
template<typename CompletionCondition >
std::size_t read (CompletionCondition completion_condition, boost::system::error_code &ec)
template<typename MutableBufferSequence , typename CompletionCondition >
std::size_t read (const MutableBufferSequence &buffers, CompletionCondition completion_condition, boost::system::error_code &ec)
template<typename ConstBufferSequence , typename write_handler_t >
void async_write (const ConstBufferSequence &buffers, write_handler_t handler)
template<typename ConstBufferSequence >
std::size_t write (const ConstBufferSequence &buffers, boost::system::error_code &ec)
void finish (void)
bool get_ssl_flag (void) const
 returns true if the connection is encrypted using SSL
void set_lifecycle (lifecycle_type t)
 sets the lifecycle type for the connection
lifecycle_type get_lifecycle (void) const
 returns the lifecycle type for the connection
bool get_keep_alive (void) const
 returns true if the connection should be kept alive
bool get_pipelined (void) const
 returns true if the HTTP requests are pipelined
read_buffer_typeget_read_buffer (void)
 returns the buffer used for reading data from the TCP connection
void save_read_pos (const char *read_ptr, const char *read_end_ptr)
void load_read_pos (const char *&read_ptr, const char *&read_end_ptr) const
boost::asio::ip::tcp::endpoint get_remote_endpoint (void) const
 returns an ASIO endpoint for the client connection
boost::asio::ip::address get_remote_ip (void) const
 returns the client's IP address
unsigned short get_remote_port (void) const
 returns the client's port number
boost::asio::io_service & get_io_service (void)
 returns reference to the io_service used for async operations
socket_typeget_socket (void)
 returns non-const reference to underlying TCP socket object
ssl_socket_typeget_ssl_socket (void)
 returns non-const reference to underlying SSL socket object
const socket_typeget_socket (void) const
 returns const reference to underlying TCP socket object
const ssl_socket_typeget_ssl_socket (void) const
 returns const reference to underlying SSL socket object

Static Public Member Functions

static boost::shared_ptr
< connection
create (boost::asio::io_service &io_service, ssl_context_type &ssl_context, const bool ssl_flag, connection_handler finished_handler)

Protected Member Functions

 connection (boost::asio::io_service &io_service, ssl_context_type &ssl_context, const bool ssl_flag, connection_handler finished_handler)

Detailed Description

connection: represents a single tcp connection

Definition at line 40 of file connection.hpp.


Constructor & Destructor Documentation

pion::tcp::connection::connection ( boost::asio::io_service &  io_service,
const bool  ssl_flag = false 
) [inline, explicit]

creates a new connection object

Parameters:
io_service asio service associated with the connection
ssl_flag if true then the connection will be encrypted using SSL

Definition at line 109 of file connection.hpp.

References save_read_pos().

Referenced by create().

pion::tcp::connection::connection ( boost::asio::io_service &  io_service,
ssl_context_type ssl_context 
) [inline]

creates a new connection object for SSL

Parameters:
io_service asio service associated with the connection
ssl_context asio ssl context associated with the connection

Definition at line 131 of file connection.hpp.

References save_read_pos().

pion::tcp::connection::connection ( boost::asio::io_service &  io_service,
ssl_context_type ssl_context,
const bool  ssl_flag,
connection_handler  finished_handler 
) [inline, protected]

protected constructor restricts creation of objects (use create())

Parameters:
io_service asio service associated with the connection
ssl_context asio ssl context associated with the connection
ssl_flag if true then the connection will be encrypted using SSL
finished_handler function called when a server has finished handling the connection

Definition at line 689 of file connection.hpp.

References save_read_pos().


Member Function Documentation

boost::system::error_code pion::tcp::connection::accept ( boost::asio::ip::tcp::acceptor &  tcp_acceptor  )  [inline]

accepts a new tcp connection (blocks until established)

Parameters:
tcp_acceptor object used to accept new connections
Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::basic_socket_acceptor::accept()

Definition at line 209 of file connection.hpp.

Referenced by pion::tcp::stream::accept().

template<typename AcceptHandler >
void pion::tcp::connection::async_accept ( boost::asio::ip::tcp::acceptor &  tcp_acceptor,
AcceptHandler  handler 
) [inline]

asynchronously accepts a new tcp connection

Parameters:
tcp_acceptor object used to accept new connections
handler called after a new connection has been accepted
See also:
boost::asio::basic_socket_acceptor::async_accept()

Definition at line 195 of file connection.hpp.

template<typename ConnectHandler >
void pion::tcp::connection::async_connect ( const boost::asio::ip::address &  remote_addr,
const unsigned int  remote_port,
ConnectHandler  handler 
) [inline]

asynchronously connects to a (IPv4) remote endpoint

Parameters:
remote_addr remote IP address (v4) to connect to
remote_port remote port number to connect to
handler called after a new connection has been established
See also:
boost::asio::basic_socket_acceptor::async_connect()

Definition at line 241 of file connection.hpp.

References async_connect().

template<typename ConnectHandler >
void pion::tcp::connection::async_connect ( boost::asio::ip::tcp::endpoint &  tcp_endpoint,
ConnectHandler  handler 
) [inline]

asynchronously connects to a remote endpoint

Parameters:
tcp_endpoint remote endpoint to connect to
handler called after a new connection has been established
See also:
boost::asio::basic_socket_acceptor::async_connect()

Definition at line 225 of file connection.hpp.

Referenced by async_connect().

template<typename SSLHandshakeHandler >
void pion::tcp::connection::async_handshake_client ( SSLHandshakeHandler  handler  )  [inline]

asynchronously performs client-side SSL handshake for a new connection

Parameters:
handler called after the ssl handshake has completed
See also:
boost::asio::ssl::stream::async_handshake()

Definition at line 324 of file connection.hpp.

template<typename SSLHandshakeHandler >
void pion::tcp::connection::async_handshake_server ( SSLHandshakeHandler  handler  )  [inline]

asynchronously performs server-side SSL handshake for a new connection

Parameters:
handler called after the ssl handshake has completed
See also:
boost::asio::ssl::stream::async_handshake()

Definition at line 339 of file connection.hpp.

template<typename MutableBufferSequence , typename CompletionCondition , typename ReadHandler >
void pion::tcp::connection::async_read ( const MutableBufferSequence &  buffers,
CompletionCondition  completion_condition,
ReadHandler  handler 
) [inline]

asynchronously reads data from the connection until completion_condition is met

Parameters:
buffers one or more buffers into which the data will be read
completion_condition determines if the read operation is complete
handler called after the read operation has completed
See also:
boost::asio::async_read()

Definition at line 488 of file connection.hpp.

References async_read(), and get_ssl_flag().

template<typename CompletionCondition , typename ReadHandler >
void pion::tcp::connection::async_read ( CompletionCondition  completion_condition,
ReadHandler  handler 
) [inline]

asynchronously reads data into the connection's read buffer until completion_condition is met

Parameters:
completion_condition determines if the read operation is complete
handler called after the read operation has completed
See also:
boost::asio::async_read()

Definition at line 464 of file connection.hpp.

References get_ssl_flag().

Referenced by async_read(), and read().

template<typename ReadBufferType , typename ReadHandler >
void pion::tcp::connection::async_read_some ( ReadBufferType  read_buffer,
ReadHandler  handler 
) [inline]

asynchronously reads some data into the connection's read buffer

Parameters:
read_buffer the buffer to read data into
handler called after the read operation has completed
See also:
boost::asio::basic_stream_socket::async_read_some()

Definition at line 406 of file connection.hpp.

References get_ssl_flag().

template<typename ReadHandler >
void pion::tcp::connection::async_read_some ( ReadHandler  handler  )  [inline]

asynchronously reads some data into the connection's read buffer

Parameters:
handler called after the read operation has completed
See also:
boost::asio::basic_stream_socket::async_read_some()

Definition at line 386 of file connection.hpp.

References get_ssl_flag().

template<typename ConstBufferSequence , typename write_handler_t >
void pion::tcp::connection::async_write ( const ConstBufferSequence &  buffers,
write_handler_t  handler 
) [inline]

asynchronously writes data to the connection

Parameters:
buffers one or more buffers containing the data to be written
handler called after the data has been written
See also:
boost::asio::async_write()

Definition at line 561 of file connection.hpp.

References get_ssl_flag().

void pion::tcp::connection::cancel ( void   )  [inline]

cancels any asynchronous operations pending on the socket. there is no good way to do this on windows until vista or later (0x0600) see http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/reference/basic_stream_socket/cancel/overload2.html note that the asio docs are misleading because close() is not thread-safe, and the suggested define statements cause WAY too much trouble and heartache

Definition at line 176 of file connection.hpp.

boost::system::error_code pion::tcp::connection::connect ( const std::string &  remote_server,
const unsigned int  remote_port 
) [inline]

connects to a remote endpoint with hostname lookup

Parameters:
remote_server hostname of the remote server to connect to
remote_port remote port number to connect to
Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::basic_socket_acceptor::connect()

Definition at line 289 of file connection.hpp.

References close(), and connect().

boost::system::error_code pion::tcp::connection::connect ( const boost::asio::ip::address &  remote_addr,
const unsigned int  remote_port 
) [inline]

connects to a (IPv4) remote endpoint (blocks until established)

Parameters:
remote_addr remote IP address (v4) to connect to
remote_port remote port number to connect to
Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::basic_socket_acceptor::connect()

Definition at line 273 of file connection.hpp.

References connect().

boost::system::error_code pion::tcp::connection::connect ( boost::asio::ip::tcp::endpoint &  tcp_endpoint  )  [inline]

connects to a remote endpoint (blocks until established)

Parameters:
tcp_endpoint remote endpoint to connect to
Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::basic_socket_acceptor::connect()

Definition at line 257 of file connection.hpp.

Referenced by pion::tcp::stream::connect(), and connect().

static boost::shared_ptr<connection> pion::tcp::connection::create ( boost::asio::io_service &  io_service,
ssl_context_type ssl_context,
const bool  ssl_flag,
connection_handler  finished_handler 
) [inline, static]

creates new shared connection objects

Parameters:
io_service asio service associated with the connection
ssl_context asio ssl context associated with the connection
ssl_flag if true then the connection will be encrypted using SSL
finished_handler function called when a server has finished handling the connection

Definition at line 94 of file connection.hpp.

References connection().

boost::system::error_code pion::tcp::connection::handshake_client ( void   )  [inline]

performs client-side SSL handshake for a new connection (blocks until finished)

Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::ssl::stream::handshake()

Definition at line 353 of file connection.hpp.

Referenced by pion::tcp::stream::connect().

boost::system::error_code pion::tcp::connection::handshake_server ( void   )  [inline]

performs server-side SSL handshake for a new connection (blocks until finished)

Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::ssl::stream::handshake()

Definition at line 369 of file connection.hpp.

Referenced by pion::tcp::stream::accept().

void pion::tcp::connection::load_read_pos ( const char *&  read_ptr,
const char *&  read_end_ptr 
) const [inline]

loads a read position bookmark

Parameters:
read_ptr points to the next character to be consumed in the read_buffer
read_end_ptr points to the end of the read_buffer (last byte + 1)

Definition at line 633 of file connection.hpp.

Referenced by pion::http::message::receive().

template<typename MutableBufferSequence , typename CompletionCondition >
std::size_t pion::tcp::connection::read ( const MutableBufferSequence &  buffers,
CompletionCondition  completion_condition,
boost::system::error_code &  ec 
) [inline]

reads data from the connection until completion_condition is met (blocks until finished)

Parameters:
buffers one or more buffers into which the data will be read
completion_condition determines if the read operation is complete
ec contains error code if the read fails
Returns:
std::size_t number of bytes read
See also:
boost::asio::read()

Definition at line 538 of file connection.hpp.

References get_ssl_flag(), and read().

template<typename CompletionCondition >
std::size_t pion::tcp::connection::read ( CompletionCondition  completion_condition,
boost::system::error_code &  ec 
) [inline]

reads data into the connection's read buffer until completion_condition is met (blocks until finished)

Parameters:
completion_condition determines if the read operation is complete
ec contains error code if the read fails
Returns:
std::size_t number of bytes read
See also:
boost::asio::read()

Definition at line 513 of file connection.hpp.

References async_read(), and get_ssl_flag().

Referenced by read().

template<typename ReadBufferType >
std::size_t pion::tcp::connection::read_some ( ReadBufferType  read_buffer,
boost::system::error_code &  ec 
) [inline]

reads some data into the connection's read buffer (blocks until finished)

Parameters:
read_buffer the buffer to read data into
ec contains error code if the read fails
Returns:
std::size_t number of bytes read
See also:
boost::asio::basic_stream_socket::read_some()

Definition at line 443 of file connection.hpp.

References get_ssl_flag().

std::size_t pion::tcp::connection::read_some ( boost::system::error_code &  ec  )  [inline]

reads some data into the connection's read buffer (blocks until finished)

Parameters:
ec contains error code if the read fails
Returns:
std::size_t number of bytes read
See also:
boost::asio::basic_stream_socket::read_some()

Definition at line 424 of file connection.hpp.

References get_ssl_flag().

Referenced by pion::http::message::receive().

void pion::tcp::connection::save_read_pos ( const char *  read_ptr,
const char *  read_end_ptr 
) [inline]

saves a read position bookmark

Parameters:
read_ptr points to the next character to be consumed in the read_buffer
read_end_ptr points to the end of the read_buffer (last byte + 1)

Definition at line 622 of file connection.hpp.

Referenced by connection(), and pion::http::message::receive().

template<typename ConstBufferSequence >
std::size_t pion::tcp::connection::write ( const ConstBufferSequence &  buffers,
boost::system::error_code &  ec 
) [inline]

writes data to the connection (blocks until finished)

Parameters:
buffers one or more buffers containing the data to be written
ec contains error code if the write fails
Returns:
std::size_t number of bytes written
See also:
boost::asio::write()

Definition at line 580 of file connection.hpp.

References get_ssl_flag().

Referenced by pion::http::message::send().


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1cookie__auth-members.html0000644000372000001440000002322412215647143026341 0ustar robertousers pion: Member List

pion::http::cookie_auth Member List

This is the complete list of members for pion::http::cookie_auth, including all inherited members.
add_permit(const std::string &resource)pion::http::auth
add_restrict(const std::string &resource)pion::http::auth
add_user(std::string const &username, std::string const &password)pion::http::auth [inline, virtual]
auth(user_manager_ptr userManager)pion::http::auth [inline]
cookie_auth(user_manager_ptr userManager, const std::string &login="/login", const std::string &logout="/logout", const std::string &redirect="")pion::http::cookie_auth
expire_cache(const boost::posix_time::ptime &time_now)pion::http::cookie_auth [protected]
find_resource(const resource_set_type &resource_set, const std::string &resource) const pion::http::auth [protected]
get_user(std::string const &username)pion::http::auth [inline, virtual]
handle_ok(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &new_cookie="", bool delete_cookie=false)pion::http::cookie_auth [protected]
handle_redirection(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &redirection_url, const std::string &new_cookie="", bool delete_cookie=false)pion::http::cookie_auth [protected]
handle_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::cookie_auth [virtual]
handle_unauthorized(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::cookie_auth [protected]
m_loggerpion::http::auth [mutable, protected]
m_resource_mutexpion::http::auth [mutable, protected]
m_restrict_listpion::http::auth [protected]
m_user_managerpion::http::auth [protected]
m_white_listpion::http::auth [protected]
need_authentication(http::request_ptr const &http_request_ptr) const pion::http::auth [protected]
process_login(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::cookie_auth [protected]
remove_user(std::string const &username)pion::http::auth [inline, virtual]
resource_set_type typedefpion::http::auth [protected]
set_logger(logger log_ptr)pion::http::auth [inline, protected]
set_option(const std::string &name, const std::string &value)pion::http::cookie_auth [virtual]
update_user(std::string const &username, std::string const &password)pion::http::auth [inline, virtual]
user_cache_type typedefpion::http::auth [protected]
~auth()pion::http::auth [inline, virtual]
~cookie_auth()pion::http::cookie_auth [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1spdy_1_1decompressor.html0000644000372000001440000002423112215647143024764 0ustar robertousers pion: pion::spdy::decompressor Class Reference

pion::spdy::decompressor Class Reference

#include <decompressor.hpp>

List of all members.

Public Types

enum  data_size_t { MAX_UNCOMPRESSED_DATA_BUF_SIZE = 16384 }
 

data size constants

More...

Public Member Functions

 decompressor ()
 constructs a new decompressor object (default constructor)
 ~decompressor ()
 destructor
char * decompress (const char *compressed_data_ptr, boost::uint32_t stream_id, const spdy_control_frame_info &frame, boost::uint32_t header_block_length)

Protected Member Functions

bool spdy_decompress_header (const char *compressed_data_ptr, z_streamp decomp, boost::uint32_t length, boost::uint32_t &uncomp_length)

Detailed Description

SPDYDecompressor : Decompresses SPDY frames

Definition at line 29 of file decompressor.hpp.


Member Enumeration Documentation

data size constants

Enumerator:
MAX_UNCOMPRESSED_DATA_BUF_SIZE 

maximum size of an uncompressed spdy header

Definition at line 34 of file decompressor.hpp.


Member Function Documentation

char * pion::spdy::decompressor::decompress ( const char *  compressed_data_ptr,
boost::uint32_t  stream_id,
const spdy_control_frame_info frame,
boost::uint32_t  header_block_length 
)

decompresses the http content

Returns:
the uncompressed string, or null on failure

Get our decompressor.

Definition at line 89 of file spdy_decompressor.cpp.

References spdy_decompress_header().

bool pion::spdy::decompressor::spdy_decompress_header ( const char *  compressed_data_ptr,
z_streamp  decomp,
boost::uint32_t  length,
boost::uint32_t &  uncomp_length 
) [protected]

decompresses the spdy header

Returns:
true if successful

Definition at line 131 of file spdy_decompressor.cpp.

References MAX_UNCOMPRESSED_DATA_BUF_SIZE.

Referenced by decompress().


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/plugin__service_8hpp_source.html0000644000372000001440000003031112215647142024032 0ustar robertousers pion: include/pion/http/plugin_service.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1process-members.html0000644000372000001440000000616612215647143024034 0ustar robertousers pion: Member List

pion::process Member List

This is the complete list of members for pion::process, including all inherited members.
daemonize(void)pion::process [static]
get_config(void)pion::process [inline, protected, static]
initialize(void)pion::process [static]
process(void)pion::process [inline]
shutdown(void)pion::process [static]
wait_for_shutdown(void)pion::process [static]
~process() (defined in pion::process)pion::process [inline]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1ihash-members.html0000644000372000001440000000331412215647143023661 0ustar robertousers pion: Member List

pion::ihash Member List

This is the complete list of members for pion::ihash, including all inherited members.
operator()(std::string const &x) const (defined in pion::ihash)pion::ihash [inline]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x74.html0000644000372000001440000001361412215647143022153 0ustar robertousers pion: Class Members - Functions
 

- t -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1http_1_1message_1_1receive__error__t-members.html0000644000372000001440000000514312215647143031610 0ustar robertousers pion: Member List

pion::http::message::receive_error_t Member List

This is the complete list of members for pion::http::message::receive_error_t, including all inherited members.
message(int ev) const (defined in pion::http::message::receive_error_t)pion::http::message::receive_error_t [inline, virtual]
name() const BOOST_SYSTEM_NOEXCEPT (defined in pion::http::message::receive_error_t)pion::http::message::receive_error_t [inline, virtual]
~receive_error_t() (defined in pion::http::message::receive_error_t)pion::http::message::receive_error_t [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1plugin__not__found.html0000644000372000001440000000520112215647143026274 0ustar robertousers pion: pion::error::plugin_not_found Class Reference

pion::error::plugin_not_found Class Reference

exception thrown if a plugin cannot be found More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if a plugin cannot be found

Definition at line 178 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x7e.html0000644000372000001440000002014212215647143022226 0ustar robertousers pion: Class Members - Functions
 

- ~ -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1basic__auth.html0000644000372000001440000003723612215647143024531 0ustar robertousers pion: pion::http::basic_auth Class Reference

pion::http::basic_auth Class Reference

#include <basic_auth.hpp>

Inherits pion::http::auth.

List of all members.

Public Member Functions

 basic_auth (user_manager_ptr userManager, const std::string &realm="PION")
 default constructor
virtual ~basic_auth ()
 virtual destructor
virtual bool handle_request (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)
virtual void set_option (const std::string &name, const std::string &value)

Protected Member Functions

void handle_unauthorized (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)

Static Protected Member Functions

static bool parse_authorization (std::string const &authorization, std::string &credentials)
static bool parse_credentials (std::string const &credentials, std::string &username, std::string &password)

Detailed Description

basic_auth: a base class for handling HTTP Authentication and session management in accordance with RFC 2617 http://tools.ietf.org/html/rfc2617

Definition at line 26 of file basic_auth.hpp.


Member Function Documentation

bool pion::http::basic_auth::handle_request ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [virtual]

attempts to validate authentication of a new HTTP request. If request valid, pointer to user identity object (if any) will be preserved in the request and return "true". If request not authenticated, appropriate response is sent over tcp_conn and return "false";

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request
Returns:
true if request valid and user identity inserted into request

Implements pion::http::auth.

Definition at line 35 of file http_basic_auth.cpp.

References handle_unauthorized(), pion::http::auth::m_user_manager, pion::http::auth::need_authentication(), parse_authorization(), and parse_credentials().

void pion::http::basic_auth::handle_unauthorized ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [protected]

used to send responses when access to resource is not authorized

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Definition at line 133 of file http_basic_auth.cpp.

References pion::http::response_writer::create(), and pion::tcp::connection::finish().

Referenced by handle_request().

bool pion::http::basic_auth::parse_authorization ( std::string const &  authorization,
std::string &  credentials 
) [static, protected]

extracts base64 user credentials from authorization string

Parameters:
authorization value of the HEADER_AUTHORIZATION

Definition at line 104 of file http_basic_auth.cpp.

Referenced by handle_request().

bool pion::http::basic_auth::parse_credentials ( std::string const &  credentials,
std::string &  username,
std::string &  password 
) [static, protected]

parse base64 credentials and extract username/password

Definition at line 114 of file http_basic_auth.cpp.

References pion::algorithm::base64_decode().

Referenced by handle_request().

void pion::http::basic_auth::set_option ( const std::string &  name,
const std::string &  value 
) [virtual]

sets a configuration option Valid options:

  • "domain" - name of authentication domain
Parameters:
name the name of the option to change
value the value of the option

Reimplemented from pion::http::auth.

Definition at line 96 of file http_basic_auth.cpp.


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x62.html0000644000372000001440000001150712215647143022147 0ustar robertousers pion: Class Members - Functions
 

- b -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1tcp_1_1timer.html0000644000372000001440000001354612215647143023215 0ustar robertousers pion: pion::tcp::timer Class Reference

pion::tcp::timer Class Reference

#include <timer.hpp>

List of all members.

Public Member Functions

 timer (tcp::connection_ptr &conn_ptr)
void start (const boost::uint32_t seconds)
void cancel (void)
 cancel the timer (operation completed)

Detailed Description

timer: helper class used to time-out TCP connections

Definition at line 29 of file timer.hpp.


Constructor & Destructor Documentation

pion::tcp::timer::timer ( tcp::connection_ptr &  conn_ptr  ) 

creates a new TCP connection timer

Parameters:
conn_ptr pointer to TCP connection to monitor

Definition at line 20 of file tcp_timer.cpp.


Member Function Documentation

void pion::tcp::timer::start ( const boost::uint32_t  seconds  ) 

starts a timer for closing a TCP connection

Parameters:
seconds number of seconds before the timeout triggers

Definition at line 26 of file tcp_timer.cpp.


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/unit__test_8hpp_source.html0000644000372000001440000013220612215647142023040 0ustar robertousers pion: include/pion/test/unit_test.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugin__manager-members.html0000644000372000001440000001750012215647143025477 0ustar robertousers pion: Member List

pion::plugin_manager< PluginType > Member List

This is the complete list of members for pion::plugin_manager< PluginType >, including all inherited members.
add(const std::string &plugin_id, PluginType *plugin_object_ptr)pion::plugin_manager< PluginType > [inline]
clear(void)pion::plugin_manager< PluginType > [inline]
clone(const std::string &plugin_id)pion::plugin_manager< PluginType > [inline]
empty(void) const pion::plugin_manager< PluginType > [inline]
find(const std::string &resource)pion::plugin_manager< PluginType > [inline]
get(const std::string &plugin_id)pion::plugin_manager< PluginType > [inline]
get(const std::string &plugin_id) const pion::plugin_manager< PluginType > [inline]
get_lib_ptr(const std::string &plugin_id) const pion::plugin_manager< PluginType > [inline]
get_statistic(PluginStatFunction stat_func) const pion::plugin_manager< PluginType > [inline]
get_statistic(const std::string &plugin_id, PluginStatFunction stat_func) const pion::plugin_manager< PluginType > [inline]
load(const std::string &plugin_id, const std::string &plugin_type)pion::plugin_manager< PluginType > [inline]
m_plugin_mappion::plugin_manager< PluginType > [protected]
m_plugin_mutexpion::plugin_manager< PluginType > [mutable, protected]
plugin_manager(void)pion::plugin_manager< PluginType > [inline]
PluginRunFunction typedefpion::plugin_manager< PluginType >
PluginStatFunction typedefpion::plugin_manager< PluginType >
remove(const std::string &plugin_id)pion::plugin_manager< PluginType > [inline]
replace(const std::string &plugin_id, PluginType *plugin_ptr)pion::plugin_manager< PluginType > [inline]
run(PluginRunFunction run_func)pion::plugin_manager< PluginType > [inline]
run(const std::string &plugin_id, PluginRunFunction run_func)pion::plugin_manager< PluginType > [inline]
~plugin_manager()pion::plugin_manager< PluginType > [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/config_8hpp_source.html0000644000372000001440000001731212215647142022130 0ustar robertousers pion: include/pion/config.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1test_1_1config-members.html0000644000372000001440000000436612215647143025402 0ustar robertousers pion: Member List

pion::test::config Member List

This is the complete list of members for pion::test::config, including all inherited members.
config() (defined in pion::test::config)pion::test::config [inline]
m_test_log_filepion::test::config [static]
~config() (defined in pion::test::config)pion::test::config [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1server.html0000644000372000001440000013312212215647143023565 0ustar robertousers pion: pion::http::server Class Reference

pion::http::server Class Reference

#include <server.hpp>

Inherits pion::tcp::server.

Inherited by pion::http::plugin_server.

List of all members.

Public Types

typedef boost::function2< void,
http::request_ptr
&, tcp::connection_ptr & > 
request_handler_t
 type of function that is used to handle requests
typedef boost::function3< void,
http::request_ptr
&, tcp::connection_ptr
&, const std::string & > 
error_handler_t
 handler for requests that result in "500 Server Error"

Public Member Functions

virtual ~server ()
 default destructor
 server (const unsigned int tcp_port=0)
 server (const boost::asio::ip::tcp::endpoint &endpoint)
 server (scheduler &sched, const unsigned int tcp_port=0)
 server (scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)
void add_resource (const std::string &resource, request_handler_t request_handler)
void remove_resource (const std::string &resource)
void add_redirect (const std::string &requested_resource, const std::string &new_resource)
void set_bad_request_handler (request_handler_t h)
 sets the function that handles bad HTTP requests
void set_not_found_handler (request_handler_t h)
 sets the function that handles requests which match no other web services
void set_error_handler (error_handler_t h)
 sets the function that handles requests which match no other web services
virtual void clear (void)
 clears the collection of resources recognized by the HTTP server
void set_authentication (http::auth_ptr auth)
void set_max_content_length (std::size_t n)
 sets the maximum length for HTTP request payload content

Static Public Member Functions

static std::string strip_trailing_slash (const std::string &str)
static void handle_bad_request (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)
static void handle_not_found_request (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)
static void handle_server_error (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg)
static void handle_forbidden_request (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg)
static void handle_method_not_allowed (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &allowed_methods="")

Protected Member Functions

virtual void handle_connection (tcp::connection_ptr &tcp_conn)
virtual void handle_request (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const boost::system::error_code &ec)
virtual bool find_request_handler (const std::string &resource, request_handler_t &request_handler) const

Detailed Description

server: a server that handles HTTP connections

Definition at line 36 of file server.hpp.


Constructor & Destructor Documentation

pion::http::server::server ( const unsigned int  tcp_port = 0  )  [inline, explicit]

creates a new server object

Parameters:
tcp_port port number used to listen for new connections (IPv4)

Reimplemented from pion::tcp::server.

Definition at line 58 of file server.hpp.

pion::http::server::server ( const boost::asio::ip::tcp::endpoint &  endpoint  )  [inline, explicit]

creates a new server object

Parameters:
endpoint TCP endpoint used to listen for new connections (see ASIO docs)

Reimplemented from pion::tcp::server.

Definition at line 73 of file server.hpp.

pion::http::server::server ( scheduler sched,
const unsigned int  tcp_port = 0 
) [inline, explicit]

creates a new server object

Parameters:
sched the scheduler that will be used to manage worker threads
tcp_port port number used to listen for new connections (IPv4)

Reimplemented from pion::tcp::server.

Definition at line 89 of file server.hpp.

pion::http::server::server ( scheduler sched,
const boost::asio::ip::tcp::endpoint &  endpoint 
) [inline]

creates a new server object

Parameters:
sched the scheduler that will be used to manage worker threads
endpoint TCP endpoint used to listen for new connections (see ASIO docs)

Reimplemented from pion::tcp::server.

Definition at line 105 of file server.hpp.


Member Function Documentation

void pion::http::server::add_redirect ( const std::string &  requested_resource,
const std::string &  new_resource 
)

adds a new resource redirection to the HTTP server

Parameters:
requested_resource the resource name or uri-stem that will be redirected
new_resource the resource that requested_resource will be redirected to

Definition at line 177 of file http_server.cpp.

References pion::tcp::server::m_logger, and strip_trailing_slash().

void pion::http::server::add_resource ( const std::string &  resource,
request_handler_t  request_handler 
)

adds a new web service to the HTTP server

Parameters:
resource the resource name or uri-stem to bind to the handler
request_handler function used to handle requests to the resource

Definition at line 160 of file http_server.cpp.

References pion::tcp::server::m_logger, and strip_trailing_slash().

Referenced by pion::http::plugin_server::add_service(), and pion::http::plugin_server::load_service().

bool pion::http::server::find_request_handler ( const std::string &  resource,
request_handler_t request_handler 
) const [protected, virtual]

searches for the appropriate request handler to use for a given resource

Parameters:
resource the name of the resource to search for
request_handler function that can handle requests for this resource

Definition at line 134 of file http_server.cpp.

Referenced by handle_request().

void pion::http::server::handle_bad_request ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [static]

used to send responses when a bad HTTP request is made

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Definition at line 187 of file http_server.cpp.

References pion::http::response_writer::create(), and pion::tcp::connection::finish().

void pion::http::server::handle_connection ( tcp::connection_ptr &  tcp_conn  )  [protected, virtual]

handles a new TCP connection

Parameters:
tcp_conn the new TCP connection to handle

Reimplemented from pion::tcp::server.

Definition at line 29 of file http_server.cpp.

References pion::http::request_reader::create(), and handle_request().

void pion::http::server::handle_forbidden_request ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn,
const std::string &  error_msg 
) [static]

used to send responses when a request is forbidden

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request
error_msg message that explains what went wrong

Definition at line 250 of file http_server.cpp.

References pion::http::response_writer::create(), pion::tcp::connection::finish(), and pion::algorithm::xml_encode().

void pion::http::server::handle_method_not_allowed ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn,
const std::string &  allowed_methods = "" 
) [static]

used to send responses when a method is not allowed

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request
allowed_methods optional comma separated list of allowed methods

Definition at line 277 of file http_server.cpp.

References pion::http::response_writer::create(), pion::tcp::connection::finish(), and pion::algorithm::xml_encode().

void pion::http::server::handle_not_found_request ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [static]

used to send responses when no web services can handle the request

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Definition at line 205 of file http_server.cpp.

References pion::http::response_writer::create(), pion::tcp::connection::finish(), and pion::algorithm::xml_encode().

void pion::http::server::handle_request ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn,
const boost::system::error_code &  ec 
) [protected, virtual]

handles a new HTTP request

Parameters:
http_request_ptr the HTTP request to handle
tcp_conn TCP connection containing a new request
ec error_code contains additional information for parsing errors

Definition at line 38 of file http_server.cpp.

References find_request_handler(), pion::http::parser::get_error_category(), pion::tcp::server::get_port(), pion::tcp::server::m_logger, and strip_trailing_slash().

Referenced by handle_connection().

void pion::http::server::handle_server_error ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn,
const std::string &  error_msg 
) [static]

used to send responses when a server error occurs

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request
error_msg message that explains what went wrong

Definition at line 227 of file http_server.cpp.

References pion::http::response_writer::create(), pion::tcp::connection::finish(), and pion::algorithm::xml_encode().

void pion::http::server::remove_resource ( const std::string &  resource  ) 

removes a web service from the HTTP server

Parameters:
resource the resource name or uri-stem to remove

Definition at line 169 of file http_server.cpp.

References pion::tcp::server::m_logger, and strip_trailing_slash().

void pion::http::server::set_authentication ( http::auth_ptr  auth  )  [inline]

sets the handler object for authentication verification processing

Definition at line 221 of file server.hpp.

Referenced by pion::http::plugin_server::load_service_config().

static std::string pion::http::server::strip_trailing_slash ( const std::string &  str  )  [inline, static]

The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1request__reader.html0000644000372000001440000003440412215647143025433 0ustar robertousers pion: pion::http::request_reader Class Reference

pion::http::request_reader Class Reference

#include <request_reader.hpp>

Inherits pion::http::reader.

List of all members.

Public Types

typedef boost::function3< void,
http::request_ptr,
tcp::connection_ptr, const
boost::system::error_code & > 
finished_handler_t
 function called after the HTTP message has been parsed

Public Member Functions

void set_headers_parsed_callback (finished_handler_t &h)
 sets a function to be called after HTTP headers have been parsed

Static Public Member Functions

static boost::shared_ptr
< request_reader
create (tcp::connection_ptr &tcp_conn, finished_handler_t handler)

Protected Member Functions

 request_reader (tcp::connection_ptr &tcp_conn, finished_handler_t handler)
virtual void read_bytes (void)
 Reads more bytes from the TCP connection.
virtual void finished_parsing_headers (const boost::system::error_code &ec)
 Called after we have finished parsing the HTTP message headers.
virtual void finished_reading (const boost::system::error_code &ec)
 Called after we have finished reading/parsing the HTTP message.
virtual http::messageget_message (void)
 Returns a reference to the HTTP message being parsed.

Protected Attributes

http::request_ptr m_http_msg
 The new HTTP message container being created.
finished_handler_t m_finished
 function called after the HTTP message has been parsed
finished_handler_t m_parsed_headers
 function called after the HTTP message headers have been parsed

Detailed Description

request_reader: asynchronously reads and parses HTTP requests

Definition at line 31 of file request_reader.hpp.


Constructor & Destructor Documentation

pion::http::request_reader::request_reader ( tcp::connection_ptr &  tcp_conn,
finished_handler_t  handler 
) [inline, protected]

protected constructor restricts creation of objects (use create())

Parameters:
tcp_conn TCP connection containing a new message to parse
handler function called after the message has been parsed

Definition at line 71 of file request_reader.hpp.

References m_http_msg, and pion::http::parser::set_logger().

Referenced by create().


Member Function Documentation

static boost::shared_ptr<request_reader> pion::http::request_reader::create ( tcp::connection_ptr &  tcp_conn,
finished_handler_t  handler 
) [inline, static]

creates new request_reader objects

Parameters:
tcp_conn TCP connection containing a new message to parse
handler function called after the message has been parsed

Definition at line 53 of file request_reader.hpp.

References request_reader().

Referenced by pion::http::server::handle_connection().


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1test_1_1safe__xml__log__formatter.html0000644000372000001440000003033112215647143027434 0ustar robertousers pion: pion::test::safe_xml_log_formatter Class Reference

pion::test::safe_xml_log_formatter Class Reference

thread-safe version of Boost.Test's xml_log_formatter class More...

#include <unit_test.hpp>

List of all members.

Public Member Functions

 safe_xml_log_formatter ()
 default constructor
virtual ~safe_xml_log_formatter ()
 virtual destructor
virtual void log_start (std::ostream &ostr, boost::unit_test::counter_t test_cases_amount)
 wrapper to flush output for xml_log_formatter::log_start
virtual void log_finish (std::ostream &ostr)
 wrapper to flush output for xml_log_formatter::log_finish
virtual void log_build_info (std::ostream &ostr)
 wrapper to flush output for xml_log_formatter::log_build_info
virtual void test_unit_start (std::ostream &ostr, boost::unit_test::test_unit const &tu)
 wrapper to flush output for xml_log_formatter::test_unit_start
virtual void test_unit_finish (std::ostream &ostr, boost::unit_test::test_unit const &tu, unsigned long elapsed)
 wrapper to flush output for xml_log_formatter::test_unit_finish
virtual void test_unit_skipped (std::ostream &ostr, boost::unit_test::test_unit const &tu)
 wrapper to flush output for xml_log_formatter::test_unit_skipped
virtual void log_exception (std::ostream &ostr, boost::unit_test::log_checkpoint_data const &checkpoint_data, boost::execution_exception const &ex)
 wrapper to flush output for xml_log_formatter::log_exception
virtual void log_entry_start (std::ostream &ostr, boost::unit_test::log_entry_data const &entry_data, log_entry_types let)
 thread-safe wrapper for xml_log_formatter::log_entry_start
virtual void log_entry_value (std::ostream &ostr, boost::unit_test::const_string value)
virtual void log_entry_finish (std::ostream &ostr)

Detailed Description

thread-safe version of Boost.Test's xml_log_formatter class

Definition at line 42 of file unit_test.hpp.


Member Function Documentation

virtual void pion::test::safe_xml_log_formatter::log_entry_finish ( std::ostream &  ostr  )  [inline, virtual]

thread-safe wrapper for xml_log_formatter::log_entry_finish assumes the current thread has control via call to log_entry_start()

Definition at line 168 of file unit_test.hpp.

virtual void pion::test::safe_xml_log_formatter::log_entry_value ( std::ostream &  ostr,
boost::unit_test::const_string  value 
) [inline, virtual]

thread-safe wrapper for xml_log_formatter::log_entry_value ensures that an entry is in progress

Definition at line 157 of file unit_test.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/connection_8hpp_source.html0000644000372000001440000017422512215647142023031 0ustar robertousers pion: include/pion/tcp/connection.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1basic__auth-members.html0000644000372000001440000002132512215647143026151 0ustar robertousers pion: Member List

pion::http::basic_auth Member List

This is the complete list of members for pion::http::basic_auth, including all inherited members.
add_permit(const std::string &resource)pion::http::auth
add_restrict(const std::string &resource)pion::http::auth
add_user(std::string const &username, std::string const &password)pion::http::auth [inline, virtual]
auth(user_manager_ptr userManager)pion::http::auth [inline]
basic_auth(user_manager_ptr userManager, const std::string &realm="PION")pion::http::basic_auth
find_resource(const resource_set_type &resource_set, const std::string &resource) const pion::http::auth [protected]
get_user(std::string const &username)pion::http::auth [inline, virtual]
handle_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::basic_auth [virtual]
handle_unauthorized(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::basic_auth [protected]
m_loggerpion::http::auth [mutable, protected]
m_resource_mutexpion::http::auth [mutable, protected]
m_restrict_listpion::http::auth [protected]
m_user_managerpion::http::auth [protected]
m_white_listpion::http::auth [protected]
need_authentication(http::request_ptr const &http_request_ptr) const pion::http::auth [protected]
parse_authorization(std::string const &authorization, std::string &credentials)pion::http::basic_auth [protected, static]
parse_credentials(std::string const &credentials, std::string &username, std::string &password)pion::http::basic_auth [protected, static]
remove_user(std::string const &username)pion::http::auth [inline, virtual]
resource_set_type typedefpion::http::auth [protected]
set_logger(logger log_ptr)pion::http::auth [inline, protected]
set_option(const std::string &name, const std::string &value)pion::http::basic_auth [virtual]
update_user(std::string const &username, std::string const &password)pion::http::auth [inline, virtual]
user_cache_type typedefpion::http::auth [protected]
~auth()pion::http::auth [inline, virtual]
~basic_auth()pion::http::basic_auth [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugin__manager_1_1map__type.html0000644000372000001440000000614412215647143026407 0ustar robertousers pion: pion::plugin_manager< PluginType >::map_type Class Reference

pion::plugin_manager< PluginType >::map_type Class Reference

data type that maps identifiers to plug-in objects More...

#include <plugin_manager.hpp>

Inherits std::map< std::string, std::pair< PluginType *, plugin_ptr< PluginType > > >.

List of all members.

Public Member Functions

void clear (void)

Detailed Description

template<typename PluginType>
class pion::plugin_manager< PluginType >::map_type

data type that maps identifiers to plug-in objects

Definition at line 168 of file plugin_manager.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x63.html0000644000372000001440000002422712215647143022153 0ustar robertousers pion: Class Members - Functions
 

- c -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x68.html0000644000372000001440000001717012215647143021144 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- h -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x77.html0000644000372000001440000001173212215647143021142 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- w -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1duplicate__plugin.html0000644000372000001440000000523712215647143026125 0ustar robertousers pion: pion::error::duplicate_plugin Class Reference

pion::error::duplicate_plugin Class Reference

exception thrown if we try to add or load a duplicate plugin More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if we try to add or load a duplicate plugin

Definition at line 185 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1parser_1_1error__category__t.html0000644000372000001440000000627512215647143030013 0ustar robertousers pion: pion::http::parser::error_category_t Class Reference

pion::http::parser::error_category_t Class Reference

class-specific error category More...

#include <parser.hpp>

List of all members.

Public Member Functions

const char * name () const BOOST_SYSTEM_NOEXCEPT
std::string message (int ev) const

Detailed Description

class-specific error category

Definition at line 74 of file parser.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/plugin_8cpp_source.html0000644000372000001440000012514112215647143022155 0ustar robertousers pion: src/plugin.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1auth-members.html0000644000372000001440000001601112215647143024645 0ustar robertousers pion: Member List

pion::http::auth Member List

This is the complete list of members for pion::http::auth, including all inherited members.
add_permit(const std::string &resource)pion::http::auth
add_restrict(const std::string &resource)pion::http::auth
add_user(std::string const &username, std::string const &password)pion::http::auth [inline, virtual]
auth(user_manager_ptr userManager)pion::http::auth [inline]
find_resource(const resource_set_type &resource_set, const std::string &resource) const pion::http::auth [protected]
get_user(std::string const &username)pion::http::auth [inline, virtual]
handle_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)=0pion::http::auth [pure virtual]
m_loggerpion::http::auth [mutable, protected]
m_resource_mutexpion::http::auth [mutable, protected]
m_restrict_listpion::http::auth [protected]
m_user_managerpion::http::auth [protected]
m_white_listpion::http::auth [protected]
need_authentication(http::request_ptr const &http_request_ptr) const pion::http::auth [protected]
remove_user(std::string const &username)pion::http::auth [inline, virtual]
resource_set_type typedefpion::http::auth [protected]
set_logger(logger log_ptr)pion::http::auth [inline, protected]
set_option(const std::string &name, const std::string &value)pion::http::auth [inline, virtual]
update_user(std::string const &username, std::string const &password)pion::http::auth [inline, virtual]
user_cache_type typedefpion::http::auth [protected]
~auth()pion::http::auth [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/hash__map_8hpp_source.html0000644000372000001440000003114712215647142022604 0ustar robertousers pion: include/pion/hash_map.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x74.html0000644000372000001440000001411612215647143021136 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- t -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x66.html0000644000372000001440000002164612215647143021145 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- f -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/http__parser_8cpp_source.html0000644000372000001440000062201712215647143023355 0ustar robertousers pion: src/http_parser.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x73.html0000644000372000001440000004222012215647143022145 0ustar robertousers pion: Class Members - Functions
 

- s -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1plugin__service-members.html0000644000372000001440000001040212215647143027057 0ustar robertousers pion: Member List

pion::http::plugin_service Member List

This is the complete list of members for pion::http::plugin_service, including all inherited members.
get_relative_resource(const std::string &resource_requested) const pion::http::plugin_service [inline]
get_resource(void) const pion::http::plugin_service [inline]
operator()(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)=0pion::http::plugin_service [pure virtual]
plugin_service(void)pion::http::plugin_service [inline]
set_option(const std::string &name, const std::string &value)pion::http::plugin_service [inline, virtual]
set_resource(const std::string &str)pion::http::plugin_service [inline]
start(void)pion::http::plugin_service [inline, virtual]
stop(void)pion::http::plugin_service [inline, virtual]
~plugin_service()pion::http::plugin_service [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x77.html0000644000372000001440000001123212215647143022150 0ustar robertousers pion: Class Members - Functions
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1tcp_1_1stream__buffer.html0000644000372000001440000005600112215647143025051 0ustar robertousers pion: pion::tcp::stream_buffer Class Reference

pion::tcp::stream_buffer Class Reference

#include <stream.hpp>

List of all members.

Public Types

enum  { PUT_BACK_MAX = 10, WRITE_BUFFER_SIZE = 8192 }
typedef char char_type
typedef std::char_traits< char >
::int_type 
int_type
typedef std::char_traits< char >
::off_type 
off_type
typedef std::char_traits< char >
::pos_type 
pos_type
typedef std::char_traits< char > traits_type

Public Member Functions

 stream_buffer (tcp::connection_ptr &conn_ptr)
 stream_buffer (boost::asio::io_service &io_service, const bool ssl_flag=false)
 stream_buffer (boost::asio::io_service &io_service, connection::ssl_context_type &ssl_context)
virtual ~stream_buffer ()
 virtual destructor flushes the write buffer
connectionget_connection (void)
 returns a reference to the current TCP connection
const connectionget_connection (void) const
 returns a const reference to the current TCP connection

Protected Member Functions

void setup_buffers (void)
 sets up the read and write buffers for input and output
int_type flush_output (void)
virtual int_type underflow (void)
virtual int_type overflow (int_type c)
virtual std::streamsize xsputn (const char_type *s, std::streamsize n)
virtual std::streamsize xsgetn (char_type *s, std::streamsize n)
virtual int_type sync (void)

Detailed Description

stream_buffer: std::basic_streambuf wrapper for TCP network connections. Based in part on section 13.13.3 of "The Standard C++ Library" by Nicolai M. Josuttis, published in 1999 by Addison-Wesley

Definition at line 32 of file stream.hpp.


Constructor & Destructor Documentation

pion::tcp::stream_buffer::stream_buffer ( tcp::connection_ptr &  conn_ptr  )  [inline, explicit]

constructs a TCP stream buffer object for an existing TCP connection

Parameters:
conn_ptr pointer to the TCP connection to use for reading & writing

Definition at line 56 of file stream.hpp.

References setup_buffers().

pion::tcp::stream_buffer::stream_buffer ( boost::asio::io_service &  io_service,
const bool  ssl_flag = false 
) [inline, explicit]

constructs a TCP stream buffer object for a new TCP connection

Parameters:
io_service asio service associated with the connection
ssl_flag if true then the connection will be encrypted using SSL

Definition at line 68 of file stream.hpp.

References setup_buffers().

pion::tcp::stream_buffer::stream_buffer ( boost::asio::io_service &  io_service,
connection::ssl_context_type ssl_context 
) [inline]

constructs a TCP stream buffer object for a new SSL/TCP connection

Parameters:
io_service asio service associated with the connection
ssl_context asio ssl context associated with the connection

Definition at line 82 of file stream.hpp.

References setup_buffers().


Member Function Documentation

int_type pion::tcp::stream_buffer::flush_output ( void   )  [inline, protected]

writes data in the output buffer to the TCP connection

Returns:
int_type the number of bytes sent, or eof() if there was an error

Definition at line 115 of file stream.hpp.

Referenced by overflow(), sync(), and xsputn().

virtual int_type pion::tcp::stream_buffer::overflow ( int_type  c  )  [inline, protected, virtual]

this function is called when the write buffer for the stream is full

Parameters:
c character that has not been written yet, or eof() if we are flushing
Returns:
int_type the last character written, or eof() if there was an error

Definition at line 182 of file stream.hpp.

References flush_output().

virtual int_type pion::tcp::stream_buffer::sync ( void   )  [inline, protected, virtual]

synchronize buffers with the TCP connection

Returns:
0 if successful, -1 if there was an error

Definition at line 279 of file stream.hpp.

References flush_output().

Referenced by ~stream_buffer().

virtual int_type pion::tcp::stream_buffer::underflow ( void   )  [inline, protected, virtual]

this function is called when the read buffer has no more characters available

Returns:
int_type the next character available for reading, or eof() if there was an error

Definition at line 139 of file stream.hpp.

Referenced by xsgetn().

virtual std::streamsize pion::tcp::stream_buffer::xsgetn ( char_type *  s,
std::streamsize  n 
) [inline, protected, virtual]

reads a sequence of characters

Parameters:
s pointer to where the sequence of characters will be stored
n number of characters in the sequence to read
Returns:
std::streamsize number of character read

Definition at line 252 of file stream.hpp.

References underflow().

virtual std::streamsize pion::tcp::stream_buffer::xsputn ( const char_type *  s,
std::streamsize  n 
) [inline, protected, virtual]

writes a sequence of characters

Parameters:
s pointer to a sequence of characters
n number of characters in the sequence to write
Returns:
std::streamsize number of character written

Definition at line 203 of file stream.hpp.

References flush_output().


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1scheduler-members.html0000644000372000001440000002431212215647143024325 0ustar robertousers pion: Member List

pion::scheduler Member List

This is the complete list of members for pion::scheduler, including all inherited members.
add_active_user(void)pion::scheduler
DEFAULT_NUM_THREADSpion::scheduler [protected, static]
finish_services(void)pion::scheduler [inline, protected, virtual]
finish_threads(void)pion::scheduler [inline, protected, virtual]
get_io_service(void)=0pion::scheduler [pure virtual]
get_logger(void)pion::scheduler [inline]
get_num_threads(void) const pion::scheduler [inline]
get_wakeup_time(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [protected, static]
is_running(void) const pion::scheduler [inline]
join(void)pion::scheduler
keep_running(boost::asio::io_service &my_service, boost::asio::deadline_timer &my_timer)pion::scheduler
KEEP_RUNNING_TIMER_SECONDSpion::scheduler [protected, static]
m_active_userspion::scheduler [protected]
m_is_runningpion::scheduler [protected]
m_loggerpion::scheduler [protected]
m_mutexpion::scheduler [protected]
m_no_more_active_userspion::scheduler [protected]
m_num_threadspion::scheduler [protected]
m_scheduler_has_stoppedpion::scheduler [protected]
MICROSEC_IN_SECONDpion::scheduler [protected, static]
NSEC_IN_SECONDpion::scheduler [protected, static]
post(boost::function0< void > work_func)pion::scheduler [inline, virtual]
process_service_work(boost::asio::io_service &service)pion::scheduler
remove_active_user(void)pion::scheduler
scheduler(void)pion::scheduler [inline]
set_logger(logger log_ptr)pion::scheduler [inline]
set_num_threads(const boost::uint32_t n)pion::scheduler [inline]
shutdown(void)pion::scheduler [virtual]
sleep(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
sleep(ConditionType &wakeup_condition, LockType &wakeup_lock, boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
startup(void)pion::scheduler [inline, virtual]
stop_services(void)pion::scheduler [inline, protected, virtual]
stop_threads(void)pion::scheduler [inline, protected, virtual]
~scheduler()pion::scheduler [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1parser-members.html0000644000372000001440000006405112215647143025207 0ustar robertousers pion: Member List

pion::http::parser Member List

This is the complete list of members for pion::http::parser, including all inherited members.
bytes_available(void) const pion::http::parser [inline]
check_premature_eof(http::message &http_msg)pion::http::parser [inline]
compute_msg_status(http::message &http_msg, bool msg_parsed_ok)pion::http::parser [protected, static]
consume_content(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
consume_content_as_next_chunk(http::message::chunk_cache_t &chunk_buffers)pion::http::parser [protected]
COOKIE_NAME_MAXpion::http::parser [protected, static]
COOKIE_VALUE_MAXpion::http::parser [protected, static]
create_error_category(void)pion::http::parser [protected, static]
DEFAULT_CONTENT_MAXpion::http::parser [static]
eof(void) const pion::http::parser [inline]
ERROR_CHUNK_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_NAME_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_VALUE_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_INVALID_CONTENT_LENGTH enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_CHUNK_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_HEADER_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_TOO_MUCH_CONTENT enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_EMPTY enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_SIZE enum value (defined in pion::http::parser)pion::http::parser
error_value_t enum namepion::http::parser
ERROR_VERSION_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_VERSION_EMPTY enum value (defined in pion::http::parser)pion::http::parser
finish(http::message &http_msg) const pion::http::parser
finish_header_parsing(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
finished_parsing_headers(const boost::system::error_code &ec)pion::http::parser [inline, protected, virtual]
gcount(void) const pion::http::parser [inline]
get_content_bytes_read(void) const pion::http::parser [inline]
get_error_category(void)pion::http::parser [inline, static]
get_logger(void)pion::http::parser [inline]
get_max_content_length(void) const pion::http::parser [inline]
get_parse_headers_only(void)pion::http::parser [inline]
get_raw_headers(void) const pion::http::parser [inline]
get_save_raw_headers(void) const pion::http::parser [inline]
get_total_bytes_read(void) const pion::http::parser [inline]
HEADER_NAME_MAXpion::http::parser [protected, static]
HEADER_VALUE_MAXpion::http::parser [protected, static]
is_char(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_control(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_cookie_attribute(const std::string &name, bool set_cookie_header) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_hex_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_parsing_request(void) const pion::http::parser [inline]
is_parsing_response(void) const pion::http::parser [inline]
is_special(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
load_read_pos(const char *&read_ptr, const char *&read_end_ptr) const pion::http::parser [inline]
m_is_requestpion::http::parser [protected]
m_loggerpion::http::parser [mutable, protected]
m_read_end_ptrpion::http::parser [protected]
m_read_ptrpion::http::parser [protected]
METHOD_MAXpion::http::parser [protected, static]
parse(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
parse_chunks(http::message::chunk_cache_t &chunk_buffers, boost::system::error_code &ec)pion::http::parser [protected]
parse_cookie_header(ihash_multimap &dict, const char *ptr, const std::size_t len, bool set_cookie_header)pion::http::parser [static]
parse_cookie_header(ihash_multimap &dict, const std::string &cookie_header, bool set_cookie_header)pion::http::parser [inline, static]
parse_forwarded_for(const std::string &header, std::string &public_ip)pion::http::parser [static]
parse_headers(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
parse_headers_only(bool b=true)pion::http::parser [inline]
parse_missing_data(http::message &http_msg, std::size_t len, boost::system::error_code &ec)pion::http::parser
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const std::string &form_data)pion::http::parser [inline, static]
parse_uri(const std::string &uri, std::string &proto, std::string &host, boost::uint16_t &port, std::string &path, std::string &query)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const std::string &query)pion::http::parser [inline, static]
parser(const bool is_request, std::size_t max_content_length=DEFAULT_CONTENT_MAX)pion::http::parser [inline]
payload_handler_t typedefpion::http::parser
QUERY_NAME_MAXpion::http::parser [protected, static]
QUERY_STRING_MAXpion::http::parser [protected, static]
QUERY_VALUE_MAXpion::http::parser [protected, static]
reset(void)pion::http::parser [inline]
reset_max_content_length(void)pion::http::parser [inline]
RESOURCE_MAXpion::http::parser [protected, static]
set_error(boost::system::error_code &ec, error_value_t ev)pion::http::parser [inline, protected, static]
set_logger(logger log_ptr)pion::http::parser [inline]
set_max_content_length(std::size_t n)pion::http::parser [inline]
set_payload_handler(payload_handler_t &h)pion::http::parser [inline]
set_read_buffer(const char *ptr, size_t len)pion::http::parser [inline]
set_save_raw_headers(bool b)pion::http::parser [inline]
skip_header_parsing(http::message &http_msg)pion::http::parser [inline]
STATUS_MESSAGE_MAXpion::http::parser [protected, static]
update_message_with_header_data(http::message &http_msg) const pion::http::parser [protected]
~parser()pion::http::parser [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1parser_1_1error__category__t-members.html0000644000372000001440000000434312215647143031435 0ustar robertousers pion: Member List

pion::http::parser::error_category_t Member List

This is the complete list of members for pion::http::parser::error_category_t, including all inherited members.
message(int ev) const (defined in pion::http::parser::error_category_t)pion::http::parser::error_category_t [inline]
name() const BOOST_SYSTEM_NOEXCEPT (defined in pion::http::parser::error_category_t)pion::http::parser::error_category_t [inline]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1tcp_1_1connection-members.html0000644000372000001440000004362212215647143025662 0ustar robertousers pion: Member List

pion::tcp::connection Member List

This is the complete list of members for pion::tcp::connection, including all inherited members.
accept(boost::asio::ip::tcp::acceptor &tcp_acceptor)pion::tcp::connection [inline]
async_accept(boost::asio::ip::tcp::acceptor &tcp_acceptor, AcceptHandler handler)pion::tcp::connection [inline]
async_connect(boost::asio::ip::tcp::endpoint &tcp_endpoint, ConnectHandler handler)pion::tcp::connection [inline]
async_connect(const boost::asio::ip::address &remote_addr, const unsigned int remote_port, ConnectHandler handler)pion::tcp::connection [inline]
async_handshake_client(SSLHandshakeHandler handler)pion::tcp::connection [inline]
async_handshake_server(SSLHandshakeHandler handler)pion::tcp::connection [inline]
async_read(CompletionCondition completion_condition, ReadHandler handler)pion::tcp::connection [inline]
async_read(const MutableBufferSequence &buffers, CompletionCondition completion_condition, ReadHandler handler)pion::tcp::connection [inline]
async_read_some(ReadHandler handler)pion::tcp::connection [inline]
async_read_some(ReadBufferType read_buffer, ReadHandler handler)pion::tcp::connection [inline]
async_write(const ConstBufferSequence &buffers, write_handler_t handler)pion::tcp::connection [inline]
cancel(void)pion::tcp::connection [inline]
close(void)pion::tcp::connection [inline]
connect(boost::asio::ip::tcp::endpoint &tcp_endpoint)pion::tcp::connection [inline]
connect(const boost::asio::ip::address &remote_addr, const unsigned int remote_port)pion::tcp::connection [inline]
connect(const std::string &remote_server, const unsigned int remote_port)pion::tcp::connection [inline]
connection(boost::asio::io_service &io_service, const bool ssl_flag=false)pion::tcp::connection [inline, explicit]
connection(boost::asio::io_service &io_service, ssl_context_type &ssl_context)pion::tcp::connection [inline]
connection(boost::asio::io_service &io_service, ssl_context_type &ssl_context, const bool ssl_flag, connection_handler finished_handler)pion::tcp::connection [inline, protected]
connection_handler typedefpion::tcp::connection
create(boost::asio::io_service &io_service, ssl_context_type &ssl_context, const bool ssl_flag, connection_handler finished_handler)pion::tcp::connection [inline, static]
finish(void)pion::tcp::connection [inline]
get_io_service(void)pion::tcp::connection [inline]
get_keep_alive(void) const pion::tcp::connection [inline]
get_lifecycle(void) const pion::tcp::connection [inline]
get_pipelined(void) const pion::tcp::connection [inline]
get_read_buffer(void)pion::tcp::connection [inline]
get_remote_endpoint(void) const pion::tcp::connection [inline]
get_remote_ip(void) const pion::tcp::connection [inline]
get_remote_port(void) const pion::tcp::connection [inline]
get_socket(void)pion::tcp::connection [inline]
get_socket(void) const pion::tcp::connection [inline]
get_ssl_flag(void) const pion::tcp::connection [inline]
get_ssl_socket(void)pion::tcp::connection [inline]
get_ssl_socket(void) const pion::tcp::connection [inline]
handshake_client(void)pion::tcp::connection [inline]
handshake_server(void)pion::tcp::connection [inline]
is_open(void) const pion::tcp::connection [inline]
LIFECYCLE_CLOSE enum value (defined in pion::tcp::connection)pion::tcp::connection
LIFECYCLE_KEEPALIVE enum value (defined in pion::tcp::connection)pion::tcp::connection
LIFECYCLE_PIPELINED enum value (defined in pion::tcp::connection)pion::tcp::connection
lifecycle_type enum namepion::tcp::connection
load_read_pos(const char *&read_ptr, const char *&read_end_ptr) const pion::tcp::connection [inline]
read(CompletionCondition completion_condition, boost::system::error_code &ec)pion::tcp::connection [inline]
read(const MutableBufferSequence &buffers, CompletionCondition completion_condition, boost::system::error_code &ec)pion::tcp::connection [inline]
READ_BUFFER_SIZE enum value (defined in pion::tcp::connection)pion::tcp::connection
read_buffer_type typedefpion::tcp::connection
read_some(boost::system::error_code &ec)pion::tcp::connection [inline]
read_some(ReadBufferType read_buffer, boost::system::error_code &ec)pion::tcp::connection [inline]
save_read_pos(const char *read_ptr, const char *read_end_ptr)pion::tcp::connection [inline]
set_lifecycle(lifecycle_type t)pion::tcp::connection [inline]
socket_type typedefpion::tcp::connection
ssl_context_type typedefpion::tcp::connection
ssl_socket_type typedefpion::tcp::connection
write(const ConstBufferSequence &buffers, boost::system::error_code &ec)pion::tcp::connection [inline]
~connection()pion::tcp::connection [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1directory__not__found.html0000644000372000001440000000510112215647143027001 0ustar robertousers pion: pion::error::directory_not_found Class Reference

pion::error::directory_not_found Class Reference

exception thrown if a required directory is not found More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if a required directory is not found

Definition at line 171 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1spdy_1_1parser-members.html0000644000372000001440000002410512215647143025203 0ustar robertousers pion: Member List

pion::spdy::parser Member List

This is the complete list of members for pion::spdy::parser, including all inherited members.
create_error_category(void)pion::spdy::parser [protected, static]
ERROR_DECOMPRESSION enum value (defined in pion::spdy::parser)pion::spdy::parser
ERROR_INTERNAL_SPDY_ERROR enum value (defined in pion::spdy::parser)pion::spdy::parser
ERROR_INVALID_SPDY_FRAME enum value (defined in pion::spdy::parser)pion::spdy::parser
ERROR_INVALID_SPDY_VERSION enum value (defined in pion::spdy::parser)pion::spdy::parser
ERROR_MISSING_HEADER_DATA enum value (defined in pion::spdy::parser)pion::spdy::parser
ERROR_PROTOCOL_ERROR enum value (defined in pion::spdy::parser)pion::spdy::parser
error_value_t enum namepion::spdy::parser
get_control_frame_stream_id(const char *ptr)pion::spdy::parser [static]
get_error_category(void)pion::spdy::parser [inline, protected, static]
get_spdy_data_content()pion::spdy::parser [inline]
get_spdy_frame_type(const char *ptr)pion::spdy::parser [static]
get_spdy_read_pointer()pion::spdy::parser [inline]
is_spdy_control_frame(const char *ptr)pion::spdy::parser [static]
parse(http_protocol_info &http_headers, boost::system::error_code &ec, decompressor_ptr &decompressor, const char *packet_ptr, boost::uint32_t &length_packet, boost::uint32_t current_stream_count)pion::spdy::parser
parse_header_payload(boost::system::error_code &ec, decompressor_ptr &decompressor, const spdy_control_frame_info &frame, http_protocol_info &http_headers, boost::uint32_t current_stream_count)pion::spdy::parser [protected]
parse_spdy_data(boost::system::error_code &ec, const spdy_control_frame_info &frame, boost::uint32_t stream_id, http_protocol_info &http_info)pion::spdy::parser [protected]
parse_spdy_frame(boost::system::error_code &ec, decompressor_ptr &decompressor, http_protocol_info &http_headers, boost::uint32_t &length_packet, boost::uint32_t current_stream_count)pion::spdy::parser [protected]
parse_spdy_goaway_frame(boost::system::error_code &ec, const spdy_control_frame_info &frame)pion::spdy::parser [protected]
parse_spdy_ping_frame(boost::system::error_code &ec, const spdy_control_frame_info &frame)pion::spdy::parser [protected]
parse_spdy_rst_stream(boost::system::error_code &ec, const spdy_control_frame_info &frame)pion::spdy::parser [protected]
parse_spdy_settings_frame(boost::system::error_code &ec, const spdy_control_frame_info &frame)pion::spdy::parser [protected]
parse_spdy_window_update_frame(boost::system::error_code &ec, const spdy_control_frame_info &frame)pion::spdy::parser [protected]
parser()pion::spdy::parser
populate_frame(boost::system::error_code &ec, spdy_control_frame_info &frame, boost::uint32_t &length_packet, boost::uint32_t &stream_id, http_protocol_info &http_headers)pion::spdy::parser [protected]
set_error(boost::system::error_code &ec, error_value_t ev)pion::spdy::parser [inline, protected, static]
set_read_ptr(const char *ptr)pion::spdy::parser [inline, protected]
~parser()pion::spdy::parser [inline]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1spdy_1_1parser.html0000644000372000001440000011475212215647143023563 0ustar robertousers pion: pion::spdy::parser Class Reference

pion::spdy::parser Class Reference

#include <parser.hpp>

List of all members.

Classes

class  error_category_t
 class-specific error category More...

Public Types

enum  error_value_t {
  ERROR_INVALID_SPDY_FRAME = 1, ERROR_INVALID_SPDY_VERSION, ERROR_DECOMPRESSION, ERROR_PROTOCOL_ERROR,
  ERROR_INTERNAL_SPDY_ERROR, ERROR_MISSING_HEADER_DATA
}
 

class-specific error code values


Public Member Functions

 parser ()
 constructs a new parser object (default constructor)
 ~parser ()
 destructor
boost::tribool parse (http_protocol_info &http_headers, boost::system::error_code &ec, decompressor_ptr &decompressor, const char *packet_ptr, boost::uint32_t &length_packet, boost::uint32_t current_stream_count)
const char * get_spdy_data_content ()
 Get the pointer to the first character to the spdy data contect.
const char * get_spdy_read_pointer ()
 Get the pointer to the first character to the spdy data contect.

Static Public Member Functions

static spdy_frame_type get_spdy_frame_type (const char *ptr)
static bool is_spdy_control_frame (const char *ptr)
static boost::uint32_t get_control_frame_stream_id (const char *ptr)

Protected Member Functions

void set_read_ptr (const char *ptr)
 resets the read pointer
bool populate_frame (boost::system::error_code &ec, spdy_control_frame_info &frame, boost::uint32_t &length_packet, boost::uint32_t &stream_id, http_protocol_info &http_headers)
void parse_header_payload (boost::system::error_code &ec, decompressor_ptr &decompressor, const spdy_control_frame_info &frame, http_protocol_info &http_headers, boost::uint32_t current_stream_count)
void parse_spdy_data (boost::system::error_code &ec, const spdy_control_frame_info &frame, boost::uint32_t stream_id, http_protocol_info &http_info)
void parse_spdy_settings_frame (boost::system::error_code &ec, const spdy_control_frame_info &frame)
void parse_spdy_rst_stream (boost::system::error_code &ec, const spdy_control_frame_info &frame)
void parse_spdy_ping_frame (boost::system::error_code &ec, const spdy_control_frame_info &frame)
void parse_spdy_goaway_frame (boost::system::error_code &ec, const spdy_control_frame_info &frame)
void parse_spdy_window_update_frame (boost::system::error_code &ec, const spdy_control_frame_info &frame)
boost::tribool parse_spdy_frame (boost::system::error_code &ec, decompressor_ptr &decompressor, http_protocol_info &http_headers, boost::uint32_t &length_packet, boost::uint32_t current_stream_count)

Static Protected Member Functions

static void create_error_category (void)
 creates the unique parser error_category_t
static error_category_tget_error_category (void)
 returns an instance of parser::error_category_t
static void set_error (boost::system::error_code &ec, error_value_t ev)

Detailed Description

parser : parsers and reads the SPDY frames

Definition at line 32 of file parser.hpp.


Member Function Documentation

boost::uint32_t pion::spdy::parser::get_control_frame_stream_id ( const char *  ptr  )  [static]

get the stream id for the spdy control frame

Returns:
true if it is a control frame else returns false

Definition at line 113 of file spdy_parser.cpp.

References pion::algorithm::to_uint32().

spdy_frame_type pion::spdy::parser::get_spdy_frame_type ( const char *  ptr  )  [static]

checks if the frame is spdy frame or not

Returns:
true if it is a frame else returns false

Definition at line 87 of file spdy_parser.cpp.

bool pion::spdy::parser::is_spdy_control_frame ( const char *  ptr  )  [static]

checks if the frame is spdy control frame or not

Returns:
true if it is a control frame else returns false

Definition at line 51 of file spdy_parser.cpp.

References pion::algorithm::to_uint16().

boost::tribool pion::spdy::parser::parse ( http_protocol_info http_headers,
boost::system::error_code &  ec,
decompressor_ptr &  decompressor,
const char *  packet_ptr,
boost::uint32_t &  length_packet,
boost::uint32_t  current_stream_count 
)

parse a SPDY packet

Returns:
boost::tribool result of parsing: false = SPDY frame has an error, true = finished parsing SPDY frame, indeterminate = not yet finished parsing SPDY frame

Definition at line 37 of file spdy_parser.cpp.

References parse_spdy_frame(), and set_read_ptr().

void pion::spdy::parser::parse_header_payload ( boost::system::error_code &  ec,
decompressor_ptr &  decompressor,
const spdy_control_frame_info frame,
http_protocol_info http_headers,
boost::uint32_t  current_stream_count 
) [protected]

parses an the header payload for SPDY

Definition at line 328 of file spdy_parser.cpp.

References set_error(), pion::algorithm::to_uint16(), and pion::algorithm::to_uint32().

Referenced by parse_spdy_frame().

void pion::spdy::parser::parse_spdy_data ( boost::system::error_code &  ec,
const spdy_control_frame_info frame,
boost::uint32_t  stream_id,
http_protocol_info http_info 
) [protected]

parses the data for SPDY

Definition at line 446 of file spdy_parser.cpp.

Referenced by parse_spdy_frame().

boost::tribool pion::spdy::parser::parse_spdy_frame ( boost::system::error_code &  ec,
decompressor_ptr &  decompressor,
http_protocol_info http_headers,
boost::uint32_t &  length_packet,
boost::uint32_t  current_stream_count 
) [protected]

parse a SPDY frame (protected implementation)

Returns:
boost::tribool result of parsing: false = SPDY frame has an error, true = finished parsing SPDY frame, indeterminate = not yet finished parsing SPDY frame

There was an error; No need to further parse.

Definition at line 122 of file spdy_parser.cpp.

References parse_header_payload(), parse_spdy_data(), parse_spdy_goaway_frame(), parse_spdy_ping_frame(), parse_spdy_rst_stream(), parse_spdy_settings_frame(), parse_spdy_window_update_frame(), populate_frame(), and set_error().

Referenced by parse().

void pion::spdy::parser::parse_spdy_goaway_frame ( boost::system::error_code &  ec,
const spdy_control_frame_info frame 
) [protected]

parses an the GoAway Frame for SPDY

Definition at line 518 of file spdy_parser.cpp.

References set_error(), and pion::algorithm::to_uint32().

Referenced by parse_spdy_frame().

void pion::spdy::parser::parse_spdy_ping_frame ( boost::system::error_code &  ec,
const spdy_control_frame_info frame 
) [protected]

parses an the Ping Frame for SPDY

Definition at line 492 of file spdy_parser.cpp.

References pion::algorithm::to_uint32().

Referenced by parse_spdy_frame().

void pion::spdy::parser::parse_spdy_rst_stream ( boost::system::error_code &  ec,
const spdy_control_frame_info frame 
) [protected]

parses an the RST stream for SPDY

Definition at line 457 of file spdy_parser.cpp.

References pion::algorithm::to_uint32().

Referenced by parse_spdy_frame().

void pion::spdy::parser::parse_spdy_settings_frame ( boost::system::error_code &  ec,
const spdy_control_frame_info frame 
) [protected]

parses an the Settings Frame for SPDY

Definition at line 512 of file spdy_parser.cpp.

Referenced by parse_spdy_frame().

void pion::spdy::parser::parse_spdy_window_update_frame ( boost::system::error_code &  ec,
const spdy_control_frame_info frame 
) [protected]

parses an the WindowUpdate Frame for SPDY

Definition at line 558 of file spdy_parser.cpp.

Referenced by parse_spdy_frame().

bool pion::spdy::parser::populate_frame ( boost::system::error_code &  ec,
spdy_control_frame_info frame,
boost::uint32_t &  length_packet,
boost::uint32_t &  stream_id,
http_protocol_info http_headers 
) [protected]

populates the frame for every spdy packet Returns false if there was an error else returns true

Definition at line 244 of file spdy_parser.cpp.

References set_error(), pion::algorithm::to_uint16(), and pion::algorithm::to_uint32().

Referenced by parse_spdy_frame().

static void pion::spdy::parser::set_error ( boost::system::error_code &  ec,
error_value_t  ev 
) [inline, static, protected]

sets an error code

Parameters:
ec error code variable to define
ev error value to raise

Definition at line 145 of file parser.hpp.

Referenced by parse_header_payload(), parse_spdy_frame(), parse_spdy_goaway_frame(), and populate_frame().


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1tcp_1_1stream-members.html0000644000372000001440000001340512215647143025012 0ustar robertousers pion: Member List

pion::tcp::stream Member List

This is the complete list of members for pion::tcp::stream, including all inherited members.
accept(boost::asio::ip::tcp::acceptor &tcp_acceptor)pion::tcp::stream [inline]
char_type typedef (defined in pion::tcp::stream)pion::tcp::stream
close(void)pion::tcp::stream [inline]
connect(boost::asio::ip::tcp::endpoint &tcp_endpoint)pion::tcp::stream [inline]
connect(const boost::asio::ip::address &remote_addr, const unsigned int remote_port)pion::tcp::stream [inline]
get_remote_ip(void) const pion::tcp::stream [inline]
get_ssl_flag(void) const pion::tcp::stream [inline]
int_type typedef (defined in pion::tcp::stream)pion::tcp::stream
is_open(void) const pion::tcp::stream [inline]
off_type typedef (defined in pion::tcp::stream)pion::tcp::stream
pos_type typedef (defined in pion::tcp::stream)pion::tcp::stream
rdbuf(void)pion::tcp::stream [inline]
stream(tcp::connection_ptr &conn_ptr)pion::tcp::stream [inline, explicit]
stream(boost::asio::io_service &io_service, const bool ssl_flag=false)pion::tcp::stream [inline, explicit]
stream(boost::asio::io_service &io_service, connection::ssl_context_type &ssl_context)pion::tcp::stream [inline]
traits_type typedef (defined in pion::tcp::stream)pion::tcp::stream

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x72.html0000644000372000001440000002057112215647143022151 0ustar robertousers pion: Class Members - Functions
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/http__reader_8cpp_source.html0000644000372000001440000005112012215647143023312 0ustar robertousers pion: src/http_reader.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1http_1_1types-members.html0000644000372000001440000004562112215647143025300 0ustar robertousers pion: Member List

pion::http::types Member List

This is the complete list of members for pion::http::types, including all inherited members.
CONTENT_TYPE_HTML (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_MULTIPART_FORM_DATA (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_TEXT (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_URLENCODED (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_XML (defined in pion::http::types)pion::http::types [static]
COOKIE_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
get_date_string(const time_t t)pion::http::types [static]
HEADER_AUTHORIZATION (defined in pion::http::types)pion::http::types [static]
HEADER_CLIENT_IP (defined in pion::http::types)pion::http::types [static]
HEADER_CONNECTION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_DISPOSITION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LENGTH (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_TYPE (defined in pion::http::types)pion::http::types [static]
HEADER_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_HOST (defined in pion::http::types)pion::http::types [static]
HEADER_IF_MODIFIED_SINCE (defined in pion::http::types)pion::http::types [static]
HEADER_LAST_MODIFIED (defined in pion::http::types)pion::http::types [static]
HEADER_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
HEADER_REFERER (defined in pion::http::types)pion::http::types [static]
HEADER_SET_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_TRANSFER_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_USER_AGENT (defined in pion::http::types)pion::http::types [static]
HEADER_X_FORWARDED_FOR (defined in pion::http::types)pion::http::types [static]
make_query_string(const ihash_multimap &query_params)pion::http::types [static]
make_set_cookie_header(const std::string &name, const std::string &value, const std::string &path, const bool has_max_age=false, const unsigned long max_age=0)pion::http::types [static]
REQUEST_METHOD_DELETE (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_GET (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_HEAD (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_POST (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_PUT (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
STRING_CRLF (defined in pion::http::types)pion::http::types [static]
STRING_EMPTY (defined in pion::http::types)pion::http::types [static]
STRING_HTTP_VERSION (defined in pion::http::types)pion::http::types [static]
~types()pion::http::types [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/decompressor_8hpp_source.html0000644000372000001440000001604012215647142023365 0ustar robertousers pion: include/pion/spdy/decompressor.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1http_1_1types.html0000644000372000001440000007100312215647143023641 0ustar robertousers pion: pion::http::types Struct Reference

pion::http::types Struct Reference

#include <types.hpp>

Inherited by pion::http::message.

List of all members.

Public Member Functions

virtual ~types ()
 virtual destructor

Static Public Member Functions

static std::string get_date_string (const time_t t)
 converts time_t format into an HTTP-date string
static std::string make_query_string (const ihash_multimap &query_params)
 builds an HTTP query string from a collection of query parameters
static std::string make_set_cookie_header (const std::string &name, const std::string &value, const std::string &path, const bool has_max_age=false, const unsigned long max_age=0)

Static Public Attributes

static const std::string STRING_EMPTY
static const std::string STRING_CRLF
static const std::string STRING_HTTP_VERSION
static const std::string HEADER_NAME_VALUE_DELIMITER
static const std::string COOKIE_NAME_VALUE_DELIMITER
static const std::string HEADER_HOST
static const std::string HEADER_COOKIE
static const std::string HEADER_SET_COOKIE
static const std::string HEADER_CONNECTION
static const std::string HEADER_CONTENT_TYPE
static const std::string HEADER_CONTENT_LENGTH
static const std::string HEADER_CONTENT_LOCATION
static const std::string HEADER_CONTENT_ENCODING
static const std::string HEADER_CONTENT_DISPOSITION
static const std::string HEADER_LAST_MODIFIED
static const std::string HEADER_IF_MODIFIED_SINCE
static const std::string HEADER_TRANSFER_ENCODING
static const std::string HEADER_LOCATION
static const std::string HEADER_AUTHORIZATION
static const std::string HEADER_REFERER
static const std::string HEADER_USER_AGENT
static const std::string HEADER_X_FORWARDED_FOR
static const std::string HEADER_CLIENT_IP
static const std::string CONTENT_TYPE_HTML
static const std::string CONTENT_TYPE_TEXT
static const std::string CONTENT_TYPE_XML
static const std::string CONTENT_TYPE_URLENCODED
static const std::string CONTENT_TYPE_MULTIPART_FORM_DATA
static const std::string REQUEST_METHOD_HEAD
static const std::string REQUEST_METHOD_GET
static const std::string REQUEST_METHOD_PUT
static const std::string REQUEST_METHOD_POST
static const std::string REQUEST_METHOD_DELETE
static const std::string RESPONSE_MESSAGE_OK
static const std::string RESPONSE_MESSAGE_CREATED
static const std::string RESPONSE_MESSAGE_ACCEPTED
static const std::string RESPONSE_MESSAGE_NO_CONTENT
static const std::string RESPONSE_MESSAGE_FOUND
static const std::string RESPONSE_MESSAGE_UNAUTHORIZED
static const std::string RESPONSE_MESSAGE_FORBIDDEN
static const std::string RESPONSE_MESSAGE_NOT_FOUND
static const std::string RESPONSE_MESSAGE_METHOD_NOT_ALLOWED
static const std::string RESPONSE_MESSAGE_NOT_MODIFIED
static const std::string RESPONSE_MESSAGE_BAD_REQUEST
static const std::string RESPONSE_MESSAGE_SERVER_ERROR
static const std::string RESPONSE_MESSAGE_NOT_IMPLEMENTED
static const std::string RESPONSE_MESSAGE_CONTINUE
static const unsigned int RESPONSE_CODE_OK = 200
static const unsigned int RESPONSE_CODE_CREATED = 201
static const unsigned int RESPONSE_CODE_ACCEPTED = 202
static const unsigned int RESPONSE_CODE_NO_CONTENT = 204
static const unsigned int RESPONSE_CODE_FOUND = 302
static const unsigned int RESPONSE_CODE_UNAUTHORIZED = 401
static const unsigned int RESPONSE_CODE_FORBIDDEN = 403
static const unsigned int RESPONSE_CODE_NOT_FOUND = 404
static const unsigned int RESPONSE_CODE_METHOD_NOT_ALLOWED = 405
static const unsigned int RESPONSE_CODE_NOT_MODIFIED = 304
static const unsigned int RESPONSE_CODE_BAD_REQUEST = 400
static const unsigned int RESPONSE_CODE_SERVER_ERROR = 500
static const unsigned int RESPONSE_CODE_NOT_IMPLEMENTED = 501
static const unsigned int RESPONSE_CODE_CONTINUE = 100

Detailed Description

types: common data types used by HTTP

Definition at line 25 of file types.hpp.


Member Function Documentation

std::string pion::http::types::make_set_cookie_header ( const std::string &  name,
const std::string &  value,
const std::string &  path,
const bool  has_max_age = false,
const unsigned long  max_age = 0 
) [static]

creates a "Set-Cookie" header

Parameters:
name the name of the cookie
value the value of the cookie
path the path of the cookie
has_max_age true if the max_age value should be set
max_age the life of the cookie, in seconds (0 = discard)
Returns:
the new "Set-Cookie" header

Definition at line 127 of file http_types.cpp.

Referenced by pion::http::response::delete_cookie(), and pion::http::response::set_cookie().


The documentation for this struct was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1bad__arg.html0000644000372000001440000000501512215647143024146 0ustar robertousers pion: pion::error::bad_arg Class Reference

pion::error::bad_arg Class Reference

exception thrown for an invalid configuration argument or option More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown for an invalid configuration argument or option

Definition at line 129 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x70.html0000644000372000001440000002304512215647143021133 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- p -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1response-members.html0000644000372000001440000013223712215647143025553 0ustar robertousers pion: Member List

pion::http::response Member List

This is the complete list of members for pion::http::response, including all inherited members.
add_cookie(const std::string &key, const std::string &value)pion::http::message [inline]
add_header(const std::string &key, const std::string &value)pion::http::message [inline]
append_cookie_headers(void)pion::http::response [inline, protected, virtual]
append_headers(write_buffers_t &write_buffers)pion::http::message [inline, protected]
change_cookie(const std::string &key, const std::string &value)pion::http::message [inline]
change_header(const std::string &key, const std::string &value)pion::http::message [inline]
change_value(DictionaryType &dict, const std::string &key, const std::string &value)pion::http::message [inline, protected, static]
check_keep_alive(void) const pion::http::message [inline]
chunk_cache_t typedefpion::http::message
clear(void)pion::http::response [inline, virtual]
clear_content(void)pion::http::message [inline]
clear_first_line(void) const pion::http::message [inline, protected]
concatenate_chunks(void)pion::http::message
CONTENT_TYPE_HTML (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_MULTIPART_FORM_DATA (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_TEXT (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_URLENCODED (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_XML (defined in pion::http::types)pion::http::types [static]
COOKIE_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
create_content_buffer(void)pion::http::message [inline]
data_status_t enum namepion::http::message
delete_cookie(const std::string &name)pion::http::response [inline]
delete_cookie(const std::string &name, const std::string &path)pion::http::response [inline]
delete_header(const std::string &key)pion::http::message [inline]
delete_value(DictionaryType &dict, const std::string &key)pion::http::message [inline, protected, static]
get_chunk_cache(void)pion::http::message [inline]
get_chunks_supported(void) const pion::http::message [inline]
get_content(void)pion::http::message [inline]
get_content(void) const pion::http::message [inline]
get_content_buffer_size() const pion::http::message [inline]
get_content_length(void) const pion::http::message [inline]
get_cookie(const std::string &key) const pion::http::message [inline]
get_cookies(void)pion::http::message [inline]
get_date_string(const time_t t)pion::http::types [static]
get_first_line(void) const pion::http::message [inline]
get_header(const std::string &key) const pion::http::message [inline]
get_headers(void)pion::http::message [inline]
get_remote_ip(void)pion::http::message [inline]
get_status() const pion::http::message [inline]
get_status_code(void) const pion::http::response [inline]
get_status_message(void) const pion::http::response [inline]
get_value(const DictionaryType &dict, const std::string &key)pion::http::message [inline, protected, static]
get_version_major(void) const pion::http::message [inline]
get_version_minor(void) const pion::http::message [inline]
get_version_string(void) const pion::http::message [inline]
has_cookie(const std::string &key) const pion::http::message [inline]
has_data_after_missing_packets() const pion::http::message [inline]
has_header(const std::string &key) const pion::http::message [inline]
has_missing_packets() const pion::http::message [inline]
HEADER_AUTHORIZATION (defined in pion::http::types)pion::http::types [static]
HEADER_CLIENT_IP (defined in pion::http::types)pion::http::types [static]
HEADER_CONNECTION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_DISPOSITION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LENGTH (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_TYPE (defined in pion::http::types)pion::http::types [static]
HEADER_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_HOST (defined in pion::http::types)pion::http::types [static]
HEADER_IF_MODIFIED_SINCE (defined in pion::http::types)pion::http::types [static]
HEADER_LAST_MODIFIED (defined in pion::http::types)pion::http::types [static]
HEADER_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
HEADER_REFERER (defined in pion::http::types)pion::http::types [static]
HEADER_SET_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_TRANSFER_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_USER_AGENT (defined in pion::http::types)pion::http::types [static]
HEADER_X_FORWARDED_FOR (defined in pion::http::types)pion::http::types [static]
is_chunked(void) const pion::http::message [inline]
is_content_buffer_allocated() const pion::http::message [inline]
is_content_length_implied(void) const pion::http::response [inline, virtual]
is_valid(void) const pion::http::message [inline]
m_first_linepion::http::message [mutable, protected]
make_query_string(const ihash_multimap &query_params)pion::http::types [static]
make_set_cookie_header(const std::string &name, const std::string &value, const std::string &path, const bool has_max_age=false, const unsigned long max_age=0)pion::http::types [static]
message(void)pion::http::message [inline]
message(const message &http_msg)pion::http::message [inline]
operator=(const message &http_msg)pion::http::message [inline]
prepare_buffers_for_send(write_buffers_t &write_buffers, const bool keep_alive, const bool using_chunks)pion::http::message [inline]
prepare_headers_for_send(const bool keep_alive, const bool using_chunks)pion::http::message [inline, protected]
read(std::istream &in, boost::system::error_code &ec, parser &http_parser)pion::http::message
read(std::istream &in, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))pion::http::message
receive(tcp::connection &tcp_conn, boost::system::error_code &ec, parser &http_parser)pion::http::message
receive(tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))pion::http::message
REQUEST_METHOD_DELETE (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_GET (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_HEAD (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_POST (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_PUT (defined in pion::http::types)pion::http::types [static]
response(const http::request &http_request_ptr)pion::http::response [inline]
response(const std::string &request_method)pion::http::response [inline]
response(const response &http_response)pion::http::response [inline]
response(void)pion::http::response [inline]
RESPONSE_CODE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
send(tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false)pion::http::message
set_chunks_supported(bool b)pion::http::message [inline]
set_content(const std::string &content)pion::http::message [inline]
set_content_length(const boost::uint64_t n)pion::http::message [inline]
set_content_type(const std::string &type)pion::http::message [inline]
set_cookie(const std::string &name, const std::string &value)pion::http::response [inline]
set_cookie(const std::string &name, const std::string &value, const std::string &path)pion::http::response [inline]
set_cookie(const std::string &name, const std::string &value, const std::string &path, const unsigned long max_age)pion::http::response [inline]
set_cookie(const std::string &name, const std::string &value, const unsigned long max_age)pion::http::response [inline]
set_data_after_missing_packet(bool newVal) (defined in pion::http::message)pion::http::message [inline]
set_do_not_send_content_length(void)pion::http::message [inline]
set_is_valid(bool b=true)pion::http::message [inline]
set_last_modified(const unsigned long t)pion::http::response [inline]
set_missing_packets(bool newVal)pion::http::message [inline]
set_remote_ip(const boost::asio::ip::address &ip)pion::http::message [inline]
set_status(data_status_t newVal) (defined in pion::http::message)pion::http::message [inline]
set_status_code(unsigned int n)pion::http::response [inline]
set_status_message(const std::string &msg)pion::http::response [inline]
set_version_major(const boost::uint16_t n)pion::http::message [inline]
set_version_minor(const boost::uint16_t n)pion::http::message [inline]
STATUS_NONE enum value (defined in pion::http::message)pion::http::message
STATUS_OK enum value (defined in pion::http::message)pion::http::message
STATUS_PARTIAL enum value (defined in pion::http::message)pion::http::message
STATUS_TRUNCATED enum value (defined in pion::http::message)pion::http::message
STRING_CRLF (defined in pion::http::types)pion::http::types [static]
STRING_EMPTY (defined in pion::http::types)pion::http::types [static]
STRING_HTTP_VERSION (defined in pion::http::types)pion::http::types [static]
update_content_length_using_header(void)pion::http::message [inline]
update_first_line(void) const pion::http::response [inline, protected, virtual]
update_request_info(const http::request &http_request)pion::http::response [inline]
update_transfer_encoding_using_header(void)pion::http::message [inline]
write(std::ostream &out, boost::system::error_code &ec, bool headers_only=false)pion::http::message
write_buffers_t typedefpion::http::message
~message()pion::http::message [inline, virtual]
~response()pion::http::response [inline, virtual]
~types()pion::http::types [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/writer_8hpp_source.html0000644000372000001440000006565212215647142022211 0ustar robertousers pion: include/pion/http/writer.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_hello_service-members.html0000644000372000001440000001160212215647143027371 0ustar robertousers pion: Member List

pion::plugins::HelloService Member List

This is the complete list of members for pion::plugins::HelloService, including all inherited members.
get_relative_resource(const std::string &resource_requested) const pion::http::plugin_service [inline]
get_resource(void) const pion::http::plugin_service [inline]
HelloService(void) (defined in pion::plugins::HelloService)pion::plugins::HelloService [inline]
operator()(pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)pion::plugins::HelloService [virtual]
plugin_service(void)pion::http::plugin_service [inline]
set_option(const std::string &name, const std::string &value)pion::http::plugin_service [inline, virtual]
set_resource(const std::string &str)pion::http::plugin_service [inline]
start(void)pion::http::plugin_service [inline, virtual]
stop(void)pion::http::plugin_service [inline, virtual]
~HelloService() (defined in pion::plugins::HelloService)pion::plugins::HelloService [inline, virtual]
~plugin_service()pion::http::plugin_service [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1bad__config-members.html0000644000372000001440000000662412215647143026301 0ustar robertousers pion: Member List

pion::error::bad_config Member List

This is the complete list of members for pion::error::bad_config, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x78.html0000644000372000001440000001011012215647143021130 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- x -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1iequal__to.html0000644000372000001440000000552412215647143023263 0ustar robertousers pion: pion::iequal_to Struct Reference

pion::iequal_to Struct Reference

#include <hash_map.hpp>

List of all members.

Public Member Functions

bool operator() (std::string const &x, std::string const &y) const

Detailed Description

case insensitive string equality predicate copied from boost.unordered hash_equality documentation http://www.boost.org/doc/libs/1_50_0/doc/html/unordered/hash_equality.html

Definition at line 63 of file hash_map.hpp.


The documentation for this struct was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1request.html0000644000372000001440000005106312215647143023752 0ustar robertousers pion: pion::http::request Class Reference

pion::http::request Class Reference

#include <request.hpp>

Inherits pion::http::message.

List of all members.

Public Member Functions

 request (const std::string &resource)
 request (void)
 constructs a new request object (default constructor)
virtual ~request ()
 virtual destructor
virtual void clear (void)
 clears all request data
virtual bool is_content_length_implied (void) const
 the content length of the message can never be implied for requests
const std::string & get_method (void) const
 returns the request method (i.e. GET, POST, PUT)
const std::string & get_resource (void) const
 returns the resource uri-stem to be delivered (possibly the result of a redirect)
const std::string & get_original_resource (void) const
 returns the resource uri-stem originally requested
const std::string & get_query_string (void) const
 returns the uri-query or query string requested
const std::string & get_query (const std::string &key) const
 returns a value for the query key if any are defined; otherwise, an empty string
ihash_multimap & get_queries (void)
 returns the query parameters
bool has_query (const std::string &key) const
 returns true if at least one value for the query key is defined
void set_method (const std::string &str)
 sets the HTTP request method (i.e. GET, POST, PUT)
void set_resource (const std::string &str)
 sets the resource or uri-stem originally requested
void change_resource (const std::string &str)
 changes the resource or uri-stem to be delivered (called as the result of a redirect)
void set_query_string (const std::string &str)
 sets the uri-query or query string requested
void add_query (const std::string &key, const std::string &value)
 adds a value for the query key
void change_query (const std::string &key, const std::string &value)
 changes the value of a query key
void delete_query (const std::string &key)
 removes all values for a query key
void use_query_params_for_query_string (void)
 use the query parameters to build a query string for the request
void use_query_params_for_post_content (void)
 use the query parameters to build POST content for the request
void set_content (const std::string &value)
 add content (for POST) from string
void set_content (const char *value, const boost::uint64_t &size)
void set_user (user_ptr user)
 sets the user record for HTTP request after authentication
user_ptr get_user () const
 get the user record for HTTP request after authentication

Protected Member Functions

virtual void update_first_line (void) const
 updates the string containing the first line for the HTTP message
virtual void append_cookie_headers (void)
 appends HTTP headers for any cookies defined by the http::message

Detailed Description

request: container for HTTP request information

Definition at line 26 of file request.hpp.


Constructor & Destructor Documentation

pion::http::request::request ( const std::string &  resource  )  [inline]

constructs a new request object

Parameters:
resource the HTTP resource to request

Definition at line 36 of file request.hpp.


Member Function Documentation

void pion::http::request::set_content ( const char *  value,
const boost::uint64_t &  size 
) [inline]

add content (for POST) from buffer of given size does nothing if the buffer is invalid or the buffer size is zero

Definition at line 148 of file request.hpp.

References pion::http::message::create_content_buffer(), and pion::http::message::set_content_length().


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/algorithm_8hpp_source.html0000644000372000001440000013254312215647142022655 0ustar robertousers pion: include/pion/algorithm.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1auth.html0000644000372000001440000006523712215647143023233 0ustar robertousers pion: pion::http::auth Class Reference

pion::http::auth Class Reference

#include <auth.hpp>

Inherited by pion::http::basic_auth, and pion::http::cookie_auth.

List of all members.

Public Member Functions

 auth (user_manager_ptr userManager)
 default constructor
virtual ~auth ()
 virtual destructor
virtual bool handle_request (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)=0
virtual void set_option (const std::string &name, const std::string &value)
void add_restrict (const std::string &resource)
void add_permit (const std::string &resource)
virtual bool add_user (std::string const &username, std::string const &password)
virtual bool update_user (std::string const &username, std::string const &password)
virtual bool remove_user (std::string const &username)
virtual user_ptr get_user (std::string const &username)

Protected Types

typedef std::set< std::string > resource_set_type
 data type for a set of resources to be authenticated
typedef std::map< std::string,
std::pair
< boost::posix_time::ptime,
user_ptr > > 
user_cache_type
 data type used to map authentication credentials to user objects

Protected Member Functions

bool need_authentication (http::request_ptr const &http_request_ptr) const
bool find_resource (const resource_set_type &resource_set, const std::string &resource) const
void set_logger (logger log_ptr)
 sets the logger to be used

Protected Attributes

logger m_logger
 primary logging interface used by this class
user_manager_ptr m_user_manager
 container used to manager user objects
resource_set_type m_restrict_list
 collection of resources that require authentication
resource_set_type m_white_list
 collection of resources that do NOT require authentication
boost::mutex m_resource_mutex
 mutex used to protect access to the resources

Detailed Description

auth: a base class for handling HTTP Authentication and session management

Definition at line 34 of file auth.hpp.


Member Function Documentation

void pion::http::auth::add_permit ( const std::string &  resource  ) 

adds a resource that does NOT require authentication

Parameters:
resource the resource name or uri-stem that does not require authentication

Definition at line 29 of file http_auth.cpp.

References m_logger, m_resource_mutex, m_white_list, and pion::http::server::strip_trailing_slash().

void pion::http::auth::add_restrict ( const std::string &  resource  ) 

adds a resource that requires authentication

Parameters:
resource the resource name or uri-stem that requires authentication

Definition at line 21 of file http_auth.cpp.

References m_logger, m_resource_mutex, m_restrict_list, and pion::http::server::strip_trailing_slash().

virtual bool pion::http::auth::add_user ( std::string const &  username,
std::string const &  password 
) [inline, virtual]

used to add a new user

@ return false if user with such name already exists

Definition at line 91 of file auth.hpp.

bool pion::http::auth::find_resource ( const resource_set_type resource_set,
const std::string &  resource 
) const [protected]

tries to find a resource in a given collection

Parameters:
resource_set the collection of resource to look in
resource the resource to look for
Returns:
true if the resource was found

Definition at line 65 of file http_auth.cpp.

Referenced by need_authentication().

virtual user_ptr pion::http::auth::get_user ( std::string const &  username  )  [inline, virtual]

Used to locate user object by username

Definition at line 116 of file auth.hpp.

virtual bool pion::http::auth::handle_request ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [pure virtual]

attempts to validate authentication of a new HTTP request. If request valid, pointer to user identity object (if any) will be preserved in the request and return "true". If request not authenticated, appropriate response is sent over tcp_conn and return "false";

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request
Returns:
true if request valid and user identity inserted into request

Implemented in pion::http::basic_auth, and pion::http::cookie_auth.

bool pion::http::auth::need_authentication ( http::request_ptr const &  http_request_ptr  )  const [protected]

check if given HTTP request requires authentication

Parameters:
http_request_ptr the HTTP request to check

Definition at line 37 of file http_auth.cpp.

References find_resource(), m_resource_mutex, m_restrict_list, m_user_manager, m_white_list, and pion::http::server::strip_trailing_slash().

Referenced by pion::http::cookie_auth::handle_request(), and pion::http::basic_auth::handle_request().

virtual bool pion::http::auth::remove_user ( std::string const &  username  )  [inline, virtual]

used to remove given user

Returns:
false if no user with such username

Definition at line 109 of file auth.hpp.

virtual void pion::http::auth::set_option ( const std::string &  name,
const std::string &  value 
) [inline, virtual]

sets a configuration option

Parameters:
name the name of the option to change
value the value of the option

Reimplemented in pion::http::basic_auth, and pion::http::cookie_auth.

Definition at line 68 of file auth.hpp.

virtual bool pion::http::auth::update_user ( std::string const &  username,
std::string const &  password 
) [inline, virtual]

update password for given user

Returns:
false if user with such a name doesn't exist

Definition at line 100 of file auth.hpp.


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugin__instance__ptr-members.html0000644000372000001440000001235012215647143026713 0ustar robertousers pion: Member List
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x6b.html0000644000372000001440000000737712215647143022241 0ustar robertousers pion: Class Members - Functions
 

- k -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x65.html0000644000372000001440000001047012215647143022150 0ustar robertousers pion: Class Members - Functions
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_echo_service-members.html0000644000372000001440000001156212215647143027211 0ustar robertousers pion: Member List

pion::plugins::EchoService Member List

This is the complete list of members for pion::plugins::EchoService, including all inherited members.
EchoService(void) (defined in pion::plugins::EchoService)pion::plugins::EchoService [inline]
get_relative_resource(const std::string &resource_requested) const pion::http::plugin_service [inline]
get_resource(void) const pion::http::plugin_service [inline]
operator()(pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)pion::plugins::EchoService [virtual]
plugin_service(void)pion::http::plugin_service [inline]
set_option(const std::string &name, const std::string &value)pion::http::plugin_service [inline, virtual]
set_resource(const std::string &str)pion::http::plugin_service [inline]
start(void)pion::http::plugin_service [inline, virtual]
stop(void)pion::http::plugin_service [inline, virtual]
~EchoService() (defined in pion::plugins::EchoService)pion::plugins::EchoService [inline, virtual]
~plugin_service()pion::http::plugin_service [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1plugin__server-members.html0000644000372000001440000004400612215647143026734 0ustar robertousers pion: Member List

pion::http::plugin_server Member List

This is the complete list of members for pion::http::plugin_server, including all inherited members.
add_redirect(const std::string &requested_resource, const std::string &new_resource)pion::http::server
add_resource(const std::string &resource, request_handler_t request_handler)pion::http::server
add_service(const std::string &resource, http::plugin_service *service_ptr)pion::http::plugin_server
after_stopping(void)pion::http::plugin_server [inline, protected, virtual]
before_starting(void)pion::http::plugin_server [inline, protected, virtual]
clear(void)pion::http::plugin_server [inline, virtual]
error_handler_t typedefpion::http::server
find_request_handler(const std::string &resource, request_handler_t &request_handler) const pion::http::server [protected, virtual]
get_acceptor(void)pion::tcp::server [inline]
get_acceptor(void) const pion::tcp::server [inline]
get_address(void) const pion::tcp::server [inline]
get_connections(void) const pion::tcp::server
get_endpoint(void) const pion::tcp::server [inline]
get_io_service(void)pion::tcp::server [inline, protected]
get_logger(void)pion::tcp::server [inline]
get_port(void) const pion::tcp::server [inline]
get_ssl_context_type(void)pion::tcp::server [inline]
get_ssl_flag(void) const pion::tcp::server [inline]
handle_bad_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::server [static]
handle_connection(tcp::connection_ptr &tcp_conn)pion::http::server [protected, virtual]
handle_forbidden_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg)pion::http::server [static]
handle_method_not_allowed(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &allowed_methods="")pion::http::server [static]
handle_not_found_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::server [static]
handle_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const boost::system::error_code &ec)pion::http::server [protected, virtual]
handle_server_error(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg)pion::http::server [static]
is_listening(void) const pion::tcp::server [inline]
join(void)pion::tcp::server
load_service(const std::string &resource, const std::string &service_name)pion::http::plugin_server
load_service_config(const std::string &config_name)pion::http::plugin_server
m_loggerpion::tcp::server [protected]
plugin_server(const unsigned int tcp_port=0)pion::http::plugin_server [inline, explicit]
plugin_server(const boost::asio::ip::tcp::endpoint &endpoint)pion::http::plugin_server [inline, explicit]
plugin_server(scheduler &sched, const unsigned int tcp_port=0)pion::http::plugin_server [inline, explicit]
plugin_server(scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)pion::http::plugin_server [inline]
remove_resource(const std::string &resource)pion::http::server
request_handler_t typedefpion::http::server
server(const unsigned int tcp_port=0)pion::http::server [inline, explicit]
server(const boost::asio::ip::tcp::endpoint &endpoint)pion::http::server [inline, explicit]
server(scheduler &sched, const unsigned int tcp_port=0)pion::http::server [inline, explicit]
server(scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)pion::http::server [inline]
set_address(const boost::asio::ip::address &addr)pion::tcp::server [inline]
set_authentication(http::auth_ptr auth)pion::http::server [inline]
set_bad_request_handler(request_handler_t h)pion::http::server [inline]
set_endpoint(const boost::asio::ip::tcp::endpoint &ep)pion::tcp::server [inline]
set_error_handler(error_handler_t h)pion::http::server [inline]
set_logger(logger log_ptr)pion::tcp::server [inline]
set_max_content_length(std::size_t n)pion::http::server [inline]
set_not_found_handler(request_handler_t h)pion::http::server [inline]
set_port(unsigned int p)pion::tcp::server [inline]
set_service_option(const std::string &resource, const std::string &name, const std::string &value)pion::http::plugin_server
set_ssl_flag(bool b=true)pion::tcp::server [inline]
set_ssl_key_file(const std::string &pem_key_file)pion::tcp::server
start(void)pion::tcp::server
stop(bool wait_until_finished=false)pion::tcp::server
strip_trailing_slash(const std::string &str)pion::http::server [inline, static]
~plugin_server()pion::http::plugin_server [inline, virtual]
~server()pion::http::server [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugin-members.html0000644000372000001440000001521212215647143023644 0ustar robertousers pion: Member List

pion::plugin Member List

This is the complete list of members for pion::plugin, including all inherited members.
add_plugin_directory(const std::string &dir)pion::plugin [static]
add_static_entry_point(const std::string &plugin_name, void *create_func, void *destroy_func)pion::plugin [static]
check_cygwin_path(boost::filesystem::path &final_path, const std::string &path_string)pion::plugin [static]
close(void)pion::plugin [inline]
find_config_file(std::string &path_to_file, const std::string &name)pion::plugin [inline, static]
find_plugin_file(std::string &path_to_file, const std::string &name)pion::plugin [inline, static]
get_all_plugin_names(std::vector< std::string > &plugin_names)pion::plugin [static]
get_create_function(void)pion::plugin [inline, protected]
get_destroy_function(void)pion::plugin [inline, protected]
get_plugin_name(void) const pion::plugin [inline]
grab_data(const plugin &p)pion::plugin [protected]
is_open(void) const pion::plugin [inline]
open(const std::string &plugin_name)pion::plugin
open_file(const std::string &plugin_file)pion::plugin
operator=(const plugin &p)pion::plugin [inline, protected]
plugin(void)pion::plugin [inline, protected]
plugin(const plugin &p)pion::plugin [inline, protected]
release_data(void)pion::plugin [protected]
reset_plugin_directories(void)pion::plugin [static]
~plugin() (defined in pion::plugin)pion::plugin [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x6c.html0000644000372000001440000001331412215647143021213 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- l -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1user__manager-members.html0000644000372000001440000001227512215647143025163 0ustar robertousers pion: Member List

pion::user_manager Member List

This is the complete list of members for pion::user_manager, including all inherited members.
add_user(const std::string &username, const std::string &password)pion::user_manager [inline, virtual]
add_user_hash(const std::string &username, const std::string &password_hash)pion::user_manager [inline, virtual]
empty(void) const pion::user_manager [inline]
get_user(const std::string &username)pion::user_manager [inline, virtual]
get_user(const std::string &username, const std::string &password)pion::user_manager [inline, virtual]
m_mutexpion::user_manager [mutable, protected]
m_userspion::user_manager [protected]
remove_user(const std::string &username)pion::user_manager [inline, virtual]
update_user(const std::string &username, const std::string &password)pion::user_manager [inline, virtual]
update_user_hash(const std::string &username, const std::string &password_hash)pion::user_manager [inline, virtual]
user_manager(void)pion::user_manager [inline]
user_map_t typedefpion::user_manager [protected]
~user_manager()pion::user_manager [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/scheduler_8cpp_source.html0000644000372000001440000006416412215647143022644 0ustar robertousers pion: src/scheduler.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/http__message_8cpp_source.html0000644000372000001440000007156512215647142023512 0ustar robertousers pion: src/http_message.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/_echo_service_8hpp_source.html0000644000372000001440000001027712215647142023463 0ustar robertousers pion: services/EchoService.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1writer-members.html0000644000372000001440000002126512215647143025227 0ustar robertousers pion: Member List

pion::http::writer Member List

This is the complete list of members for pion::http::writer, including all inherited members.
bind_to_write_handler(void)=0pion::http::writer [protected, pure virtual]
clear(void)pion::http::writer [inline]
finished_handler_t typedefpion::http::writer [protected]
finished_writing(const boost::system::error_code &ec)pion::http::writer [inline, protected]
get_connection(void)pion::http::writer [inline]
get_content_length(void) const pion::http::writer [inline]
get_logger(void)pion::http::writer [inline]
handle_write(const boost::system::error_code &write_error, std::size_t bytes_written)=0pion::http::writer [protected, pure virtual]
prepare_buffers_for_send(http::message::write_buffers_t &write_buffers)=0pion::http::writer [protected, pure virtual]
send(void)pion::http::writer [inline]
send(SendHandler send_handler)pion::http::writer [inline]
send_chunk(SendHandler send_handler)pion::http::writer [inline]
send_final_chunk(SendHandler send_handler)pion::http::writer [inline]
send_final_chunk(void)pion::http::writer [inline]
sending_chunked_message() const pion::http::writer [inline]
set_logger(logger log_ptr)pion::http::writer [inline]
supports_chunked_messages(bool b)pion::http::writer [inline]
supports_chunked_messages() const pion::http::writer [inline]
write(const T &data)pion::http::writer [inline]
write(std::ostream &(*iomanip)(std::ostream &)) (defined in pion::http::writer)pion::http::writer [inline]
write(const void *data, size_t length)pion::http::writer [inline]
write_handler_t typedefpion::http::writer [protected]
write_no_copy(const std::string &data)pion::http::writer [inline]
write_no_copy(void *data, size_t length)pion::http::writer [inline]
writer(tcp::connection_ptr &tcp_conn, finished_handler_t handler)pion::http::writer [inline, protected]
~writer()pion::http::writer [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1tcp_1_1timer-members.html0000644000372000001440000000426612215647143024644 0ustar robertousers pion: Member List

pion::tcp::timer Member List

This is the complete list of members for pion::tcp::timer, including all inherited members.
cancel(void)pion::tcp::timer
start(const boost::uint32_t seconds)pion::tcp::timer
timer(tcp::connection_ptr &conn_ptr)pion::tcp::timer

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_cookie_service-members.html0000644000372000001440000001162212215647143027541 0ustar robertousers pion: Member List

pion::plugins::CookieService Member List

This is the complete list of members for pion::plugins::CookieService, including all inherited members.
CookieService(void) (defined in pion::plugins::CookieService)pion::plugins::CookieService [inline]
get_relative_resource(const std::string &resource_requested) const pion::http::plugin_service [inline]
get_resource(void) const pion::http::plugin_service [inline]
operator()(pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)pion::plugins::CookieService [virtual]
plugin_service(void)pion::http::plugin_service [inline]
set_option(const std::string &name, const std::string &value)pion::http::plugin_service [inline, virtual]
set_resource(const std::string &str)pion::http::plugin_service [inline]
start(void)pion::http::plugin_service [inline, virtual]
stop(void)pion::http::plugin_service [inline, virtual]
~CookieService() (defined in pion::plugins::CookieService)pion::plugins::CookieService [inline, virtual]
~plugin_service()pion::http::plugin_service [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1tcp_1_1server-members.html0000644000372000001440000002231212215647143025022 0ustar robertousers pion: Member List

pion::tcp::server Member List

This is the complete list of members for pion::tcp::server, including all inherited members.
after_stopping(void)pion::tcp::server [inline, protected, virtual]
before_starting(void)pion::tcp::server [inline, protected, virtual]
get_acceptor(void)pion::tcp::server [inline]
get_acceptor(void) const pion::tcp::server [inline]
get_address(void) const pion::tcp::server [inline]
get_connections(void) const pion::tcp::server
get_endpoint(void) const pion::tcp::server [inline]
get_io_service(void)pion::tcp::server [inline, protected]
get_logger(void)pion::tcp::server [inline]
get_port(void) const pion::tcp::server [inline]
get_ssl_context_type(void)pion::tcp::server [inline]
get_ssl_flag(void) const pion::tcp::server [inline]
handle_connection(tcp::connection_ptr &tcp_conn)pion::tcp::server [inline, protected, virtual]
is_listening(void) const pion::tcp::server [inline]
join(void)pion::tcp::server
m_loggerpion::tcp::server [protected]
server(const unsigned int tcp_port)pion::tcp::server [explicit, protected]
server(const boost::asio::ip::tcp::endpoint &endpoint)pion::tcp::server [explicit, protected]
server(scheduler &sched, const unsigned int tcp_port=0)pion::tcp::server [explicit, protected]
server(scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)pion::tcp::server [protected]
set_address(const boost::asio::ip::address &addr)pion::tcp::server [inline]
set_endpoint(const boost::asio::ip::tcp::endpoint &ep)pion::tcp::server [inline]
set_logger(logger log_ptr)pion::tcp::server [inline]
set_port(unsigned int p)pion::tcp::server [inline]
set_ssl_flag(bool b=true)pion::tcp::server [inline]
set_ssl_key_file(const std::string &pem_key_file)pion::tcp::server
start(void)pion::tcp::server
stop(bool wait_until_finished=false)pion::tcp::server
~server()pion::tcp::server [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1request__reader-members.html0000644000372000001440000007660112215647143027070 0ustar robertousers pion: Member List

pion::http::request_reader Member List

This is the complete list of members for pion::http::request_reader, including all inherited members.
bytes_available(void) const pion::http::parser [inline]
check_premature_eof(http::message &http_msg)pion::http::parser [inline]
compute_msg_status(http::message &http_msg, bool msg_parsed_ok)pion::http::parser [protected, static]
consume_bytes(const boost::system::error_code &read_error, std::size_t bytes_read)pion::http::reader [protected]
consume_bytes(void)pion::http::reader [protected]
consume_content(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
consume_content_as_next_chunk(http::message::chunk_cache_t &chunk_buffers)pion::http::parser [protected]
COOKIE_NAME_MAXpion::http::parser [protected, static]
COOKIE_VALUE_MAXpion::http::parser [protected, static]
create(tcp::connection_ptr &tcp_conn, finished_handler_t handler)pion::http::request_reader [inline, static]
create_error_category(void)pion::http::parser [protected, static]
DEFAULT_CONTENT_MAXpion::http::parser [static]
eof(void) const pion::http::parser [inline]
ERROR_CHUNK_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_NAME_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_VALUE_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_INVALID_CONTENT_LENGTH enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_CHUNK_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_HEADER_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_TOO_MUCH_CONTENT enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_EMPTY enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_SIZE enum value (defined in pion::http::parser)pion::http::parser
error_value_t enum namepion::http::parser
ERROR_VERSION_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_VERSION_EMPTY enum value (defined in pion::http::parser)pion::http::parser
finish(http::message &http_msg) const pion::http::parser
finish_header_parsing(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
finished_handler_t typedefpion::http::request_reader
finished_parsing_headers(const boost::system::error_code &ec)pion::http::request_reader [inline, protected, virtual]
finished_reading(const boost::system::error_code &ec)pion::http::request_reader [inline, protected, virtual]
gcount(void) const pion::http::parser [inline]
get_connection(void)pion::http::reader [inline]
get_content_bytes_read(void) const pion::http::parser [inline]
get_error_category(void)pion::http::parser [inline, static]
get_logger(void)pion::http::parser [inline]
get_max_content_length(void) const pion::http::parser [inline]
get_message(void)pion::http::request_reader [inline, protected, virtual]
get_parse_headers_only(void)pion::http::parser [inline]
get_raw_headers(void) const pion::http::parser [inline]
get_save_raw_headers(void) const pion::http::parser [inline]
get_total_bytes_read(void) const pion::http::parser [inline]
HEADER_NAME_MAXpion::http::parser [protected, static]
HEADER_VALUE_MAXpion::http::parser [protected, static]
is_char(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_control(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_cookie_attribute(const std::string &name, bool set_cookie_header) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_hex_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_parsing_request(void) const pion::http::parser [inline]
is_parsing_response(void) const pion::http::parser [inline]
is_special(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
load_read_pos(const char *&read_ptr, const char *&read_end_ptr) const pion::http::parser [inline]
m_finishedpion::http::request_reader [protected]
m_http_msgpion::http::request_reader [protected]
m_is_requestpion::http::parser [protected]
m_loggerpion::http::parser [mutable, protected]
m_parsed_headerspion::http::request_reader [protected]
m_read_end_ptrpion::http::parser [protected]
m_read_ptrpion::http::parser [protected]
METHOD_MAXpion::http::parser [protected, static]
parse(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
parse_chunks(http::message::chunk_cache_t &chunk_buffers, boost::system::error_code &ec)pion::http::parser [protected]
parse_cookie_header(ihash_multimap &dict, const char *ptr, const std::size_t len, bool set_cookie_header)pion::http::parser [static]
parse_cookie_header(ihash_multimap &dict, const std::string &cookie_header, bool set_cookie_header)pion::http::parser [inline, static]
parse_forwarded_for(const std::string &header, std::string &public_ip)pion::http::parser [static]
parse_headers(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
parse_headers_only(bool b=true)pion::http::parser [inline]
parse_missing_data(http::message &http_msg, std::size_t len, boost::system::error_code &ec)pion::http::parser
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const std::string &form_data)pion::http::parser [inline, static]
parse_uri(const std::string &uri, std::string &proto, std::string &host, boost::uint16_t &port, std::string &path, std::string &query)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const std::string &query)pion::http::parser [inline, static]
parser(const bool is_request, std::size_t max_content_length=DEFAULT_CONTENT_MAX)pion::http::parser [inline]
payload_handler_t typedefpion::http::parser
QUERY_NAME_MAXpion::http::parser [protected, static]
QUERY_STRING_MAXpion::http::parser [protected, static]
QUERY_VALUE_MAXpion::http::parser [protected, static]
read_bytes(void)pion::http::request_reader [inline, protected, virtual]
reader(const bool is_request, tcp::connection_ptr &tcp_conn)pion::http::reader [inline, protected]
receive(void)pion::http::reader
request_reader(tcp::connection_ptr &tcp_conn, finished_handler_t handler)pion::http::request_reader [inline, protected]
reset(void)pion::http::parser [inline]
reset_max_content_length(void)pion::http::parser [inline]
RESOURCE_MAXpion::http::parser [protected, static]
set_error(boost::system::error_code &ec, error_value_t ev)pion::http::parser [inline, protected, static]
set_headers_parsed_callback(finished_handler_t &h)pion::http::request_reader [inline]
set_logger(logger log_ptr)pion::http::parser [inline]
set_max_content_length(std::size_t n)pion::http::parser [inline]
set_payload_handler(payload_handler_t &h)pion::http::parser [inline]
set_read_buffer(const char *ptr, size_t len)pion::http::parser [inline]
set_save_raw_headers(bool b)pion::http::parser [inline]
set_timeout(boost::uint32_t seconds)pion::http::reader [inline]
skip_header_parsing(http::message &http_msg)pion::http::parser [inline]
STATUS_MESSAGE_MAXpion::http::parser [protected, static]
update_message_with_header_data(http::message &http_msg) const pion::http::parser [protected]
~parser()pion::http::parser [inline, virtual]
~reader() (defined in pion::http::reader)pion::http::reader [inline, virtual]
~request_reader() (defined in pion::http::request_reader)pion::http::request_reader [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x67.html0000644000372000001440000004364412215647143022163 0ustar robertousers pion: Class Members - Functions
 

- g -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x69.html0000644000372000001440000001336012215647143022155 0ustar robertousers pion: Class Members - Functions
 

- i -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x64.html0000644000372000001440000001406312215647143021136 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- d -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x75.html0000644000372000001440000001460612215647143021143 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- u -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions.html0000644000372000001440000002062512215647143020356 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- a -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1plugin__missing__symbol.html0000644000372000001440000000527112215647143027346 0ustar robertousers pion: pion::error::plugin_missing_symbol Class Reference

pion::error::plugin_missing_symbol Class Reference

exception thrown if a plugin is missing a required symbol More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if a plugin is missing a required symbol

Definition at line 192 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1spdy_1_1__spdy__header__info-members.html0000644000372000001440000000522512215647143030226 0ustar robertousers pion: Member List

pion::spdy::_spdy_header_info Member List

This is the complete list of members for pion::spdy::_spdy_header_info, including all inherited members.
frame_type (defined in pion::spdy::_spdy_header_info)pion::spdy::_spdy_header_info
header_block (defined in pion::spdy::_spdy_header_info)pion::spdy::_spdy_header_info
header_block_len (defined in pion::spdy::_spdy_header_info)pion::spdy::_spdy_header_info
stream_id (defined in pion::spdy::_spdy_header_info)pion::spdy::_spdy_header_info

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1single__service__scheduler.html0000644000372000001440000001645312215647143026263 0ustar robertousers pion: pion::single_service_scheduler Class Reference

pion::single_service_scheduler Class Reference

#include <scheduler.hpp>

Inherits pion::multi_thread_scheduler.

List of all members.

Public Member Functions

 single_service_scheduler (void)
 constructs a new single_service_scheduler
virtual ~single_service_scheduler ()
 virtual destructor
virtual boost::asio::io_service & get_io_service (void)
 returns an async I/O service used to schedule work
virtual void startup (void)
 Starts the thread scheduler (this is called automatically when necessary).

Protected Member Functions

virtual void stop_services (void)
 stops all services used to schedule work
virtual void finish_services (void)
 finishes all services used to schedule work

Protected Attributes

boost::asio::io_service m_service
 service used to manage async I/O events
boost::asio::deadline_timer m_timer
 timer used to periodically check for shutdown

Detailed Description

single_service_scheduler: uses a single IO service to schedule work

Definition at line 246 of file scheduler.hpp.


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1request-members.html0000644000372000001440000013475512215647143025414 0ustar robertousers pion: Member List

pion::http::request Member List

This is the complete list of members for pion::http::request, including all inherited members.
add_cookie(const std::string &key, const std::string &value)pion::http::message [inline]
add_header(const std::string &key, const std::string &value)pion::http::message [inline]
add_query(const std::string &key, const std::string &value)pion::http::request [inline]
append_cookie_headers(void)pion::http::request [inline, protected, virtual]
append_headers(write_buffers_t &write_buffers)pion::http::message [inline, protected]
change_cookie(const std::string &key, const std::string &value)pion::http::message [inline]
change_header(const std::string &key, const std::string &value)pion::http::message [inline]
change_query(const std::string &key, const std::string &value)pion::http::request [inline]
change_resource(const std::string &str)pion::http::request [inline]
change_value(DictionaryType &dict, const std::string &key, const std::string &value)pion::http::message [inline, protected, static]
check_keep_alive(void) const pion::http::message [inline]
chunk_cache_t typedefpion::http::message
clear(void)pion::http::request [inline, virtual]
clear_content(void)pion::http::message [inline]
clear_first_line(void) const pion::http::message [inline, protected]
concatenate_chunks(void)pion::http::message
CONTENT_TYPE_HTML (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_MULTIPART_FORM_DATA (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_TEXT (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_URLENCODED (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_XML (defined in pion::http::types)pion::http::types [static]
COOKIE_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
create_content_buffer(void)pion::http::message [inline]
data_status_t enum namepion::http::message
delete_cookie(const std::string &key)pion::http::message [inline]
delete_header(const std::string &key)pion::http::message [inline]
delete_query(const std::string &key)pion::http::request [inline]
delete_value(DictionaryType &dict, const std::string &key)pion::http::message [inline, protected, static]
get_chunk_cache(void)pion::http::message [inline]
get_chunks_supported(void) const pion::http::message [inline]
get_content(void)pion::http::message [inline]
get_content(void) const pion::http::message [inline]
get_content_buffer_size() const pion::http::message [inline]
get_content_length(void) const pion::http::message [inline]
get_cookie(const std::string &key) const pion::http::message [inline]
get_cookies(void)pion::http::message [inline]
get_date_string(const time_t t)pion::http::types [static]
get_first_line(void) const pion::http::message [inline]
get_header(const std::string &key) const pion::http::message [inline]
get_headers(void)pion::http::message [inline]
get_method(void) const pion::http::request [inline]
get_original_resource(void) const pion::http::request [inline]
get_queries(void)pion::http::request [inline]
get_query(const std::string &key) const pion::http::request [inline]
get_query_string(void) const pion::http::request [inline]
get_remote_ip(void)pion::http::message [inline]
get_resource(void) const pion::http::request [inline]
get_status() const pion::http::message [inline]
get_user() const pion::http::request [inline]
get_value(const DictionaryType &dict, const std::string &key)pion::http::message [inline, protected, static]
get_version_major(void) const pion::http::message [inline]
get_version_minor(void) const pion::http::message [inline]
get_version_string(void) const pion::http::message [inline]
has_cookie(const std::string &key) const pion::http::message [inline]
has_data_after_missing_packets() const pion::http::message [inline]
has_header(const std::string &key) const pion::http::message [inline]
has_missing_packets() const pion::http::message [inline]
has_query(const std::string &key) const pion::http::request [inline]
HEADER_AUTHORIZATION (defined in pion::http::types)pion::http::types [static]
HEADER_CLIENT_IP (defined in pion::http::types)pion::http::types [static]
HEADER_CONNECTION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_DISPOSITION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LENGTH (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_TYPE (defined in pion::http::types)pion::http::types [static]
HEADER_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_HOST (defined in pion::http::types)pion::http::types [static]
HEADER_IF_MODIFIED_SINCE (defined in pion::http::types)pion::http::types [static]
HEADER_LAST_MODIFIED (defined in pion::http::types)pion::http::types [static]
HEADER_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
HEADER_REFERER (defined in pion::http::types)pion::http::types [static]
HEADER_SET_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_TRANSFER_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_USER_AGENT (defined in pion::http::types)pion::http::types [static]
HEADER_X_FORWARDED_FOR (defined in pion::http::types)pion::http::types [static]
is_chunked(void) const pion::http::message [inline]
is_content_buffer_allocated() const pion::http::message [inline]
is_content_length_implied(void) const pion::http::request [inline, virtual]
is_valid(void) const pion::http::message [inline]
m_first_linepion::http::message [mutable, protected]
make_query_string(const ihash_multimap &query_params)pion::http::types [static]
make_set_cookie_header(const std::string &name, const std::string &value, const std::string &path, const bool has_max_age=false, const unsigned long max_age=0)pion::http::types [static]
message(void)pion::http::message [inline]
message(const message &http_msg)pion::http::message [inline]
operator=(const message &http_msg)pion::http::message [inline]
prepare_buffers_for_send(write_buffers_t &write_buffers, const bool keep_alive, const bool using_chunks)pion::http::message [inline]
prepare_headers_for_send(const bool keep_alive, const bool using_chunks)pion::http::message [inline, protected]
read(std::istream &in, boost::system::error_code &ec, parser &http_parser)pion::http::message
read(std::istream &in, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))pion::http::message
receive(tcp::connection &tcp_conn, boost::system::error_code &ec, parser &http_parser)pion::http::message
receive(tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))pion::http::message
request(const std::string &resource)pion::http::request [inline]
request(void)pion::http::request [inline]
REQUEST_METHOD_DELETE (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_GET (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_HEAD (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_POST (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_PUT (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
send(tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false)pion::http::message
set_chunks_supported(bool b)pion::http::message [inline]
set_content(const std::string &value)pion::http::request [inline]
set_content(const char *value, const boost::uint64_t &size)pion::http::request [inline]
set_content_length(const boost::uint64_t n)pion::http::message [inline]
set_content_type(const std::string &type)pion::http::message [inline]
set_data_after_missing_packet(bool newVal) (defined in pion::http::message)pion::http::message [inline]
set_do_not_send_content_length(void)pion::http::message [inline]
set_is_valid(bool b=true)pion::http::message [inline]
set_method(const std::string &str)pion::http::request [inline]
set_missing_packets(bool newVal)pion::http::message [inline]
set_query_string(const std::string &str)pion::http::request [inline]
set_remote_ip(const boost::asio::ip::address &ip)pion::http::message [inline]
set_resource(const std::string &str)pion::http::request [inline]
set_status(data_status_t newVal) (defined in pion::http::message)pion::http::message [inline]
set_user(user_ptr user)pion::http::request [inline]
set_version_major(const boost::uint16_t n)pion::http::message [inline]
set_version_minor(const boost::uint16_t n)pion::http::message [inline]
STATUS_NONE enum value (defined in pion::http::message)pion::http::message
STATUS_OK enum value (defined in pion::http::message)pion::http::message
STATUS_PARTIAL enum value (defined in pion::http::message)pion::http::message
STATUS_TRUNCATED enum value (defined in pion::http::message)pion::http::message
STRING_CRLF (defined in pion::http::types)pion::http::types [static]
STRING_EMPTY (defined in pion::http::types)pion::http::types [static]
STRING_HTTP_VERSION (defined in pion::http::types)pion::http::types [static]
update_content_length_using_header(void)pion::http::message [inline]
update_first_line(void) const pion::http::request [inline, protected, virtual]
update_transfer_encoding_using_header(void)pion::http::message [inline]
use_query_params_for_post_content(void)pion::http::request [inline]
use_query_params_for_query_string(void)pion::http::request [inline]
write(std::ostream &out, boost::system::error_code &ec, bool headers_only=false)pion::http::message
write_buffers_t typedefpion::http::message
~message()pion::http::message [inline, virtual]
~request()pion::http::request [inline, virtual]
~types()pion::http::types [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1request__writer.html0000644000372000001440000005256412215647143025514 0ustar robertousers pion: pion::http::request_writer Class Reference

pion::http::request_writer Class Reference

#include <request_writer.hpp>

Inherits pion::http::writer.

List of all members.

Public Member Functions

virtual ~request_writer ()
 default destructor
http::requestget_request (void)
 returns a non-const reference to the request that will be sent

Static Public Member Functions

static boost::shared_ptr
< request_writer
create (tcp::connection_ptr &tcp_conn, finished_handler_t handler=finished_handler_t())
static boost::shared_ptr
< request_writer
create (tcp::connection_ptr &tcp_conn, http::request_ptr &http_request_ptr, finished_handler_t handler=finished_handler_t())

Protected Member Functions

 request_writer (tcp::connection_ptr &tcp_conn, finished_handler_t handler)
 request_writer (tcp::connection_ptr &tcp_conn, http::request_ptr &http_request_ptr, finished_handler_t handler)
virtual void prepare_buffers_for_send (http::message::write_buffers_t &write_buffers)
virtual write_handler_t bind_to_write_handler (void)
 returns a function bound to http::writer::handle_write()
virtual void handle_write (const boost::system::error_code &write_error, std::size_t bytes_written)

Detailed Description

request_writer: used to asynchronously send HTTP requests

Definition at line 30 of file request_writer.hpp.


Constructor & Destructor Documentation

pion::http::request_writer::request_writer ( tcp::connection_ptr &  tcp_conn,
finished_handler_t  handler 
) [inline, protected]

protected constructor restricts creation of objects (use create())

Parameters:
tcp_conn TCP connection used to send the request
handler function called after the request has been sent

Definition at line 83 of file request_writer.hpp.

References pion::http::writer::set_logger().

Referenced by create().

pion::http::request_writer::request_writer ( tcp::connection_ptr &  tcp_conn,
http::request_ptr &  http_request_ptr,
finished_handler_t  handler 
) [inline, protected]

protected constructor restricts creation of objects (use create())

Parameters:
tcp_conn TCP connection used to send the request
http_request_ptr pointer to the request that will be sent
handler function called after the request has been sent

Definition at line 96 of file request_writer.hpp.

References pion::http::writer::set_logger(), and pion::http::writer::write_no_copy().


Member Function Documentation

static boost::shared_ptr<request_writer> pion::http::request_writer::create ( tcp::connection_ptr &  tcp_conn,
http::request_ptr &  http_request_ptr,
finished_handler_t  handler = finished_handler_t() 
) [inline, static]

creates new request_writer objects

Parameters:
tcp_conn TCP connection used to send the request
http_request_ptr pointer to the request that will be sent
handler function called after the request has been sent
Returns:
boost::shared_ptr<request_writer> shared pointer to the new writer object that was created

Definition at line 64 of file request_writer.hpp.

References request_writer().

static boost::shared_ptr<request_writer> pion::http::request_writer::create ( tcp::connection_ptr &  tcp_conn,
finished_handler_t  handler = finished_handler_t() 
) [inline, static]

creates new request_writer objects

Parameters:
tcp_conn TCP connection used to send the request
handler function called after the request has been sent
Returns:
boost::shared_ptr<request_writer> shared pointer to the new writer object that was created

Definition at line 48 of file request_writer.hpp.

References request_writer().

virtual void pion::http::request_writer::handle_write ( const boost::system::error_code &  write_error,
std::size_t  bytes_written 
) [inline, protected, virtual]

called after the request is sent

Parameters:
write_error error status from the last write operation
bytes_written number of bytes sent by the last write operation

Implements pion::http::writer.

Definition at line 139 of file request_writer.hpp.

References pion::http::writer::clear(), pion::http::writer::finished_writing(), pion::http::writer::get_logger(), and pion::http::writer::sending_chunked_message().

Referenced by bind_to_write_handler().

virtual void pion::http::request_writer::prepare_buffers_for_send ( http::message::write_buffers_t write_buffers  )  [inline, protected, virtual]

initializes a vector of write buffers with the HTTP message information

Parameters:
write_buffers vector of write buffers to initialize

Implements pion::http::writer.

Definition at line 118 of file request_writer.hpp.

References pion::http::writer::get_connection(), pion::http::writer::get_content_length(), and pion::http::writer::sending_chunked_message().


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/tcp__timer_8cpp_source.html0000644000372000001440000001266712215647143023014 0ustar robertousers pion: src/tcp_timer.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1algorithm.html0000644000372000001440000014242112215647143023126 0ustar robertousers pion: pion::algorithm Struct Reference

pion::algorithm Struct Reference

List of all members.

Static Public Member Functions

static bool base64_decode (std::string const &input, std::string &output)
static bool base64_encode (std::string const &input, std::string &output)
static std::string url_decode (const std::string &str)
 escapes URL-encoded strings (a20value+with20spaces)
static std::string url_encode (const std::string &str)
 encodes strings so that they are safe for URLs (with20spaces)
static std::string xml_encode (const std::string &str)
 TODO: escapes XML/HTML-encoded strings (1 < 2).
static void float_from_bytes (long double &value, const unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits)
static void float_to_bytes (long double value, unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits)
static boost::uint8_t to_uint8 (unsigned char byte)
 convert sequence of one byte to 8-bit unsigned integer
static boost::int8_t to_int8 (unsigned char byte)
 convert sequence of one byte to 8-bit signed integer
static boost::uint8_t to_uint8 (char byte)
 convert sequence of one byte to 8-bit unsigned integer
static boost::int8_t to_int8 (char byte)
 convert sequence of one byte to 8-bit signed integer
static boost::uint16_t to_uint16 (unsigned char high, unsigned char low)
 convert sequence of two bytes to 16-bit unsigned integer
static boost::int16_t to_int16 (unsigned char high, unsigned char low)
 convert sequence of two bytes to 16-bit signed integer
static boost::uint32_t to_uint24 (unsigned char high, unsigned char mid, unsigned char low)
 convert sequence of three bytes to 24-bit unsigned integer
static boost::int32_t to_int24 (unsigned char high, unsigned char mid, unsigned char low)
 convert sequence of three bytes to 24-bit signed integer
static boost::uint32_t to_uint32 (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low)
 convert sequence of four bytes to 32-bit unsigned integer
static boost::int32_t to_int32 (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low)
 convert sequence of four bytes to 32-bit signed integer
static boost::uint64_t to_uint64 (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low)
 convert sequence of eight bytes to 64-bit unsigned integer
static boost::int64_t to_int64 (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low)
 convert sequence of eight bytes to 64-bit signed integer
template<typename T1 , typename T2 >
static boost::uint16_t to_uint16 (T1 high, T2 low)
 convert sequence of two bytes to 16-bit unsigned integer
template<typename T1 , typename T2 >
static boost::int16_t to_int16 (T1 high, T2 low)
 convert sequence of two bytes to 16-bit signed integer
template<typename T1 , typename T2 , typename T3 >
static boost::uint32_t to_uint24 (T1 high, T2 mid, T3 low)
 convert sequence of three bytes to 24-bit unsigned integer
template<typename T1 , typename T2 , typename T3 >
static boost::int32_t to_int24 (T1 high, T2 mid, T3 low)
 convert sequence of three bytes to 24-bit signed integer
template<typename T1 , typename T2 , typename T3 , typename T4 >
static boost::uint32_t to_uint32 (T1 high, T2 mid1, T3 mid2, T4 low)
 convert sequence of four bytes to 32-bit unsigned integer
template<typename T1 , typename T2 , typename T3 , typename T4 >
static boost::int32_t to_int32 (T1 high, T2 mid1, T3 mid2, T4 low)
 convert sequence of four bytes to 32-bit signed integer
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 >
static boost::uint64_t to_uint64 (T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low)
 convert sequence of eight bytes to 64-bit unsigned integer
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 >
static boost::int64_t to_int64 (T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low)
 convert sequence of eight bytes to 64-bit signed integer
template<typename Byte >
static boost::uint8_t to_uint8 (const Byte *buf)
 convert byte pointer into an 8-bit unsigned integer
template<typename Byte >
static boost::int8_t to_int8 (const Byte *buf)
 convert byte pointer into an 8-bit signed integer
template<typename Byte >
static boost::uint16_t to_uint16 (const Byte *buf)
 convert sequence of two bytes to 16-bit unsigned integer
template<typename Byte >
static boost::int16_t to_int16 (const Byte *buf)
 convert sequence of two bytes to 16-bit signed integer
template<typename Byte >
static boost::uint32_t to_uint24 (const Byte *buf)
 convert sequence of three bytes to 24-bit unsigned integer
template<typename Byte >
static boost::int32_t to_int24 (const Byte *buf)
 convert sequence of three bytes to 24-bit signed integer
template<typename Byte >
static boost::uint32_t to_uint32 (const Byte *buf)
 convert sequence of four bytes to 32-bit unsigned integer
template<typename Byte >
static boost::int32_t to_int32 (const Byte *buf)
 convert sequence of four bytes to 32-bit signed integer
template<typename Byte >
static boost::uint64_t to_uint64 (const Byte *buf)
 convert sequence of eight bytes to 64-bit unsigned integer
template<typename Byte >
static boost::int64_t to_int64 (const Byte *buf)
 convert sequence of eight bytes to 64-bit signed integer
template<typename Byte >
static void from_uint8 (Byte *buf, const boost::uint8_t n)
 convert 8-bit unsigned integer into sequence of one byte
template<typename Byte >
static void from_int8 (Byte *buf, const boost::int8_t n)
 convert 8-bit signed integer into sequence of one byte
template<typename Byte >
static void from_uint16 (Byte *buf, const boost::uint16_t n)
 convert 16-bit unsigned integer into sequence of two bytes
template<typename Byte >
static void from_int16 (Byte *buf, const boost::int16_t n)
 convert 16-bit signed integer into sequence of two bytes
template<typename Byte >
static void from_uint24 (Byte *buf, const boost::uint32_t n)
 convert 24-bit unsigned integer into sequence of three bytes
template<typename Byte >
static void from_int24 (Byte *buf, const boost::int32_t n)
 convert 24-bit signed integer into sequence of three bytes
template<typename Byte >
static void from_uint32 (Byte *buf, const boost::uint32_t n)
 convert 32-bit unsigned integer into sequence of four bytes
template<typename Byte >
static void from_int32 (Byte *buf, const boost::int32_t n)
 convert 32-bit signed integer into sequence of four bytes
template<typename Byte >
static void from_uint64 (Byte *buf, const boost::uint64_t n)
 convert 64-bit unsigned integer into sequence of eight bytes
template<typename Byte >
static void from_int64 (Byte *buf, const boost::int64_t n)
 convert 64-bit signed integer into sequence of eight bytes
template<typename Byte >
static float to_float (const Byte *ptr)
template<typename Byte >
static double to_double (const Byte *ptr)
template<typename Byte >
static long double to_long_double (const Byte *ptr)
template<typename Byte >
static void from_float (Byte *ptr, const float n)
template<typename Byte >
static void from_double (Byte *ptr, const double n)
template<typename Byte >
static void from_long_double (Byte *ptr, const long double n)

Detailed Description

Definition at line 19 of file algorithm.hpp.


Member Function Documentation

bool pion::algorithm::base64_decode ( std::string const &  input,
std::string &  output 
) [static]

base64 decoding

Parameters:
input - base64 encoded string
output - decoded string ( may include non-text chars)
Returns:
true if successful, false if input string contains non-base64 symbols

Definition at line 24 of file algorithm.cpp.

Referenced by pion::http::basic_auth::parse_credentials().

bool pion::algorithm::base64_encode ( std::string const &  input,
std::string &  output 
) [static]

base64 encoding

Parameters:
input - arbitrary string ( may include non-text chars)
output - base64 encoded string
Returns:
true if successful,

Definition at line 104 of file algorithm.cpp.

Referenced by pion::http::cookie_auth::process_login().

void pion::algorithm::float_from_bytes ( long double &  value,
const unsigned char *  ptr,
size_t  num_exp_bits,
size_t  num_fraction_bits 
) [static]

convert sequence of bytes in IEEE 754 format into a native floating point data type reference: http://en.wikipedia.org/wiki/Single_precision_floating-point_format

Definition at line 309 of file algorithm.cpp.

void pion::algorithm::float_to_bytes ( long double  value,
unsigned char *  ptr,
size_t  num_exp_bits,
size_t  num_fraction_bits 
) [static]

convert native floating point type into a sequence of bytes in IEEE 754 format reference: http://en.wikipedia.org/wiki/Single_precision_floating-point_format

Definition at line 340 of file algorithm.cpp.

template<typename Byte >
static void pion::algorithm::from_double ( Byte *  ptr,
const double  n 
) [inline, static]

convert double into sequence of eight bytes in "double precision" binary64 format http://en.wikipedia.org/wiki/Double_precision_floating-point_format

Definition at line 375 of file algorithm.hpp.

template<typename Byte >
static void pion::algorithm::from_float ( Byte *  ptr,
const float  n 
) [inline, static]

convert float into sequence of four bytes in "single precision" binary32 format http://en.wikipedia.org/wiki/Single_precision_floating-point_format

Definition at line 368 of file algorithm.hpp.

template<typename Byte >
static void pion::algorithm::from_long_double ( Byte *  ptr,
const long double  n 
) [inline, static]

convert long double into sequence of sixteen bytes in 128-bit "quadruple precision" format http://en.wikipedia.org/wiki/Quadruple_precision_floating-point_format

Definition at line 382 of file algorithm.hpp.

template<typename Byte >
static double pion::algorithm::to_double ( const Byte *  ptr  )  [inline, static]

convert sequence of eight bytes in 64-bit "double precision" binary64 format into a double http://en.wikipedia.org/wiki/Double_precision_floating-point_format

Definition at line 350 of file algorithm.hpp.

template<typename Byte >
static float pion::algorithm::to_float ( const Byte *  ptr  )  [inline, static]

convert sequence of four bytes in 32-bit "single precision" binary32 format into a float http://en.wikipedia.org/wiki/Single_precision_floating-point_format

Definition at line 341 of file algorithm.hpp.

template<typename Byte >
static long double pion::algorithm::to_long_double ( const Byte *  ptr  )  [inline, static]

convert sequence of sixteen bytes in 128-bit "quadruple precision" format into a long double http://en.wikipedia.org/wiki/Quadruple_precision_floating-point_format

Definition at line 359 of file algorithm.hpp.

std::string pion::algorithm::xml_encode ( const std::string &  str  )  [static]

TODO: escapes XML/HTML-encoded strings (1 < 2).

encodes strings so that they are safe for XML/HTML (2 > 1)

Definition at line 225 of file algorithm.cpp.

Referenced by pion::http::server::handle_forbidden_request(), pion::http::server::handle_method_not_allowed(), pion::http::server::handle_not_found_request(), pion::http::server::handle_server_error(), and pion::plugins::FileService::operator()().


The documentation for this struct was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1file__not__found-members.html0000644000372000001440000000664112215647143027356 0ustar robertousers pion: Member List

pion::error::file_not_found Member List

This is the complete list of members for pion::error::file_not_found, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/admin__rights_8hpp_source.html0000644000372000001440000001370112215647142023470 0ustar robertousers pion: include/pion/admin_rights.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/_allow_nothing_service_8cpp_source.html0000644000372000001440000001474212215647142025405 0ustar robertousers pion: services/AllowNothingService.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1reader.html0000644000372000001440000002672112215647143023527 0ustar robertousers pion: pion::http::reader Class Reference

pion::http::reader Class Reference

#include <reader.hpp>

Inherits pion::http::parser.

Inherited by pion::http::request_reader, and pion::http::response_reader.

List of all members.

Public Member Functions

void receive (void)
 Incrementally reads & parses the HTTP message.
tcp::connection_ptr & get_connection (void)
 returns a shared pointer to the TCP connection
void set_timeout (boost::uint32_t seconds)
 sets the maximum number of seconds for read operations

Protected Member Functions

 reader (const bool is_request, tcp::connection_ptr &tcp_conn)
void consume_bytes (const boost::system::error_code &read_error, std::size_t bytes_read)
void consume_bytes (void)
 Consumes bytes that have been read using an HTTP parser.
virtual void read_bytes (void)=0
 Reads more bytes from the TCP connection.
virtual void finished_reading (const boost::system::error_code &ec)=0
 Called after we have finished reading/parsing the HTTP message.
virtual http::messageget_message (void)=0
 Returns a reference to the HTTP message being parsed.

Detailed Description

reader: asynchronously reads and parses HTTP messages

Definition at line 28 of file reader.hpp.


Constructor & Destructor Documentation

pion::http::reader::reader ( const bool  is_request,
tcp::connection_ptr &  tcp_conn 
) [inline, protected]

protected constructor: only derived classes may create objects

Parameters:
is_request if true, the message is parsed as an HTTP request; if false, the message is parsed as an HTTP response
tcp_conn TCP connection containing a new message to parse

Definition at line 55 of file reader.hpp.


Member Function Documentation

void pion::http::reader::consume_bytes ( const boost::system::error_code &  read_error,
std::size_t  bytes_read 
) [protected]

Consumes bytes that have been read using an HTTP parser

Parameters:
read_error error status from the last read operation
bytes_read number of bytes consumed by the last read operation

Definition at line 41 of file http_reader.cpp.

References consume_bytes(), pion::http::parser::is_parsing_request(), pion::http::parser::m_logger, and pion::http::parser::set_read_buffer().


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/_file_service_8hpp_source.html0000644000372000001440000011004312215647142023454 0ustar robertousers pion: services/FileService.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x72.html0000644000372000001440000002172112215647143021134 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- r -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/process_8hpp_source.html0000644000372000001440000001745512215647142022351 0ustar robertousers pion: include/pion/process.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classes.html0000644000372000001440000003553312215647143020007 0ustar robertousers pion: Alphabetical List

Class Index

A | B | C | D | E | F | H | I | L | M | O | P | R | S | T | U | W | _
  A  
decompressor (pion::spdy)   
  L  
plugin_ptr (pion)   server (pion::http)   
admin_rights (pion)   directory_not_found (pion::error)   LogService (pion::plugins)   plugin_server (pion::http)   one_to_one_scheduler::service_pair_type (pion)   
algorithm (pion)   DiskFile (pion::plugins)   LogServiceAppender (pion::plugins)   plugin_service (pion::http)   single_service_scheduler (pion)   
AllowNothingService (pion::plugins)   DiskFileSender (pion::plugins)   
  M  
plugin_undefined (pion::error)   spdy_control_frame_info (pion::spdy)   
auth (pion::http)   duplicate_plugin (pion::error)   plugin_manager::map_type (pion)   process (pion)   stream (pion::tcp)   
  B  
  E  
message (pion::http)   
  R  
stream_buffer (pion::tcp)   
bad_arg (pion::error)   EchoService (pion::plugins)   multi_thread_scheduler (pion)   read_file (pion::error)   
  T  
bad_config (pion::error)   parser::error_category_t (pion::spdy)   
  O  
reader (pion::http)   timer (pion::tcp)   
bad_password_hash (pion::error)   parser::error_category_t (pion::http)   one_to_one_scheduler (pion)   message::receive_error_t (pion::http)   types (pion::http)   
basic_auth (pion::http)   exception (pion)   open_file (pion::error)   request (pion::http)   
  U  
  C  
  F  
open_plugin (pion::error)   request_reader (pion::http)   user (pion)   
config (pion::test)   file_not_found (pion::error)   
  P  
request_writer (pion::http)   user_manager (pion)   
process::config_type (pion)   FileService (pion::plugins)   parser (pion::spdy)   response (pion::http)   
  W  
connection (pion::tcp)   
  H  
parser (pion::http)   response_reader (pion::http)   writer (pion::http)   
message::content_buffer_t (pion::http)   HelloServer   plugin (pion)   response_writer (pion::http)   
  _  
cookie_auth (pion::http)   HelloService (pion::plugins)   plugin_instance_ptr (pion)   
  S  
_http_protocol_info_t (pion::spdy)   
CookieService (pion::plugins)   
  I  
plugin_manager (pion)   safe_xml_log_formatter (pion::test)   _spdy_header_info (pion::spdy)   
  D  
iequal_to (pion)   plugin_missing_symbol (pion::error)   scheduler (pion)   _value_string (pion::spdy)   
plugin::data_type (pion)   ihash (pion)   plugin_not_found (pion::error)   server (pion::tcp)   
A | B | C | D | E | F | H | I | L | M | O | P | R | S | T | U | W | _

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1spdy_1_1spdy__control__frame__info.html0000644000372000001440000001001612215647143030033 0ustar robertousers pion: pion::spdy::spdy_control_frame_info Struct Reference

pion::spdy::spdy_control_frame_info Struct Reference

This structure will be tied to each SPDY frame. More...

#include <types.hpp>

List of all members.

Public Attributes

bool control_bit
boost::uint16_t version
boost::uint16_t type
boost::uint8_t flags
boost::uint32_t length

Detailed Description

This structure will be tied to each SPDY frame.

Definition at line 73 of file types.hpp.


The documentation for this struct was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1bad__password__hash.html0000644000372000001440000000506112215647143026402 0ustar robertousers pion: pion::error::bad_password_hash Class Reference

pion::error::bad_password_hash Class Reference

exception thrown if a bad password hash is provided More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if a bad password hash is provided

Definition at line 206 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1user-members.html0000644000372000001440000001023012215647143023317 0ustar robertousers pion: Member List

pion::user Member List

This is the complete list of members for pion::user, including all inherited members.
get_password() const pion::user [inline]
get_username() const pion::user [inline]
m_passwordpion::user [protected]
m_password_hashpion::user [protected]
m_usernamepion::user [protected]
match_password(const std::string &password) const pion::user [inline, virtual]
set_password(const std::string &password)pion::user [inline, virtual]
set_password_hash(const std::string &password_hash)pion::user [inline, virtual]
user(std::string const &username)pion::user [inline]
user(std::string const &username, std::string const &password)pion::user [inline]
~user()pion::user [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1iequal__to-members.html0000644000372000001440000000340512215647143024707 0ustar robertousers pion: Member List

pion::iequal_to Member List

This is the complete list of members for pion::iequal_to, including all inherited members.
operator()(std::string const &x, std::string const &y) const (defined in pion::iequal_to)pion::iequal_to [inline]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1spdy_1_1__spdy__header__info.html0000644000372000001440000000736212215647143026602 0ustar robertousers pion: pion::spdy::_spdy_header_info Struct Reference

pion::spdy::_spdy_header_info Struct Reference

#include <types.hpp>

List of all members.

Public Attributes

boost::uint32_t stream_id
boost::uint8_t * header_block
boost::uint8_t header_block_len
boost::uint16_t frame_type

Detailed Description

This structure will be tied to each SPDY header frame. Only applies to frames containing headers: SYN_STREAM, SYN_REPLY, HEADERS Note that there may be multiple SPDY frames in one packet.

Definition at line 85 of file types.hpp.


The documentation for this struct was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_eval.html0000644000372000001440000000375312215647143021370 0ustar robertousers pion: Class Members - Enumerator
 

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1plugin__server.html0000644000372000001440000005506512215647143025313 0ustar robertousers pion: pion::http::plugin_server Class Reference

pion::http::plugin_server Class Reference

#include <plugin_server.hpp>

Inherits pion::http::server.

List of all members.

Public Member Functions

virtual ~plugin_server ()
 default destructor
 plugin_server (const unsigned int tcp_port=0)
 plugin_server (const boost::asio::ip::tcp::endpoint &endpoint)
 plugin_server (scheduler &sched, const unsigned int tcp_port=0)
 plugin_server (scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)
void add_service (const std::string &resource, http::plugin_service *service_ptr)
void load_service (const std::string &resource, const std::string &service_name)
void set_service_option (const std::string &resource, const std::string &name, const std::string &value)
void load_service_config (const std::string &config_name)
virtual void clear (void)
 clears all the web services that are currently configured

Protected Member Functions

virtual void before_starting (void)
 called before the TCP server starts listening for new connections
virtual void after_stopping (void)
 called after the TCP server has stopped listening for new connections

Detailed Description

plugin_server: a server that handles HTTP connections using http::plugin_service plug-ins

Definition at line 31 of file plugin_server.hpp.


Constructor & Destructor Documentation

pion::http::plugin_server::plugin_server ( const unsigned int  tcp_port = 0  )  [inline, explicit]

creates a new plugin_server object

Parameters:
tcp_port port number used to listen for new connections (IPv4)

Definition at line 45 of file plugin_server.hpp.

pion::http::plugin_server::plugin_server ( const boost::asio::ip::tcp::endpoint &  endpoint  )  [inline, explicit]

creates a new plugin_server object

Parameters:
endpoint TCP endpoint used to listen for new connections (see ASIO docs)

Definition at line 56 of file plugin_server.hpp.

pion::http::plugin_server::plugin_server ( scheduler sched,
const unsigned int  tcp_port = 0 
) [inline, explicit]

creates a new plugin_server object

Parameters:
sched the scheduler that will be used to manage worker threads
tcp_port port number used to listen for new connections (IPv4)

Definition at line 68 of file plugin_server.hpp.

pion::http::plugin_server::plugin_server ( scheduler sched,
const boost::asio::ip::tcp::endpoint &  endpoint 
) [inline]

creates a new plugin_server object

Parameters:
sched the scheduler that will be used to manage worker threads
endpoint TCP endpoint used to listen for new connections (see ASIO docs)

Definition at line 80 of file plugin_server.hpp.


Member Function Documentation

void pion::http::plugin_server::add_service ( const std::string &  resource,
http::plugin_service service_ptr 
)

adds a new web service to the web server

Parameters:
resource the resource name or uri-stem to bind to the web service
service_ptr a pointer to the web service

Definition at line 27 of file http_plugin_server.cpp.

References pion::plugin_manager< PluginType >::add(), pion::http::server::add_resource(), pion::tcp::server::m_logger, pion::http::plugin_service::set_resource(), and pion::http::server::strip_trailing_slash().

void pion::http::plugin_server::load_service ( const std::string &  resource,
const std::string &  service_name 
)

loads a web service from a shared object file

Parameters:
resource the resource name or uri-stem to bind to the web service
service_name the name of the web service to load (searches plug-in directories and appends extensions)

Definition at line 37 of file http_plugin_server.cpp.

References pion::http::server::add_resource(), pion::plugin_manager< PluginType >::load(), pion::tcp::server::m_logger, pion::http::plugin_service::set_resource(), and pion::http::server::strip_trailing_slash().

Referenced by load_service_config().

void pion::http::plugin_server::load_service_config ( const std::string &  config_name  ) 

Parses a simple web service configuration file. Each line in the file starts with one of the following commands:

path VALUE : adds a directory to the web service search path service RESOURCE FILE : loads web service bound to RESOURCE from FILE option RESOURCE NAME=VALUE : sets web service option NAME to VALUE

Blank lines or lines that begin with # are ignored as comments.

Parameters:
config_name the name of the config file to parse

Definition at line 56 of file http_plugin_server.cpp.

References pion::plugin::add_plugin_directory(), pion::plugin::find_config_file(), load_service(), pion::tcp::server::m_logger, pion::http::server::set_authentication(), and set_service_option().

void pion::http::plugin_server::set_service_option ( const std::string &  resource,
const std::string &  name,
const std::string &  value 
)

sets a configuration option for the web service associated with resource

Parameters:
resource the resource name or uri-stem that identifies the web service
name the name of the configuration option
value the value to set the option to

Definition at line 47 of file http_plugin_server.cpp.

References pion::tcp::server::m_logger, pion::plugin_manager< PluginType >::run(), pion::http::plugin_service::set_option(), and pion::http::server::strip_trailing_slash().

Referenced by load_service_config().


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/http__server_8cpp_source.html0000644000372000001440000011354112215647143023364 0ustar robertousers pion: src/http_server.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/_hello_service_8hpp_source.html0000644000372000001440000001031412215647142023640 0ustar robertousers pion: services/HelloService.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/_log_service_8cpp_source.html0000644000372000001440000004272012215647142023317 0ustar robertousers pion: services/LogService.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugin__ptr.html0000644000372000001440000001510512215647143023241 0ustar robertousers pion: pion::plugin_ptr< InterfaceClassType > Class Template Reference

pion::plugin_ptr< InterfaceClassType > Class Template Reference

#include <plugin.hpp>

Inherits pion::plugin.

List of all members.

Public Member Functions

 plugin_ptr (void)
 default constructor & destructor
 plugin_ptr (const plugin_ptr &p)
 copy constructor
plugin_ptroperator= (const plugin_ptr &p)
 assignment operator
InterfaceClassType * create (void)
 creates a new instance of the plug-in object
void destroy (InterfaceClassType *object_ptr)
 destroys an instance of the plug-in object

Protected Types

typedef InterfaceClassType * CreateObjectFunction (void)
 data type for a function that is used to create object instances
typedef void DestroyObjectFunction (InterfaceClassType *)
 data type for a function that is used to destroy object instances

Detailed Description

template<typename InterfaceClassType>
class pion::plugin_ptr< InterfaceClassType >

plugin_ptr: smart pointer that manages plug-in code loaded from shared object libraries

Definition at line 301 of file plugin.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1exception.html0000644000372000001440000001316312215647143022717 0ustar robertousers pion: pion::exception Class Reference

pion::exception Class Reference

Inherits std::exception.

Inherited by pion::error::bad_arg, pion::error::bad_config, pion::error::bad_password_hash, pion::error::directory_not_found, pion::error::duplicate_plugin, pion::error::file_not_found, pion::error::open_file, pion::error::open_plugin, pion::error::plugin_missing_symbol, pion::error::plugin_not_found, pion::error::plugin_undefined, and pion::error::read_file.

List of all members.

Public Member Functions

 exception (const std::string &msg)
 exception (const char *const msg)
virtual const char * what () const throw ()

Protected Member Functions

void set_what_msg (const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const
virtual void update_what_msg () const

Protected Attributes

std::string m_what_msg

Detailed Description

Definition at line 31 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1exception-members.html0000644000372000001440000000722112215647143024345 0ustar robertousers pion: Member List

pion::exception Member List

This is the complete list of members for pion::exception, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
update_what_msg() const (defined in pion::exception)pion::exception [inline, protected, virtual]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugin__manager.html0000644000372000001440000010601412215647143024046 0ustar robertousers pion: pion::plugin_manager< PluginType > Class Template Reference

pion::plugin_manager< PluginType > Class Template Reference

#include <plugin_manager.hpp>

List of all members.

Classes

class  map_type
 data type that maps identifiers to plug-in objects More...

Public Types

typedef boost::function1< void,
PluginType * > 
PluginRunFunction
 data type for a function that may be called by the run() method
typedef boost::function1
< boost::uint64_t, const
PluginType * > 
PluginStatFunction
 data type for a function that may be called by the getStat() method

Public Member Functions

 plugin_manager (void)
 default constructor
virtual ~plugin_manager ()
 default destructor
void clear (void)
 clears all the plug-in objects being managed
bool empty (void) const
 returns true if there are no plug-in objects being managed
void add (const std::string &plugin_id, PluginType *plugin_object_ptr)
void remove (const std::string &plugin_id)
void replace (const std::string &plugin_id, PluginType *plugin_ptr)
PluginType * clone (const std::string &plugin_id)
PluginType * load (const std::string &plugin_id, const std::string &plugin_type)
PluginType * get (const std::string &plugin_id)
const PluginType * get (const std::string &plugin_id) const
plugin_ptr< PluginType > get_lib_ptr (const std::string &plugin_id) const
PluginType * find (const std::string &resource)
void run (PluginRunFunction run_func)
void run (const std::string &plugin_id, PluginRunFunction run_func)
boost::uint64_t get_statistic (PluginStatFunction stat_func) const
boost::uint64_t get_statistic (const std::string &plugin_id, PluginStatFunction stat_func) const

Protected Attributes

map_type m_plugin_map
 collection of plug-in objects being managed
boost::mutex m_plugin_mutex
 mutex to make class thread-safe

Detailed Description

template<typename PluginType>
class pion::plugin_manager< PluginType >

plugin_manager: used to manage a collection of plug-in objects

Definition at line 31 of file plugin_manager.hpp.


Member Function Documentation

template<typename PluginType>
void pion::plugin_manager< PluginType >::add ( const std::string &  plugin_id,
PluginType *  plugin_object_ptr 
) [inline]

adds a new plug-in object

Parameters:
plugin_id unique identifier associated with the plug-in
plugin_object_ptr pointer to the plug-in object to add

Definition at line 188 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

Referenced by pion::http::plugin_server::add_service().

template<typename PluginType >
PluginType * pion::plugin_manager< PluginType >::clone ( const std::string &  plugin_id  )  [inline]

clones an existing plug-in object (creates a new one of the same type)

Parameters:
plugin_id unique identifier associated with the plug-in
Returns:
PluginType* pointer to the new plug-in object

Definition at line 229 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType >
PluginType * pion::plugin_manager< PluginType >::find ( const std::string &  resource  )  [inline]

finds the plug-in object associated with a particular resource (fuzzy match)

Parameters:
resource resource identifier (uri-stem) to search for
Returns:
PluginType* pointer to the matching plug-in object or NULL if not found

Definition at line 295 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType >
const PluginType * pion::plugin_manager< PluginType >::get ( const std::string &  plugin_id  )  const [inline]

gets the plug-in object associated with a particular plugin_id (exact match)

Parameters:
plugin_id unique identifier associated with the plug-in
Returns:
PluginType* pointer to the matching plug-in object or NULL if not found

Definition at line 273 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType >
PluginType * pion::plugin_manager< PluginType >::get ( const std::string &  plugin_id  )  [inline]

gets the plug-in object associated with a particular plugin_id (exact match)

Parameters:
plugin_id unique identifier associated with the plug-in
Returns:
PluginType* pointer to the matching plug-in object or NULL if not found

Definition at line 262 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType >
plugin_ptr< PluginType > pion::plugin_manager< PluginType >::get_lib_ptr ( const std::string &  plugin_id  )  const [inline]

gets a smart pointer to the plugin shared library for a particular plugin_id (exact match)

Parameters:
plugin_id unique identifier associated with the plug-in
Returns:
plugin_ptr<PluginType> pointer to the plugin shared library if found

Definition at line 284 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType >
boost::uint64_t pion::plugin_manager< PluginType >::get_statistic ( const std::string &  plugin_id,
PluginStatFunction  stat_func 
) const [inline]

returns a statistic value for a particular plug-in

Parameters:
plugin_id unique identifier associated with the plug-in
stat_func the statistic function to execute

Definition at line 372 of file plugin_manager.hpp.

template<typename PluginType >
boost::uint64_t pion::plugin_manager< PluginType >::get_statistic ( PluginStatFunction  stat_func  )  const [inline]

returns a total statistic value summed for every plug-in being managed

Parameters:
stat_func the statistic function to execute for each plug-in object

Definition at line 359 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType >
PluginType * pion::plugin_manager< PluginType >::load ( const std::string &  plugin_id,
const std::string &  plugin_type 
) [inline]

loads a new plug-in object

Parameters:
plugin_id unique identifier associated with the plug-in
plugin_type the name or type of the plug-in to load (searches plug-in directories and appends extensions)
Returns:
PluginType* pointer to the new plug-in object

Definition at line 239 of file plugin_manager.hpp.

References pion::plugin_ptr< InterfaceClassType >::create(), pion::plugin_manager< PluginType >::m_plugin_map, pion::plugin_manager< PluginType >::m_plugin_mutex, and pion::plugin::open().

Referenced by pion::http::plugin_server::load_service().

template<typename PluginType >
void pion::plugin_manager< PluginType >::remove ( const std::string &  plugin_id  )  [inline]

removes a plug-in object

Parameters:
plugin_id unique identifier associated with the plug-in

Definition at line 198 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType>
void pion::plugin_manager< PluginType >::replace ( const std::string &  plugin_id,
PluginType *  plugin_ptr 
) [inline]

replaces an existing plug-in object with a new one

Parameters:
plugin_id unique identifier associated with the plug-in
plugin_ptr pointer to the new plug-in object which will replace the old one

Definition at line 213 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType >
void pion::plugin_manager< PluginType >::run ( const std::string &  plugin_id,
PluginRunFunction  run_func 
) [inline]

runs a method for a particular plug-in

Parameters:
plugin_id unique identifier associated with the plug-in
run_func the function to execute

Definition at line 348 of file plugin_manager.hpp.

template<typename PluginType >
void pion::plugin_manager< PluginType >::run ( PluginRunFunction  run_func  )  [inline]

runs a method for every plug-in being managed

Parameters:
run_func the function to execute for each plug-in object

Definition at line 337 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

Referenced by pion::http::plugin_server::set_service_option().


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1algorithm-members.html0000644000372000001440000004067312215647143024564 0ustar robertousers pion: Member List

pion::algorithm Member List

This is the complete list of members for pion::algorithm, including all inherited members.
base64_decode(std::string const &input, std::string &output)pion::algorithm [static]
base64_encode(std::string const &input, std::string &output)pion::algorithm [static]
float_from_bytes(long double &value, const unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits)pion::algorithm [static]
float_to_bytes(long double value, unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits)pion::algorithm [static]
from_double(Byte *ptr, const double n)pion::algorithm [inline, static]
from_float(Byte *ptr, const float n)pion::algorithm [inline, static]
from_int16(Byte *buf, const boost::int16_t n)pion::algorithm [inline, static]
from_int24(Byte *buf, const boost::int32_t n)pion::algorithm [inline, static]
from_int32(Byte *buf, const boost::int32_t n)pion::algorithm [inline, static]
from_int64(Byte *buf, const boost::int64_t n)pion::algorithm [inline, static]
from_int8(Byte *buf, const boost::int8_t n)pion::algorithm [inline, static]
from_long_double(Byte *ptr, const long double n)pion::algorithm [inline, static]
from_uint16(Byte *buf, const boost::uint16_t n)pion::algorithm [inline, static]
from_uint24(Byte *buf, const boost::uint32_t n)pion::algorithm [inline, static]
from_uint32(Byte *buf, const boost::uint32_t n)pion::algorithm [inline, static]
from_uint64(Byte *buf, const boost::uint64_t n)pion::algorithm [inline, static]
from_uint8(Byte *buf, const boost::uint8_t n)pion::algorithm [inline, static]
to_double(const Byte *ptr)pion::algorithm [inline, static]
to_float(const Byte *ptr)pion::algorithm [inline, static]
to_int16(unsigned char high, unsigned char low)pion::algorithm [inline, static]
to_int16(T1 high, T2 low)pion::algorithm [inline, static]
to_int16(const Byte *buf)pion::algorithm [inline, static]
to_int24(unsigned char high, unsigned char mid, unsigned char low)pion::algorithm [inline, static]
to_int24(T1 high, T2 mid, T3 low)pion::algorithm [inline, static]
to_int24(const Byte *buf)pion::algorithm [inline, static]
to_int32(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low)pion::algorithm [inline, static]
to_int32(T1 high, T2 mid1, T3 mid2, T4 low)pion::algorithm [inline, static]
to_int32(const Byte *buf)pion::algorithm [inline, static]
to_int64(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low)pion::algorithm [inline, static]
to_int64(T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low)pion::algorithm [inline, static]
to_int64(const Byte *buf)pion::algorithm [inline, static]
to_int8(unsigned char byte)pion::algorithm [inline, static]
to_int8(char byte)pion::algorithm [inline, static]
to_int8(const Byte *buf)pion::algorithm [inline, static]
to_long_double(const Byte *ptr)pion::algorithm [inline, static]
to_uint16(unsigned char high, unsigned char low)pion::algorithm [inline, static]
to_uint16(T1 high, T2 low)pion::algorithm [inline, static]
to_uint16(const Byte *buf)pion::algorithm [inline, static]
to_uint24(unsigned char high, unsigned char mid, unsigned char low)pion::algorithm [inline, static]
to_uint24(T1 high, T2 mid, T3 low)pion::algorithm [inline, static]
to_uint24(const Byte *buf)pion::algorithm [inline, static]
to_uint32(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low)pion::algorithm [inline, static]
to_uint32(T1 high, T2 mid1, T3 mid2, T4 low)pion::algorithm [inline, static]
to_uint32(const Byte *buf)pion::algorithm [inline, static]
to_uint64(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low)pion::algorithm [inline, static]
to_uint64(T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low)pion::algorithm [inline, static]
to_uint64(const Byte *buf)pion::algorithm [inline, static]
to_uint8(unsigned char byte)pion::algorithm [inline, static]
to_uint8(char byte)pion::algorithm [inline, static]
to_uint8(const Byte *buf)pion::algorithm [inline, static]
url_decode(const std::string &str)pion::algorithm [static]
url_encode(const std::string &str)pion::algorithm [static]
xml_encode(const std::string &str)pion::algorithm [static]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/piond_8cpp_source.html0000644000372000001440000004364712215647143022002 0ustar robertousers pion: utils/piond.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/plugin__manager_8hpp_source.html0000644000372000001440000012661312215647142024017 0ustar robertousers pion: include/pion/plugin_manager.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/admin__rights_8cpp_source.html0000644000372000001440000003474112215647142023472 0ustar robertousers pion: src/admin_rights.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/http_2parser_8hpp_source.html0000644000372000001440000014713612215647142023310 0ustar robertousers pion: include/pion/http/parser.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x6e.html0000644000372000001440000000741212215647143022232 0ustar robertousers pion: Class Members - Functions
 

- n -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_log_service-members.html0000644000372000001440000001214612215647143027053 0ustar robertousers pion: Member List

pion::plugins::LogService Member List

This is the complete list of members for pion::plugins::LogService, including all inherited members.
get_relative_resource(const std::string &resource_requested) const pion::http::plugin_service [inline]
get_resource(void) const pion::http::plugin_service [inline]
getLogAppender(void)pion::plugins::LogService [inline]
LogService(void) (defined in pion::plugins::LogService)pion::plugins::LogService
operator()(pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)pion::plugins::LogService [virtual]
plugin_service(void)pion::http::plugin_service [inline]
set_option(const std::string &name, const std::string &value)pion::http::plugin_service [inline, virtual]
set_resource(const std::string &str)pion::http::plugin_service [inline]
start(void)pion::http::plugin_service [inline, virtual]
stop(void)pion::http::plugin_service [inline, virtual]
~LogService() (defined in pion::plugins::LogService)pion::plugins::LogService [virtual]
~plugin_service()pion::http::plugin_service [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1message_1_1content__buffer__t.html0000644000372000001440000002036112215647143030110 0ustar robertousers pion: pion::http::message::content_buffer_t Class Reference

pion::http::message::content_buffer_t Class Reference

a simple helper class used to manage a fixed-size payload content buffer More...

#include <message.hpp>

List of all members.

Public Member Functions

 ~content_buffer_t ()
 simple destructor
 content_buffer_t ()
 default constructor
 content_buffer_t (const content_buffer_t &buf)
 copy constructor
content_buffer_toperator= (const content_buffer_t &buf)
 assignment operator
bool is_empty () const
 returns true if buffer is empty
std::size_t size () const
 returns size in bytes
const char * get () const
 returns const pointer to data
char * get ()
 returns mutable pointer to data
void resize (std::size_t len)
 changes the size of the content buffer
void clear ()
 clears the content buffer

Detailed Description

a simple helper class used to manage a fixed-size payload content buffer

Definition at line 492 of file message.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/http__types_8cpp_source.html0000644000372000001440000004670212215647143023226 0ustar robertousers pion: src/http_types.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_disk_file-members.html0000644000372000001440000001777012215647143026513 0ustar robertousers pion: Member List

pion::plugins::DiskFile Member List

This is the complete list of members for pion::plugins::DiskFile, including all inherited members.
appendFilePath(const std::string &p)pion::plugins::DiskFile [inline]
checkUpdated(void)pion::plugins::DiskFile
DiskFile(void)pion::plugins::DiskFile [inline]
DiskFile(const boost::filesystem::path &path, char *content, unsigned long size, std::time_t modified, const std::string &mime)pion::plugins::DiskFile [inline]
DiskFile(const DiskFile &f)pion::plugins::DiskFile [inline]
getFileContent(void)pion::plugins::DiskFile [inline]
getFilePath(void) const pion::plugins::DiskFile [inline]
getFileSize(void) const pion::plugins::DiskFile [inline]
getLastModified(void) const pion::plugins::DiskFile [inline]
getLastModifiedString(void) const pion::plugins::DiskFile [inline]
getMimeType(void) const pion::plugins::DiskFile [inline]
hasFileContent(void) const pion::plugins::DiskFile [inline]
m_file_contentpion::plugins::DiskFile [protected]
m_file_pathpion::plugins::DiskFile [protected]
m_file_sizepion::plugins::DiskFile [protected]
m_last_modifiedpion::plugins::DiskFile [protected]
m_last_modified_stringpion::plugins::DiskFile [protected]
m_mime_typepion::plugins::DiskFile [protected]
read(void)pion::plugins::DiskFile
resetFileContent(unsigned long n=0)pion::plugins::DiskFile [inline]
setFilePath(const boost::filesystem::path &p)pion::plugins::DiskFile [inline]
setMimeType(const std::string &t)pion::plugins::DiskFile [inline]
update(void)pion::plugins::DiskFile

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x6a.html0000644000372000001440000000761612215647143021221 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- j -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/files.html0000644000372000001440000002656112215647143017455 0ustar robertousers pion: File Index

File List

Here is a list of all documented files with brief descriptions:
include/pion/admin_rights.hpp [code]
include/pion/algorithm.hpp [code]
include/pion/config.hpp [code]
include/pion/error.hpp [code]
include/pion/hash_map.hpp [code]
include/pion/logger.hpp [code]
include/pion/plugin.hpp [code]
include/pion/plugin_manager.hpp [code]
include/pion/process.hpp [code]
include/pion/scheduler.hpp [code]
include/pion/user.hpp [code]
include/pion/http/auth.hpp [code]
include/pion/http/basic_auth.hpp [code]
include/pion/http/cookie_auth.hpp [code]
include/pion/http/message.hpp [code]
include/pion/http/parser.hpp [code]
include/pion/http/plugin_server.hpp [code]
include/pion/http/plugin_service.hpp [code]
include/pion/http/reader.hpp [code]
include/pion/http/request.hpp [code]
include/pion/http/request_reader.hpp [code]
include/pion/http/request_writer.hpp [code]
include/pion/http/response.hpp [code]
include/pion/http/response_reader.hpp [code]
include/pion/http/response_writer.hpp [code]
include/pion/http/server.hpp [code]
include/pion/http/types.hpp [code]
include/pion/http/writer.hpp [code]
include/pion/spdy/decompressor.hpp [code]
include/pion/spdy/parser.hpp [code]
include/pion/spdy/types.hpp [code]
include/pion/tcp/connection.hpp [code]
include/pion/tcp/server.hpp [code]
include/pion/tcp/stream.hpp [code]
include/pion/tcp/timer.hpp [code]
include/pion/test/unit_test.hpp [code]
services/AllowNothingService.cpp [code]
services/AllowNothingService.hpp [code]
services/CookieService.cpp [code]
services/CookieService.hpp [code]
services/EchoService.cpp [code]
services/EchoService.hpp [code]
services/FileService.cpp [code]
services/FileService.hpp [code]
services/HelloService.cpp [code]
services/HelloService.hpp [code]
services/LogService.cpp [code]
services/LogService.hpp [code]
src/admin_rights.cpp [code]
src/algorithm.cpp [code]
src/http_auth.cpp [code]
src/http_basic_auth.cpp [code]
src/http_cookie_auth.cpp [code]
src/http_message.cpp [code]
src/http_parser.cpp [code]
src/http_plugin_server.cpp [code]
src/http_reader.cpp [code]
src/http_server.cpp [code]
src/http_types.cpp [code]
src/http_writer.cpp [code]
src/logger.cpp [code]
src/plugin.cpp [code]
src/process.cpp [code]
src/scheduler.cpp [code]
src/spdy_decompressor.cpp [code]
src/spdy_parser.cpp [code]
src/tcp_server.cpp [code]
src/tcp_timer.cpp [code]
utils/helloserver.cpp [code]
utils/piond.cpp [code]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1plugin_1_1data__type-members.html0000644000372000001440000000716112215647143026561 0ustar robertousers pion: Member List

pion::plugin::data_type Member List

This is the complete list of members for pion::plugin::data_type, including all inherited members.
data_type(void)pion::plugin::data_type [inline]
data_type(const std::string &plugin_name) (defined in pion::plugin::data_type)pion::plugin::data_type [inline]
data_type(const data_type &p) (defined in pion::plugin::data_type)pion::plugin::data_type [inline]
m_create_funcpion::plugin::data_type
m_destroy_funcpion::plugin::data_type
m_lib_handlepion::plugin::data_type
m_plugin_namepion::plugin::data_type
m_referencespion::plugin::data_type

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/annotated.html0000644000372000001440000003517512215647143020331 0ustar robertousers pion: Class List

Class List

Here are the classes, structs, unions and interfaces with brief descriptions:
pion::spdy::_http_protocol_info_tThis structure contains the HTTP Protocol information
pion::spdy::_spdy_header_info
pion::spdy::_value_stringSPDY value string data type
pion::admin_rights
pion::algorithm
pion::plugins::AllowNothingService
pion::http::auth
pion::error::bad_argException thrown for an invalid configuration argument or option
pion::error::bad_configException thrown if there is an error parsing a configuration file
pion::error::bad_password_hashException thrown if a bad password hash is provided
pion::http::basic_auth
pion::test::config
pion::process::config_typeData type for static/global process configuration information
pion::tcp::connection
pion::http::message::content_buffer_tSimple helper class used to manage a fixed-size payload content buffer
pion::http::cookie_auth
pion::plugins::CookieService
pion::plugin::data_type
pion::spdy::decompressor
pion::error::directory_not_foundException thrown if a required directory is not found
pion::plugins::DiskFile
pion::plugins::DiskFileSender
pion::error::duplicate_pluginException thrown if we try to add or load a duplicate plugin
pion::plugins::EchoService
pion::http::parser::error_category_tClass-specific error category
pion::spdy::parser::error_category_tClass-specific error category
pion::exception
pion::error::file_not_foundException thrown if a file is not found
pion::plugins::FileService
HelloServerSimple TCP server that just sends "Hello there!" to each connection
pion::plugins::HelloService
pion::iequal_to
pion::ihash
pion::plugins::LogService
pion::plugins::LogServiceAppender
pion::plugin_manager< PluginType >::map_typeData type that maps identifiers to plug-in objects
pion::http::message
pion::multi_thread_scheduler
pion::one_to_one_scheduler
pion::error::open_fileException thrown if we failed to open a file
pion::error::open_pluginException thrown if we are unable to open a plugin
pion::http::parser
pion::spdy::parser
pion::plugin
pion::plugin_instance_ptr< InterfaceClassType >
pion::plugin_manager< PluginType >
pion::error::plugin_missing_symbolException thrown if a plugin is missing a required symbol
pion::error::plugin_not_foundException thrown if a plugin cannot be found
pion::plugin_ptr< InterfaceClassType >
pion::http::plugin_server
pion::http::plugin_service
pion::error::plugin_undefinedException thrown if a plugin has an undefined state
pion::process
pion::error::read_fileException thrown if we failed to read data from a file
pion::http::reader
pion::http::message::receive_error_tData type for library errors returned during receive() operations
pion::http::request
pion::http::request_reader
pion::http::request_writer
pion::http::response
pion::http::response_reader
pion::http::response_writer
pion::test::safe_xml_log_formatterThread-safe version of Boost.Test's xml_log_formatter class
pion::scheduler
pion::http::server
pion::tcp::server
pion::one_to_one_scheduler::service_pair_typeTypedef for a pair object where first is an IO service and second is a deadline timer
pion::single_service_scheduler
pion::spdy::spdy_control_frame_infoThis structure will be tied to each SPDY frame
pion::tcp::stream
pion::tcp::stream_buffer
pion::tcp::timer
pion::http::types
pion::user
pion::user_manager
pion::http::writer

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1process.html0000644000372000001440000001444012215647143022376 0ustar robertousers pion: pion::process Class Reference

pion::process Class Reference

#include <process.hpp>

List of all members.

Classes

struct  config_type
 data type for static/global process configuration information More...

Public Member Functions

 process (void)
 default constructor

Static Public Member Functions

static void shutdown (void)
 signals the shutdown condition
static void wait_for_shutdown (void)
 blocks until the shutdown condition has been signaled
static void initialize (void)
 sets up basic signal handling for the process
static void daemonize (void)
 fork process and run as a background daemon

Static Protected Member Functions

static config_typeget_config (void)
 returns a singleton instance of config_type

Detailed Description

process: class for managing process/service related functions

Definition at line 26 of file process.hpp.


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/http_2server_8hpp_source.html0000644000372000001440000004762012215647142023317 0ustar robertousers pion: include/pion/http/server.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_cookie_service.html0000644000372000001440000000666412215647143026123 0ustar robertousers pion: pion::plugins::CookieService Class Reference

pion::plugins::CookieService Class Reference

#include <CookieService.hpp>

Inherits pion::http::plugin_service.

List of all members.

Public Member Functions

virtual void operator() (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)
 handles requests for CookieService

Detailed Description

CookieService: web service that displays and updates cookies

Definition at line 22 of file CookieService.hpp.


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1tcp_1_1stream__buffer-members.html0000644000372000001440000001651212215647143026504 0ustar robertousers pion: Member List

pion::tcp::stream_buffer Member List

This is the complete list of members for pion::tcp::stream_buffer, including all inherited members.
char_type typedef (defined in pion::tcp::stream_buffer)pion::tcp::stream_buffer
flush_output(void)pion::tcp::stream_buffer [inline, protected]
get_connection(void)pion::tcp::stream_buffer [inline]
get_connection(void) const pion::tcp::stream_buffer [inline]
int_type typedef (defined in pion::tcp::stream_buffer)pion::tcp::stream_buffer
off_type typedef (defined in pion::tcp::stream_buffer)pion::tcp::stream_buffer
overflow(int_type c)pion::tcp::stream_buffer [inline, protected, virtual]
pos_type typedef (defined in pion::tcp::stream_buffer)pion::tcp::stream_buffer
PUT_BACK_MAX enum value (defined in pion::tcp::stream_buffer)pion::tcp::stream_buffer
setup_buffers(void)pion::tcp::stream_buffer [inline, protected]
stream_buffer(tcp::connection_ptr &conn_ptr)pion::tcp::stream_buffer [inline, explicit]
stream_buffer(boost::asio::io_service &io_service, const bool ssl_flag=false)pion::tcp::stream_buffer [inline, explicit]
stream_buffer(boost::asio::io_service &io_service, connection::ssl_context_type &ssl_context)pion::tcp::stream_buffer [inline]
sync(void)pion::tcp::stream_buffer [inline, protected, virtual]
traits_type typedef (defined in pion::tcp::stream_buffer)pion::tcp::stream_buffer
underflow(void)pion::tcp::stream_buffer [inline, protected, virtual]
WRITE_BUFFER_SIZE enum value (defined in pion::tcp::stream_buffer)pion::tcp::stream_buffer
xsgetn(char_type *s, std::streamsize n)pion::tcp::stream_buffer [inline, protected, virtual]
xsputn(const char_type *s, std::streamsize n)pion::tcp::stream_buffer [inline, protected, virtual]
~stream_buffer()pion::tcp::stream_buffer [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/helloserver_8cpp_source.html0000644000372000001440000001765212215647143023220 0ustar robertousers pion: utils/helloserver.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/auth_8hpp_source.html0000644000372000001440000003070412215647142021624 0ustar robertousers pion: include/pion/http/auth.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1message_1_1content__buffer__t-members.html0000644000372000001440000001137712215647143031547 0ustar robertousers pion: Member List

pion::http::message::content_buffer_t Member List

This is the complete list of members for pion::http::message::content_buffer_t, including all inherited members.
clear()pion::http::message::content_buffer_t [inline]
content_buffer_t()pion::http::message::content_buffer_t [inline]
content_buffer_t(const content_buffer_t &buf)pion::http::message::content_buffer_t [inline]
get() const pion::http::message::content_buffer_t [inline]
get()pion::http::message::content_buffer_t [inline]
is_empty() const pion::http::message::content_buffer_t [inline]
operator=(const content_buffer_t &buf)pion::http::message::content_buffer_t [inline]
resize(std::size_t len)pion::http::message::content_buffer_t [inline]
size() const pion::http::message::content_buffer_t [inline]
~content_buffer_t()pion::http::message::content_buffer_t [inline]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x70.html0000644000372000001440000002204712215647143022147 0ustar robertousers pion: Class Members - Functions
 

- p -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1user__manager.html0000644000372000001440000004424212215647143023532 0ustar robertousers pion: pion::user_manager Class Reference

pion::user_manager Class Reference

#include <user.hpp>

List of all members.

Public Member Functions

 user_manager (void)
 construct a new user_manager object
virtual ~user_manager ()
 virtual destructor
bool empty (void) const
 returns true if no users are defined
virtual bool add_user (const std::string &username, const std::string &password)
virtual bool update_user (const std::string &username, const std::string &password)
virtual bool add_user_hash (const std::string &username, const std::string &password_hash)
virtual bool update_user_hash (const std::string &username, const std::string &password_hash)
virtual bool remove_user (const std::string &username)
virtual user_ptr get_user (const std::string &username)
virtual user_ptr get_user (const std::string &username, const std::string &password)

Protected Types

typedef std::map< std::string,
user_ptr > 
user_map_t
 data type for a map of usernames to user objects

Protected Attributes

boost::mutex m_mutex
 mutex used to protect access to the user list
user_map_t m_users
 user records container

Detailed Description

user_manager base class for user container/manager

Definition at line 143 of file user.hpp.


Member Function Documentation

virtual bool pion::user_manager::add_user ( const std::string &  username,
const std::string &  password 
) [inline, virtual]

used to add a new user with plaintext password

Parameters:
username name or identifier of the user to add
password plaintext password of the user to add
Returns:
false if user with such a name already exists

Definition at line 168 of file user.hpp.

virtual bool pion::user_manager::add_user_hash ( const std::string &  username,
const std::string &  password_hash 
) [inline, virtual]

used to add a new user with encrypted password

Parameters:
username name or identifier of the user to add
password_hash encrypted password of the user to add
Returns:
false if user with such a name already exists

Definition at line 208 of file user.hpp.

virtual user_ptr pion::user_manager::get_user ( const std::string &  username,
const std::string &  password 
) [inline, virtual]

Used to locate user object by username and password

Definition at line 270 of file user.hpp.

virtual user_ptr pion::user_manager::get_user ( const std::string &  username  )  [inline, virtual]

Used to locate user object by username

Definition at line 258 of file user.hpp.

virtual bool pion::user_manager::remove_user ( const std::string &  username  )  [inline, virtual]

used to remove given user

Returns:
false if no user with such username

Definition at line 246 of file user.hpp.

virtual bool pion::user_manager::update_user ( const std::string &  username,
const std::string &  password 
) [inline, virtual]

update password for given user

Parameters:
username name or identifier of the user to update
password plaintext password of the user to update
Returns:
false if user with such a name doesn't exist

Definition at line 188 of file user.hpp.

virtual bool pion::user_manager::update_user_hash ( const std::string &  username,
const std::string &  password_hash 
) [inline, virtual]

update password for given user with encrypted password

Parameters:
username name or identifier of the user to update
password_hash encrypted password of the user to update
Returns:
false if user with such a name doesn't exist

Definition at line 229 of file user.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1writer.html0000644000372000001440000010076512215647143023602 0ustar robertousers pion: pion::http::writer Class Reference

pion::http::writer Class Reference

#include <writer.hpp>

Inherited by pion::http::request_writer, and pion::http::response_writer.

List of all members.

Classes

class  binary_cache_t
 used to cache binary data included within the payload content

Public Member Functions

virtual ~writer ()
 default destructor
void clear (void)
 clears out all of the memory buffers used to cache payload content data
template<typename T >
void write (const T &data)
void write (std::ostream &(*iomanip)(std::ostream &))
void write (const void *data, size_t length)
void write_no_copy (const std::string &data)
void write_no_copy (void *data, size_t length)
void send (void)
template<typename SendHandler >
void send (SendHandler send_handler)
template<typename SendHandler >
void send_chunk (SendHandler send_handler)
template<typename SendHandler >
void send_final_chunk (SendHandler send_handler)
void send_final_chunk (void)
tcp::connection_ptr & get_connection (void)
 returns a shared pointer to the TCP connection
size_t get_content_length (void) const
 returns the length of the payload content (in bytes)
void supports_chunked_messages (bool b)
 sets whether or not the client supports chunked messages
bool supports_chunked_messages () const
 returns true if the client supports chunked messages
bool sending_chunked_message () const
 returns true if we are sending a chunked message to the client
void set_logger (logger log_ptr)
 sets the logger to be used
logger get_logger (void)
 returns the logger currently in use

Protected Types

typedef boost::function1< void,
const
boost::system::error_code & > 
finished_handler_t
 function called after the HTTP message has been sent
typedef boost::function2< void,
const
boost::system::error_code
&, std::size_t > 
write_handler_t
 data type for a function that handles write operations

Protected Member Functions

 writer (tcp::connection_ptr &tcp_conn, finished_handler_t handler)
virtual void handle_write (const boost::system::error_code &write_error, std::size_t bytes_written)=0
virtual void prepare_buffers_for_send (http::message::write_buffers_t &write_buffers)=0
virtual write_handler_t bind_to_write_handler (void)=0
 returns a function bound to writer::handle_write()
void finished_writing (const boost::system::error_code &ec)
 called after we have finished sending the HTTP message

Detailed Description

writer: used to asynchronously send HTTP messages

Definition at line 34 of file writer.hpp.


Constructor & Destructor Documentation

pion::http::writer::writer ( tcp::connection_ptr &  tcp_conn,
finished_handler_t  handler 
) [inline, protected]

protected constructor: only derived classes may create objects

Parameters:
tcp_conn TCP connection used to send the message
handler function called after the request has been sent

Definition at line 52 of file writer.hpp.


Member Function Documentation

virtual void pion::http::writer::handle_write ( const boost::system::error_code &  write_error,
std::size_t  bytes_written 
) [protected, pure virtual]

called after the message is sent

Parameters:
write_error error status from the last write operation
bytes_written number of bytes sent by the last write operation

Implemented in pion::http::request_writer, and pion::http::response_writer.

virtual void pion::http::writer::prepare_buffers_for_send ( http::message::write_buffers_t write_buffers  )  [protected, pure virtual]

initializes a vector of write buffers with the HTTP message information

Parameters:
write_buffers vector of write buffers to initialize

Implemented in pion::http::request_writer, and pion::http::response_writer.

template<typename SendHandler >
void pion::http::writer::send ( SendHandler  send_handler  )  [inline]

Sends all data buffered as a single HTTP message (without chunking). Following a call to this function, it is not thread safe to use your reference to the writer object until the send_handler has been called.

Parameters:
send_handler function that is called after the message has been sent to the client. Your callback function must end the connection by calling connection::finish().

Definition at line 180 of file writer.hpp.

void pion::http::writer::send ( void   )  [inline]

Sends all data buffered as a single HTTP message (without chunking). Following a call to this function, it is not thread safe to use your reference to the writer object.

Definition at line 166 of file writer.hpp.

template<typename SendHandler >
void pion::http::writer::send_chunk ( SendHandler  send_handler  )  [inline]

Sends all data buffered as a single HTTP chunk. Following a call to this function, it is not thread safe to use your reference to the writer object until the send_handler has been called.

Parameters:
send_handler function that is called after the chunk has been sent to the client. Your callback function must end by calling one of send_chunk() or send_final_chunk(). Also, be sure to clear() the writer before writing data to it.

Definition at line 195 of file writer.hpp.

void pion::http::writer::send_final_chunk ( void   )  [inline]

Sends all data buffered (if any) and also sends the final HTTP chunk. This function (either overloaded version) must be called following any calls to send_chunk(). Following a call to this function, it is not thread safe to use your reference to the writer object.

Definition at line 230 of file writer.hpp.

template<typename SendHandler >
void pion::http::writer::send_final_chunk ( SendHandler  send_handler  )  [inline]

Sends all data buffered (if any) and also sends the final HTTP chunk. This function (either overloaded version) must be called following any calls to send_chunk(). Following a call to this function, it is not thread safe to use your reference to the writer object until the send_handler has been called.

Parameters:
send_handler function that is called after the message has been sent to the client. Your callback function must end the connection by calling connection::finish().

Definition at line 218 of file writer.hpp.

void pion::http::writer::write ( const void *  data,
size_t  length 
) [inline]

write binary payload content

Parameters:
data points to the binary data to append to the payload content
length the length, in bytes, of the binary data

Definition at line 122 of file writer.hpp.

template<typename T >
void pion::http::writer::write ( const T &  data  )  [inline]

write text (non-binary) payload content

Parameters:
data the data to append to the payload content

Definition at line 106 of file writer.hpp.

void pion::http::writer::write_no_copy ( void *  data,
size_t  length 
) [inline]

write binary payload content; the data written is not copied, and therefore must persist until the message has finished sending

Parameters:
data points to the binary data to append to the payload content
length the length, in bytes, of the binary data

Definition at line 152 of file writer.hpp.

void pion::http::writer::write_no_copy ( const std::string &  data  )  [inline]

write text (non-binary) payload content; the data written is not copied, and therefore must persist until the message has finished sending

Parameters:
data the data to append to the payload content

Definition at line 137 of file writer.hpp.

Referenced by pion::http::request_writer::request_writer().


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1multi__thread__scheduler-members.html0000644000372000001440000002677012215647143027376 0ustar robertousers pion: Member List

pion::multi_thread_scheduler Member List

This is the complete list of members for pion::multi_thread_scheduler, including all inherited members.
add_active_user(void)pion::scheduler
DEFAULT_NUM_THREADSpion::scheduler [protected, static]
finish_services(void)pion::scheduler [inline, protected, virtual]
finish_threads(void)pion::multi_thread_scheduler [inline, protected, virtual]
get_io_service(void)=0pion::scheduler [pure virtual]
get_logger(void)pion::scheduler [inline]
get_num_threads(void) const pion::scheduler [inline]
get_wakeup_time(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [protected, static]
is_running(void) const pion::scheduler [inline]
join(void)pion::scheduler
keep_running(boost::asio::io_service &my_service, boost::asio::deadline_timer &my_timer)pion::scheduler
KEEP_RUNNING_TIMER_SECONDSpion::scheduler [protected, static]
m_active_userspion::scheduler [protected]
m_is_runningpion::scheduler [protected]
m_loggerpion::scheduler [protected]
m_mutexpion::scheduler [protected]
m_no_more_active_userspion::scheduler [protected]
m_num_threadspion::scheduler [protected]
m_scheduler_has_stoppedpion::scheduler [protected]
m_thread_poolpion::multi_thread_scheduler [protected]
MICROSEC_IN_SECONDpion::scheduler [protected, static]
multi_thread_scheduler(void)pion::multi_thread_scheduler [inline]
NSEC_IN_SECONDpion::scheduler [protected, static]
post(boost::function0< void > work_func)pion::scheduler [inline, virtual]
process_service_work(boost::asio::io_service &service)pion::scheduler
remove_active_user(void)pion::scheduler
scheduler(void)pion::scheduler [inline]
set_logger(logger log_ptr)pion::scheduler [inline]
set_num_threads(const boost::uint32_t n)pion::scheduler [inline]
shutdown(void)pion::scheduler [virtual]
sleep(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
sleep(ConditionType &wakeup_condition, LockType &wakeup_lock, boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
startup(void)pion::scheduler [inline, virtual]
stop_services(void)pion::scheduler [inline, protected, virtual]
stop_threads(void)pion::multi_thread_scheduler [inline, protected, virtual]
ThreadPool typedefpion::multi_thread_scheduler [protected]
~multi_thread_scheduler()pion::multi_thread_scheduler [inline, virtual]
~scheduler()pion::scheduler [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/class_hello_server.html0000644000372000001440000000575312215647143022231 0ustar robertousers pion: HelloServer Class Reference

HelloServer Class Reference

simple TCP server that just sends "Hello there!" to each connection More...

Inherits pion::tcp::server.

List of all members.

Public Member Functions

 HelloServer (const unsigned int tcp_port)
virtual void handle_connection (tcp::connection_ptr &tcp_conn)

Detailed Description

simple TCP server that just sends "Hello there!" to each connection

Definition at line 22 of file helloserver.cpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1admin__rights.html0000644000372000001440000001435512215647143023534 0ustar robertousers pion: pion::admin_rights Class Reference

pion::admin_rights Class Reference

#include <admin_rights.hpp>

List of all members.

Public Member Functions

 admin_rights (bool use_log=true)
virtual ~admin_rights ()
 destructor releases administrative rights
void release (void)
 releases administrative rights

Static Public Member Functions

static long run_as_user (const std::string &user_name)
 calculates the user id based upon the user configuration parameter
static long run_as_group (const std::string &group_name)
 calculates the group id based upon the group configuration parameter

Detailed Description

admin_rights: obtains administrative rights for the process

Definition at line 25 of file admin_rights.hpp.


Constructor & Destructor Documentation

pion::admin_rights::admin_rights ( bool  use_log = true  ) 

constructs object, obtaining administrative rights; will block if another thread has already obtained rights

Parameters:
use_log if false, then no logging will be performed

Definition at line 62 of file admin_rights.cpp.


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1open__plugin-members.html0000644000372000001440000000662712215647143026550 0ustar robertousers pion: Member List

pion::error::open_plugin Member List

This is the complete list of members for pion::error::open_plugin, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/response__writer_8hpp_source.html0000644000372000001440000003701412215647142024255 0ustar robertousers pion: include/pion/http/response_writer.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_log_service_appender-members.html0000644000372000001440000000616712215647143030737 0ustar robertousers pion: Member List

pion::plugins::LogServiceAppender Member List

This is the complete list of members for pion::plugins::LogServiceAppender, including all inherited members.
addLogString(const std::string &log_string)pion::plugins::LogServiceAppender
LogServiceAppender(void) (defined in pion::plugins::LogServiceAppender)pion::plugins::LogServiceAppender
setMaxEvents(unsigned int n)pion::plugins::LogServiceAppender [inline]
writeLogEvents(pion::http::response_writer_ptr &writer)pion::plugins::LogServiceAppender
~LogServiceAppender() (defined in pion::plugins::LogServiceAppender)pion::plugins::LogServiceAppender [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_disk_file_sender.html0000644000372000001440000003761512215647143026423 0ustar robertousers pion: pion::plugins::DiskFileSender Class Reference

pion::plugins::DiskFileSender Class Reference

#include <FileService.hpp>

List of all members.

Public Member Functions

virtual ~DiskFileSender ()
 default virtual destructor
void send (void)
void set_logger (logger log_ptr)
 sets the logger to be used
logger get_logger (void)
 returns the logger currently in use

Static Public Member Functions

static boost::shared_ptr
< DiskFileSender
create (DiskFile &file, pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn, unsigned long max_chunk_size=0)

Protected Member Functions

 DiskFileSender (DiskFile &file, pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn, unsigned long max_chunk_size)
void handle_write (const boost::system::error_code &write_error, std::size_t bytes_written)

Protected Attributes

logger m_logger
 primary logging interface used by this class

Detailed Description

DiskFileSender: class used to send files to clients using HTTP responses

Definition at line 133 of file FileService.hpp.


Constructor & Destructor Documentation

pion::plugins::DiskFileSender::DiskFileSender ( DiskFile file,
pion::http::request_ptr &  http_request_ptr,
pion::tcp::connection_ptr &  tcp_conn,
unsigned long  max_chunk_size 
) [protected]

protected constructor restricts creation of objects (use create())

Parameters:
file disk file object that should be sent
http_request_ptr HTTP request that we are responding to
tcp_conn TCP connection used to send the file
max_chunk_size sets the maximum chunk size

Definition at line 808 of file FileService.cpp.

References pion::plugins::DiskFile::getFilePath(), pion::plugins::DiskFile::getLastModifiedString(), pion::plugins::DiskFile::getMimeType(), pion::plugins::DiskFile::hasFileContent(), and m_logger.

Referenced by create().


Member Function Documentation

static boost::shared_ptr<DiskFileSender> pion::plugins::DiskFileSender::create ( DiskFile file,
pion::http::request_ptr &  http_request_ptr,
pion::tcp::connection_ptr &  tcp_conn,
unsigned long  max_chunk_size = 0 
) [inline, static]

creates new DiskFileSender objects

Parameters:
file disk file object that should be sent
http_request_ptr HTTP request that we are responding to
tcp_conn TCP connection used to send the file
max_chunk_size sets the maximum chunk size (default=0, unlimited)

Definition at line 147 of file FileService.hpp.

References DiskFileSender().

Referenced by pion::plugins::FileService::operator()().

void pion::plugins::DiskFileSender::handle_write ( const boost::system::error_code &  write_error,
std::size_t  bytes_written 
) [protected]

handler called after a send operation has completed

Parameters:
write_error error status from the last write operation
bytes_written number of bytes sent by the last write operation

Definition at line 934 of file FileService.cpp.

References pion::plugins::DiskFile::getFileSize(), m_logger, and send().

Referenced by send().

void pion::plugins::DiskFileSender::send ( void   ) 

Begins sending the file to the client. Following a call to this function, it is not thread safe to use your reference to the DiskFileSender object.

Definition at line 837 of file FileService.cpp.

References pion::plugins::DiskFile::getFileContent(), pion::plugins::DiskFile::getFilePath(), pion::plugins::DiskFile::getFileSize(), handle_write(), pion::plugins::DiskFile::hasFileContent(), and m_logger.

Referenced by handle_write().


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/index.html0000644000372000001440000000203712215647142017451 0ustar robertousers pion: Main Page

pion Documentation

5.0.4


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x66.html0000644000372000001440000002075212215647143022155 0ustar robertousers pion: Class Members - Functions
 

- f -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1spdy_1_1decompressor-members.html0000644000372000001440000000650012215647143026413 0ustar robertousers pion: Member List

pion::spdy::decompressor Member List

This is the complete list of members for pion::spdy::decompressor, including all inherited members.
data_size_t enum namepion::spdy::decompressor
decompress(const char *compressed_data_ptr, boost::uint32_t stream_id, const spdy_control_frame_info &frame, boost::uint32_t header_block_length)pion::spdy::decompressor
decompressor()pion::spdy::decompressor
MAX_UNCOMPRESSED_DATA_BUF_SIZE enum valuepion::spdy::decompressor
spdy_decompress_header(const char *compressed_data_ptr, z_streamp decomp, boost::uint32_t length, boost::uint32_t &uncomp_length)pion::spdy::decompressor [protected]
~decompressor()pion::spdy::decompressor

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_allow_nothing_service-members.html0000644000372000001440000001176012215647143031137 0ustar robertousers pion: Member List

pion::plugins::AllowNothingService Member List

This is the complete list of members for pion::plugins::AllowNothingService, including all inherited members.
AllowNothingService(void) (defined in pion::plugins::AllowNothingService)pion::plugins::AllowNothingService [inline]
get_relative_resource(const std::string &resource_requested) const pion::http::plugin_service [inline]
get_resource(void) const pion::http::plugin_service [inline]
operator()(pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)pion::plugins::AllowNothingService [virtual]
plugin_service(void)pion::http::plugin_service [inline]
set_option(const std::string &name, const std::string &value)pion::http::plugin_service [inline, virtual]
set_resource(const std::string &str)pion::http::plugin_service [inline]
start(void)pion::http::plugin_service [inline, virtual]
stop(void)pion::http::plugin_service [inline, virtual]
~AllowNothingService() (defined in pion::plugins::AllowNothingService)pion::plugins::AllowNothingService [inline]
~plugin_service()pion::http::plugin_service [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_log_service_appender.html0000644000372000001440000001065012215647143027277 0ustar robertousers pion: pion::plugins::LogServiceAppender Class Reference

pion::plugins::LogServiceAppender Class Reference

#include <LogService.hpp>

List of all members.

Public Member Functions

void setMaxEvents (unsigned int n)
 sets the maximum number of log events cached in memory
void addLogString (const std::string &log_string)
 adds a formatted log message to the memory cache
void writeLogEvents (pion::http::response_writer_ptr &writer)
 writes the events cached in memory to a response stream

Detailed Description

LogServiceAppender: caches log events in memory for use by LogService

Definition at line 43 of file LogService.hpp.


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_enum.html0000644000372000001440000000471612215647143021405 0ustar robertousers pion: Class Members - Enumerations
 

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/request__writer_8hpp_source.html0000644000372000001440000004202212215647142024102 0ustar robertousers pion: include/pion/http/request_writer.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x6d.html0000644000372000001440000001050712215647143022230 0ustar robertousers pion: Class Members - Functions
 

- m -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1spdy_1_1parser_1_1error__category__t.html0000644000372000001440000000622312215647143030004 0ustar robertousers pion: pion::spdy::parser::error_category_t Class Reference

pion::spdy::parser::error_category_t Class Reference

class-specific error category More...

#include <parser.hpp>

List of all members.

Public Member Functions

const char * name () const
std::string message (int ev) const

Detailed Description

class-specific error category

Definition at line 47 of file parser.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1spdy_1_1__http__protocol__info__t.html0000644000372000001440000001065212215647143027671 0ustar robertousers pion: pion::spdy::_http_protocol_info_t Struct Reference

pion::spdy::_http_protocol_info_t Struct Reference

This structure contains the HTTP Protocol information. More...

#include <types.hpp>

List of all members.

Public Attributes

std::map< std::string,
std::string > 
http_headers
boost::uint32_t http_type
boost::uint32_t stream_id
boost::uint32_t data_offset
boost::uint32_t data_size
bool last_chunk

Detailed Description

This structure contains the HTTP Protocol information.

Definition at line 94 of file types.hpp.


The documentation for this struct was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/tabs.css0000644000372000001440000000346412215647142017124 0ustar robertousers/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ DIV.tabs { float : left; width : 100%; background : url("tab_b.gif") repeat-x bottom; margin-bottom : 4px; } DIV.tabs UL { margin : 0px; padding-left : 10px; list-style : none; } DIV.tabs LI, DIV.tabs FORM { display : inline; margin : 0px; padding : 0px; } DIV.tabs FORM { float : right; } DIV.tabs A { float : left; background : url("tab_r.gif") no-repeat right top; border-bottom : 1px solid #84B0C7; font-size : 80%; font-weight : bold; text-decoration : none; } DIV.tabs A:hover { background-position: 100% -150px; } DIV.tabs A:link, DIV.tabs A:visited, DIV.tabs A:active, DIV.tabs A:hover { color: #1A419D; } DIV.tabs SPAN { float : left; display : block; background : url("tab_l.gif") no-repeat left top; padding : 5px 9px; white-space : nowrap; } DIV.tabs #MSearchBox { float : right; display : inline; font-size : 1em; } DIV.tabs TD { font-size : 80%; font-weight : bold; text-decoration : none; } /* Commented Backslash Hack hides rule from IE5-Mac \*/ DIV.tabs SPAN {float : none;} /* End IE5-Mac hack */ DIV.tabs A:hover SPAN { background-position: 0% -150px; } DIV.tabs LI.current A { background-position: 100% -150px; border-width : 0px; } DIV.tabs LI.current SPAN { background-position: 0% -150px; padding-bottom : 6px; } DIV.navpath { background : none; border : none; border-bottom : 1px solid #84B0C7; text-align : center; margin : 2px; padding : 2px; } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootpion-5.0.4+dfsg.orig/doc/html/structpion_1_1one__to__one__scheduler_1_1service__pair__type-members.htmlpion-5.0.4+dfsg.orig/doc/html/structpion_1_1one__to__one__scheduler_1_1service__pair__type-members.h0000644000372000001440000000520212215647143033260 0ustar robertousers pion: Member List

pion::one_to_one_scheduler::service_pair_type Member List

This is the complete list of members for pion::one_to_one_scheduler::service_pair_type, including all inherited members.
first (defined in pion::one_to_one_scheduler::service_pair_type)pion::one_to_one_scheduler::service_pair_type
second (defined in pion::one_to_one_scheduler::service_pair_type)pion::one_to_one_scheduler::service_pair_type
service_pair_type(void) (defined in pion::one_to_one_scheduler::service_pair_type)pion::one_to_one_scheduler::service_pair_type [inline]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x7e.html0000644000372000001440000002021212215647143021211 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- ~ -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x67.html0000644000372000001440000004371412215647143021146 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- g -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/http_2types_8hpp_source.html0000644000372000001440000003606712215647142023160 0ustar robertousers pion: include/pion/http/types.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_func_0x6a.html0000644000372000001440000000754612215647143022236 0ustar robertousers pion: Class Members - Functions
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1duplicate__plugin-members.html0000644000372000001440000000664612215647143027562 0ustar robertousers pion: Member List

pion::error::duplicate_plugin Member List

This is the complete list of members for pion::error::duplicate_plugin, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1spdy_1_1parser_1_1error__category__t-members.html0000644000372000001440000000431612215647143031435 0ustar robertousers pion: Member List

pion::spdy::parser::error_category_t Member List

This is the complete list of members for pion::spdy::parser::error_category_t, including all inherited members.
message(int ev) const (defined in pion::spdy::parser::error_category_t)pion::spdy::parser::error_category_t [inline]
name() const (defined in pion::spdy::parser::error_category_t)pion::spdy::parser::error_category_t [inline]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1read__file.html0000644000372000001440000000500512215647143024500 0ustar robertousers pion: pion::error::read_file Class Reference

pion::error::read_file Class Reference

exception thrown if we failed to read data from a file More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if we failed to read data from a file

Definition at line 157 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/doxygen.png0000644000372000001440000000240112215647142017632 0ustar robertousers‰PNG  IHDRd-ok>ÂgAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<]PLTEǾÏ"&©ÈÎï¶»ÖÓÚú“¢Þ ¬à¶Âõ‡§ÕÙêÉÊÎáâæ{ŽÔ¡ëˆ™× ²ø§¬¹ÀÀ±ÝÝÎùùéõõçëëåED9×ÖËhg]_X<@:#mhUÿÿÿÝÀ1tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍvÿIDATxÚbC£: d#„„………h` @¡X",***LKˆ.–], ºX@t± €èb @ÑÅ€BµD„6–š%""´° € ˜% ˆ™B:H¢ˆ²Áf@• ˆRPy"K`\PbC(!II!h©…ëƒ(ñ„Ä!ꈬC„Ä…àl!0[X\J\$TMˆ(’>a$S„ Ù@ Ш@R.$‚¬LJBR¢‰AÌG1 ¬ Â(FȃÔPhhÁTÀ¢„%!`€&q°%u P ¹¢ ¬ € ¹CT$B¢à|‚ºW„¤Àl £!B`R$( …Ĉ‘’ž@AÅ%ĤÄ%@,(—ʂڱ%$ÁââRPmB U`1IˆYB  99€\1 yCCCÿf"[N 'Ü=TGÈ’øl8˜^Kû5<êSæRɤ”%î@@ à›Ê b1 qÅAXHˆ¸&ØB’R y n˜P„Ìã–4A €€j¹€€>Ü ˜ t!˜+(.ÈÅWQ±A2ÜÜMUÜ‚’’‚‚â `1 %`19€F< 3cZÄ`óe!\ˆ DÈ+. 83‹³Àä¸!lYYA -6‚EJŠ¢V €@©žXXX 4„å Ê@86Ð`RdB´€4I "Ý "–@xrÊŒ‚H€AÊ`—f ÉȰCŒ"XV0ɲ³C b@2…¬H ¬È“ p)!(ì‚ 0Ž4ˆ)(%RÁÎ ¶$€TÊ€¥Àþb‡b,säÐ@7À üѰ‚Òî?f¥Ö—\PIx!I´¦"”Ȉ’3¨ QY˜ÿt^^ÛØgv- }>WJOAV`$&#”¦8ùøø8€\FF ›SFJ$ÂÆ€ÐƊС䈉ÀÀ 4ª…Èäå -Á§‡ €H²…—ŸŸŸf ?ðâ5„ €k1Âd‰,ŒÃ ³ƒ“€.€"­F™ËË€àñ‚½ÁIÈ€"±Ù4ÉH gx|‚f©m)))9´. aMDƒ& ºX@t± €èb @ÑÅ€¢‹%DKˆ.–], ºX@t± €èb @€d`‚ɽSµOIEND®B`‚pion-5.0.4+dfsg.orig/doc/html/structpion_1_1spdy_1_1__value__string-members.html0000644000372000001440000000401112215647143027257 0ustar robertousers pion: Member List

pion::spdy::_value_string Member List

This is the complete list of members for pion::spdy::_value_string, including all inherited members.
str (defined in pion::spdy::_value_string)pion::spdy::_value_string
value (defined in pion::spdy::_value_string)pion::spdy::_value_string

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/message_8hpp_source.html0000644000372000001440000020230112215647142022301 0ustar robertousers pion: include/pion/http/message.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/response_8hpp_source.html0000644000372000001440000005765012215647142022532 0ustar robertousers pion: include/pion/http/response.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1spdy_1_1spdy__control__frame__info-members.html0000644000372000001440000000605312215647143031471 0ustar robertousers pion: Member List
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1one__to__one__scheduler_1_1service__pair__type.html0000644000372000001440000000646012215647143032354 0ustar robertousers pion: pion::one_to_one_scheduler::service_pair_type Struct Reference

pion::one_to_one_scheduler::service_pair_type Struct Reference

typedef for a pair object where first is an IO service and second is a deadline timer More...

#include <scheduler.hpp>

List of all members.

Public Attributes

boost::asio::io_service first
boost::asio::deadline_timer second

Detailed Description

typedef for a pair object where first is an IO service and second is a deadline timer

Definition at line 342 of file scheduler.hpp.


The documentation for this struct was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1cookie__auth.html0000644000372000001440000006462012215647143024716 0ustar robertousers pion: pion::http::cookie_auth Class Reference

pion::http::cookie_auth Class Reference

#include <cookie_auth.hpp>

Inherits pion::http::auth.

List of all members.

Public Member Functions

 cookie_auth (user_manager_ptr userManager, const std::string &login="/login", const std::string &logout="/logout", const std::string &redirect="")
virtual ~cookie_auth ()
 virtual destructor
virtual bool handle_request (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)
virtual void set_option (const std::string &name, const std::string &value)

Protected Member Functions

bool process_login (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)
void handle_unauthorized (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)
void handle_redirection (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &redirection_url, const std::string &new_cookie="", bool delete_cookie=false)
void handle_ok (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &new_cookie="", bool delete_cookie=false)
void expire_cache (const boost::posix_time::ptime &time_now)

Detailed Description

cookie_auth: handles HTTP authentication and session management in accordance with RFC 2617 (http://tools.ietf.org/html/rfc2617 ) using cookies.

Definition at line 28 of file cookie_auth.hpp.


Constructor & Destructor Documentation

pion::http::cookie_auth::cookie_auth ( user_manager_ptr  userManager,
const std::string &  login = "/login",
const std::string &  logout = "/logout",
const std::string &  redirect = "" 
)

default constructor

Parameters:
userManager 
login - URL resource for login request. Typical login request has format: http://website/login?user="username"&pass="password"&url="redirection_url"
logout - URL resource for logout request. Typical logout request has format: http://website/logout?url="redirection_url"
redirect - if not empty, URL for redirection in case of authentication failure if empty - send code 401 on authentication failure

Definition at line 31 of file http_cookie_auth.cpp.

References pion::http::auth::set_logger().


Member Function Documentation

void pion::http::cookie_auth::expire_cache ( const boost::posix_time::ptime &  time_now  )  [protected]

Cache expiration cleanup. (Call it periodically)

Definition at line 261 of file http_cookie_auth.cpp.

Referenced by handle_request().

void pion::http::cookie_auth::handle_ok ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn,
const std::string &  new_cookie = "",
bool  delete_cookie = false 
) [protected]

used to send OK responses with new cookie

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Definition at line 237 of file http_cookie_auth.cpp.

References pion::http::response_writer::create(), and pion::tcp::connection::finish().

Referenced by process_login().

void pion::http::cookie_auth::handle_redirection ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn,
const std::string &  redirection_url,
const std::string &  new_cookie = "",
bool  delete_cookie = false 
) [protected]

used to send redirection responses

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Definition at line 199 of file http_cookie_auth.cpp.

References pion::http::response_writer::create(), and pion::tcp::connection::finish().

Referenced by handle_unauthorized(), and process_login().

bool pion::http::cookie_auth::handle_request ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [virtual]

attempts to validate authentication of a new HTTP request. If request valid, pointer to user identity object (if any) will be preserved in the request and return "true". If request not authenticated, appropriate response is sent over tcp_conn and return "false";

Note: if request matches "login" resource, then login sequences attempted. If "name" and "pass" attributes match user definition, a random cookie is created and associated with given user session. If request contains "url" attribute, then page redirection response returned. Otherwise - empty 204 response.

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request
Returns:
true if request valid and user identity inserted into request

Implements pion::http::auth.

Definition at line 53 of file http_cookie_auth.cpp.

References expire_cache(), handle_unauthorized(), pion::http::auth::need_authentication(), and process_login().

void pion::http::cookie_auth::handle_unauthorized ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [protected]

used to send responses when access to resource is not authorized

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Definition at line 171 of file http_cookie_auth.cpp.

References pion::http::response_writer::create(), pion::tcp::connection::finish(), and handle_redirection().

Referenced by handle_request(), and process_login().

bool pion::http::cookie_auth::process_login ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [protected]

check if given request is a login/logout and process it

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request
Returns:
true if it was a login/logout request and no future processing required.

Definition at line 105 of file http_cookie_auth.cpp.

References pion::algorithm::base64_encode(), handle_ok(), handle_redirection(), handle_unauthorized(), pion::http::auth::m_user_manager, and pion::http::server::strip_trailing_slash().

Referenced by handle_request().

void pion::http::cookie_auth::set_option ( const std::string &  name,
const std::string &  value 
) [virtual]

sets a configuration option Valid options:

  • "login" - URL resource for login request. Typical login request has format: http://website/login?user="username"&pass="password"&url="redirection_url"
  • "logout" - URL resource for logout request. Typical logout request has format: http://website/logout?url="redirection_url"
  • "redirect" - if not empty, URL for redirection in case of authentication failure if empty - send code 401 on authentication failure
Parameters:
name the name of the option to change
value the value of the option

Reimplemented from pion::http::auth.

Definition at line 93 of file http_cookie_auth.cpp.


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/tcp_2server_8hpp_source.html0000644000372000001440000004676312215647142023135 0ustar robertousers pion: include/pion/tcp/server.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/scheduler_8hpp_source.html0000644000372000001440000007441512215647142022650 0ustar robertousers pion: include/pion/scheduler.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/_cookie_service_8cpp_source.html0000644000372000001440000003415212215647142024007 0ustar robertousers pion: services/CookieService.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1error_1_1bad__config.html0000644000372000001440000000504312215647143024643 0ustar robertousers pion: pion::error::bad_config Class Reference

pion::error::bad_config Class Reference

exception thrown if there is an error parsing a configuration file More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if there is an error parsing a configuration file

Definition at line 136 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_type.html0000644000372000001440000001255012215647143021415 0ustar robertousers pion: Class Members - Typedefs
 

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1request__writer-members.html0000644000372000001440000002555212215647143027141 0ustar robertousers pion: Member List

pion::http::request_writer Member List

This is the complete list of members for pion::http::request_writer, including all inherited members.
bind_to_write_handler(void)pion::http::request_writer [inline, protected, virtual]
clear(void)pion::http::writer [inline]
create(tcp::connection_ptr &tcp_conn, finished_handler_t handler=finished_handler_t())pion::http::request_writer [inline, static]
create(tcp::connection_ptr &tcp_conn, http::request_ptr &http_request_ptr, finished_handler_t handler=finished_handler_t())pion::http::request_writer [inline, static]
finished_handler_t typedefpion::http::writer [protected]
finished_writing(const boost::system::error_code &ec)pion::http::writer [inline, protected]
get_connection(void)pion::http::writer [inline]
get_content_length(void) const pion::http::writer [inline]
get_logger(void)pion::http::writer [inline]
get_request(void)pion::http::request_writer [inline]
handle_write(const boost::system::error_code &write_error, std::size_t bytes_written)pion::http::request_writer [inline, protected, virtual]
prepare_buffers_for_send(http::message::write_buffers_t &write_buffers)pion::http::request_writer [inline, protected, virtual]
request_writer(tcp::connection_ptr &tcp_conn, finished_handler_t handler)pion::http::request_writer [inline, protected]
request_writer(tcp::connection_ptr &tcp_conn, http::request_ptr &http_request_ptr, finished_handler_t handler)pion::http::request_writer [inline, protected]
send(void)pion::http::writer [inline]
send(SendHandler send_handler)pion::http::writer [inline]
send_chunk(SendHandler send_handler)pion::http::writer [inline]
send_final_chunk(SendHandler send_handler)pion::http::writer [inline]
send_final_chunk(void)pion::http::writer [inline]
sending_chunked_message() const pion::http::writer [inline]
set_logger(logger log_ptr)pion::http::writer [inline]
supports_chunked_messages(bool b)pion::http::writer [inline]
supports_chunked_messages() const pion::http::writer [inline]
write(const T &data)pion::http::writer [inline]
write(std::ostream &(*iomanip)(std::ostream &)) (defined in pion::http::writer)pion::http::writer [inline]
write(const void *data, size_t length)pion::http::writer [inline]
write_handler_t typedefpion::http::writer [protected]
write_no_copy(const std::string &data)pion::http::writer [inline]
write_no_copy(void *data, size_t length)pion::http::writer [inline]
writer(tcp::connection_ptr &tcp_conn, finished_handler_t handler)pion::http::writer [inline, protected]
~request_writer()pion::http::request_writer [inline, virtual]
~writer()pion::http::writer [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/functions_0x6b.html0000644000372000001440000000766512215647143021226 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- k -


Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/logger_8hpp_source.html0000644000372000001440000007453512215647142022154 0ustar robertousers pion: include/pion/logger.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1http_1_1message_1_1receive__error__t.html0000644000372000001440000000670412215647143030164 0ustar robertousers pion: pion::http::message::receive_error_t Struct Reference

pion::http::message::receive_error_t Struct Reference

data type for library errors returned during receive() operations More...

#include <message.hpp>

List of all members.

Public Member Functions

virtual const char * name () const BOOST_SYSTEM_NOEXCEPT
virtual std::string message (int ev) const

Detailed Description

data type for library errors returned during receive() operations

Definition at line 61 of file message.hpp.


The documentation for this struct was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/plugin_8hpp_source.html0000644000372000001440000010766312215647142022172 0ustar robertousers pion: include/pion/plugin.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1plugins_1_1_disk_file.html0000644000372000001440000004064012215647143025053 0ustar robertousers pion: pion::plugins::DiskFile Class Reference

pion::plugins::DiskFile Class Reference

#include <FileService.hpp>

List of all members.

Public Member Functions

 DiskFile (void)
 default constructor
 DiskFile (const boost::filesystem::path &path, char *content, unsigned long size, std::time_t modified, const std::string &mime)
 used to construct new disk file objects
 DiskFile (const DiskFile &f)
 copy constructor
void update (void)
 updates the file_size and last_modified timestamp to disk
void read (void)
 reads content from disk into file_content buffer (may throw)
bool checkUpdated (void)
const boost::filesystem::path & getFilePath (void) const
 return path to the cached file
char * getFileContent (void)
 returns content of the cached file
bool hasFileContent (void) const
 returns true if there is cached file content
unsigned long getFileSize (void) const
 returns size of the file's content
std::time_t getLastModified (void) const
 returns timestamp that the cached file was last modified (0 = cache disabled)
const std::string & getLastModifiedString (void) const
 returns timestamp that the cached file was last modified (string format)
const std::string & getMimeType (void) const
 returns mime type for the cached file
void setFilePath (const boost::filesystem::path &p)
 sets the path to the cached file
void appendFilePath (const std::string &p)
 appends to the path of the cached file
void setMimeType (const std::string &t)
 sets the mime type for the cached file
void resetFileContent (unsigned long n=0)
 resets the size of the file content buffer

Protected Attributes

boost::filesystem::path m_file_path
 path to the cached file
boost::shared_array< char > m_file_content
 content of the cached file
std::streamsize m_file_size
 size of the file's content
std::time_t m_last_modified
 timestamp that the cached file was last modified (0 = cache disabled)
std::string m_last_modified_string
 timestamp that the cached file was last modified (string format)
std::string m_mime_type
 mime type for the cached file

Detailed Description

DiskFile: class used to represent files stored on disk

Definition at line 37 of file FileService.hpp.


Member Function Documentation

bool pion::plugins::DiskFile::checkUpdated ( void   ) 

checks if the file has been updated and updates vars if it has (may throw)

Returns:
true if the file was updated

Definition at line 782 of file FileService.cpp.

References pion::http::types::get_date_string(), m_file_path, m_file_size, m_last_modified, m_last_modified_string, and read().


The documentation for this class was generated from the following files:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/reader_8hpp_source.html0000644000372000001440000002017012215647142022121 0ustar robertousers pion: include/pion/http/reader.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/structpion_1_1test_1_1config.html0000644000372000001440000000610712215647143023745 0ustar robertousers pion: pion::test::config Struct Reference

pion::test::config Struct Reference

#include <unit_test.hpp>

List of all members.

Static Public Attributes

static std::ofstream m_test_log_file
 xml log results output stream (needs to be global)

Detailed Description

config is intended for use as a global fixture. By including the following line in one source code file of a unit test project, the constructor will run once before the first test and the destructor will run once after the last test:

BOOST_GLOBAL_FIXTURE(pion::test::config);

Definition at line 209 of file unit_test.hpp.


The documentation for this struct was generated from the following file:

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/error_8hpp_source.html0000644000372000001440000005705712215647142022026 0ustar robertousers pion: include/pion/error.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/_allow_nothing_service_8hpp_source.html0000644000372000001440000001030712215647142025403 0ustar robertousers pion: services/AllowNothingService.hpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/tcp__server_8cpp_source.html0000644000372000001440000007700012215647143023172 0ustar robertousers pion: src/tcp_server.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/_file_service_8cpp_source.html0000644000372000001440000036375712215647142023475 0ustar robertousers pion: services/FileService.cpp Source File
Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/html/classpion_1_1http_1_1server-members.html0000644000372000001440000003601612215647143025221 0ustar robertousers pion: Member List

pion::http::server Member List

This is the complete list of members for pion::http::server, including all inherited members.
add_redirect(const std::string &requested_resource, const std::string &new_resource)pion::http::server
add_resource(const std::string &resource, request_handler_t request_handler)pion::http::server
after_stopping(void)pion::tcp::server [inline, protected, virtual]
before_starting(void)pion::tcp::server [inline, protected, virtual]
clear(void)pion::http::server [inline, virtual]
error_handler_t typedefpion::http::server
find_request_handler(const std::string &resource, request_handler_t &request_handler) const pion::http::server [protected, virtual]
get_acceptor(void)pion::tcp::server [inline]
get_acceptor(void) const pion::tcp::server [inline]
get_address(void) const pion::tcp::server [inline]
get_connections(void) const pion::tcp::server
get_endpoint(void) const pion::tcp::server [inline]
get_io_service(void)pion::tcp::server [inline, protected]
get_logger(void)pion::tcp::server [inline]
get_port(void) const pion::tcp::server [inline]
get_ssl_context_type(void)pion::tcp::server [inline]
get_ssl_flag(void) const pion::tcp::server [inline]
handle_bad_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::server [static]
handle_connection(tcp::connection_ptr &tcp_conn)pion::http::server [protected, virtual]
handle_forbidden_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg)pion::http::server [static]
handle_method_not_allowed(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &allowed_methods="")pion::http::server [static]
handle_not_found_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::server [static]
handle_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const boost::system::error_code &ec)pion::http::server [protected, virtual]
handle_server_error(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg)pion::http::server [static]
is_listening(void) const pion::tcp::server [inline]
join(void)pion::tcp::server
m_loggerpion::tcp::server [protected]
remove_resource(const std::string &resource)pion::http::server
request_handler_t typedefpion::http::server
server(const unsigned int tcp_port=0)pion::http::server [inline, explicit]
server(const boost::asio::ip::tcp::endpoint &endpoint)pion::http::server [inline, explicit]
server(scheduler &sched, const unsigned int tcp_port=0)pion::http::server [inline, explicit]
server(scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)pion::http::server [inline]
set_address(const boost::asio::ip::address &addr)pion::tcp::server [inline]
set_authentication(http::auth_ptr auth)pion::http::server [inline]
set_bad_request_handler(request_handler_t h)pion::http::server [inline]
set_endpoint(const boost::asio::ip::tcp::endpoint &ep)pion::tcp::server [inline]
set_error_handler(error_handler_t h)pion::http::server [inline]
set_logger(logger log_ptr)pion::tcp::server [inline]
set_max_content_length(std::size_t n)pion::http::server [inline]
set_not_found_handler(request_handler_t h)pion::http::server [inline]
set_port(unsigned int p)pion::tcp::server [inline]
set_ssl_flag(bool b=true)pion::tcp::server [inline]
set_ssl_key_file(const std::string &pem_key_file)pion::tcp::server
start(void)pion::tcp::server
stop(bool wait_until_finished=false)pion::tcp::server
strip_trailing_slash(const std::string &str)pion::http::server [inline, static]
~server()pion::http::server [inline, virtual]

Generated on 16 Sep 2013 for pion by  doxygen 1.6.1
pion-5.0.4+dfsg.orig/doc/README.msvc0000644000372000001440000002404312215647065016344 0ustar robertousersMicrosoft Visual C++ Build Instructions ======================================= The Easy Way: ------------- Atomic Labs has a zip file available from the "Third Party Libraries" page on our website that contains all of the required libraries to build Pion for MSVC 2008. To get started quickly, just download and uncompress this file into your C:\ directory, and you should be able to skip most of the following instructions (however, Path updates are still required). Building Boost: --------------- First, download and unzip the Boost 1.42.0 source code from: http://sourceforge.net/projects/boost/files/boost/1.42.0 We recommend that you use the bjam tool to build Boost for MSVC. You can download the latest bjam executable from: http://sourceforge.net/projects/boost/files/boost-jam (Click on boost-jam-3.1.18-1-ntx86.zip, or similar) Copy the included "bjam" executable into your C:\Windows\System32 directory. Open the Visual Studio 2008 Command Prompt, change to the Boost source code directory, and type: bjam --toolset=msvc debug release threading=multi stage Or, if you wish to build only the libraries required by Pion (this saves a little time and disk space but not a whole lot): bjam --toolset=msvc --with-thread --with-system --with-filesystem \ --with-regex --with-date_time --with-unit_test_framework \ --with-signals debug release threading=multi stage Boost.Iostreams is also required, but must be compiled separately for Windows; see Building Boost.Iostreams below. We recommend that you create a C:\boost-1.42.0 directory with C:\boost-1.42.0\lib and C:\boost-1.42.0\boost subdirectories. To install boost-1.42.0 into these directories, just copy the files in stage\lib into C:\boost-1.42.0\lib, and copy the entire boost directory (which contains all the header files) into C:\boost-1.42.0\boost. Finally, add C:\boost-1.42.0\lib to your Path. Building Boost.Iostreams: ------------------------- Boost.Iostreams is built by default without compression/decompression support on Windows (since zlib and bzip2 aren't installed as part of Windows.) Since Pion uses boost::iostreams::gzip_decompressor and boost::iostreams::bzip2_decompressor, zlib and bzip2 must be installed (see instructions later in this document) and Boost.Iostreams must be rebuilt: open a command prompt in ...\boost_1_42_0\libs\iostreams\build, and run the following command (changing the paths if you installed zlib and/or bzip2 elsewhere.) bjam debug release -sZLIB_BINARY=zdll -sZLIB_INCLUDE=C:/zlib-1.2.3/include \ -sZLIB_LIBPATH=C:/zlib-1.2.3/lib -sBZIP2_BINARY=bzip2 \ -sBZIP2_INCLUDE=C:/bzip2-1.0.5/include -sBZIP2_LIBPATH=C:/bzip2-1.0.5/lib Then copy boost_iostreams-vc90-mt-gd-1_42.{dll|lib} and boost_iostreams-vc90-mt-1_42.{dll|lib} from ...\boost_1_42_0\bin.v2\libs\iostreams\build to C:\Boost\Lib. Building Boost.Regex: ------------------------- Boost.Regex is built by default without Unicode support via ICU. Since Pion uses boost::u32regex, ICU must be installed (see instructions later in this document) and Boost.Regex must be rebuilt: open a command prompt in ...\boost_1_42_0\libs\regex\build, and run the following command (changing the path if you installed ICU elsewhere.) bjam debug release -sICU_PATH=C:\icu-3.6 Then copy boost_regex-vc90-mt-gd-1_42.{dll|lib} and boost_regex-vc90-mt-1_42.{dll|lib} from ...\boost_1_42_0\bin.v2\libs\regex\build to C:\boost-1.42.0\lib. Documentation is available at the Boost website: http://www.boost.org/doc/libs/1_42_0/libs/regex/doc/html/boost_regex/install.html#boost_regex.install.building_with_unicode_and_icu_support Installing OpenSSL: ------------------- ASIO requires OpenSSL for SSL/TLS encryption support. You can get Win 32 binaries for OpenSSL from: http://www.pion.org/files/openssl-0.9.8l-win32.zip Unzip directly into C: (or change OPENSSL_HOME accordingly.) The zip file includes both static (in /lib) and DLL (in /bin) versions of ssleay32 and libeay32. If you want to use the DLL versions, you will need to add C:\openssl-0.9.8l\bin to your path (or otherwise include the DLLs). If you want to build them yourself, you can get the source tarball from: http://www.openssl.org/source/openssl-0.9.8l.tar.gz You can build the static or DLL versions of ssleay32 and libeay32 by using nt.mak or ntdll.mak, respectively, as explained in INSTALL.W32. Pion expects them to be in $(OPENSSL_HOME)\lib or $(OPENSSL_HOME)\bin, repectively, where OPENSSL_HOME is C:\openssl-0.9.8l unless you've changed it. Pion is currently set up to link to ssleay32d.lib and libeay32d.lib for the debug configuration; the easiest way to get these files is from the above zip file. Note that if you try to use the release versions of ssleay32.lib and libeay32.lib with a debug configuration of Pion, you will probably have trouble running the unit tests, due to msvcr80.dll and msvcr80d.dll being loaded at the same time. (Yes, this is even true for the static versions.) Linking with OpenSSL: --------------------- Macro OPENSSL_HOME in pion.vsprops is set to C:\openssl-0.9.8l. If you installed OpenSSL somewhere other than C:\openssl-0.9.8l, change OPENSSL_HOME accordingly. By default, Pion links with the DLL versions, which should be in $(OPENSSL_HOME)\bin. To link with the static versions, you will have to change $(OPENSSL_HOME)\bin to $(OPENSSL_HOME)\lib in common\build\Release_DLL_pion.vsprops, common\build\Debug_DLL_pion.vsprops and platform\server\pion.vcproj. Include PION_HAVE_SSL or PION_FULL in Preprocessor Definitions for the project, or in PionConfig.hpp.win, uncomment '#define PION_HAVE_SSL'. (The Debug_DLL_full and Release_DLL_full configurations have PION_FULL defined.) Logging frameworks: ------------------- Note that the use of a logging framework is entirely optional, so you may skip this step if you like. If no logging option is defined, std::cout and std::cerr will be used for logging. To disable logging, include PION_DISABLE_LOGGING in Preprocessor Definitions for the project, or in PionConfig.hpp.win, uncomment '#define PION_DISABLE_LOGGING'. We recommend log4cplus (http://log4cplus.sourceforge.net/) for logging. A binary distribution is available at http://pion.org/files/log4cplus-1.0.3-win32.zip. Extract it into C:\, or change user macro LOG4CPLUS_HOME in pion.vsprops, currently set to C:\log4cplus-1.0.3, accordingly. Add \bin to your path. Include PION_USE_LOG4CPLUS or PION_FULL in Preprocessor Definitions for the project, or in PionConfig.hpp.win, uncomment '#define PION_USE_LOG4CPLUS'. JSON (optional): ---------------- Building JSONCodec requires YAJL (http://lloyd.github.com/yajl/). A binary distribution is available at http://pion.org/files/yajl-1.0.9.win32.zip. Unzip directly into C: (or change JSONCodec.vcproj accordingly) and add C:\yajl-1.0.9\bin to your path. JSONCodec is only built in the Debug_DLL_full and Release_DLL_full configurations of pion-platform.sln. Python (optional): ------------------ Building PythonReactor requires python 2.6 to be installed. A Windows installer is available at http://www.python.org/ftp/python/2.6.2/python-2.6.2.msi. Install it in the default location (or change PythonReactor.vcproj accordingly). Unfortunately, the installer doesn't include the debug version of the library, so you will need to build python26_d yourself in order to build the debug version of PythonReactor. The source code is available at http://www.python.org/ftp/python/2.6.2/Python-2.6.2.tar.bz2: open pcbuild.sln, build the debug version of python.vcproj, then copy python26_d.lib to C:\Python26\libs and python26_d.dll to C:\Windows\SysWOW64 (or wherever the installer put python26.lib and python26.dll, respectively). PythonReactor is only built in the Debug_DLL_full and Release_DLL_full configurations of pion-platform.sln. Additional libraries (required for PLATFORM build) -------------------------------------------------- zlib: - download http://xmlsoft.org/sources/win32/zlib-1.2.3.win32.zip - open it into C:\zlib-1.2.3 - add C:\zlib-1.2.3\bin to your path - (if installed somewhere other than C:\zlib-1.2.3, change user macro ZLIB_HOME in pion.vsprops accordingly) iconv: - download http://xmlsoft.org/sources/win32/iconv-1.9.2.win32.zip - open it into C:\iconv-1.9.2\ - add C:\iconv-1.9.2\bin to your path libxml: - download http://xmlsoft.org/sources/win32/libxml2-2.6.30.win32.zip - open it into C:\libxml2-2.6.30\ - add C:\libxml2-2.6.30\bin to your path - (if installed somewhere other than C:\libxml2-2.6.30, change user macro LIBXML_HOME in pion.vsprops accordingly) bzip2: - download http://gnuwin32.sourceforge.net/downlinks/bzip2-bin-zip.php - open it into C:\bzip2-1.0.5 - add C:\bzip2-1.0.5\bin to your path - (if installed somewhere other than C:\bzip2-1.0.5, change user macro BZIP2_HOME in pion.vsprops accordingly) icu: - download ftp://ftp.software.ibm.com/software/globalization/icu/3.6/icu4c-3_6-Win32-msvc7_1.zip - open it into C:\icu-3.6 - add C:\icu-3.6\bin to your path - (if installed somewhere other than C:\icu-3.6, change user macro ICU_HOME in pion.vsprops accordingly) Building and installing Pion: ----------------------------- Now you should be able to build the solution file called pion-.sln. See platform/server/README.msvc for more information about running Pion. Running the test programs: -------------------------- Make sure "C:\boost-1.42.0\lib" is on your path. If you got the source code from the Subversion repository and haven't yet run Doxygen, then create the documentation files (used as part of the Pion Network Library tests) as follows: cd \.. doxygen net\doc\Doxyfile Alternatively, just create file "\doc\html\index.html": pion-net Documentation

pion-net Documentation

Otherwise, PionWebServer and unit tests fail with "no such directory" error. To test PionWebServer, try running it from "\utils\" with the following command line args: -c testservices.conf To run from within the IDE, go to PionWebServer Property Pages -> Debugging, and set 'Command Arguments' to the above. pion-5.0.4+dfsg.orig/doc/pion-net.graffle0000644000372000001440000015573112215647065017607 0ustar robertousers ActiveLayerIndex 0 ApplicationVersion com.omnigroup.OmniGrafflePro 129.15 AutoAdjust CanvasColor w 1 CanvasOrigin {0, 0} CanvasScale 1 ColumnAlign 1 ColumnSpacing 36 CreationDate 2007-04-15 18:28:00 -0700 Creator Michael Dickey DisplayScale 1 in = 1 in GraphDocumentVersion 5 GraphicsList Bounds {{248.518, 290.329}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 175 Line ID 174 Position 0.31719011068344116 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 173 ID 174 Points {275.018, 307.329} {275.018, 275.802} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 133 Bounds {{205.018, 240.302}, {140, 35}} Class ShapedGraphic ID 173 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPParser} Bounds {{53, 330.051}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 172 Line ID 171 Position 0.47587314248085022 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 87 ID 171 Points {79.5, 434.36} {79.5, 229.874} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 166 Bounds {{26, 435.36}, {107, 35}} Class ShapedGraphic ID 166 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Width 2 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPServer} Bounds {{329.666, 450.201}, {36, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 162 Line ID 161 Position 0.2698262631893158 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 uses} Class LineGraphic Head ID 135 Info 8 ID 161 Points {314.984, 466.519} {436.105, 431.985} Style stroke HeadArrow FilledArrow Pattern 1 TailArrow 0 Tail ID 25 Bounds {{271.744, 438.958}, {36, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 160 Line ID 159 Position 0.25524911284446716 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 uses} Class LineGraphic Head ID 27 ID 159 Points {275.096, 459.202} {332.482, 407.315} Style stroke HeadArrow FilledArrow Pattern 1 TailArrow 0 Tail ID 25 Bounds {{669.433, 346.528}, {55, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 158 Line ID 157 Position 0.3034064769744873 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 includes} Class LineGraphic Head ID 72 ID 157 Points {669.895, 413.874} {702, 318.421} {639.482, 230.808} Style stroke HeadArrow FilledArrow LineType 1 TailArrow 0 Tail ID 136 Bounds {{129.407, 291.115}, {55, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 156 Line ID 155 Position 0.17846563458442688 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 includes} Class LineGraphic Head ID 110 ID 155 Points {193.177, 371.496} {159.169, 240} {427.004, 217.528} Style stroke HeadArrow FilledArrow LineType 1 TailArrow 0 Tail ID 132 Bounds {{205.737, 353.884}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 151 Line ID 150 Position 0.37797626852989197 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 133 ID 150 Points {219.27, 371.66} {253.577, 343.149} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 132 Bounds {{599.736, 388.194}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 147 Line ID 146 Position 0.45945680141448975 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 134 ID 146 Points {645.533, 413.999} {603.533, 373.07} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 136 Bounds {{290.7, 353.386}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 144 Line ID 143 Position 0.39542737603187561 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 133 ID 143 Points {330.766, 371.66} {296.459, 343.149} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 27 Bounds {{505.754, 388.047}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 142 Line ID 141 Position 0.46703839302062988 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 134 ID 141 Points {506.586, 414.348} {561.545, 373.022} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 135 Bounds {{446.884, 370.71}, {55, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 140 Line ID 137 Position 0.19981692731380463 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 includes} Class LineGraphic Head ID 110 ID 137 Points {471.586, 414.348} {485.588, 230.991} Style stroke HeadArrow FilledArrow TailArrow 0 Tail ID 135 Info 3 Bounds {{593.849, 414.348}, {140, 35}} Class ShapedGraphic ID 136 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPRequestWriter} Bounds {{436.586, 414.348}, {140, 35}} Class ShapedGraphic ID 135 Magnets {1, 1} {1, -1} {-0.25, -0.499999} {-1, 1} {0, 1} {0, -1} {1, 0} {-1, 0} Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPResponseWriter} Bounds {{515.217, 337.721}, {140, 35}} Class ShapedGraphic ID 134 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPWriter} Bounds {{205.018, 307.829}, {140, 35}} Class ShapedGraphic ID 133 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPReader} Bounds {{127.828, 371.98}, {140, 35}} Class ShapedGraphic ID 132 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPResponseReader} Bounds {{599.914, 93.2868}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 131 Line ID 130 Position 0.40399140119552612 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 109 ID 130 Points {626.414, 117.242} {626.414, 75.2727} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 127 Bounds {{567.414, 117.742}, {118, 35}} Class ShapedGraphic ID 127 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPMessage} Bounds {{525.231, 169.625}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 116 Line ID 111 Position 0.43068146705627441 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Bounds {{599.914, 170.134}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 115 Line ID 112 Position 0.41371780633926392 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 127 ID 112 Points {626.414, 193.994} {626.414, 153.242} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 72 Class LineGraphic Head ID 127 ID 111 Points {519.456, 194.509} {594.395, 152.984} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 110 Bounds {{428, 194.994}, {118, 35}} Class ShapedGraphic ID 110 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Width 2 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPResponse} Bounds {{567.414, 39.7727}, {118, 35}} Class ShapedGraphic ID 109 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPTypes} Bounds {{53, 492.34}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 103 Line ID 102 Position 0.46208575367927551 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 166 ID 102 Points {79.5, 523.376} {79.5, 471.36} Style stroke HeadArrow FilledArrow LineType 1 TailArrow 0 Width 2 Tail ID 1 Bounds {{29.5, 193.874}, {100, 35}} Class ShapedGraphic ID 87 Shape Rectangle Style fill Color b 0.534124 g 0.984429 r 1 stroke Width 2 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 TCPServer} Bounds {{136.936, 503.659}, {55, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 84 Line ID 83 Position 0.46410125494003296 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 includes} Class LineGraphic Head ID 25 ID 83 Points {128.053, 524.031} {206.447, 495.218} Style stroke HeadArrow FilledArrow TailArrow 0 Tail ID 1 Bounds {{104.169, 162.986}, {55, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 75 Line ID 74 Position 0.40371024608612061 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 includes} Class LineGraphic Head ID 71 ID 74 Points {102.342, 193.252} {174.986, 135.622} Style stroke HeadArrow FilledArrow TailArrow 0 Tail ID 87 Bounds {{308.5, 39.7727}, {151, 17}} Class ShapedGraphic FitText YES Flow Resize FontInfo Font Helvetica Size 14 ID 73 Shape Rectangle Style fill Draws NO shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\b\fs28 \cf0 Pion Network Library} Wrap NO Bounds {{388.388, 341.377}, {55, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 46 Line ID 40 Position 0.16527046263217926 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 includes} Class LineGraphic Head ID 72 ID 40 Points {379.74, 371.709} {598.461, 230.536} Style stroke HeadArrow FilledArrow TailArrow 0 Tail ID 27 Bounds {{127.828, 100}, {140, 35}} Class ShapedGraphic ID 71 Shape Rectangle Style fill Color b 0.534124 g 0.984429 r 1 stroke Width 2 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 TCPConnection} Bounds {{567.414, 194.994}, {118, 35}} Class ShapedGraphic ID 72 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Width 2 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPRequest} Bounds {{282.207, 371.98}, {140, 35}} Class ShapedGraphic ID 27 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPRequestReader} Bounds {{196, 459.873}, {118, 35}} Class ShapedGraphic ID 25 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Width 2 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 WebService} Bounds {{26, 524.376}, {107, 35}} Class ShapedGraphic ID 1 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Width 2 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 WebServer} GridInfo GuidesLocked NO GuidesVisible YES HPages 1 ImageCounter 1 IsPalette NO KeepToScale Layers Lock NO Name Layer 1 Print YES View YES LayoutInfo LinksVisible NO MagnetsVisible NO MasterSheet Master 1 MasterSheets ActiveLayerIndex 0 AutoAdjust CanvasColor w 1 CanvasOrigin {0, 0} CanvasScale 1 ColumnAlign 1 ColumnSpacing 36 DisplayScale 1 in = 1 in GraphicsList GridInfo HPages 1 IsPalette NO KeepToScale Layers Lock NO Name Layer 1 Print YES View YES LayoutInfo Orientation 2 OutlineStyle Basic RowAlign 1 RowSpacing 36 SheetTitle Master 1 UniqueID 1 VPages 1 ModificationDate 2008-06-16 11:34:53 -0700 Modifier Michael Dickey NotesVisible NO Orientation 2 OriginVisible NO OutlineStyle Basic PageBreaks YES PrintInfo NSBottomMargin coded BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFklwCG NSLeftMargin coded BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFklwCG NSOrientation int 1 NSPaperSize size {792, 612} NSRightMargin coded BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFklwCG NSTopMargin coded BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFklwCG ReadOnly NO RowAlign 1 RowSpacing 36 SheetTitle Canvas 1 SmartAlignmentGuidesActive YES SmartDistanceGuidesActive YES UniqueID 1 UseEntirePage VPages 1 WindowInfo CurrentSheet 0 DrawerTab Outline DrawerWidth 209 Frame {{391, 155}, {1015, 783}} VisibleRegion {{-116, -40}, {1000, 669}} Zoom 1 pion-5.0.4+dfsg.orig/doc/README.freebsd0000644000372000001440000000741512215647065017012 0ustar robertousersFreeBSD Build Instructions ========================== Building Boost with ASIO: ------------------------- Please see the README.boost file for instructions. Installing zlib, bzlib & openssl: --------------------------------- Pion requires zlib, bzlib and openssl for compression and SSL/TLS encryption support, respectively. These libraries are pre-installed on FreeBSD. However, you may instead choose to download and install the latest versions from the "Third Party Libraries" page on our website, or from the following sites: http://www.zlib.net http://www.bzip.org http://www.openssl.org Logging frameworks: ------------------- Note that the use of a logging framework is entirely optional, so you may skip this step if you like. We recommend that you use log4cxx for logging. The easiest way to install log4cxx is to use the included ports package: # pkg_add -r log4cxx However, we suggest that you use the most recent version of log4cxx instead of the included packages, which are several years old. The most recent versions of log4cxx (starting with 0.10.x) require the Apache Portable Runtime (APR). The best way to install APR on FreeBSD is to use the included ports package: # pkg_add -r apr After installing APR, please visit the "Third Party Libraries" page on our website to obtain the latest source code tarball for log4cxx. Then, just run: # tar xvfj log4cxx-.tar.bz2 # cd log4cxx- # ./configure # make all # make install Installing libxml2: ------------------- The Pion Platform requires the libxml2 development library for manipulating configuration files, and other things. This library is not used by the Pion Network Library, so you may skip this step if you are only building the Network Library. The easiest way to install libxml2 on FreeBSD is to use the included ports package: # pkg_add -r libxml2 Installing OSSP uuid: --------------------- The Pion Platform requires the OSSP uuid library to generate universally unique identifiers for most platforms, including FreeBSD. This library is not used by the Pion Network Library, so you may skip this step if you are only building the Network Library. You can download the source code tarball for the uuid library from the "Third Party Libraries" page on our website. After downloading it, just run: # tar xvfz uuid-.tar.gz # cd uuid- # ./configure # make all # make install Installing YAJL: ---------------- YAJL ("Yet Another JSON Library") is required to build support for the JSONCodec plugin. You may skip this step if you do not want to build support for JSON. To build YAJL, you must first have CMake installed on your system. You can download the source tarball for CMake from the "Third Party Libraries" page on our website, or from the following site: http://cmake.org You can download the source code tarball for YAJL from the "Third Party Libraries" page on our website. After downloading it, just run: # tar xvfz yajl-.tgz # cd yajl- # ./configure # make To install YAJL, we recommend that you just move the build files in the "build/yajl-" subdirectory into /usr/local: # sudo mv build/yajl-/lib/* /usr/local/lib # sudo mv build/yajl-/include/yajl /usr/local/include Building and installing Pion: ----------------------------- Now you should be able to build and install Pion: # tar xvfz pion--.tar.gz # cd pion-- # ./configure [--with-openssl] [--with-log4cxx=/usr/local] [--with-yajl] [--disable-tests] # make all # make install To build and run Pion's unit tests, run "make check" Known Problems -------------- The Boost.Test library v1.35.0 does not seem to build properly for FreeBSD. We recommend that you just disable unit tests using the "--disable-tests" configure script option. pion-5.0.4+dfsg.orig/doc/pion-net.png0000644000372000001440000015521112215647065016756 0ustar robertousers‰PNG  IHDR$— 'ÜaiCCPICC ProfilexœÒ¿kaÀñï{A[ŠFq¼A‹B”Ð,EÒ&­M[bHRóÃérwM¢w—ãrImuvpt±ˆ89Y‡àä"(ŠGÿ¡ÐEÊ9œo2Ô`xáó><¼?ž÷…ÈWÍu-°ß+ÜœW+Õš:1@ pŒë\ÐôŽ;—ϯ26ö¾!¾\Õ\×_÷ψz•j Dˆ5B§€X=t ˆmø®¢ Äô¦f€xĽR! â%m„~ Dë¡?ÑžÞðA €„c´P&YÃìè ¤Ãèè6(ÛÀOÛny \Ö]χÈkàb¥ZSÃ#onAªÊQBLå¦ÁÞ=åv@œì¬'g'vàÈÓ Ø-ÃÄØÿ¿w‚`ÿD~@Oïz½¿ýâ#üoÞ9œÃg_jœÃ¾€ç}(÷a¹ÏR0½§ï@>¥J2)GØCާ[ŽikêRæذ­®Üc 8éÔs·€SÀ§N¯¸ ½ÞZÌJZfEz«™Î k¼Å‚ô]m9/m:kEiןÖ˜…âhRYÚëÖ¤ïµW†õ†™žÇ±r«Ò-?[’&M  •%2þ9€£Sðä¼"Î]z¿ýæ@/|ó¾n»›^«ÑôÕ9׵̸šuôkqu&‘˜ås¢¿û_˜ pHYs  šœ IDATxœìw\S×ûÇŸ›=€ Kq`…àBq‹ÖAµBÕ¶°ò³¢UÛj]µ¶¸êl먣¢_«uÔU-¢u·VEPŠq‚J$! dÝ$÷÷Ǒۈ %pœ÷yÝÜœœûÜ“Üó9ã9Ï!(Š ƒÁ`*Ó`0 ¦æƒÅƒÁ`0•‡i0 ÆžP…fl_kAذXÌ÷+°Ø`0˜eƒÕj¥(Êb±€üÔhAAQAÌJ SC@c±X,‹Ú œ’0ÉL›.-»D¶#Mä’ïQÊ6]Zv}¯}M=c&ÍK¾KD’ÑzpßáBÆf³€ ºÓSŵJð1LM)Ùl¶X,$I*-ùÞ_…>rö»z9Qu'ãQ-<ÓIú‘74ær¹l6õuìSâo S@}’$I’4™L…æ¼l¯ýLÅ<ʇÝQ·˜÷>åñx´Þ0Ò¹a~Öƒy£FjÞ¼y@@@@@@—.] téÒ¥K—.ošEQÍ›7Go A(Ã2˜ÍæÌÌÌŠ˜½cÇŽ÷ßÿ… 2$ À¶‘wïÞ=‚ îÝ»‡L²Z­¹t­…C3™L:îÞÝû’³™6ŠyÔ%ÿ?o4I’4›Í ö.°Ø`šóçÏ_¹r%88888øäÉ“EEDDôíÛ—NSþççÎ;W®\Ù°a˜L&())y>ÙãÇåryy²}Yš'Ožœ>}ú…]½zõÎ;¶_‰D;vtvvF&9‚ãP5Åb±˜Íf“ɤ×ëæ=ÌÝ«=Ðîg&“Éh4 ¦-r¬V+ݳA¥ÄˆXl0Õ€7n(Š-[¶ ·çÏŸ?|ø0¸ºº9r¤sçÎüñ;wL&SQQÑ®]»¶oß;v,“ÕàÁƒ`Ê”)"‘ ºråJjjjçÎår¹H$š1clß¾½G R©V®\ <8räH$’°°°ÐÐÐS§N@@@€Õj}òäÉ•+W¶nÝúå—_€‹‹Ë† ~úé§E‹…„„¼âîL&“Z­¦ûX;vìX¹reQQ‘‡‡:3kÖ¬ÐÐÐ:uê„……uîÜ9##£¨¨¨E‹¶Ÿ~ðÁpøðaŠ¢öíÛ]±"¯– –;êÜ n"Æ_î9üË¡&“‰$If]À±Ø`ªMš4ñðð¸råJ||<=Ê„Zñ+W®|÷Ýw;;wîD;vì£> }>«ž={ž:uê§Ÿ~Úºu+PuçÎÿ .899@^^ÞØ±cà£> €={öÜ»wìÚµ«sçÎ7oÞ€¿þú«cǎׯ_”H’œ9s&ܹs'..ÎÅÅeòäÉot³yyycÆŒA‚‡z`'N¼|ù²««kjjjXXØŠ+ÀÅÅ¥GŸ¢›]³fÍÝ»wÝBmõlPçÆ§¾÷°E½™¶ˆy‚ P·Æb±0¨7x ¦pûömggg‘HÄçóé“h½¢üÞ5 …bøðá...eªc‘H4`À€Î;{yyi4 (ŠÏçûûûÇÅÅ@rrr¿~ýÐí dzͧ̌KQQ³2f¼bb­‡ »5РA0›Íaaa...7n\³fM™O`ÆŒ³fͺÿ>¸»»¿¶(jôrN¤7f³™ËÃõ(jn½Õ)9Ps!pÏS ðóó“Éd¶Jhlúôéyyy£G€Þ½ËÛ’=þ<:@*UTT4`À…B1eÊ:MVVŒ3BCC»wïŽÎwïÞ½Y³f0yòd…BhšÇ’$ àyF5sæÌI“&]¼x±ÌGÌÌÌDZˆ4 °=~üÑØ ³³3JO¿¡¯\¹r úÕ*è ”^Ô©(x‚½Ñ@]P’‘šE»0è €•ãР*Í„?þúõëMš4AýĉCBBG—˵Mf‹X,€Æ÷íÛwß¾}\.·  ÀÃá­\¹R*•šÍfËå‹eÈ!S¦L:t(Ò6‘H$‰Ö¯_‡ÆâŽ9Âá<}”h;]\\8J¶wï^Ú™DwMêÖ­ûñÇÛÚ|úôi¹\ŽîÎÖf”ØÅÅåÊ•+¶Ÿ€»»»‹‹KQQQllì[xu‡VM‘&3íV›~Mß*cê¢t/Úù òþøç^p0ggÊÙàä&½Ns›l9¦Qúª›ü±TÚ£[Ó¸Qü½óþÕ€¤aA}ÇܘÀö+môkÄÍ•+T,ÌzÕãE˜jÑhd³ÙtuÿÖ™p¹\ÛÑ­ç® V«•$Ig÷%rf³ùe·óŠŒF£§§'¨T*ûÚãøPE’¤^¯×h4*•êÉ“'çÿ=yæÖáKû¾þË/@Ÿú{“Ó#šJnÌYw¹ë wݵZÒp@¾Öÿßû­Äœ:<Ë.íÌô8˜›.A2;¶Õƒ¹Ù]HCê—«Ó?;¾ Ëö+<wiU&ݾòðè¼ëß|9ÓÍÍÍÙÙY"‘‚ >,oîÙ`ª=e†×ì•Ék%„ÅbÙåÒÏóŠºà HMM­ “»ë=×í¿_–Ãçåäé ærÐÉ}}Bø^`‚º ‡ÀO€>@î×8È à:«Ë‰&× ›¯XÇîòZüaˆ;d/Jºß©•bÕ9-¯oVµÞ2`Ðoõ© K;ïÉÏ)±}º /-JÞ¸åòÝŒ°Yy}C¼ß¾¢ö—{ÆŒu?x,6L MÞÐ.ݵœzþ¾ÃF½µ7‹ë”=Ýi:x<‘†Î[H€ÿ£,O=U¸lÈØ³qN‰X¯Þ6?uØÉðg¿"l¢Ùð—2d8žZYÀ>½ùrdΜÑk-¸Õ#rsç1ʹ9ù œö+:Ιj\®Ÿë|õÊßgU!ßÞ݃ .—0€…Ń©!Ôf™y~:€ ˆ x£YIMÓYCBdÖ9›/“åù– ,<:XDZ:‹ôô.ÛëmÓ6+2ç‘Ür"¾Ã— Èû6dx´ŒÈ½uéadoŽÛ,’‚.Âø¾³–I>N÷‹ê0lAã·½ åCÍÍSý:6ªH&v{£a0˜šEQ*eQ½Ñ8pXÀyÅX)ùì±¼®ˆ»_KÏç•À»Ñè€=cZí=* ãAtŠc üCÜü Ëø¤˜¯7}Ð5\Êzx÷žwønjîw£aΘìŠ,OU”d¥]­@v÷l0L D«Öf¦¿µ7ZYèµT\·gô¸l—®÷âûùïÚ|…ßztØ-ZòÁÀÁå m5~¹Ò…#yù[xúSb]0䊖ìÒÀéd“Ÿ&D5—î¹<èÀdÞó™VC°7ƒ©öØÛ­²¸»aç:M§Ù_x‚öþ‚¨㎆ $²§~“Joâð%O=֬ŊbH$s`ÃÞh c7˜Ú}ò¸»aç„8çåzO.ÛŇ͎𿨭À“ m:1,‰»SÅ/ê8Þh¸gƒÁ`jhgºg“_’Ëë•#Ö€õ/ªã=ì €Á`ª=ööF«9(jRO]bÚ ,6 ¦æao´šãx£a±Á`05­Z‹wêt(°Ø`0˜šFµð¨mà1M Sí)£.hól¦Œq(üåž±ãZ0m SÃ`±X,˯Aýñx§N ‚Ï籬,‚ X,ƒŒÅƒÁÔPo†Íf£*•Ãâ Yëgì³Z­E5íún#Òdþc^ Jß´C@ókä™–½‚,fëι#iÕµ ›ÍFJÔÞàu6 ¦&€"èt:µZ­R© þý÷ßââbNÇb±x<žÅbA›ýP%Äb1EQ*• Uƒå9# E"EQJ¥]÷ÕgÔjµ³³ó›~ë-Πû"B,Ëd2¡P¨Óé¤R©‹‹K@@@“&Mœœœ„B¡@ xÅ®ä• S IÒd2•””hµÚ¢¢¢ÂÂB¥RYTT¤Ñht:Á`0›ÍE•©ñ¢lhÇ3J¥òðáÃhsÕʾ:C‡Ãár¹B¡P"‘899Éd2777WWW'''´¢“Ïç3"6x ƒÁÔÐ0—Ëår¹@"‘$IQ‡Ã …&“‰$Ixnùg¥ @ZZZ~~>AuêÔ©ìkÑbÃf³y<ŸÏ‰Db±X*•ŠD"ÇårÑãs%WE`±Á`05V)|>ßb±˜Íf«ÕÊårE"‘Á` IMÞ ÄtÕlû¶ŸÏ …R©T,£5ô„Ök ³2ÀbƒÁ`jl6›ËåReµZÑ[¡Ph4I’DbS•Ƥ¥¥©Õj8{öìØ±c«¦Kºw,‹Ëåòù|' Ñ< ŸÏ§}‹ ƒ©  J–Åbq8@,K ˜L&«Õj±Xl{6UÀÉ“'Y,–ÕjU*•·oßnÛ¶m\”vÉc³Ùhò©RT>¸gƒÁ`0oªg9ݺçóù¨CSõJ£ÑhŽ=ŠúR,ëСCï½÷^Õ\ÚÖI)ƒ=ì†Á`jHTº , :_•füöÛo&L ßòx¼7n89Ùašò@”‚Ô…À cX,EQô=íëü¼Ós¥²uëV[Ÿ1“É´ÿþ¸¸¸Ê¾.Ýq¡×o¢N0*3OMÂ= S³©âZîÆAAAeN¶oßþôéÓUfƒ††Ã= Sé⚗Åbmܸ²³³çÏŸ?mÚ´¦M›EQŒw/÷l0 ¦R8~üxDDıcǺvíÊ´-ÌS{eƒÁ`0U ƒ©\]]{÷îíêêÊ´!A­F£ÝT˜6¤úÁl¬r Sí¨T)e<# Ï+±ÝýÞˆ‰†YÛ0æÑ*î~îÒr¦N^´¾ñ_ *×(ǡ։ Òzµ—Åb¡ÏT±'~õ‚îÊ ebhze|@ Æ0Ü\íÿGOj^9ÃÒpïlI’}†Å¦†BëŠÅb1™LÛ·o¿qã­4€{6¯„Ö´ULLLýúõy<›Í¶Z­Xo0µüS‰1Gù²”ä1©=ûe¯¿ò÷à71ÇE\H€cü>ìtWÅïtš/ÚëçŒ\¢Ý\ºæXüú´Äá-¯%Ïi•>mA{pј©[6gdħä-ëæ]£•‡ªM ÑëõjµúÉ“'µÙç½âLž<¹°°P£Ñ øí¨ˆÁÔdôiuNIQš´(ˆÊГ)Ó"ä1ñrˆ:©¤”çFÌ>Y6*-`uš’R¦Äç¤Ädh(}ÎN€ˆsù'¢²õ”2mËÂÙLß^åR{6(Þ¸N§³Z­ ßõ˜‘Ћi»ªlî$½^o4õi°rcj<†¼kÇ`Ï´¸h')h"€ätKø„­ä[r:É@Ë^Ù4zÒI¾ð£–2€ å?ç\Ë’ ‘H»/”o6IÂR–Õm*$äQã.ˆdúþ*—ZTA uEchz½^¯×3mQõÆd2ét:£Ñˆv©¢ð$¦¦#ð¨'‡i›“’’6­îÅå©&ALÌæ¡3Óµ$Ÿû|48ƸßÍ;céß ÐfmÉаïŸÍòGQÔÑ9fÑ»«lj‘ØEQf³m«Óé˜6§zƒ$Qa¢14¦-Â`*iØÂ…W}ˆnÝ$ÏvžW;'„Ø´){½¶Õ˜?¸u|MmµáNmš†º¡/›¤Âz½vŽÿ˃èÖ-j\ø¼ü}(މ\:{JDž±©Mël(Š"IÒ`0”””¨Õj•JÕ¾}{<Œöv°¹“† òå—_ººº¢}gù|>ÚJ„iÓ0˜ÊÅ Ré9R™ôEsfƒ™#à¼: €V¥‚ÿ>4« ðxYâC ¿=[¨Ò…5f³MÛ0mQõÆb±$i6›iצ-Â`ªLöÒ.GÀym©Lfû™»·½lsdj×0ØHšÜƼ5Hfè]ª˜6ƒq8ÒÒÒÚ¶m›––Æ´!A­¤4hši[ª7¨ˆd‹ ó?üØ¥¥»å芿w^-ñ{c:½,0]{è«1'3¡á‚í}'ô÷µßo`UÜS ¼eÉÇ.4n?8˜o·Œ1 ¦b`±yK8uëMžå©N;ÙåS8q)ÂBE?hõ‚}SŠöJ¯nÿ3ÌûÐ}²Û¿¿¦<þlìÝÄO²ÿmßâËÚáê§÷8Ñçßü¹uõ¿ \:åpÂâ';Enüµvb³w;Õ®>+CC[0>†a6›Ñ+#¾¯(¨Zà>°Ø¼%‰,$ à !Ð:ØK¹v{Èü/&÷ò€¶Ÿ ØWõ€ˆN~¬À@é×p]­z0cVóªˆ Ô_™9rßC üðɦ¯o? ˆNÞÞQ—|dÙýãŸOî 霚ÒOtì™·-…ª5_mÿlmNÈèäuëk~ÿéO3’!d䀵ï C¾º´îÝ¢=Cœ^•mK٫~ÐQB(Š¢ý$”ƒÁ€^«~ 9‹Å¢ãHÙFg¯b3lÁbS!HÈ@@ªC»×-ý„ßë“F¾|6}Ÿº0ïŸCkBúŒ•Z»¿#yšHÔdpœÿþ§ƒ½‡XFz¥¯Ý·Ú)ÜZ“ú„üñ«o'-=Ôaò“2ownç= Y?}ņ¸õóÿ~,b¼e—÷®1kÎù ZÐ5¯ÕÜĺõ9>mÏ/ÝôŠl7rc¦È0˜JƒÖ’$ ûöíÛ®];Š¢Ú·oß³gO£Ñ8wî\”²C‡={ö4™L•zF©T@zzzóæÍ+ûZèLÇŽ{öìI’äܹsÑFS]ºtéׯ—Ë¥;:L­¼ÆbcG 3¯C 4Sb=½-Ë+º í2°­€ìÝrQ°›´ø^îñGh%sþí×yv‹§§xÀ;í®R“ ³f4—„¾ß'ïH )°}«Îº™sü÷ýÃŽ Š¡0´Ÿáän³Ï€5`Õhýr£?ùÊl°Ø`jTé"h­qÖí4W9çÏD@¹ç¤zP<¶´¡çqë¢×–Ê?#iýe¼WCc•\ €òxz§ÍƈÑ£ÇÕ|k—©—ËÔÅ©pa¿ Xl*†ÍHl½pù–ˆ 3¢# ºt¾Kìíú&ÆB‘{•ÎÕK\‡Â¹_÷EÌíë ÿõ“•GLž“r¹¸[„¤àÆ#𮀃Wšõo9 yÅïòK/'Åé6åá]× ð–úvÃÝAÑPܧ?)_þÚl1˜+3›Íf³Y¯×sxœÆí|ýZx<ý,àß²îékôúÆ•5“ÿÒ»>”nFEQ#zƒÅ¦bpÙòtq¨{Çî'Vmk,™™ wd~È>”VñO‘L¸;öÿüæ³Á àaשÃþäÎi>lQÈÌîýOv:›ï Ûy´™³€‚gÞ†~Ô÷qàl”øD~ÛÐиEA3›‡@f@ôý`ñ?áYíG]:Ñš/Vû/^™-S³@ch(Ò®Ñht­#{o\;¦buAIêñ›"†Ò“7LYR‹qZ­V£Ñ¨ÓéÔjµR©|üøqß¾}íˆÓl0ª´V©»ð•\­Z•ÎÌåË$¥Bd6*T¤Ô]R¾°¯¤Ja–º 9ô[•U&{:|g0€€Ö’7Ëö `s'EGG3ÆÃÃÃÅÅÅÉÉI,s8GpzÁÔNÌ †ââb­Vû„| lŽãÄÀí+ÿYroþ·?I¥R‘H„æ2òœâªÁÎp|÷×( °¤2ÉJ¾ûHWöŸÒ·Ti€%°íµ¼Y¶L5†Þ­ ©NÞƒü ÉÙLåÐ;F"ï ¦ÌÀbƒÁ`jHoØ(+2ÞbÚ"æñ—{~òÅ£ÑˆÂæ28”…ŃÁÔèÎÉd‘vAPÈC^uĈ%Xl0LMU£ô¶hõ>FùPsîøET&̆TÀbƒÁ`jôjïz^ÃõfÚæQ”d¤fÑ›N18ŒV»\Ÿ‰gaÚœjòi¡=[p‘b´”„Ë+_ýfP$ýPØë» !€1uQºG|ÃóŸWŠÄR7Ž©P÷Xçùد®[Gijö‰Ò5ªW„äö®?ótÐàÃðîý<O%e¸2åc¾´èðÝ ðè~®•v—o ³ûªÔÆž Rì¤[A°lc•²¨¼Þh¤!ýEé 5oËUåÔaB§ÈÏ]óOøÅ´ò°YÉ}CꪒF&ŸØœ 1}¿YßÎò÷©US/geÀˆ“±}:qOMøsÉQ•È>Ú> ]\Z´oÎÔË]Æwprm0ô»†·lóñ+oÕí/÷ŒÛüMK¯2¨ub¥µ$Ç«_ßçäÉÜ“'s™¶¨úADýúõ9›ÍFúÍ´EÌÛÂe 3ö #öÈ2š.@çÍV0£8»`ë߯æóïŽ>´ÃàCÞÊݵ¦Á¬oø–KÜAëûf­Ê1 l}yuÁˆõ]r ,¦ÌÔé«êl¤æ²Óÿ—¾a~ÑÆ¼Û¨?•“£~y°GάÙI¿<Ò‡¹€ŒË+boƒµæ†¶ÝèÏAÄ®6ã£bßwn˜Òw^ÃK é轄$ÛEŸýM·óÒc¹ÒeÍóOäZ1DàÓ=$X^P&ŸòWRÊ‡š›§ úulôÖÅc/j‘Ø@é4êÖ±XŒüñÙl¶H$Bbc¯9´’’’»wï^½z577¦L™b—l•Rh‘H$‹Qè ¡PˆÄOÞ` Š¢êùûU~o4€Íap¸¯O `ð y:¤FCrÅíÆ»~*ÿµË–É®¢l€s`ˆþub#PÜÙ±Úðäì鸘݉üK¦'î¨ÓµD6š+Ì¿ÙßçPÃÓ>« ›ï>ÚH™œ´ôˆ=øÛ<þ¨“¿âÔõ,•ɧüE¡.(ÉJ»Þ¯cù¿QYÔ:±a³Ù\.—Ëå …B©TJQ—Ë$IFäŠ^Á«äåå%''çååét:ƒÁ •J‡îééùúo:0ôØ#ŸÏ‰DR©T, :ÔVŒCñÞh`»áÆ3mMѳ©Ø|¾”>> JÇvxÇÎtîáÂ~"Ihè°›?õïÖŽåŽ89Õ»~þbÿÙ'bš?ÞÜtØ_HLz±‹[vðìá¾¾¿5n6'ÈÚsÁ¬í7ú³ß&tI sýÂËB›Øæ#,A8 µ('Ø…ÕÙ`2™L&“Ùl¶ËЧ)S¦äää á8‚ :uê4qâD{˜Ï$H§9ÒÔ/‹ÅB¡Ïç£ñ4ì&€a“ɤ×ë5J¥zòäÉÕ—ò\.—ÓA ²)VèÙ2áÓ€†f£ºÀÌó£·zU‰ 8Î(¼¡ÁX¬gKd‹ÁlÊ»}ô¼ Çzêä¤yWZ-ù®^Ù|ÊÇí+λþÍ—3ÝÜÜœ%‰@ àpèfÔ.±¡ãô‘$‰þšHxH’DKŽí2†V\\wÿþ}ðöö^±b…··wųev)\.—Ïç#Éáñx´Ò`±Á0H±9ÿïÉ3·XÚ—i»Þí£-Q;/>º i§¸ö IDAT]–ïé÷¶û¸Se:åYŸÓ”q±©uÃhÈA½e±Xhòõiì¥N¯×ÿöÛoíÛ·?wî\AAÁ°aÃBBB*l8ó Q2ä Àáp“ýŠ'l0;#õzôó¡Î{£1½–Õh\ˆ–™Š¡=xð`Þ¼yÍ›7OHH8{öìŒ3F-‰^ÿÍê/€†öÀs6Œc‚½Ñƒ®ÑŒ7eT,pÐÙ³g—,Y2jÔ¨wß}z÷îÝ»w Í„äI]ŒØ 〼¹7Z{£1 ]9¢z³âCgEýúë¯ÿý÷âÅ‹5b¾Q ÄƒqXÞÌ SùÔêÃ.5fqqñìÙ³Ífóš5kœídƒy{‚P)‹²’³ÄÍ`¼iˆÝ‡*Dnnn|||@@À?þˆ•ƒaº©UkñNà/÷Œ7ˆi+jyϦ‚=ztÙ²eãLjˆ`Ú óÛ±‚ ø|›z0—Áõ XlÞ«Õºzõê3gÎ,]º4 €is0 €MüCÊisC‰I›ÿÄ×79Žsãiø÷xcÔjõŒ3Abb¢D"aÚ `³ -ÿ ô ’Õ—ÞߩݹnZ¯í×ȧap€Ùl9¶ç úŠcßF! è3‹¥n=7ún‹õzêí¦yÓ3G“N#Ã*˜OùÏÑðÿжÁàÜÑtE~¡”ïÒfzW:ÆSbS»"Tœëׯ'$$ôêÕ+..Žñ 7 CƒÂ‚ètºââ⢢¢ÂÂB•JUTT¤ÕjKJJÊ„Ù5(â;zE$ B¡066ÖÅÅ¥â&™Íæ3gÎtéÒ¥âY•:ü£P(‹Å(@»««««««mø *ÇôPÇŽÏç#½AÚmÃJU™%e cêÂÕ ‹Å²|ùòôôôå˗׫Wis0LYèÀh# ³Ù ¨o2™PüCzùvŸ>}Ξ={ïÞ½2qC>ûì³öíÛ—ï±U£7:óÛo¿éõú´k×®"ù”ÿ êÙ íô† b±EËE®xÎÆqQ*• 2™,11Q(¬Ž±½1˜ZêÙÐúº8(¦;’ŠNüÁ,]ºÔöëÇ8p ½ŒyòäIVVœ?~À€öÊöµÐ¡¤Þ…B@ è0†UfI°Ø¼†¬¬¬™3gFGGÇÄÄ0m ƒy)´+—Ë…Ò6>4[C‹M~~þ²eË8ÀårQ^èÓ§ÏW_}eG{’’’PÎ/^´X,vÌü î zEƒŠHuè}§pÏÆINNÞ°aôiÓ˜¶ƒÁ¼ z^(‡üÐh4ÍŠ+Ö­[Çb±>ÿüóÞ½{÷íÛZµjõóÏ?óx<;Ú³gÏ4ºEQTJJʘ1cì˜ù+ E—V¦ñíÛ±7Ú‹!IrÉ’%ׯ_ÿþûï½¼¼˜6ƒÁ” ÔƒAÒb{`2™Ö­[·`Á‚¢¢¢Aƒ%$$ ]¦&L˜’’rüøqWWW;šqñâÅîÝ»£c‚ ÓÒÒì˜ÿ«¡c?ÒA‡éåœ :`±Á`05 Û îè ))é믿¾uëV÷îÝ,XJ'.((P©TMš4±¯ cÇŽ]·nífŒgΜ©ÊÛõ›¶q‡‹ ƒ©±œ?~âĉgΜiÖ¬Ù¢E‹"##«à¢ƒ¡nݺZ­ÖöäèÑ£W­ZUWG8à*ÀšˆÓpmÑ7¿2ɽƒËÌyy™?/J6ØÛ. Seäææ4(<<<77wÍš5W®\yï½÷ˆ*áìÙ³^^^ 6ôññŸ† ^¹r…¢¨ª1€p<¥š)6‚º#›¼ÚóáIƺ©ž¼ôc™´åšÞÞva0˜*@¥RMš4©iÓ¦ûöíKHH¸yóæÈ‘#«2.g÷îݯ_¿~óæÍÍ›7ÀæÍ›oÞ¼yöìYƲ˜¥&Þ¼áñÉ×͆ksbGMÕ ˆQÒàZò‚ "4ñ¼øn!Þµ ß$¦« sÃ7‰éZUòœh‚»¤0ÀÀp*qAD訣w `¸¶(¶[(A„Æþ|×Ìô=b0˜ç0™LË—/oÚ´éªU«ââânÞ¼9kÖ,±XÌ´]€š)6æ¢ûrIÐÛ¼&hÔ.J™²&.ñVÑ©£ÒÒ4yç»UÓv—€®àj @\- ͪS?D¥Ek¨+3{ˆ2nÍ™k:¯ RR”f}³îq¿=¹²qjÞ°óµ9Òš£}¥ †x<ÞçŸþèÑ#N·zõjÆýH›6mºeË–¦Mñn5Slœ€$é$_øQKÈZ,”?ÎIÿ'#æÿZJã7ðÊÑQtS‡oó­Û—®ŽÝS Ø+& 732FÇÅFÇ.IŠh$凎XÝh£ ¾Kuö‘2pWLíD«¸«(óN›¼èçkŽ1ãZ·nÝ!C†Ô­[—iC‚š)6FGà"ß Ø|NùÉÑÑPÏšƒ—@næm>€›wÝ¥‡®€êêñcÞ!þ@Ò¦¤¤Å³"|%÷Ïžr·‡¢¨Ñ0zÌ®kŒÜS 1Ü\í¿äj¹“sïlIR•hÏK©¶¢X5ÔD±á€“¸ uCïÍRžWÄžÙç<ˆPÂ'ªýÄž.|'7>ÈN)Ý4´[臛3\Ž_¯ ÓŽv'ºuŸN.¡CÞŒ$ºu#<:;wmÝ8ÐuŽÜ):6vêÒ¨)þLÞ SãÈ?•Ø "ôç£wÍwÿè:ç.@þÁoº}½þ‡I 0?þ÷kZÛ4ð’IÙn±_&eøð@{pQlh(A£ŽæWQ^mD‘)¨Ú„^£Ô¯>E* ”¶ï•6Ÿ“š‚¼‚²9`0˜ ¢O‹€¨sJŠÒ¤EAT†žL™!‰—CÔI%¥<·0böɲiTi«Ó””2 >§  &CCésvDœË? •­§”i[î̶£¥y'WGÈ—¥Ü!ïìŒÏ¾CQy¦ELýuvÈ·dklÓPúìÙ1ñãã# ~}EQÙ{f@DL|ÄœÓh,Œ‘Ë >%OoG;Ú%6V«õâŋ۶m+((`Ú ó}ΈˆŠŠŠ‰ŠˆŸ¡¡(}š fKEQš´…³Ï•M“.J¾PIQ¥\(:xr™|| Uúö¤FŸ²,äQãd+íghµE¤&£½„âââiÓ¦mÚ´©wïÞîîîL›ƒÁ`ž"ð¨'‡i›“’’6­îÅå©&ALÌæ¡3Óµ$Ÿû|ÛIY¾›wÆÒ¿ ÍÚ’¡aß?›å=Ž¢¨£!rÌ{£ò®ƒ=Ó⢣ÇÌÖDÉé–ð#l^#ßòS'p¸À+›Fÿ¬§Òµ,ùø¸)»/”;™$a)Ëê6]g§Êƒk¸Am›Û·o5ª~ýú‹/vvvfÚ cƒ4lá«>D·n„G’g;Ï«‰ÂlÚ”½^ÛjÌÜ:¾Ç¦¶Úp'È6MCÉ3“²Âz½vŽÿ˃èÖ-j\ø¼ü}(މ\:{J„ÀNfVQtP˜îZUGíׯ_JJ Ó†`0˜—¢W*Ÿ›S-…Ô“¯MCQšg>$•y¯Hüv6Xµì¤*m5À´<ŠÊ^1;Ñ@ßúŒÛ4¤þ\LÄ24Ü·,"æœF³s¼ ""B“¦Ì™ Љ˜}àŽ]Mu8jx N«ÕºfÍš“'O~ÿý÷ 4`Ú Sí1¨TzŽT&}QH,³ÁÌp^@«RÁšUŠx¼,q¡&‹Z­ž={6›ÍNHHH$L›ƒÁ`^EQ—.]:tèZ­~çw"##«ï «N§{ð௯¯H$bÚ橱s67nÜ5jTÓ¦M.\ˆ•ƒ©;v¬uëÖ­ZµúóÏ?ß{ï½aÆU_¥€ .4iÒäÂ… LâÔÌŽÛáÇW­Z5iÒ¤Ž;2m ƒy=ÙÙÙS¦LÙ·oŸŸŸß–-[ì˜qò1oMM‹Å²råÊÔÔÔŸþ¹~ýúL›ƒÁ`^ÃãÇgΜ¹víZ‰D²páÂ/¿ü’Ïç¿þk˜êF¥R9sæL©Tš˜˜ˆI1G¯×/^¼xáÂ…ƒaìØ± nnnL…©,^#6´×:®“Þ’«W¯Îš5«oß¾±±±`6¿~ÏzK»Z¾©Æaqð‡î­±Z­7nüöÛoóóó?øàƒ… 6lØ^w¿o4°æEGלŒãc’/Š¢¬V+lݺõÚµk`óË1^j/äÁƒçÎk×®ÝÍ›7^›ž.z‡óÉ'ŸÔ«WÅb±X,GøI0˜2•zóÑ{ RRR¦Nš™™Ù¦M›-[¶´oßHòÅ1)Ñ#YfÃãW<§¶E‡Ê ˜+:Ôä5›Í/»»JŶ%]ž¢«t{žÿÐDQ”Ùl‹ÅôVSùöÛo¿ùæ6›Í*…i‹0µº¢¤(jë֭ׯ_·mWkÉ)**:räHnn®³³s—.]^»«]3²X,‡3lØ0???Ô(|a¥I—›ÅbÙ¶mÛ7˜Õ›{÷îmݺuðàÁU<LA¨=]¿~}‚ ^QtUÀ z6V«ÕjµZ,³ÙlµZ¾ë1#¡WÕ[V5°¹“ ƒÉdâp8lšLÕc[]Z,–¸¸¸ÙÚS«ÕÉÉÉÉÉÉoô-«ÕúÍ7ß áy~ªµÌfsÜÿÅQV‡æ­[·2k*76› ´äT½eņ$i2™ªÞ ª‡$I½^/€Ñ_ƒA ¥1™L¨ÞühF·A3»3m”}°X¬V‹•Ë{¿¤þÄt£Ñh2™x<žÅby¾QˆÊÍjµšL&’$)+U“Šî­éOL7 F£‘Ëå’FxØ >ÉdÒëõŒØTÅFt§A°Ùl«ÕŠGÒ0LÆÌf³Ùl®y ›Íb³ßþáB-`$3V«ÕVoh¥Aij^ÑUÔžzÉyØ ÙšÚóƒÆ’’Ô7g³Ùl6›¢(ܹÁT=ež¾ââb¦-r,ŒF£N§ƒÒJÓv¡‘$i0JJJ´ÚòoÏ\ó)ó_b±XŒTqe[ô`1I’F£±Š­aô`£Q Ô8ªÖs°˜j ݳ¡;Üô¨’$I’äó)*7Zo±Ð1Aÿ%z`–©YÀti‘ÞÔ±AÿN4ìñ˜Z í‡f±X°Ø<zTM&ª1mUÚ«¥ÁEg F3Ì6¦_гAÿuô³1bSƒdÕl6Û:æc0LAQj„Ö’Ö^ù1—‚jÌ2•&ݳ±X,C ߇ì@Uœm½yØ€aÕTõ YEn¸gƒa‹ÅÌ­tdУŠZÃ/|NiG>¬Ó¶ÐU*¦Ìxñ0½Î¦ê ªzÐÍÒ‹´±Ø`ýýв–<€å‡®—^¸Nƒ&_«Ü:Ç…^4‰Š…©*îïo½VùÖî#“÷¨ý눅@*Ÿ(}¢Þû¶¿Ç­cÿÄ÷Üu`èüa?—»› —O?sUo0kÀ˜/[‡¸só/]úzÄÑ-™?£Çw_˽«6:(×çG1F°Õ¦mq,^=ÐM?Â̶ߺÿŒF x¦^·•™·°É£uè¬w,i?ÿ4>¾<-Œ+rVœ>Ò¸ç­ý™3ÿò%·ë9u´e® é瓛ؽ\Ýw¨y/(:ë?®Í–¡—f®ñ'·[oéxË$_ûÜÜ[;7y‹È4¦kYû³êFt0(’~(ì6ļ~b6?@,‚¶°ÄèÖ¨µðÎÅàä&½Ns›l³à=Éá3gþÕ€¨Õ¸a!üÌŸ–žáÕëÒc`=^eÜa…yáJ•ò²¯Á Hú¡°×wABcê¢tø†ç??®‰¥nS¡î±Î9ò=8°_]·Žˆfí¥kT¯Éí]æè Á‡áÝûy*^ص=e)mÖ°g|°» ¢÷K£W™NÎÒ7^¨Tѱö\½(­ïäÕê†! ¼B‚¼‚êß_Zpú“^AD61L™èàÙÄERìº Äô ±ÿäç^ÛðhW|ÊÝjëgWÉÓ#ÇÓs µ­Ï0«výQÔ'š«ˆý 8Ü¢w t2‡Œb™ô¡âžêäŽý?2\q2ÓG|rÀеQ[’[!MB½ùRï–ñɇÎßsÙ™Ü}Å–’9™°fÊöcN<(lØ@ ÑÎ[Z£vƒÃ`Ê—Ÿ•°º?½±FD Eb€ °™»°Oç<¸n°úëƒ%í…ʳ–÷Ž”Á}7XýurÑ;"SaÁÞ5²J×»kÖnÖs7U/÷çÍË×ÄÜÝ Ÿ:~÷É?s.+ ~×7_ŽÌ™3zí£Â·"ºÿ•·Dÿ¹™¿Ài_®þCí_©ÇŒ]BõØAÌ»4¥AaäÁ9³f{$ýòH㢚¾ªÎFj.;ýŸ¡qéÛŽ¶a~¼ŽËfìFìd4]€Î›­`&JGÃlç‚Ø|þÝчv|È[¹»Ö4˜õ Ÿ}•wô¡-<@¯Ûµ4uĹo-™©¶7»a~Éü´mTŒâ÷Ÿ/Ô~e¾]`‹®ävÅT6qÑÆ¼Û¨?u×3»éå®]üì7.WÅTjÝ,l1ë˚ì¾ß7“¤¯ßþÑÁ¶Æhw€†òÖ^A¥Ef¾“Z¯<"#Üë{ Ò¦º~ï#Gî^Õ·¿OÔY™è'v¹Ä¸rèÿ¦x ¤ À+é÷áï»ÃùµGp@ ` ñ„*¦öAƒgœý¿Å lí]–sr¼Kô;ÂæÈÐOB\…`„Bèùi«îmÅ@jŒkÖÞyP"LÍÍÚ|xÙQ¾TÑà?êÿ\ú-í?ÔóýÕ½CØ÷mÈðh‘{ód}˜ÖÑO ðh¡*TšI·¦Qy@óÙ .çs"RúÎk8c 4} —632.¯ˆ½` nÔÚ!¦òI‹^Þ{ý•N³•ÍÑ'uû³\VÓ¢m?o‹®iäž®R¸k4B|뮣ê±Í&/]ê…ËêæÒ¶7›w"óýÑ­x>ï‡/|háðÙ\(2ŸIÌ m=ºÑŸƒˆ]mÆGžÏ7òxÕ8l£ýMçòn¥BÒñë‘¿Ü_ïÂÔœ;)lGàåßZpþk$€ 8|óéžÜŸº÷ø‰íwdéáæ¡-Ü\Ëí½Ò¹k=— ]Ÿ†“÷ðÞÏ@øñ¾–ÑÞ“ú÷˜Ôþ °]Ÿïn5þ%0µ‹Å²{÷œ·Í€ l‡ P:0õÊá}²üä^>Až~!®ÂÒäžAž®žAþ=6Õ‘œº={øðˤ˜Ï&¶•I¨ë #OÏÝMÅòFo8{à  SkРE½»óo«Šs‰žNbs8|>°Õ™Y²yÔÜÝymWGÒùÕøá_oŠùzq÷`_þÛÞ²Ýá°Ø‡ûúÄ¿O¿ Ï-=]¥¥gÝ}ü\==;Žê­S[Ÿ¹YžïI¨Sod°“uð‘ 8÷1ð¡Lâ'gïHÇÅì¦æö‚=‰»À«„»Ê°Ï&däð”ÿ²wŠÿíÇa+õZ’å.Cÿ*ßrø³ßþiâßkÍl©» Ñä#?~ªÐsdB)ÚYŽ”æçÝÌB6CÇõ{EX´á =k·ŒñG~´û½`0UCzzúçŸÎápÜÜܺwïæååUþ¯‹l߸•>Ô\6ÈŸi sÝþ .”ìáºýwÌ@úßï ë]ä¿0!ªAÖ§¹­ëü“9Êiy—щˆw›ðÒáò„¶¿Œ\鑃{M›v&.4/8#Ûmõè@)뎭"|[*{´shèÅ.nÙÁ³‡7hå6컟úwkÇrGœœ*Çà¿Ûf€Dôl*6ŸOÏ ³¤ÏjÙž±p9Y[îZ¾vó¿› {o@ÛŸ&œk*´åÊ*üáÃn—àXn›em$¡Ï$ö®Ÿ¿Øö‰˜æ77vG&J•l On¡ÿ°šŽ¤=³S'EQ(ŠŽV«-**R(ݺu«ñ›§õéÓ'>>¾nݺ®®®..."‘H 0¸ë¦–€Âëtº’’’ÿý÷‹/¾ÈËËCÕ©S‡ ˆþòË/LoÊb.VBwáÓy ­^mgw![{AÔƒqGÃ@ÙSyÓ«JLÀw–½¸ «W•˜€ãü´Ñ Å =[&–»¹ÛŸ˜>`À€Ï?ÿ¼N:2™L"‘…B´G ”ÆèÔjµjµZ¡P<|øpÈ!LÝ<{³Öb•UÂy¸ ãqW:IÀ\¬²Hdü'6Õfž‡½µ¬lÁ›unúÓûöí;zôh777'''±XÌçó«~#<ŸŽÁ¼1(vŠßŠ^ô1ŠIx-.....FºB ‡Ã‰Db±X,ÛfÎápAxxxXXØ/¿üÂÔ=ÒæHÜÿ«%ØR!/.ÛŇÍŽPö_R¡LüŠnJ™O%îŽÒ¥©ž½Y–DÆ»n¸˜ À‘<+ÏÏ$æð½ÿÓ¡7U‡‹ Æ! £ŒÐèøe/<_æSú ê²£ ôGèØöÕvŸGÚZ…)£±Z­<Ïçs¹\>ŸÏçó}Àãñlߢ¸P(D¢"‰$ ÒÛÞ³N§û믿„B¡··wÿþý£££¹\nAAƒ¿ÈkxÞäÍ´Õw\bí*@,6˜WA7Þô1:@»"Ò¯tŒªé2U6]Ë—©èÍf3‹Åb³Ù‡Ëå¢}±Ø6ÐoÑA™OŸ?_&Ú²žÍfóx<ô¶Ì+ŒËå²Ùl.—Ëápx<:c Jo÷r‰Dr¹¼W¯^ àóù¦°°ÐîWÁ`‹MmÁb±i4š’RŠ‹‹mè·:N§Ó¡á ÔHôŸÏ …ô1ªŽy<žD"¡kdºšæñx¨ùo[¡#ʼeºx˜ç¯¿þ²Z­h"‡i[0ûƒò‚V«-,,,**R©TEEEôJ¥R«Õ*•J¯×»¹¹¡aq)èØÝÝÝö­T*¥Ç‚˜¾- SCxFlè]© ‚¨úªG¾w‹ÅòèÑ£‡æçç+ŠÇ+ …BQPP ‹]\\\\\d2™³³³L&kذ¡L&£OJ$¦ÍÇ`0µ—ôll%§ja¢‹åP·üøñã{¥ÞF£ñÖ­[9¥Ü¹sG,ׯ_¿~ýúþþþžžžUï©zl›>YÇs·ÍdÚ Ç€ÅbÑÿÿ6 éŠ Í⢣q„ÆtY±AÖЮA¾¾¾gÎäž9“Ë„mUA>>>´ÿT­ÞÜ¿ÿßÿ½zõê¿ÿþ›ŸŸïçç×°aÃÀÀÀ=z4lØP(¬E 0ººD5¦O=¯«'î\=q‡i»˜‡ ý Ç© IDAT___6›M·ƒŸO@W_,Ë; ..:`±___ä‰ôƱz6´Ø$&&>yò¤°°P­VkµZ½^Ö+TžAf³Y£Ñ¸ººVF樔‘W+š —Édnnn€ö¸­ì_âÑ£Giiiiii—/_æóùÍš5kÖ¬YŸ>}š4iR©×ÅTПyëý¸h±B¡(,,Ôh4:­eÚÀ*94"—ww÷ºuëÒŽìežSz<¹§óùüÙÓç>yò¤¨¨ˆ®¸Þh›m«ÕZ\\,‰ª£«$rð‰DÎÎή®®îîî¨=ý2®^г¡•9¹ŠÅb“ÉdµZÙl6ŸÏG{YWÞxÚµk×îß¿X™£‚f±X<ý‰Ñš;ä¡Ëår+ï—ÈÊÊ:uêÔéÓ§õz}«V­Ú´i3vìX77·×SË@Jƒ\Æ…B¡H$2€@’$kÌhö«A…  ÑsŠÜ#ÑB¨¶ÐQË­¦Bµ­X,F-c.—[žV²^¯W*• …âÑ£GȳsçÎï¼óNåÝ£F£¹}ûvpp°o!ÅEíi´‚­U@ lgª˜ˆ Ò´FZ$™L&Š¢Øl6úÓ£Ô•gPrrò½{÷>úè#:ê‘ÝA ;òK¥R©TJëí °]ÈÎÎ>xðà©S§\]];uêôý÷ߨ1LM¢LóýE%‰ÕjE?“É„"T™I%%%K–,ùì³Ïª¾aÄb±¸\.]è9E1Ð`šmbTnèÑF—D"1›Í¨0ËSq]½zõ¯¿þb³Ù:eøÎ;ïtêÔ©RëeN—™™ùàÁƒ=zx{Û' j¬ðx<¤ÓR©Å{D…ã@Ãh´¡V«…lBœ¤R©Ñh´X,$Y¡}I_Maa!в®P(:tèPIW)ó0#ýGAýÞTüÇÐh4LCJSy=›#GŽAgΜéß¿e\‚þS¢çݦ@  …ôXpE~ …B±mÛ¶#GŽtèÐ᫯¾ ±£ñÀô.âÕŽêå KØÄéE¡ák@€‚Uö vŠ‹‹/]ºD’äÍ›7X5¥A.¨ÞDúAwnÐ`Z±AéQ¹QE-G冊î—c³Ù(”†››Û¸qã7n\ùw Íš5;~ü¸Z­>qâÄÍ›7ccc[¶lY‘ QQÐíi4Kë4-Õö²¿ü”‹e±XPçJÝÒÐTmXÃJ²æÐ¡CAP•žžn6›===+ã*¨¬é@)t<Úaãí²U*•k×®=}úôûï¿¿iÓ&ggg{L•¥JŽm_Á¦b­%gžO@Sf`š~ºC('ÈBôô¡Í[Ð1@+u» »víR*•——‡&NªìÒPZô„?Õ‚ŽtWFlP+%6›ºƒ(Žê+Vn˜ÍæC‡:u*66vÿþý©©©ƒîܹsÕÜf¯^½RSSKJJÌf³Z­~ôèQÅë=T8tì(:2,ŸÏw a4(E‡ f³™¢($3•÷_¿xñâýû÷Ñ1EQÿý÷çŸ^¢]2hA£go­ù$IîÞ½û÷ßÿàƒ¶mÛV&b|E eÕ2ôAj¯ ÕHè Hô7Fõ8vwIQÒÔ®G:èׯ²Ý`0ìÝ»ù&èõútìØ±j.°ýùÐ< j¢nÍ ÓÓçÑ·*:Ô|aÑåää¬]»ÖËËëÇtqqiÙ²åñãÇ TysÆeèÚµëòåËKJJÜÜÜÆŽ;tèЊçIw‘QÑÑeQ9ØÐu1: k7TåUÞýÏ?ÿd±XHÌ‚ؾ}û´iÓ*ãBD©3¾í¿™vBÓÜîß¿?sæÌºuë®ZµÊÇÇǾ¦¢'u+KJJ¾ýî[«ÕBQTûöí»¿ÛÝd2ÍŸ7¥lß¾ý»=Þ%IŸAgzöêi6›ç͇~Öˆ®Ý¢££¡´rX½¡'º-‹@ I5Õé)‡*›ýû÷?|ø={¶OŸ>UsiýœÒnfH^6a». ’Õjô`L™¢Óëõ¿ÿþû™3g>ýôÓöíÛ£“ÎÎÎÁÁÁ•sÿ®èææ6a„íÛ·÷ë×Ï××·‚y¢B@bC­4Lýù‰Wÿwiu)³¡§ÝíÐëõ>>>ÅÅŶ'Ož<n÷k=?¯6ý¹7bÿþý‰‰‰cÆŒéÕËþ›™"uGJc2™îÝ»7?é«°¨¦àì!võr¢(êNÆ#”Ÿyõ™žœQ¾>¾h†á°Øvg©g©2ôzýŽ;þùçŸû÷ﻸ¸„„„|ýõ×UvuýxÒíÂ×V—¨µŠÆüé{¾èÒÒÒ~þùçÐÐÐøøxÆÃ>~üX 8;;§¤¤lÚ´iÙ²e„·-4Û&5³Ãȯ›*cëÖ­C† )s2>>>11‘{ÊÃo¿ývìØ±3fT’73ªk_†^¯OOO_uhîˆeUÚº¬1´¸;D"– )Ó—Ã8 U¯1eغukIIɧŸ~Ê”ºÒ,ÿW^VtZ­våÊ•'NlÕª•]Í´¿þúëåË—/^l¯Å¤oQt•„£,ŽmÚ´éîÝ» +++!!aöìÙÁÁÁR©”i»^Êÿþ÷¿³gÏ®ZµÊ.®Š/õlL&“ÑhÔëõ•w¡šò¡fïÞ½ýÞï‡Ö^0èó¦0^MhµZWW×ê¢Í¶¼°èŽ;¶|ùòwß}wãÆŽ¹ƒÆÈ‘#g̘±xñâJšD`G›æÍ›7oÞd2têÔ©k×® ÛôrNŸ>½wïÞM›6UªÒÐ)&“I¯×c±ykÔ%©gÎöêÙ Í3s¹\äèÅ´]ÕµZ]3–!?yòdÉ’%ùùùóæÍ bÚœW1}úô/¾øbóæÍ111LÛbOzäÚ1¹råʘ1cœœ*ûZHlÛ«¯¯oì"ûÏ ÕH’DÅ*Õ£²æ¡V«íèÄÏ{÷îýôÓO›4iò¿ÿýÏÁ•x<Þ¼yó’““Oœ8Á´-öÄQz6ÕF3gΜ­[·VÒ [Ј³ÅbAƒÃ­~£‚ÅbAËú1ÓæT4Mµ›¼¼¼~ø$ÉeË–ùùù1mNyquu?þ¤I“¼¼¼ªfmi€{6oÆï¿ÿÞ¬Y³ª¹=’F’ä£GR“³«æº5 ¹gì°Xä×WÙü5ŒêÛ³±X,[·n3fLçÎW¬XQ”8uêÔ¯¿þ://i[ì›7àÑ£G‡9rdU^UŽ‹E©Tf»]•—®1 é: ÓæT'4M ÛœœœÏ>ûìÒ¥Kk×®íß¿5Ÿ 9rääÉ“U*Ó¶Ø,6oÀž={"##«²¡g»J×’oò¡æüùó¸Có¦X­Ö’’Gv }“É´f͚ɓ'8pÑ¢EL[T!"#####§NZüƒðœMy±X,\±bEÕ_ú…ëŸíBÞÿÜ nÙ.ˆ¦kYû³ê†CÖ†=êºuD<0kŸ(]#Ãà@†R$–ºqL…ºÇ:çØå¡—g»¯3àæ9¡¥ŸTó×´gϸ;ÖÿJ]P’•™Û·O_¦ ©fhµÚê¥4‹-jܸñ† ªéèßóÄÆÆ*Š„„„ TGtܳ)//^ °{@šòãçç³°§}ó,ɾz_ñ´ÃdQ«Ò³ ÎaÁƒ§‡ûéNìÒyFN·C[ï:EÆxîšÂ/¦Íà ÁÎÃù¥gÄ„GOèÔÊ寄wÓõðüLM MØètºÅ‹Ï™3gìØ± ÕÅìr2aÂ>Ÿ¿páB¦ ©XlÊKVV–Ý÷ x#‚àòìÜcàðùÀ+}Ãú¹ûy6kàèéäé(õiéé×Î;ø‡yûµt—ü?{çcöÇñïÓ *‰öÕW_õéÓgöìÙÊ6§3¨ÄFVÊÊÊ”{”šËåÜ-‘¯ØH¸‚ç9R% ÖpýÒ®sïIÒŽÓ0q–õ m°_äÀ4×~yÛ’újmÞý@§ëôÌbzÔ0 °,MÉTÝ‘+þ±9>ÚßÍsrÓÉ<8·öx¾&ªÌFðlÆQð•Äã(Ë¿Ý.6çÎûùçŸ7n܈gdø¸ÑÐÐøá‡üüüôôôzr€•w¡úÊ„P(ljjÒÖÖV¶! €¤ F u ‡™é(† å%¼{¹û«†ÈX–Y È“'«”îçq"†|; (æÏ/퀱éˆÇ(}x“YE€H¤»êŠº‡7oª:J=ÑùâÅ‹]»vÕÔÔìܹÓÂÂBÙætúúúáááššš]LèÙý¨ÄF&8N7„ P -¥Þdr'¤Ö1àÞŒ`ت„Ä0bÆ&™&¤f?»a l]sÚï¦!<†½H²^\Êè›>Ì× h4²5güâKº©@TÈ&¢Ê­sp¹\ËSÓÒQlüÝ’ÜŠ‹7nܨ¯¯¯­­­¡¡A¥R?h/Òî!""ÂÆÆÆÙÙYÙ†¼¢¬¬,""‚H$®[·N‰~¡=Ë—/GFFîÝ»×ÈÈHÙ¶ÈŠjf#+J?„¬o4B!kP”Ö6£d-ãÒB¡jµZŽSуè9{6‰$99ùĉË–-›9s¦²ÍQ>Ÿ|òImmíÚµküñÇey¿×MB;‡ÒÓŠ@MM*6Zç0e1<}ú(јˆ——× Aƒ‚ƒƒ%™üH•‹JldB]]]$ …Be¢¢3TWÔݼySÙV|x(WlnݺµdÉ’úúú„„6›­,3z8_ý5F;tè² y?ªÇ=Y100xùò¥±±±² QÑaTÞhð††¥ÄFkhhøñÇoß¾½víÚ‘#Gv¿AAAþþþ ÜSçïE5³‘SSÓG)ÑEÄFS¡â]ÔÕÕihhtÿVå… –,Y¢®®ž RYÀƒ œ;wîìٳʶ¥=T3Y133+..?~|wvŠÿÔÕÔÔð]ìòFëaô‹î?ÑYUUùôéÓÐÐÐÁƒå)ã£GKK+<<|õêÕ†††Ã† S¶9oG5³‘KKK¥ÌlðQ’@ ˆD¢ŠGUÝoÀG€)‹±xÉb ÒÙéæ ›?ÿüsÙ²eæææ¿üò‹Ji:A¿~ý¾ÿþûï¿ÿþÉ“'ʶåí¨ž”eÅÎÎnûöíB¡°;£0!¢öš†††°™‡†;tñcd¡'ŠןÁ«Ù8™vµV•´S2–ÊBQ”@ àÓÄ®ý·ô ºÍï¹¼¼|çÎ|>?22ÒÔÔ´züX±µµýꫯ6lØðóÏ?÷ÀÃ7ª`ÕªU^^^#FŒèžî$‰@ àñxõõõµµµUUUùOoVUU©Ó©b‰˜Ïç?{R§ï¤©S54Õ1 ã<5õéþ¡@X[]§¬Þ[–¨kÐ4µé(ŠVsj) FëÛÏd`]]]:N¥R)J/ŒtÒ!ÒÓÓóóóׯ_¯¸.š››=zøðaOOÏÙ³g«äBBBBvvvdddO NªšÙt€Ñ£Ggggw›Ø>§!D"‘B¡˜ë ÖU«©¯¯olllæ“ûjÐÄb1†aÐ P ‚Q_ûu{Iö… #GŽTWWïþÞ.‚a˜´iFÐ:EQ¦–ºº:Nצh“Éd‰D T‹i2¢è™ÍãÇ#""ètzLLÌÇxP)xyy={ölÛ¶m[¶lQ¶-­P‰M=zôŽ;¾üòËîé_C#$‰J¥ŠD"‘H„aŠ¢T*•ÏçK$’æææž07mnn¾{÷®¡¡a™"‚Ë3™LÖÐÐÐÒÒRWW§P(D"ßS¶ŠÛ³‰D‰‰‰§Nòõõ6mš"ºèålܸñ믿>|øð¢E‹”m˨ĦXZZVWW¿|ù²ÛN2ãNhø¸)‘H¤J#Äb±D"‹ÅÝcIûäääÔ××ß¼ysá…ʶ€@ à;4 …B¡hhh¨««“Éd …‚¢¨Ê3M¸\nß¾}åÞl~~~DD„¹¹ùÿþ÷¿žRú£@ |÷ÝwË—/4hPw®Ä´Jl:‚ #GŽÌÎÎvqqéžî¤kh€a˜šš‰D¢Ñhb±X,777ã{6JçúõëðìÙ³úúzKKKe›óêÖ¡(J"‘ˆD"•J%“É4 !•€,È='4Ç‹½|ù²¿¿ÿ¸qã䨲Š7ÑÕÕýî»ï¾ÿþû˜˜}}}e› ›Ž2mÚ´¸¸¸n|ÍÀÿ¦Ñh‰_C“Š ‚´õõè¶.—{ùòe¼<33O¯D{×à;4(ŠJ7lˆD¢JidD¾Ëh×®]Û½{÷èÑ£^mì©P0,kÁ‚›7oÞ·o_Oˆ ¨| >,F޹sçÎ’’’îIšøÊ>Ë!“ÉÍÍÍø’Z™Ö¤¦¦âq1 ;uêÔöíÛ{‚ŒÔkwwÆWÕT²#¯C\.wïÞ½÷ïß ì±ç ?VæÍ›w÷îݽ{÷(Û•ØtAœÿüóO??¿îé®%(Šâ2=Ä5Ž9¢¦¦†+_]]Ý¥K—\]]•mÔ·ŸÊHOب6ldD.3›¿ÿþû§Ÿ~š:uêúõë{Â#H/dãÆ¾¾¾gÏž:uªr-Q‰M‡qvvöõõ]±bE÷ÌLñã †áC$Þi™ÓÀÝ»wóòò¤/ÕÔÔ~ýõ×ùóç+Ѥ–´T•Ìtˆúúú®Dáäp8»vízùòåŽ;zÂ6^¯…J¥nݺuÕªUæææJ´D%6†Á`XXX\¾|¹;Ý|Û ”=Çy799¹åËæææ3gÎÔÔÔ(Ë$]§¾¾^]]½Óç^SRRâããçÍ›·`Á‚žó]íµôïßíÚµßÿý(¥eÆU¢î Ó§O?s挲­è”––Ž7nèС0tèÐqãÆ3æÚµkʶKE—èôÚ“'OV­ZõÏ?ÿìÛ·ïóÏ?W)MÁÑÑqÈ!û÷ïW¢ ª™MgpttÜ·o_YY“ÉT¶-JæèÑ£PZZzðàÁ%K–¨b[}t"|€D"ùõ×_=ºtéR777¦¢Ó¬^½zéÒ¥7nÜ5j”R P‰Mg ‰‡þ R±v¦¦¦ß}÷²­P!7::³yðàÁÎ;õõõùå—rªCEh4ÚÆ·mÛ¯¡¡Ñý¨–Ñ: …BéÅÇÄœ²²z™cð E{¬H{TÈÙOt …ŸþyÓ¦M . S)MOfذaNNN?ÿü³RzW‰M ø…ÇÚ­òäLTÄ™wfµé5£*/ÞÔõŽìrDÅÉ9/hŽ y#ãÌæöíÛ^^^ÕÕÕ “&MêÃTt//¯ììì‚‚‚îïZ%6- ŽwÔþÂâ˼¸ Ùï7?¦Q•_ãë„ ˆ­gt™˜Ÿà˜VPhë·säù­9\ߪ õ pGÄ6 § ¾0ÔAlÖì;3€A¬|ÆÓÖAÏèK|e8íóÞ ;wîܱc‡¿¿PPP÷d¾QÑu¨TªŸŸßîÝ»»@%6-࿸˜þ@Ì/ õô ðuBÄ7! ÓBAÛ˜ë ëÙPH… 195Ÿ“SßfTm=LÃ:ÈæÇz†aXü¨ ï¸"×uëÿtsöõt½öù¦eËÂÙn{v,*mU'_Tž›ka§GîI|)Ìú–{–{z:d–Ü‹s®ßpêݸ·K? Ñ+ifsùòe///‰”0zôèî4LE×™0a‚¡¡á‰'º¹_•Ø´@\›~ªXM™I±V¾Ç±êb½c×^šïvëV&*ÝüÓ¦ÐTy¯R ª¼W)·U[Óùæ ËÏ¿‘™¹f“§»{HF‰-ÀxZ|”^l’Ãõö@ ¢mëˆøš![æé s ö¸ä꟬Óm(ì¥áz\‘­ï?†áÖ2ñŠ¥¡Ò|ýUÈÄ»¼Ñª««¿ûî»ØØØ-[¶¬Y³†J¥v¿m*ºŽŸŸ_RRRCCû›rF%6­Ð2ˆDš¬ðyv: 3<œõâQÎÕ<¥vt@™sr3|¥.äÿ.ªm=ª6´‚?ÌA–bnÉòIO:”’rà›•FDàd¬]SåáûML@ˆoÔ<" hV¬¼³ù¸w.¹ŠÜœu¦Èï2†aiÔο~0ªÛ;yëÌ&==}éÒ¥ýû÷‹‹2dˆR S!LLL&L˜pøðáîìT%6m® (Eh}­ éÊÓÜÝð™ PêÎÜyÅù%dÐh=ªj´‚?ÔAÖvqø g'w'ƒñ—ÇLЋ™?É6=ýPÊ}X1âØcÄØ!Õaùa³Vu,€B—j°&™Â:š1ÉÀÉÉÉ'8o€–†¹QKÓÖÓÓ;Œ2ÍâƒQÝÞI±©¨¨øæ›oRSS÷ìÙ³lÙ2ir.^^^§Nªªªê¾.±Fff&dff*¡oÞU‰‘Õ¼kì¨j ðê(¶ÇµººÔ6 Â/>ËûÙubä-ѳt‹Í€¨[uu÷²Øl6 Àm¯4Ý €íÆð¸X)*MÝÀòð`;¤T¤„ÕxÕ•Õï0YÄã‰ÞWÃDu•Õu-^U?k§²ŠÃgŸ}V]]a˜D"ùý÷ß]]]9‚UñÑ·{÷înë®mj¥sþüy6›™™ÙC ãðëkDT:úî"q=§ôu¤ ù5]_}õfM% ^¿üø~‹T‘.?&Mštîܹ'OžDDDP©ÔuëÖ)Û(r†Ëå~þùç‡îgÂuô“3ºNÛuŸÖE¹w‹QÕב.dStôÿ{¥ëw>~îC9þGO{>€óçÏúé§ÿýwzD€×â'•@•ÊBCC™LNLLLKK[¾|y÷¤ TÑýhiiM˜0!--ÍÃãºS‰|èÛ·¯——Wbb¢ÜÓªK'¡x)òí¥‹ˆÅbH$B¡PÙ¶ü.-Ò46ÒÆ*ÉiŸìììÂÂÂ’’’¸¸8]]]e›£BÌ™3gݺu .솩*±‘zzzÎÎÎÉÉÉòMª†½NÇ)‹ù|þê Ö £ÇÛ±§; ÂÝ›ÂkŽo7Ñå±H¬”’!vV3L%™ñ}¾YÒ챟0¢e ‚ 3'ÎquuÅwb¯“©hÇ;pàÀ©S§X,VHHˆ²ÍQ¡p `nn~ñâE6›­è¾T{6r£¾¾þóÏ?ÿùçŸMLLäÒ t6#‹%É“'OBŽ®åf ZêºFš†•æ=Ç+«JÚ/q¡|Õ¯o?"‘ˆëJlÞ$;;{÷îÝ#FŒ1bÄ_ý¦l‹TtgΜÉÊÊê†g •ØÈ“_ýµ°°pË–-ri ±X,‰„BáíÛ·÷¤/‹š.—Æ{c^,¥)(Š’H$ Ê³Ò’ººº}ûö¬]»ÖÎÎîìÙ³·oßÞ¸q£²íRÑ444ÌŸ?ÿرcŠ>¢«:g#OfÏž]X{žìb IDATXx÷î]¹´†‹ ¾"x<ž\ší…TWÔ¥¥¥ñù||ŽØ7½”HFF†———ŽŽN||¼t*™Š ‹•••¥èŽTb#OH$Ò_|ñÓO?É¥5|LÄg6<¯©©I.ÍöB¸•/\äóù"‘H,«”‡Ãá&%%………}ùå—dò«#¹NÓ©âeÒ¤IW®\Qt/*±‘3“'O—.]’KkÍÍÍÍÍÍ"‘H ˜˜˜xFL•K³½±X,D"‘D"Á'7ʶHɤ¥¥}ñÅÖÖÖ4hPË·T3›Þ†µµµ¼ÖcÚAå&V®\¹k×®±cÇvqc@ºŒ&‹…B!ŸÏ'’Tÿ_l …‚ë·²ÍQ&ÿþûïÎ;%ÉÞ½{û÷ïÿfÕ̦·abb"^¾|Ù§OÅõ¢šÙÈ;;»þýûŸ|ø«¯¾š8qâ»”:’¦SÅGÃСC=¹Q‰Bðõõ=xð`×#xc&‘Hp½áp8™%r1¯· ~qWòÞ9³)**òõõÍÍÍ=pàÀgŸ}ÖŽó·jfÓ >tuu_¾Tl–aÕ€¢XºtéâÅ‹?ûì3ƒÑŦò<Îç¤ì¬šºÙŠ ¸‘càcq}Õùjš:]V5½hÒrvôÓ\Ã>4ˆë_VëºMek”ÿ£  Ìæ:LreTgd?RŽ7Ib1Åg¨¾ŒÙøÏÿŒ®¼ÞŠ$ÏOõv¸•y¹ÅÓ]¦÷ÂÕ³ÜÜ܈ˆ++«øøx%D5³é…ôéÓGÑb£šÙ( mmíyóæÅÄÄt¥‘–ƒcÿþý=§tٮ׈ø9Ç8¯³7?K¾×„iŽ ptö`»Àô½0`¨‰ýÐ…A̦ Ç›ÎAŸŽ¥Yÿðú¹¦þÎëÇ9ûYå¸íý'_P_ðªdfÀh£»¿n~*«hóõdNФöÑÑØØ¸{÷î­[·®ZµjóæÍ2êGcc#…BQzímèéé):·JlȼyóîÞ½{ïžvõñp^òõF£ý7¯U#ê‘%›Ø1˜cŒ‡‚™é(c¦~3}¦Ã|ˆÓœÁ´b˜0É4æ¨~Ls}¦½ÕtàÔ6KKL¬Œ'øÍ(ËâJ@|?æô,$h–mJ~™ ñR@Ò,Û½¶IW y¼¡I³½Q_]©@†Ö•……ûÎE!AæäøI{!W®\ñòòB$11ÑÁÁAö U~ϽE‹jMH¤åË—ïÛ·O.ljØ6BÎÕϽs~;Ý¿BwXrîPÞ™Ó¡G_ÚL¼vkp2fÇ=–²2TÒܺrÂ’s‘•Ûž[“A~˜²žc{ÉZmmmTTÔ£G‚ƒƒmll:z¹j ­wÒ a5Tb£X&Ož|ôèÑóçÏw=Ô—Ë-¸["7±Ix¬iñ¹ŽâfÊKqúCòþkðnïj,i²vþ¡K‡2|FNôíG šndßá£ÿ ywöy> 8R""ióî:]§gÓ£†UÞ®œ¹Â @:lhhÅóüÖ•‰MÀ²4•«Ò‚ (Ú+¾êgϞݿÿôéÓ;—¼Y5³éH$iÑ+~ÊÅÏÏoûöíãÆëÄ_ÁÁ‰QU@e´LÀ´a0­­JÌõM˜º ë;íüßÍZÃú€×ƘÀ)ý}?Ÿ/wÕ°«ÓR" n¦qò,Ç{šfý’ èš·ª ¢&È“Iõ:DuEÝÛ7gLŸ!÷–{ÏŸ?ßµk—Ëݹs§……E§ÛQÍlz'‰DÑu*±Q8,ËÂÂâĉóçÏït# Q=é_­üÜh­kÈdi–Q½µ³YË -H.“¬¶]\´k–“d/»¸A“ÌØ„à"3Є‚Ôì&θ١‘³œÌ†VÀÙ궃ZVV'ÖÒjp+ ò‹gΘ)ÿ¦{†8q"11qáÂ…óæÍëâó©êDgïðÎM…e§Ç¥¨ªªº~ýº½½½žžÞûk <{ölåÊ•‰‰‰zf‹Å<¯±±±¦¦¦ªªª¼¼¼Ùõ>™¢Ø/„¼hàð:T*þ0Ã4ð:¨„/ J€æŽ€ªO%¼µ²(É­ø'°xÓ¦M}úôÑÖÖÖÐРR©‡ÃUiiiDD‰DZ·n\)ÅÅÅ‘H$OOÏ®7¥â¢¤¤$$$$>>^q]ô8o4===—IiÀÄÄäÓO?=xð`§[P„7šBÑÐo!²†  JPÓh¡4m+« ±X|ðàA—ÈÈHy¥ìS-£õN^¼xahh¨Ð.”,6õœ2N½XÖÚüüèˆ4¾"íQK–,ÉÈÈxúTæc(oPSSs#í¾Mê=˜²ž=mßîß¿¿|ùò¢¢¢¸¸¸3ä¹¥ Ð;©¬¬|oh‰.¢d±)ÚïºçžÌ9ÁPQJrášALSSsáÂ…]9ãÉårU±Ñ:ÇÇäÆçó÷íÛ´dÉ’­[·Ê} @5³é|bÿ€ bë›QÆœèxκ¯‹[œæœÏoU‡_xÌ×7À×ÉAlrjjÒBÝÄÖó«=U´€_áéd‹ ¶žÑe2OŠzsæÌ)--ÍËË“ý{£õª+ênÞ¼©l+äÀ­[·¼¼¼”7]¾®ÏÒ°~x¦ <  YÀ#”ãw¯&å/^¼022Rh ÜãçÇŽÿɪÃМhM ?öfOž[R®SåöeÅå'ÏM XKmQ‡%ˆ-¹U—»õN AÈ?Ó¿Éq»å^‡yUóµðs7<[ÌÃ2ŠGÜxTÏ´¢¿ßˆž@ðööމ‰ùñÇ;z­JuºÂGàV__ÿã?Þ¹sgݺu#FŒP\GrœÙà£$ŸÏß°aþr„ ÎÎÎ 88¯3~üx¡P¨*‘– [\\Œ ÈÊ•+---QSSCDqãÀÝ»w/^¬ Æq.6¥ù7 /ÉÛ3 Ž=𠯋¢ŽX“üè˜>ÀS2 m[GÄeoúÆŽ0Ì™]rõîí{þ+üèô©ìÐÛÛeû.§"ÞnþûwÌü`”gÒ¤I‡ÎÊÊ;vlG¯e2™«äMŇÅ ¢££ÙlvBB…"c ÓN"/±i~ Lõt,&_žA~&½´Y½ÙÊ÷Õ¹]¾~A&½ Ã0U‰´èîÕƒHðÜø6SÀ$‰†áþ“ŠÐ›úúz.—Û¯_?¹·Ü…‹¡¹%ø¤§ÄLÎ¥Ðý5œhï5n>ìÏ¿‰›™â d@ߨ@Åc“4t #Ïî™f\sï|&hUd]ÒóKÅbèg•Ç'dxY)ú#È—åË—ÇÄÄŒ3Fö/ þD£¦¦Føp¼ÑTÈ…ªªª={ö<{ölëÖ­ÖÖÖŠîŽÇã‰Ä®ïoá±Oš››…B¡X,6·bеão5ƒÐØÛ4¨JZ•Xhã/QžšX Æ0ŒD"@P„ضI ®¾g£c»(¼ÈqrB ÆkMY³|ƒSzJ̹xX±öØc-3à +ÿÔªŽP4¥ñJô(¦lʘ„89Íö †šF溡,MwOÏ ‘nëÙ¦Š¶_î888Ðéô¿þúKÆúÒ¹³H$ªx¤ØHy+¦,Æâ%‹º ¡._¾¼cLJtƒÒ€üNtJ3ÌŠÅâ²²²si]o³R]Qw1íFSS¾‹£¸Í›¢¢¢n›n:ÔYéAutèo{`óÅ(m¿€¸†SO××yõ¦¸žSɧè¿£rO§  `ëÖ­IIIí?BŠÅb>ŸßØØÈårkjjîܹ³å‡om' œ¼l”©ŽH þuË+Åìhj7uX(ù-äoU ^"5ÿò7.06ÍÇRg3 ºººZZZêêêÍ¡NùòàÁƒÝ»ww1/477‹D">Ÿ/nÞ¼™p,váÿFËÅÂ^EInÅ¥Ÿ #¾ùI]]F£‘ÉdEQ•û3“¿¿ÿÂ… íííåÛlz\ºººÂÂB++«;fF``àÈ‘#gÍšÕN‰D"p±ár¹'??ÿùóç(Š ‚¦¦¦ŠŠ |½‚B¡P©T Ãjkkñk;]B&“_¼xQTTdaaA¥RåØò›%¥¥¥†ikkS©Tù¶L§ÓQåñx4MSS³oß¾VVVúúúºººt:F£Q©T……ä§…D÷ýz½Æ;kˆŸœ þ ‚×O{ûö ??:ºÄg½«b7gÞFvvö±cÇ"""ºØŽD" …<¯¡¡áæÍ›É©ñÇÈÅÂ^EInÅ…ï…úíÑÔÔÄ¿´d2™H$ÊWlx<Þ¬Y³RSSñ•:ÅÑã¦999l6;33SAž=__߯¿þzÆŒïýVSS#‰D"‘L&3™LMMM.—ÛØØH"‘¨Tj›™µŽŽN›Ëe/yþüùÇ‹ŠŠø|þàÁƒ,ËU])ÑÐÐHNN–H$FFF–––FFFøîw[F„@  (jdd¤®®®­­­««‹?ª½:xÊxZ»BÁ™¶Ö½KlPQJr¡§2ÄF^':[º;‹D"‰DþÁU{ ÍÍÍd2™D"á?v<˜ˆ»¸uëÖСC­4ÐŦ—Àd2‡zòäÉÙ³g·S@ ¨©©¡(ŠK‹†††D"A„H$R©T¹,ã¾xñ"?????¿®®/!‰...êêê]iVúôé3nܸ‹/VTTTTT\¼xÑÌÌÌÆÆÆÊÊŠLîR–AH$…B¡Ñht:_7£P(D"QA[¬-àß9wqÐÐ!YÛ×^È‹Ÿäó1‹ 0ÍÛÚ-Àgÿµð±d&\`íñµãç'lÊbíñêí\âáêð ÿR̦ñ+"åóOZ”“aiÄò•ÉI™à•¿š©˜®|ýžq±a2™_Íx.—f{¦,Æç›LO²TD/uuusæÌQDËmP‰ÒðôôÜ´i“››Û»vnðý@"‘Èd2F‹Å¸Ò¨«« ±XÜ•”G·nÝ:yòä‹/ڔϘ1ÃÜܼsmv”Ù³gß¹s§¾¾ÿ ÅÅÅ?FQ”ÅbyxxàËkWh\’ñ•4uuõ–“ù~ŠÖˆž»bøõ—UÆ–¬¼•‹m E Ò×;ýkíæt«.…U@ü¾àêHs+s+E jªÌ­Õ\ÚÙò<™¸õ5NXY7/“ã‰N©€P(DH’_FÏA5‚>5TÜéN¹·ùVTb£4,,,,,,ÒÓÓgÎ|çaC<ÎJss3…BÁ¿gD"‘F£áJƒ;ýýspp8zôh›îúôé³páBEo‰··wTTþ7þYðÇátºM555@$¥óuuu|Gª;ôFÄ=·oæÙÀ”ö¹Gù™àoG ïÁ5äGÈD"JZŸ'+n}øŒÜ-Ç˸\nWn»©ësss3‡Ã¹þèÖã®7ÛÛ¨®¨»îÛÄR,K×ÐÞY›_R°rûœwï“3Q¿ÁôõÓÞžîˆ_x,º`øú9ŠzÐT‰2ñôô uqqy«g”šš~’ _®ÅÚÉdüì‚D"‘H$]yÒa0»wïöññ‘.©cöõ×_+úlWæÏŸöìÙ‡JW ìíí×®]Û=xu,‰@ ¸ÆÉd …‚—(:#á D²&hÚBÆý`ê”:mqÙ‚ï‡Q2Ïä‰×ÛUß²½^ëódÆ­Ÿ=í–ãeŠˆUS]]óþ»ØnDä¬ä<;võÉСèѲþM=ðšêJDv+æüTD N§B}U£@ÏÚÛ—|rûÝzhú(«+< »€.vÎD… “ãÄ ¶¥Bóý˜¿_N˜àhEàsþyá¼}° ¬Žd¢Ýáɹ•w³Š&ÌnÆï$öš·×¦ŽwµoÝ˼¸ |ûw‰ ˆŠ“sú©ÄæãdðàÁÆÆÆÿý÷Ô©SßZ_F2™Œ?“Éd|«Wˆ®l½bvûömi jjjvvví;È)ˆï¿ÿ~Á‚€ †aÿþû/—ËíÊR.'¸®_ƒ/¬)>"'‘¬© €’5¥ó:úù¥Î±ÐµeAÞ€ð‹Úwa"h°œCªL‰N‰™éåËœ°)Ôqb³«2a@¼¶íôð" ĉ ™™QŸYö¿¹ÐT3Éã$É-¼ÔTA¦+" §Âü]›Ÿ%ßÓør Pïß{jÈút®ƒˆŸÎ:ñKç,UGûú‡š4ݺä Ûòi@!TÝ?+Úv¢¦ˆcÍþ]äUs«/dÜ=œ©ýïñ¿N†=¹n›Nõ¬J?}ÕEcˆ³D D™¦‡ñVYwû)˜÷ÜIþ‹‹é†Ž"†.ßSM+ŠŒÍô‰¿ãeW˜jí ÀÚíïQd= &^`­óµÓÉOÌbmòø,ÔÓ:¸„íã†| ü²˜5Þ+b3YQiñ«uËάœµ!)/Ï#êâÕŽ]qZQ‰’ñððسgÏ”)SÞºk-ݶ×ûÒ þ°Óé~y<ÞêÕ«ÓÒÒæÏŸohhaXxx¸¶¶vç?Ìûx׿üäɓ׮]{á €€€½{÷†‡‡ãÞáî ×<¢ (ŠOkðIO§›•©‡À1åþÚný!;€ÍÏ¿FDÕ¡£ŽX&Àæ\ž_HGç•,mÏ­kqžl}¶ü¿Ãg®¹¢:N%Ÿ¯ÀãeVÈg¢Þ^$(™ $5]+†.ˆÍXÐÄêkbC0! Ìm$^‹ii¥OÐÝ2áB:¿ÿ¬ ’8kæóÎЦx˜åÝn´Å9 ãÜ «~÷½!zqåã¢áU­æ~"'7r¢~Ãk¶ðõ¬½ú'kE€ °—†ëkȘ™™´É3C³JlÝÁÖ÷CWkäs–ÿþðI]sÆW‰òquuMMM}«ØÀëÉt-—±’D"™™™µ,éß¿ûõå²"«ñõœ2>…)ëÏ·>-"Þrõêvž¹¤þÊ WƒaXVVÖ_ý5a„ñãÇ÷ØàŠ˜Ù(,™P³¨ÎzKå"TíahÒ‘,WIF9¸¥‰$ãýœÆdÂöÕ+ñ/õÜ'êZe\Ì„ªÙŸÙ4˜YÒ&ˆë©@"ŠŠŸÜ(.H:•AæAÍw0úêÓòƒ JìЭà ‹€Rô€Ö× ’®q¹ê—§¹¯¬þ†¿_wæÎ‹õö:Åù%ä V¬¼³ùœiNú÷Î%W‘?5·dù¤'ÅL3æ\ЉÑœu¦Èï2C/ DLŸÀóíÂԦǥ…î…Lœ8ñáÇåååíÔéàSy}YGö\?…Ç¢=n/ªt³½‹È8Öó‹ö›î¹'³ùÄÒäN» ò™Û”'OžÊtÝ.ª;¾û¸(cs«–Ñz®®®¾¾¾Ë–-“ý¹’_~i“óøÈ<ðˆúçÀJfȈå鮿äqËkô¥<È >ì6±ö¿:«G lu¦-Ló´v+a{° dÔ§ðøLÄò É™yu1mµ#S¡Ÿø9ãÓê1{4Ç]s ›wìÛé?¹zþ I/öUoú“ynÌ"Ó"'ëuj‚[í|NŸoíö0¯XyŒšô4ÜqÞPŸ‡Þ;| «ÔiŽòO(j±- 5…J_y~(…ð¶½ÂÖE(½õ^!EGŸÒâM¹ìªÄ¦GÀ`0œ‘‘1mÚ4Ù®àt? ¾³ƒ'ÝXvß¶‰³§G^Ò´k•‹z"}Zà¢m©-ꔓ[iw|líæœWç;ðYÕšµÇ7|ñˆ—ap/âçÜzG¦Bw¢ùÏ 3!u“·»&êØ@„:ÿÔ¬äGŽ:PORÛ:¼Ö;Ÿ…,o:}R8+I¨1êŸ(Ck*Âróßá¬HÛß@ øßÿþ÷×_ùùù999)×Ùù°\Ñ”éÕŒjèØ#gXX˜££ã'Ÿ|Òª–Ñz ³gÏNKK“µ6¿4'Ö¬õvw_^ÅÖ0vò‚¤$£_Ûë(hÛ:Ò3íúSBØf¦™6t X-qˆ´çÿnAE4C´X–Šöá¤ôcÁ¦¤”””C;‰piçZððHúüûœz™øf–;Ÿd=ã¼È¿9P_œWGxšU`ì‡aXú p^™ªÄu´œœ//¯ššš„„„Hi@a3›×Þh*:Ì+o4ySRRrëÖ­1cº;·Jlz #FŒ(//3RÙÛ¡š+õHJJÊ¡M+ÙDà\úy x¸%Í˩ǫ oÔhu¦} ü™Ç€š Á©dµ§™¦—1 {¶b…óÆBÙ½ :}Txø=ÄÉ 1HaŒaÜ‹ì~èÐýøú+ûôÍÜ0"¡Ôªe V;ŸÔ~Súÿi€89¹ùå ňù|.ËÖÝÓÃ92d=»ûã%@CCÃÎ;#""¾þúëÀÀÀjI @a3…y£}ütÜM&Ž;æîîÞýŽ*ª/AOAO>ùäÒ¥K²E`Õ™Ÿþ¹©âƆTͨg‹Š–[oH­Ä\ª&­×~Ê 0Ì[³2½µe_í“­Ï´nm€°ÙìL€ý”~Œçžš¶ÿóÐKe‡¤[(ü{A™¶>…·¼†‡Ò_rÄŒ½R0/L4KŒRP›–uàPžÜIguÆ!°ß“[\¯Þ;L´ŽS ‡âß•€O¡\¼x1::züøññññŽª\$6UUU·çŽßWî-ôTWÔÝûçÅ#yæÐ¬¯¯¿téRrr²Û”•Øô >,c¸oæ´õo9‡‡¦èÐ ­õ½0Ì b0_ŒRP›–u|Ûœi·ß.ª[W/­mrëÖqøpH_§Ü•÷ IDAT›NB·9ÐØ <{kûuè­²Ú :úJˆöX]]YVVÒ& Ї—Ëmÿ¸UçÀ½ÑÆJl: î6A®k¿ýöÛ¤I“èt%D;P-£õ FŒñøñciÆÉ÷CÑySÏž={ôèOKŠÞUG Jo•ˆ›®£ßmJÓEª««ýýý§OŸÞ&pu7súôéeË– 0 ..îƒVP9ôOž<¹páB¥ô®šÙ(.P`‡!£G¾|ùòôéÓ;×BVVÖgŸ}& 9baa¡¸&ãIÅ ££¶téÒyóæyxx8p ‹ùÖ:JEEÅÎ;›ššvíÚ…‡å—ׇUÖáSy¥éTÑcùã?ÆŽk`` ”Þ{©Ø`oCÙF888œ;wnòäɸöĉ^^^ýúõûã?,--…B¡Ü̓×<áuŒË7ƒH#„¶üW¨©©%$$XYY}ÿý÷EEE§Nê¶Å¬¬¬]»v-Z´hÖ¬Y‚ÈëV¿÷Þ*]]]E Cæææ‹,íãÇ”ÅX´q:Rôê[Ñŧ@pâĉÈÈH9Y×az£Øà™!š››y<^@àj $†?z’ËD¡P´ãÛ]xµ±ìœ'ˆDâðÍ»»­$ù_àãï݉v²Î_·bÿÇÏu¿·|-7Ña’ËDAc~}Ròü¿\km9×&ýà©››››ø_®Æ%\¡÷v‘¿›6“´jËÒ•ž:z:Ýó¿ö¨°Ø¸ŸQ½ç© °‹-#2v‚=~oÅþVVüD !¬XgiiÙæÞ*šÀÀ@y5%®„‡*'·LFÅ;A„H"JcÈJ ;×ÚÉ“'Y,–"¶åd¤mh^¥sþüy6›™™9qâDE´…xŽË'Ož„üêoçnZêºFš†•æ½J–®*y³ž?®â5`cµ¡f_|4ÁxfF‰D"‰ŠŸ…ý¾n”«u±¼ç—Hï-±™<×h­–––4Õ[ÇÇ~ZHt߯×Û½;k£øÉ™àß xý´·û_ðó££K|Ö»vΉ\$ñx¼††.—[UUu0ù¥åÅ`„#‹J§45ñ.œÌÂGž~æÆ¬ûK$ÍWÒ³ñk;WblÊ ’P]íÛ— ºÒNû%|ž€H"šZö•{ËÒ‹¡ÔÔ—O_Ç“0 ·>ÍqfŸ>}ttt455i4žÚª£ÿ#b±xáÂ…aaaïÈœ¦xz—ØàËeb±X,‹D¢Û·oï9ñWôÛ—©h;Î<-b‰„'`Fϵ# E"Qö«ûÒ¶-‹œ¡l3?

}úôéÓ§ååå ã]IåEmmí©S§,--¬¡ÑNþåN‚ @ “Éêêêt:]KKK__ßÐÐPWWWKKKCCC]]H$vBlþüóÏ‹/†‡‡ËÝfÙéuËhøšX, …<¯§ií‡BuEÝéô3³¦ÏÅWK$ @hnnÆ…\ ðù=%æGU9÷乓®®®Òè¥\øwÎ]4tHÖöVÑð 0ÍÛÚ-Àgÿµð±d&\`íñµãç'lÊbíñêí\âáêð ÿR̦ñ+"åóOZ”“aiÄò•ÉI™à•¿º°ŒR³I$™L¦Ñhêêê"‘ˆD"ŸÏdzÍvîþ`VQQñøñãÇ¿|ù/$...ŠvpÐÕÕíß¿AAAAAÁÀGŽ)ßàªøM£P( ECCCSS“J¥âéeñinçšÅ0ìðáÃ7n”£© ×‰ ®4ø“—@ P¶9*ÜÊÆ›.;;Í.ÍKg¸Š«Ä¦ÓÔ¾¨Ë¹paÊ”)ø%Òìy2#zvìŠá×_VµŠ†çô¯µ›Ó­ºVeñû‚«#@Ì­Ì­€¨©2·RTsi§Û-÷:Ì«ò˜¯E¨@œ;þ'«j Cs¢5½rÂÊ6<[ÌÃ2ŠGÜxTÏ´z§;þ­ ‰øs:F …†‘H$üo‘HÔ¹ç¼3gÎdeeñxmƒ”;;;[ZZv¢ÁŽâââ =***211?~¼­­­¼äã‹Ò …F£Ñét:®®®N¡Pð Mç6l.\¸ ¯¯occ# ;Mïi6e\lú÷ïï¹Õ¥eR?²ƒßC‰$‹‰D¢t3L(òù|#£Å2UÑ ÃD"ŸÏGQEQ|.ÞáQFà¿hx0%„}îQ~&øÇÛÑè{°C ùQD2€H€’Û÷üWøÑèS=Ø¡·‹óo@^’·g:@{àdÛeû.§"ÞnþûwÌlÏñOúB&“ño¼žÓ…B| ­s3GGÇÌÌÌ6}õïßîܹÝã¼Ç`0¬­­ q±,//ÿõ×_OŸ>=eÊ”©S§vÑÿŸ¢(J&“q½ÑÐРR©$ _¯n“§CFüüüºb˜\è]bøW_:&ˆj*±éb±˜Ïç“Éd2™Œÿððe4| DR¯ûvÉéä[,ËÁ)¿E4<[ȸ_Lò@§-.[ð#¨”Ì3yâõvÕÅwl¯gly¶pÏ4ãš{ç3AËØÜ|ÒSb¦çRèþš§Y—ôüR±ú™dåñ ^íåqxå‡öú»¢(…BÁç4øðÍOÿ!LßZbll¼|ùò˜˜é…‚öëׯCít¥déÒ¥ëÖ­kYÈårëêêðãV]ì Ÿ¾ (Š F£P(T*µÓÞ".\ Ñh#GŽìÐUŠ 7ø˜( ËËËoþ{×~žW½¬Ê¿þX%6F"‘taf£±"õ8¶‰†›1žˆú*øi&Àæ\ž_Hçu˜¢í¹¢uœzº¾>4¬ÏÀ–sjÐWQ\sEuœJ>%^¿ý`§RE¥KCR™Áéø‡‚¿ÿþ;  ¹¹y÷îÝ?üðCyyyß¾})”îó°bÅ éKuuuy‰ o×᮸ÒÈžX]ÊåË—Qµ··ïºa]§w‰ >&J—’Ut‚ꊺ‡W²gN1ÆÄææfAZj¹â|ôÔ<¯¿}åÊÌ™3¥.ÏÖß–µ±u°ST§uÖÆV/Qº¾lY¥+Bø´¦åI'>‘X, ‰ŽŽ¶µµMHH0`À°aæNºoß>¥_™7o^xxxII‰‹‹Ë!CvîÜI ~úé'y¹ ´QküvbÃæàÁƒÞÞÞr1©ëôF±ÁyëÏXXXpºÀÐ}Ž>Ÿ“²³Êi‘8þ›ûäêt*ÔW5 ôޤ–Þü4õhÀkª+Þá¢qîÊ•»M@á7n” 9?:ãu ©ßd›ÉsúÉší¹kËÝž'´!ëŽóeÙÎQ‹VnDä¯c"Û3"·²1ïÎC—I3¡uL0|@yó9);«¦n¶¢¾î×ÀÇâúªóÕ4uº*¬jzѤåìé§¹†}h$׿¬Öu›ÊÖ(9þG9@˜Íu˜äʨÎÈ>~¤o’>ÄbŠÏP}ù=àò8µBЦµö\ðµâ*< Ív©Ã{Y³Ô<;võÉðQcÌ;üãVÖçå•Θ1£¥xw´‘ŽrøðakkëáÇ˫A|dÄ]¤ÎŠø[ý8OŸ>õðð¸v횯¯ïÎ;ñMøqãÆ]¸paĈò2¸£lذ!55õÈ‘#$‰N§K$’ƒÊ%y4>T`:¡4W¯^Å0lìØ±]·G.ôF±‘~×™L¦Ç¢V)„%ÜšœûZîø ?ç‡íoãjØtëJ7lËs¤IÈè+â§³@üÒ9KÕI&„ì¸ µ+—{}ª^w·p#ë=¼¹Oâ.–ÏwP—ˆêN²öŸ¾ö­»}wä8‘TU…m÷ÇiT_»²Ñäj"æ(ÛÙ3Beò=/e)o80 ëoÚ±ß;¼ÑDüœcœO7ãÛËÍÏ’ïi,·à(n,ÜïâWNêDumX8\òxÏÞ}0{OJÕ¬O½~®iÜžïûÁ˪_öB^°EÁ«T$z°çÇíÑ+ö¬ï×1ëßMÅþCW§ø|nË¿vå“‹«†èå%kî¨[%cSqñ㧆Ã:!6ðz½·všÛ·o+ÂuøÍ!²£ŸëôéÓ‹/‰DGŽ™;wnË·ºy«¦ ^^^K–,Á•ïÛo¿¥R©ëÖ­“H$¿ýö‘Hìzû]StðàÁ%K–tÝyÑ«S ‚’ZO{[Ihº6ÓFß|„!° ÍmLÝ>V ¦M_30X}Mlútl&ôg˜ë[ºŽœ ‚&€…C†•¾‰ù”FácðkÏùÆÍB‚<¯rÄÀ{\e»w]*äs’=î÷L @ö&.—˜ rd˜Xé›9Ù-c=Q)–—ÆÛÍB‚¢¢ rrƒ‘½¶A; x……; §£)gjÔÕ¡ueñÐÓÉI³œ²ÛžQ6 Ê ý&ˆÌH$’ü1$$ÄÅÅåîÝ»óæÍ“ýÚn÷N–¾\»vm\\Üõë×}||„Ba×Ûïâ}ÎÎÎŽŽŽrù_“ ½qf#¥ººúÞéûó[xpÉÁûg¿~ÉvõHyÐbaH"úLõ`ÿÆ3c©ÕYŸcMsÖ§z°cZí`š°ªòd¬ÎŽjݲظËC¦œÀúG'íàQ–ÀÛàb‘ÆÕÐ;>óAÒçG¡+<ßAMÌžô³Û³=¼ULQùÍSÅ5NI7>¹õí‰å³t³Ý݇…nìåmÓº—ûwVfyZËf7%@^êÀZ:ˆŸ†]¡E­`ˆËƒÇ?ô¨Þf‰–ïÐ<5”7÷Åcª?o³º0À¤Ð­ºn•ÛË=uÛŒ* $]~ydËÊ5N±Wì/®ûÎQ»Í­3e1>÷²kçÞÖT×<}—7‘@Í;µ9Àȳޗ‹›@,x=»j¹G “ËVœýo"z\|<ÖlK ™p\¶âlòsà5¼±ìÚ·’üA?õIĶr®~î“ÖvËæ7̃søèªðúùnâ’J HšK*%¶•kŸ ÿ [VqøR™p€Gˆõ‰˜. Šã|OÒCëï]8§ç–hçmÄ{ÂÎ9mý‹<´°zrž£ /9ôtÓ€|ëCvyÁSÖÅS#E >ïܲòFâ±+OW.O1mgžÛ(cñâî#z`2EýüüzÂYºtéÒ¥K•mÅ+{În N¯.—[pýq+± ††,Ùl*¡¾tÇÄ ]&¸ç@;Û.±Ñ¥‚ª`Ê#&Ù«ƒ¨N{ ôßFê₤sQdÔ pSߥڮ‘³>gÌÜ?͆ ÖŒaæjvì⢋ýaÓ'L ÅÀŽ]SÅÓXÓÆÚQŒ³®Öún‰ÒXE bº[¼ÃìIj«f$㜖Ô¨±%rê¦ à~’wMl]†/Î>ަW\Æv•T2ýí˜tºùbÖA9§Me3ëQÚonz"ïK,_Ç­Ëχ7šHÂcM‹ÏuÔ7P^ŠÓ2Ýd<†Û»Kš¬`èÒ¡L Ÿ‘}ûÄB£¦Ùw¸ÃèÿBÞ}žCŽ|v!æŠ$“™£††WHˆdN~«ÊDÛ‘+þ±9>ÚßÍs&Y@ ©@ÀÄ¥£÷!Êûœÿ¸²v@qœ[{<_“ Uf£È õœ5±iÒ @g\CuLð·!è ±¾ÓPû¼ue€ÍX#êû\¹Py¬Ãt.—Û=3›×Ô—•ñM˜ú2@…Ç¢ †ûÌ1ïn¯³QÏ)ãSLÞã¨'¥k¡NÛ'//Ëåö¨i ôòe´w@ €įÊDí] ª&ËÈÄŠÁ´Ñ¥¾®Î°2`˜ë2¬L§„[7‰PCKÆ”ô¹kR<¾üÆ^G{p¦Êùò¶˜'iEBÖC äý[É€&N¦™Ùð~ea%\€†âLš–òú™@¨ÍOËž;œÀ¶m^¡+‹ôZ5KK§Ÿ¹.Ã\×zÁˆÑ h1a‚ŠÇÆCŸMt £‚Šÿ­ ®Ï]¶1i!TIˆzô²ÈÇ\¨q!O@nS™€O5Þ º¢îæõœ.Üd”@@ÕP‡U Ó†Á´b˜Ù1té¯KÌõM˜º sÆ'¾Óš¸ÍZæ}ÀÇkã!»' íK&O^ä÷ÆÃ gžKŠ_ÚT~™UJ÷ó8m› ©1Ç9@zõë03µÕg˜ë2‡,c Ä 06ñؘ2wÖJ3*‘mR¾ÓñU!)³g :tcxPÆÞ½àû$6•D¢÷øéÕ<¯ÏÎÎîìí øAK*µ;¶_Á¿çj/ûZ¢¨8ã~yO[zlKÑ~×=÷d6¥$*è#ýúë¯ ,èúZœ|Q‰M[h-_è½~H!€ÕªQ¯ÅßmžD‰zÿíþ(ów¥éâiµÎáÁîqÞãËM0dÕhîò<~œýéðA$Ü ° @„O²´°iS±·mR0²S°йP_õÕ @&éÔÎÝà~4ÒùÊ‚õf­šÅ{•ÎCy¯TÜwqxåH\0²=›Ñ¡­9’õ÷f§¸à•w ïT6¹Îÿ7ìv² 4QÖ•)@ò[Õ€[Ùx7ÿ^'nïë+ý«ÕÈKk]‹@&Ó_?øè­[–HˆhAr™ÄÖvqQÂ,§¸YÔ'›/p™ýçÿœ’vm}D–õ‚ªãsâ|çÞ Q­+›Ó~g…ìð<šiý[‡f¦‘èVƲôQƒ÷ïå6Kf´Ã)hc:e•ºÉ&ønb\°Ó©ÿ·wæqM\k&3Éd²AØŒ ‚ ¨W$îb­"ØRmU¨¶¶*X­ Ökké¢ßÚª­V{{+ÚÛŠ½Vëvm«^ÔÛ¢¶‚¸Ôe)¢(¢("B {òþq`ˆˆóýÃO˜œÌœ]” —ìÈ®×4»âââä!Û¡Ðäí‹&yDìê×]„píÀ깜 äkݰ{o›ùŽ%ÅAÈãRoè®íKˆH8¢lÜøÁ’¬•³—dëêµÑå튋‹‹„|s†@¹oy4AÈcÿþuYWÐå­Ž„QýŠbOü•˜¬m½O•.ø[^ô³'¿Ï|gO½6ÅtŒwÊÜóÉq—^Wo^ëÖÅ+Kx;žéÙñ|ô÷ïtU;Ù+wõw·ÞZ0ÎAeYm¿RöZ&†.ÏŒ£2ÖJ> µ©c¿”û\‰ˆÚ–QšúNÁòèC#¾ÿÐõ?¶m‰zÏÔóêäμ¾êWú~†×WAêd”ê´Wñ†ïEAÚÔiù;V_î÷Ö+ÎmÚ|V®\éëë;yòä'?•}i×k6DM4šÃä–Ùø¨I1ƒÜAÀ%]}H(Æfó#>Ø©ÁyÚº×ë¶QxRÆf£U#iÅ«¹óàÆ Ñd4Z‹"ò´ý:‘”:²C¨¨ûî6¦hï:Ix ÒŸq±™fÕÃãbFôàÆ­™Ùè 3²`ÃÓS%b( ðŽx7$óc~1öMŸjØÆ¤®—94/ më-èñú²¨CFש‡Çuc¦@Ôú”/¯4PX?3©¼?Ü”ÈôŸ¿ýê.O€"€G5lcT…/z¿Ÿ Ïèðë'ÿªŸê”ßìܦÍD¡Pœ|Ø1Wl=Ο?áÂ… …Âî'OMM b‹ÈµBÚ¯Ø(ƒ7¯½O=Mìsb4æQqL®‹Åòé§Ÿ0 ;;{åÊ•#GŽlé+¶6üüü¦OŸþÃ?ôíÛ÷Ê•+ö=ùÞ½{£¢¢ì{NûÒņ"õz}IA™s;ÓFñ ‘ÅLŸ6…7Ðq6 ^¯¿sÛöqðíÝqÚ´iv©ÄÕLÔjuK‹MIIÉóÏ?¿téÒ©S§ž9s¦gÏvZU¯OŸ>iii&“),,,7×nŽèüüüòòrç¦Á~(íñÙ Ž$IªTª•¯üØïÅÀQswìæn4˜¶.<ˆÚ‡û×yБÞùÝlDT ‹µm•¦jÅK?ö„mûHG‚è5´Û0AQ[|Ì.9€›¦¥g6©©©S¦LQ«Õ›7onUIïBppð‘#GFŽ9bĈÇ÷îÝûÉÏ™œœŸf6b±X(²c"*–n4‘ay<Ã0"‘MeÒ˜L&ôç“c±X.^¼˜™™‰”Œ¢¨áÇ{{{Ûå䎇$IÇÚMex<—Ëe…¼QìòC­¨¨H$vÿÍ9rdòäÉ*•jãÆ¨°ŠÓo«Gõ2µt‡ýüüÒÓÓÃÃß{î¹”””Ç®ß|èС¨¨(§›fáö%6¬ÒPEÓ4Ã0(¹:Fõz=ú³5ü·µ*lšavL¤išÇãÙÎlд©¸Éd"‚Çãét:½^o2™,–‡d×o&‡>|ø°ÑX“ÙÍÍ-22Ò¡òí²-Rh@€ÕīպråÊåË—ýöÛo½zõºÿÎ^×jôÔZƒµ›í ôúA+aÍ´°½Éd‡~á…^xá…äääáÇ?ê Å•+WÈÞŽä‘,ܾÄj£x<žÙlF„H’dF¯×£i ›F!IÙ éP(D $\.E ’$išF6´Z­E ƒÁ`4í(6“'O®¨¨8yò¤Ñh¤iz̘1þþþv9³S`EUF¶¥išËå"½AÍ, ²ªÅbAFöl0&Ú*SsŽ( 4¿¤O=èˆV«4iRZZÚk¯½öõ×_ÛñÌt¤lœ§–Q”`#3v·pÓGÜÝÝýõ×±cÇŽ7.-- -k5ÿ¤ÛsV«¶n_Ñh€žVLµ ƒÁ`6›Ñœ‰MK\·­ƒ†<´rÃNqóݺh@D6DsD$3¬mÀ^¶Ý½{·‡‡GhhèŒ3"##œ#Ùî°ƒÈÁ‹¬ŠÌ‹ÆD‡ƒ]M&SQQÑ¿¶üÓo"\¼„n%V«µ0« ¹ÿ”\+ÓV g§>¡œñ¬‘mÁfX0›Í7oÞü×¶¯º¾Êo%ýoýGl-ì3` 9Ž¢(42°†ö)64,¢ÑÐVfZ›AZhXDzƒîUÛuôô,‰´ÜjµFdp°‡mËÊÊÜÝÝoÞ¼Ù¥K{|¡ÖëçAÑ}è_t¯¢C¤4ƒáüùów~7!©³»Ü&‘TùtWŽd†¥DF?Z£Ñh02226ìüfbRgw¶Mâªñí® g#\X C;t£±ë‡lœ.Rv4ÄbÓ( ýØgv”„Ú}ìAŠ¢, dz—Ø;v¬ººú…^xÊöŸÛÚý&‰ú;:YýfWÝå6IùõÅ´âΆ@­ëÒö׋ä\¯×ët:4Ç<*åwÔY©g: µ«ã¶3›v'6Pk¨ eaçÑlƒž\Û¶ó#¶¯moTäGVmT`XÛ68N<,Ð(99yçÎßÿ=»™¦9Ÿj+G¼¾ß¶V«-+êt:,6‡ª´êBzntÏ*ÖÌÖdb½hrƒ-üx¨J«ÎÉ®f}Â$I²·|{°¹¥Ý‘§ûèÉ)))Ù¿ÿwß}çææfß3· Ð8ˆ½ýüüÞŒÕC¾³;Õ&±X,UUU(ø‚¦iÛh da£Ñèëëûfü$#ÜpnWÛ(‹¥ººš¦i£Ñhû\í3'¦ Æ‚ÊÊÊo¾ùÆËËËÙÝqìs·Éd²X°“ç1±X,h×Wƒh ô3CsGƒÁ`ìKL¬V«V«e£®lå‹ ¦õb0>ùähýÙ8ZÖ!i2™Š‹‹ÿL=ãìµIüBdS>z í/Fóö-Ø‚½¤¤ääá³NìgÛÅ/D6yÁÖÙ`Ï"L+E«ÕÆÇÇ‹D"ÀO›eeeYgsœÝ6 AŠc4ÙD! &7èϲ²²‹gþrnWÛ(ApHÂ`04ºa‹ ¦•²aù\Þj ª;tÓZjÁ“Gùõ¹ßÿ²MÄpvŠãøî=”ßQŸû#Ç6¾lBÚi€¦5ƒÊ« 4hÈ!ÎîK«£Éè|ýÙÕ^ï ñåÜÞuòfp0õËá?oÄ]Újõuc¿¹ßæÓ]…b4eUz÷žÓãèý+þÒ@5ˆö3·sûÚ/+²5@»w:o`·# C^Îö}ÌÔ$èÏ.?lŠ9¤7mVîüºrüŠ`ÀxvÙ)÷÷†uÔVøñ£=+«J«rþÌ2æ‚ÍnÂkÎÙnï:y3¸ß4êùo9B!gó^ULš{ån£BJV¹@(v§ eÕw«]b×É/.=UTm0‚»ïèø~¾Rõ¡%§ Ê ¿:d°ÝÅzÅ “[‡êÝ‹®†9Ä“‚’}ÇŽ'¾"PŠÏì¾l˜¯Àp5'ù¸ÇÄiRÅ “›¯ð±««J«rNæn[Ä3Lë⯿þúõ×_+ÍýX­Ö€€€)s'>à}Ëíí¹Õµù«.å)8¯†FÏë£_™®—÷~eù° Þ]¢—“v¯4„Í=©Yvo÷cXüб ú “·~µ±Ä\Vº{„Å?t@ÐÝ|NV:äÛñÜéý ³ )ݱäÄ—Éw@u>wwÅ«iÂééçʇ;ë·þ/·¥òNÄü}ÂC›U]Ê-RÔÌÌ*eÆ%ËÀàI‹C}«ÓwWËF/~nè`ï¡ñÃFÇÈv¯L÷4)>Ø…Ò^sÂ?&4:~X×+ñÏehMºã+OøÇ„Žùšë—¡?^ÑØï›èJWøeø´qÍÿ®Þ¶hÏGØùê%(î®_SF‹k’î‚û‹kÚ?ñe¤Ö?°XmhâÃ-ŠpGa!޹¢ížDÀËNåäÉ“_|ñÅwß}ç쎴 ŒF£F£iPCÓb±PÜ>zrÝiö5EÓÀã¸õ¹É?ªC:ùô¦:‚:@ô–ñ´!¾A=C|›Ðè!²÷n©ÉOskûèï÷gAXâ›o½`ÎËKì¹õLxŸ±Ünñ#!é¤Ï²H±þX|ºÏ²ÈNšBÛÆåŽ}»ðbNÌ8:É;åÐ (ع#0t‘,=S;ÄM‘Ò' ”áÙ×av/·¼œõIÅú5é]w¿ªÓyèÿSÓ~ÊÍ9}3—º¢-ß}*h{ê 'ɬÞЦhîÆ¬±žM‡e C9bõz½V«mék±[çØ½Äl‚,9ާººúË/¿üòË/Ûneû’˜˜¸lÙ2www@ ‘H$ EQC† QS¥C†Éû‡+¹´X²d%3Σãf#@Ý-l€,¨ Æâ’µwËò*¡VµsåÙ©GC[ Y{¿O¨ƒ©hå A♩xÉð+1åŸQÅ_Hþ¬xvùBý:íç.¹™ü©¥ÃÐ_R£o%m[óýí·ôÉ£_Ý'+HÚ¶î[ßPp(³÷ëçE ‹÷§„ŽÎÙ¬]øîžÉ¢“Ë/**xI¶§ÕÆô^$ËÈ«¥\ynÁÉÇ» Šû§Bÿ¡òãEsgm_Öáp¿Ý†÷†Å,ëyqDXÇü³¯ë±Åú9™qrÊôŒÍÿ0ZSúùí%=½W¿Ùä…/Zsòè\VVvþZæ!>M7#]衟¸2€’A‰¯³­-& ˜Œ|ü'>ÍßÍX°$]¼j–@ã~ëîNirÓ¹Gm €#òï½6ýßž~p(â³ßÃC¶º´ô#¿{‰Ìº²¸0nj©Ç2°¨SK=–™ŽŒ®ßxôç¯.]æUšüݽ‹Fú5hüdy,ørŠ¢\zf }ÅãÄ¡Ó.YEc_5Wÿ…,Öõ晇Ü'Ö´÷8"ÿÄæœqw!ãû=TiüBd“>| ®6þn=±a³b 4Alf:GNqª««Ñ¿ç“`«4(ÊÍ&ÌÇzãH ƒZ­^·nÏCnòöCHH—Ë-,,DRÕ¹s爈ˆ?OåFÅÆbT÷\Z:¹·€â\Y¾íb³¼f€¡ÑÁ£yø¼Ñ2oZ›m1c€@dX¼E¡~‰ÌKÛ¦oˆ¡:Ü èNKEo3‹}£†Ný" è×㺒Ÿ ¸1ÿvv™àÕ#2èôL€æµ9€~}io€_Ô¨²CU~qoºŽ[3~ŠlìúQ=ÊõNk„Σûüg[¶&_2z…«`¢ûŽ™Zží 'z?Ó‘¡,à@Ñ<Ž"ûd]ü&ö €>8p€™[ !A~P@SÞÃ×#”Jeöù¼!ðß¡Y¥ýhÂÄaŒ8•§}u¨Y›ŸªFŒïÙÝOõ €®¸`Ä›ÿæAê‹= ¿VZѵ }°;[BC™ÿ ê²Óön @6z™ÿE#pÝà€;€NY¯1ð³¢Û'_CÏ9)/0  HQpןä-»Óo^˜$èúÿ]àݦûL—@ ÔX¬&¯& @‘ Ï Úã?üÛÑÄ´»îì.e¸å—òó¯°±ó¤©+ÔŒ€Ùý¿¿ÿ­¥¯ÅzÏ‚àSÂiSÞôõõår¹€S 8«Õºnݺ™3gzyyµt ä¶BIIIzzzzz:ëQJ¥ï½÷Þ¥K—šþ,Åç Ûšj“d¬ÿ:¤ƒ_oO¦Þiç7@æÓЖ[\¯Ž¾önr¤T¥&dpîܸéºÇ]~à·™s/­ŒÖd)¡ŸL{[éÞËÿÖþ¬ U½#„ªËw¡S'¨q7qÀ|ù@ÙèãŸÏWl'¾<{îMÛÓR\õñƒáëÅL|€Ú#}ÊVX6ë#Ô)c=ç 8.0{ÚGI (üy½ŒÕÕÔˆ_~Gý×wžqhÚ€À!xÜæÆßo Ì‡_ÿˆÜSÆÎÏ5ñE2-ú)f '\IJ+ãspù¶2ÒMZuvIð%”]*¼m êQU”¦lИ£ÊΑ®°~Îç÷9ØK$H;ô†ï7n¸î_ |»nûy7Œã P÷[ŒlpN.hï3þƒ(¿£þ+µdXÇÀFßm(6lþ¥÷æ.°Zœÿ÷Ó–=Ž¿(iá.X°€ñ°y“0-‡Åbùì³ÏÊËËÛtA» Õj³²² ëׯ—J¥±±±×¯_?pà€¯¯ï‡~­R©éœuk îõô¸$„ÔŽ2\@#’Í»¶GHHË-4 œºêøLbc0g…ùKŽvÿ*>ªxïÅ×S>äßÈ=3}Ý’-²œ4éÒÛ»©'ý·çŠ%Qþ9{%_”úÀh¶š'ëX'Y#H.Iîë¹êdÝiù|gÃÁûU_øzOFv@ý.¸þ¢-¡ûú*GNÍÿj|„?¤Ì8ºPÈUCxSÖP•Výuòê3cÉ„MÁ³yÍþ|Iš]woøÜÿ@C­“ —r3-CSúÄy-g$cþ×¹ëÞîsÝÖ ÜxxCV=7³çÇÇÃ!zFS¿±Çí?M‘Ÿ s¿¼lšLÄwÍú߆Í]çO“õŒö‡À2 \,‚,W?—¬µÉð˜šö“ë“w®ÖøEUZõש«Ã^nüݺœ€(†N§ÓjµUUUAAA?‰xýӑ͹ÆSÀxbñܹs.\È0 Ê@n[$ÓB\¾|yÇŽüq{–öÌÌÌÍ›7çåå…††¢Œ ,˜2eÊï¿ÿ¨Ñh”J¥B¡¸m½"¿çø~”ZE‹jŽ-•ŠJà‹DbNÁêmYa/ýÇ,fjÆ_“^¥41žB^cç1k´*¸x2d#§m.f…äs R¡%¥Lsœ<×3ïü:cÖ˜ø:xxx¸ººŠD">ŸÏårF£V«e-\L^ ¯x¤þØV¥å¸Hk”ɬÑÄ̵ÛÎ ž0q0cÐhÍŒÍW®ßX«¬2Uû§Å`âðáÞªm_ÿœÍäzæƒ_]˜óòû:tpww—J¥ls`g6lÒSƒÁ ×뫪ªéO(*UUBë7¶éŸ1ö¥ººZ úé§íÍÈZ­öܹs§OŸŽ‰‰‘Éd•••¯½öZ¿~ýx¼†ƒó¨Q£nܸAÓ´N§CG‚ ÈÇÞñDð¤ŒMÿ8"Ïš!¤‹—Ë!ÅL]·(ÚÅóã)fÜlþ럶¹ ¥‘ç“DH5B3£ÑZ>ãbãj#Å @Òn®ðÄL©ÐæíGR›öõÏiêž&ØJb:­Ò·7ÐĮѬ>»ƒüfáááíGi*++ ''güøñû÷ïïÚµ«§§' :444ô~¥A „=,eeeçOd: ·ÍÇ7îÅ—úÙyÄo j¢Ñv_—••?Öº,Œð{1²÷ã‡t;€šh´P£zl*“Ì>Fµ+ŒF#*NÕ Ýó$=zôôéÓgΜyûí·‡Þ©S§½{÷>HZš† ¥R™sþAÑh˜¦°o4æ~šŽF«ç'eCŸ †'ßFÚö@ÁHiœÝLÛæÚµkgΜµZý믿¬Y³føðáàêêúxJƒyBÊï¨Ïÿ‘Û~fÒŽ§üŽ:#5÷AïÖ‰µ~õx‡ô­uÁî1rp´÷Sƒ.os|Rè²7Ç'e€.oul„œ ä±ko˜@W|,^N»6UpíÀ깜 äk=UUª6nÜ8a„O>ù9Í$ɪU«Æ÷9æì^<Í h´½ÛpñINû,Áeæ 1ªJ3K`¬.Í,5j2·,¼=UkMÍß±úìUEÙkûn*·öƒ¤· á7u£μªMõÊ]ý]¦¦&`›äêÕ«gΜ¹qãÆ¢E‹ K—.ëÖ­k¹$µ¹ÑœÖNˆ šàÔh´§‘†á†M$ßn´çïn¸4€Ë±|ÆúÀ- A||Ö%ؽ,# æ0=:ú”²p ¸¾v8qU7†,s jsJSUU…Èþõ¯-]º´¼¼|̘šíÏ?ÿ| ) òÿ$É{”=„[ˆúÜÿ.´’h´6 kÕûÍ[oSçýš‡}›»P¦‚Ç6OùCâöñè_ñv°cÛö[cÉy,øi²L ú•üôàsŸ·×š$>OÌýõô(ÙûSò8O8´¼ˆS”–ãwÜj |> 3&÷h w·F£Ù·oßéÓ§óóó÷ìÙÃ0LLLÌßÿþ÷–¾®mj%NwW©À.¹ÇUêäärÕ6;¢Á`(-»×ɉm³ JTÕè¶9»Üâ–ÛÛsEo A›`«.åuyîÕP/£.%ä{Øôæ+o )^—å>ÕçO,žŸg Ÿ,»´{ƒñóK#$FÝÙùë¿¢ßþ¿°›L1~]ºÄËXºÁç_¿_ý©[1ŽGµ¬Ì±ÒÒ¢ã|ÜÆùI¶ÅÄ\ßµª0¤gÊ?/"*öJoÇemŸ$‘ÿã¾7|YJ·V¬4•••çÎëܹs@@À… ”JelllŸ>}PZ£)™[‚ T*Õʾ–ÿ02v{'½Îðó‡Àjµvì'4Í{þ‘ŠÚ·ó#}F¡#(%Uð³ýû÷§(Š¢¨à¶r^QQñÅëBRüŸ›:ؽ“‹N«ÿeÕïØÂMXø¿_¥!ëõÔO>€$I”¥A†Éš h{Mee¥J¥ºwï^IIÉ„ šA@ûkÄnÿ½1=Å«· ›0q0`:$ÿ¤zSf²O¾;3‡ð´'§L'ÉDhJH ZU4e¥d{²œÐæ]Ë3ÊúÍß½~Co̘„MCÌÉi)Úý+K_zIøÌÖW{JáÊêäüç^R•]—¥üãÏóÏñ÷eï<‚7c<±øå—_ž7ož‡‡‡›››H$\.Ç®<":¥Ò(•Ö:ÆLE©Žïå)¦jÞTh)ÏÚw5J…øìŸ­ µZ½xñâk×®ÉåòùóçËdN‹66™LhDZJ¥ª¨¨ÈÌÌ,..¦(J§Ói4š¢¢"´3ŒÏç «ÕªT*ÑÛù¡PÈáp*++y<žP(ôööF{›<==]]]]\\Ø\!lò•J¥T*³³³oß¾ÍZøÖ­[ØÂ²0I’•••è]ooo///”>¢<$I°ÓÌÆ>‰Í¹d*|5…øBzN]øìs“…7Ön<Þ+rµsÁÚmë6v¦/ØŸÛ;I=J¹æ_{R*zN¶¤,,[ª\ãe“¥\‘³áÄà£~2ÌÕ_ ó¨ð¥R›Ç”ØÓ[lû¦§Í›b©gëÔ™ÌÌL¹\n±XÞxã ¹\Ž&1N„Ãá ‡DŠ¢x<^@@€D"©¨¨P«ÕEñù|ƒÁ`ëöððhp†v{„ÃáÈd24,º¸¸ˆD"ÛdTÔ’}çñx]»v‹Å¬…†Á~Њ¢d2Ã0"‘H, š¦¹\.k^öyÝ>n4û$6W¨_Hþ¶FX£ …B‘H$ †¡išÇãÙf>dµœËåÒ4- ‘º ¥Á~ÈñÈårÑÌF,£ÙÌý;‰ €=›—nú1^?vÏÇ~ž=:é³å’5&H™òêœQÕ±3iwIPèHß 9’Ïæö‡y—–ò¼n5ÈR6¥Š0ާ²²R$ùøø´Q¥šnu‹… … ØL&ViD"މܬÝhš"‘H$¡Ô¨ŠûÜZ"-Gö$I) Ê*‚wD4 ª†ôF( ¡PˆÒ›6X¶i‘•ÙÇKlî;ëÕ #Ößå 9Y}–ÞîègUá· å*ÿ¼t¹‡ÍÝÍ ˜3ö2ý{Pê%?çƒhª‡†:¾·½8~ü¸X,–ËåÏ<óÌ“\UH—0ÿü¢¤iâÚ¥VÏZ¸=- î{gX‡cI‹†ÏY!³ïKŒèP¸zÖÜíÛÒ &qߦw|[qz~DC!›=­£díXl²šß0 ÃçómÓºÛ† ØÊ9²0MÓz½[¸iÝXÓ! óù|6£ÎÈö°'ZE•¢DRºVˆL• #ãÉ4í{¼,å¶´†k-¶¥¸ÛÐ&Ó”””-[¶üðà óDim6m‹v?üÿBs:âÙôÝ™ ¤5/f}O¸uºªì•»ú»[ÓGzÅÐå™qTÆZÉ´bå ÏEAÚÔiù;V_î÷Ö+=ZçúQ ¨°!J%Å‚ÆAK-Îîc«¹qI5zGŽ5tuõ4°0’ViØ{jŸ¶we»=‚¬g«è4M£‰#MÓhîÈZ¸Õ=Î1žÂú%ò|x'/Ky«‚Md±XvìØqåÊv~Ó&ÄF©T?~<<<ü‹/¾xÂS±ºB—Ë:uj—.]Ç㡆$î| ¸ ¾v8q\7f D­Où¢,ûÈÚ6=6@8“@ìÐàIDAT–ÏX8‹!¦G½»þ‹±­Zi€Ãá ×™íЉ’}ऱMCÔ/ýŽhàCƒÆ,Œ„[ø¡°óB´~ƒT§At´B±iŸ°JƒJ Íœ9³>¨æååÙýœ‹%!! ©0ÄåªÓRoÃ;=îí>˜nØn=}¼?ÌNINŠcË×+‹l÷œîKÖÃî=·#hd7RŦ•ÂCaÓ°CzÊfŸZî±±0:Y×¶pÓØZ¹Q c±i°)éoÄb±´«2©M0žXŒŠ ¡øã‡86ù! ©{òpÈ‚ðõå#+Çní×?pÕÇ݈ˆpHKKqQ°[³¢âg—ro˜¿è ºü0lƒ=iL¥ÞÌMkØ ]lµ GzÌ·oßž——×¢Ž,Û*š¦ÑüVb+ÿ4+óc«ƒæ—§§žÔ××õÖîß÷¯,ðáç½¥•§æ¤÷(|ζY¥Ì¸åV·KEW²¡ÿÏaY oùÏýræ?ÿ¾gAsêœr:Gúñp5 ó0êÍl, —Ëes˜£ ¬Ò8@l***Ο?o±X®_¿þì³Ï¶Ü…Øœ lm%š¦ù|>ëFk»ñx]Ƈ¥oSÌ…Î: ˆŒñϺPÕ{ b? òµ\J:°xÎ ¸tߘn\:gajâezš`Þù×#wa`?!O ß¾-Íå˜.%bÛw׿ýT¬_“.˜ÓÛsòØèaÂÊc'7^ðTqÓ;¸3ïVÞ7=·žˆ\?gV\Ç+6ìÝšs÷c0GQOlØÉzê!—šc|°X,A¤¦¦:ƓƱ@itQ•‹5Ú.Á¾n*>ãd@ßwÃò¤’1®Å0;P”}væ·[¬Ÿ“'§LÏØü3€ÏäC1³¯fLé™1È:hê*ãےŲÈUãgõ6dŸ^\¿ý¡5¥Ÿß^Ò¹èÏ©+¯F“_øê]–,(›vÌå½zní}~ÉG!U›¸‡¯Ê;Ù~pgê ¶žƒÁ<9õž:Y±Aö<Ó€C–g÷îÝ‹ò 9rÄl6»»»·èåØb lúq6¯* €T~òĦ{îÑ#ÜzÝS¦AÙ„—åŠì‹uñ›Ø+úàÀf£zЪŸlœPV˜|ßzuÏ‚—U7”¹?œ;AÿåÌ[õÚs«!$ÈÏ›f¼å‘{_¹árboØìdÞŸî•÷2`èÛýhzºõÕÛ;~©÷AgÛƒÁ´êí³±Z­HoØçzä:sLÞÓœœœÜÜ\ôÚl6ÿöÛoo½õVK_”Õv‘†Uš6«7Âhýó/Å_}€Ó?ôìÊ5²Ï—H\®xÀìi%‚¢ðçõ:àRgþ,1€7O£>²¸¢Œ!°É:ÌÅ×sHLX¨­¬ßÞX YH8Ü"õø}¶é]7tA‘¸+\»¥O©z{DjŸÿ«ÿA ƒ¹?ƒ«7$I:8‡ùÎ;Q€ÃálÛ¶->>Þ×e—gl×iÚ¬Òt|öo})x- N‰;KA$—OÍÿj|„?¤Ì8ºÏUÃÞÝ #.ÜH+˜qt¡´77þÝO'.‡CNÌ8ÛAn±m/äª!¼æü¾¯ €ùʈ(O=WB¸ŽÞ<×m/”tX5ëõg$S?«ûàÕìÄ`0O DBâÈS“É$“ÉÊËËm^¼x1$$Äa}p–ÀX,½^_UU¥V«ËÊÊJKKÇŒÓBõl*ZRÊ0µÏfVËeDµáde•ÖÄa<ëÊž6hß:}¥‘ËVæ~„6Éxbñ„ Þ~ûm©TŠ"Q† Ó†h*æŠp ))) ”~üñGGö¡%íÜZyÖR\§4À“ ]<ëØnо)ø4«4öA Óh-ã‹‹Kbb"äççóÍ7óæÍ lé ƒÁ8†Ö"6aaaaaapäÈ‘o¾ùf„ #FŒpv§0 cÚêÖE ƒÁ´!°Ø`0 ¦ÅÁbƒÁ`0˜‹M«À6"®ÄÅ5[ã´Ý4BL;§µ°„……µç‚.ì¨ÚÞʤ6 –a ¦­ÓêĦÝ(Dmj’$;útlWeR›€ ˆÎ;£d}íö·Á<8Yl4Š:¾§¸yÝÐe¯]{}ö‚qO_ýÖS„RPÿóÿ\²dÉ;wPÝ”1¨ººzÒ¤IÎîi‹ƒÒo£òB®®®žžž^^^Hƒ±Þ`0m'‹Mþúq»"¯,nVkʘ¼=/öi`3O£¡vРA?ýô“ÉdBï …Â#F¸ºº:·“UBb#‰Ø"Clݬ7L[Äb£;–´høœ52ûð¾DßÌe³N O]1ê@BtjÀØsK²Òv-™tzeÅumžÑþoþ×' ?uCl:dZ?Ø·|zÔ’ë1³Cʺ> º¼Õ³ænß–1‰û6½ó”æb§5hH%⯿þ*..fF£Ñ€››Û‹/¾èçççìž¶8Dm…!>Ÿ/Äb1[>€ÀJƒÁ´QZ|¨Öeoþmr«•ÊX+™þ£6u^øÇ>±Ú¨m™¥+fï?4"!0cÓF‘¨ß°áúyuæg¼–~éýŒ¨óÑjë´Ò]qÝ–ëu™[Þžªµ¦æïX}öªÆ·GófE­$6YYYOÌÝ–:­GK…¢¢¢â?þ8xð J¥zþùç¿ú꫎; ƒÁ Õj¹\î AƒRRRL&“Ùlfk 9»×-AlÕT.—‹ô†UìIÃ`Ú(-.6RùäUù݈ˆpHKKÕt“R¡{JkÞ4i¥:¾WsC¦ÛhÃÎfп+–ÚJ@Jƒ §¢)šÓ rvï0Ìãà ±i>………?þøão¼Ñ‚¯tWw­>Þ}É´ÞM4I]½Úðú‚Q]ÇÎÛµ6§ïìWš­&1V«MeÐkh4›,½@~3¤1Xi0˜¶K«›~úé§aaa­Al(÷àðþnM61e/üD5ü퉱 õR‡Xh¶Ø ‡÷û§2íMlü‰×i0˜¶~Tl ÓÝœ´ì»º¼]qqñqr‚oÎP(÷-&‚ÇS˜ 7ðy•;â24 A/4yû¢ B»úÀu!èŠÅË ‚ bצê®X!—„|í±^—]·`!Û ¾8ÞʼnÁ<`±i SEAÚÕ*£±xÆëq{3K¾4}ÙaÅéo¢vV[­W?|õŸÔð^jnUÝ ÅšžQ£³Ô™¿-öHËÒîÇÑûn*·ZËŸM¹!»h÷è…3÷œ¶ª7éNfjœú1 Æ1`±i€mÔ¡}?ž}F‡_/¸˜ž6{ù(1@À+_'¿Ó§¦¥;jK;@eA,Û[ ü¯/‹ÒWÞÌÈ‚ùLŽ~'¥,\®¯N\Õ!$Ë\B‚ž†B ó0°Ø4›}?znH»Åb’Ð̆‚²½o›JÿJSóD²@ø5KÊô%{i‘W„ìý)99y뢹á"NQZŽßq«Õz{ΜÑ噜÷¥0 ÆQ`±iZÂ¾í¾ŸN‘ñË2GrŸÑ¹oŽïA»Í•¾²jÙœžÜˆˆn@Âßø_^íEDDLXàÂõx-eJ”A„¦¸<Ó+HVò±D3:|Ùœn­.DƒÁ`ìO« }>räHxxxZZÚˆ#œÝ—&0i”®Tjd¦Ó(LÝ>!“F©qÝß:¥BKyJkÜf¥B|öO ƒyºÁÏÕÁv›‹M.%–J´ä‹ëiOÃ|©§ÍÛb©'Ö Ó~x ØØÎx9ûa73:&AK£»:Àl6Ÿ.)ñt z¥w$(-Ò†íÀdNŸøC¾Zï3\îIu’E¦¼:?9æ­÷KE$@{Ì{€Á`0m»Îl:>û7€Ž¾¼§Ä¥Ðiêªã3‰ÁP Hœ&"p1~°Ú7« C⬠Oïw·Ä»-÷ÏI+Kœб~{>€F’Ãôë9þ'œÝà7uT…ߪ%Qþ9{%Ÿ— ÷ÐØ†Á`0­EúšÍfNWYY©R©îÝ»WRR2aÂûÖ³1(µŠ±n.“¾RCФµj§Ó«4&žXÈðоqL• #ãÉM6jã‰Å/¿üò¼yó<<<ÜÜÜD"‘@ àr¹¸ÄƒÁ<9vžÙ4OÊðê]™ImþäÓ.|º©öC‰<÷0 óxàåt ƒÁ´8Xl0 Óâ`±Á`0L‹ƒÅƒÁ`0-NØÁF^µÏ,ÛoÍá`Æ`0»ÑpH%‚Ãá´Ï¡¶=w ƒiQêÍl€$I’$)ª=Æs8’$Y½iŸÓ; ƒi ê‰ Ò’$y<d,0¨,ÖZà)ªõbë0äp8¬ÐR…ô+ ƒÁØ‘±Ac+A\.—Çãñx¼N:å*Ì;UèÌÞ9‚ |}}y<—ËEbƒõƒÁ`ìÁNYŒF£V«­®®V«Õjµº¬¬¬¢¢B£ÑTUUét:£Ñh6›Ý[»´„¢(𦆋Å...nnn®®®b±X,3 ÃãñðƒÁ`ìB½™ r ñù|£Ñèââ<O  “Éôô‰ I’\.—a¤7B¡aš¦)Šb§zÎî)ƒÁ< Ô­Ù '}³ÙÌçó- P%ôz=Rt𩉠I’4MÓ4-ŸÏçñxxÙƒÁ`ìKØ$iµZiš¶Z­Hxø|¾P(D4«Õúô‰ ÒŠ¢Ð2RÛeg÷ƒÁ`ž6À …œF«ÕŠüfƒÁb± #O™Ò P(„Æãñ(ŠB¯I’ìFÃ`0;AØF3ÛêÅb1›ÍhNcýüÔ€„m©Aê‚vØ`¥Á`0»C4VTl]gO™Ì4é ò›±Þ3¬4 cGŠ- > stream x½›IÝÆ…÷ü\Ú Ñ¬‘UÛ( # d«,Œ,äÖSÔNK²º%;þ÷ùNq|$ßÐ` ¶ÜTw<÷ÜÒÇú»úcýÍóGSß>Ö¦~¼­[~u®­ƒ·õá~Sóâðp{øùÓçW÷õÃÃÍeTèê¶ mù‡ÿ3Ö·Öùêö]ýÍ_ß™úÊâÆkEÖëjÓ1¾Ž¾‰¶kÙ± ´ÓÀhú±¶¡klË„àšÖ+ºià¼bð¦ÉÆ×ÎfN‡%ý42ÚiïÖ6ΦÚ[ß„aÅ0³Ó8Ör-׊Ó7ÝÑ4ž]}òµ–릡ó W>>^šÆí,ÙÆÆ†4¬˜§‘³l +&.ÒËf¸±i÷F¦¶iMª­éÓ™aM3kf^Ôç¶aXm‚ïò¸êžn¼1MH±61…Q9fÖμjˆ©I>CÇUgõìRÊ &ÓNÇ•4/lÆ›¡€˜Ó¸ð +Î5å]ýÍ÷‡ûWŸî~9<ÿpÿááîÝáÓÃÝm…cóV6ÏàÎú`[¬ë4mÂŒåº&Bîͺ6X£ ½CØúWË¿?Ue™ç/‹•µõËçròÃ3S?3˜v¯ÿbë˜TÀø\‡ì¦Õ^â#ƒûUeÛ¶..6®³`>n8«üáÿþÔÖϰûÜ:gk_ßàN6 ©nÞÔ_ýóëúæ§úO7½^»žIM—R›ëU¦Öz‡_~9<ÌËÉù¢8“äÙåÁ÷ véBUÌi‘™kr“:‡>4CXÈŒk•uW-‘s7™•Èœm¬“-EV®XDV­Eva9kPŽkÃv¹^bw·‡¯«QO™]Ó) ò{°µé(2ƒ þÀ޾þ"x}Îêו¹uDJ¢FY¤H±š,o’âr熜‚vßš1:{Mí«ÙôŠÿrsóâûÃÇχÇOß^½~‚ÍTG.‚í£»Ç ˆî³ ¼©å„?œ»¼Â]@r Ô&û&g~?kCËÛGÜ_3]$~·Q‹­Í(\m·Uûâö;¾RÍ¡G''ïm&?6ÁyeÐ>ô¸>W9²ÚBeo–'\DŽ£ôi¡%ÌJžÃË®’ ÖQ\e*HU«K’è\ð„ð¯Ü<ñüÃû÷‡ÛOwÞÏ÷”aNFÎ]n¹8°¬É : evmÊ5ú" äQ[ˆk¡¾ýúáá?õßî~|xõðÛ¼Ç=gK9Nz K)¦-èæ-¢Êpd‚WL$êò uw½j‡¼Ð§õÑTLH¸~G¨$žÅÜÅŠÉ‘E4ã1³¶ ™@ŒÉÿ\z[ÙÌfëÉV–9gqdIÊ M¯]‘z“ZëË‘FË®·†ZísÓ²keq¸o,{³ŒŒ‰½;y.×õÆRà‰ IAó{Æb 63p¡åæšøeÆòDEZbf f µÎH(\g%‰äÔD™Ùå <›ô¨Ð}Ý1ÌÆh¥F E´­-ß’ò>“Z¦€a£6g¾¼eã©K.=i¡C™m—ìès)*Ä‹v,ß úeGnð“–„A Ô†ë™œõH}¸wƒéáâxšÙòõ]žUŸÇr4XHœ3y'/;¾@„Å'·¾>Eêú®G²¥<••¢>HúàWA‘þ¼ 4|N˜%“á¿IN1M\ö¤½öð7¢ÓR­Óè7v&í@9ÒÓ9¸úP«l²Eéd%0»%œƒÓß °‚ìTçÉ5÷"L…Ýe *qXi(bµª)~–1SÅåÏoëãñS4©/œÉ“ßb9©q>öŽóŒ|;¸Œ]›ùˆêk¥O_aoEü:ß@ßÖxn³Á‡ÿ~:¼½È) ;+…WIæ§ ¯õy¤Z2ÏŒÚÞ]¦Ú«ÀÕ9 ¨è6b@‚nÇrdŒ“ 챌 0P@/sà¢þ Ä.t ¬¾ ¼™SÞ"­^^6 þD[ U]ñáß~^æêµ\Ï´Þ8ôt/.biÉÑ‹s8‡£wëWßÙCï¤Ð[$pW¯Ü³—Þ÷‡ÇŸ?¼<ÌB\Þw!ÐEà.Aù@äÖqÉGò`!y>¢Rþž7ÌØ¶ ѳ )ÖâÓ€=ðÎç)A馶&h~få[‚8׳Žùn£Žbx4íZ`HrI»’Þœv5¤‰6Áʰ+ŽžÊÕ¨KÿÇ7í0»ZÌîN!)N„e‰Š°:H®HÓ—Êpg ø &™¬x6'dòãÚÔ8}ÑïAEÈ’pô…X×Ï«æy—¤qt*..R§¢NaíáTÈ?Ó?ã—"‡é6Ó¼^ ø¼Êª@%[j:Â3‚íƒàe€=º«°V°cÆs$\WÂ#aO»Ž„Rëã„$J€’âôå#Pæ0mh"º]•r_xH\oË“U’êP¤ÐAé9¼îDë³tEq„±bWÈEõójƒ·ž† CÅîè{u%/‹¡ Ü&,Åê¿_ý{lƨX½¾¢N92[Î.x?9SM•hH ˜ínÌ™¼ ¤™Uk-Ü+)ð ‹ýkøÄj“ƒ@:L}Ї¦CG‰L„]l8«6\lþÂ~CÀ'rÔ]óªÏ pþJ L(§Ó¼ßÏ€ yQ#š­Ç¶´qÑ~GfK·]ÉĘB·íàzüh :6p«'œú\y’o[ðN»®\x'ÂN‰àWzf˜¿ŸnuN[JIH–V lÿ4ë’ËÚ84((kØoçÒÔçŽÂ}cö—>A.^sYWXZÇñE ,}Žf 8¡%bG;QW_V€A3Åï°ßÞeÁ¬±¯á}>ÿ⪤””òJ¸ûtŽ™=‹Ñ½ªL5, ’‰›îæ´¥xÒ”ZG$aÔzDF_ð/„£ý<0®o:­‚;4OèDËY÷ØâÅÕQvn;»ã{_"Ä@qéÔ{’ƒŠh1²ObôC;î´A›nR©;zw+”þ¾ /.Cj!9·úY‰p õ'¨–DöpÇK‹¢LBÆ;k pà1'Ý#ÙãY\³ã(Ïd²L£:n9Òp¼¯=\’>ùêLiwœ ‡lbSËòmnU­°éÎä£äëim¹ÄÝ a—à ¯å)Šú‰`\«‰;é÷ ò’šy\[/j6…Bz,+EB b0¨ÅÑì=ÇðÒŸ€‡¦Î4s¢i¦hcÒA¤Œ–©à?t5ÑÉ'A*J§õd²PäIš(ˆVÖ¦$'*>‚›’ÆZmê¨S&²)/›"]ºåFMw&+’pg9/<2La€)Ý6»å¶˜Ša"Õ«&î(rËÛŒ-Þ5os=½«}ôp¢‹@oŸ[y”C¯(9¡N—¹ÒìŽGü®ÅoaÌé@ꞟ±D´˜me-›`À}m©é!~5N´,‚—D÷f/Ôx²î¶·t8Ì&¯N¤FïÛ²+Gf«ˆÞó O»’¶à"Éxe×a6Q`š}¤GÛñš„Ç é¿£DèJ¨íäèw¨ßǬ 0—rkŠwSon4x6œFî1Äöœªv£L¢cŽT0¨YGáT„Ë…tQÿ ‡ žé’T<ÂåÄVð4ƒÐ¤ÊŽ?l[˜$Yí;¤?™\{‚n¸!ÙŨòXíJCN>§  Ú á9×ç§ßÌæÌ“þJmKÄ¥Ùû!¦¼ç‡»*T93LäæLü=µ(„‰Èb³Zr~]îùá‘áÆ0TµôCоèn>§hª¡lƒo&Š>èvö5z´D‡V»Žž„•ûpAQ–Åçd)¼Ô!¬Iß½oö]ºÍìµâ©úŸ–pÕFÒÃ2þÁ ¯ Áõ€ªŸŽOÒB+oÜVøóI>9sØSv<ë—j|šÊE£žG1}ó ƒ†+¢ñc‚ #HR̤ŠNº¦+"®“£ P̓&Ra‡ˆ,Xu‡›k*¤múq¼B ‘ÀMy…¦a:mç‰>û”…×ë/5íá@Uõ©'«·n¾…1uâX-퀌^«AÁó­Ç%î;ÆL@I /´¸çŒ]0OK3k×þZ¹Ó®ü1Cߨ~YßÀOëÙ3A½,…„hË=žÐ—ƒ- ø‰‰{î>á§uÐÞöåžµ9mÊ8ŠÂ6)Q}Õh"ü¢cÅmž.Ô¼$jZØv’9DÔ)+‹ÐƈnkZãÄo¸GìÑ’ ¡ži¥â+²§6˜Jz€Þ.Oè»Õö­C,$°†ßt}&¡ù’¢Ø:g”#† tĪ¥œŽ6çžÓÚ™}uÄ‚ŸÙÕ ã JÄ= FHPÛhW/"WáŒh•ôUÖ±™½¶ŽHÈɸ †Æð›]_îÚ†‰X# ‘ÝðñXÀªñØGN¢l¥K+°š# ^Êk]îHmƒ®’ƒ£çZjÅÏþ¡9 ²F{Ȧt; .²,N'”ާ2DDM7B-‚âo±´íìY©g_rqòÊ‘nú $†éñ£K Ò\ÂÊqr…4žwè&˜J bóõl,cJôB`åÁ±àFE<*ÆrE6\Ö-1žºLü3qÇó% oKßÏËnÞèõÃÃ>þµÌ3½$£~EȼáE8'¢[¤7.  ü ×Ò•y^pü@F}.¹»Òèœ"j š|Q{Ì €Ê;«V” .“i3 a|=õz–sY5NqV½°Ó‘‹j¢-š=e_ÔImGb‚‚)×)œ+-¦rä¥2+G~ÃF)ƒ…s&^§LžŸJËD#¿@™K‡”ÌÏÒiœÖu‡ZÓÛàþ‘ãh§i5ž&è!“.9ÍT}º[B}Œ±½à Ì(,óø ±¯ZâÎ>¬Ø-µ´…^RT2FÎ9¼« ÌSe*à@ZŠ^qÜO¨žwòcÚLгŠú ßËÁ³îKm<@ÀÊc|DF¥ñ@åYÅüãð®b¾28r,Âä5š Zâ9—{våmŒ$“¶:˜åZ›"omk'Ÿ¨¦ýQH~ØÞ.qÖ™äz¿c$ÿ•^©[«]²À‘üw`5αãj³®“¬ðÅ«‡Ç%=¶ëê×<"žÿÀi(ÉP‘`Ä_Ð@©ãKÇ«ä²j7bêä½q:$ÈD@pVã„z±+yÈ¢^õ.§/$ÅfÞ5v: âï~Ôï*±ÐÇÖÚÃ198îpô…Ý”ëõmœw$1W=—Õó8Ž{¥ÕŽZ³P\j}‘Ý~÷?ß" endstream endobj 5 0 obj 4222 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 730 542] >> endobj 6 0 obj << /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /ColorSpace << /Cs1 7 0 R /Cs2 40 0 R >> /Font << /F1.0 41 0 R /F2.0 42 0 R >> /XObject << /Im4 14 0 R /Im7 20 0 R /Im10 26 0 R /Im14 34 0 R /Im16 38 0 R /Im12 30 0 R /Im1 8 0 R /Im8 22 0 R /Im5 16 0 R /Im9 24 0 R /Im2 10 0 R /Im3 12 0 R /Im11 28 0 R /Im13 32 0 R /Im15 36 0 R /Im6 18 0 R >> >> endobj 14 0 obj << /Length 15 0 R /Type /XObject /Subtype /Image /Width 140 /Height 57 /ColorSpace 40 0 R /SMask 43 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐ  ÷Om( 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0ð30]„ endstream endobj 15 0 obj 127 endobj 20 0 obj << /Length 21 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace 40 0 R /SMask 45 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐàùSá…PaÀ€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€30\Ù endstream endobj 21 0 obj 127 endobj 26 0 obj << /Length 27 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace 40 0 R /SMask 47 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐ  ÷Om( 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€Ÿi¨ endstream endobj 27 0 obj 141 endobj 34 0 obj << /Length 35 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace 40 0 R /SMask 49 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐ  ÷Om( 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€Ÿi¨ endstream endobj 35 0 obj 141 endobj 38 0 obj << /Length 39 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace 40 0 R /SMask 51 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐ  ÷Om( 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€Ÿi¨ endstream endobj 39 0 obj 141 endobj 30 0 obj << /Length 31 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace 40 0 R /SMask 53 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐ  ÷Om( 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€Ÿi¨ endstream endobj 31 0 obj 141 endobj 8 0 obj << /Length 9 0 R /Type /XObject /Subtype /Image /Width 129 /Height 57 /ColorSpace 40 0 R /SMask 55 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐ1 õOm ˆ@aÀ€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€çV+ endstream endobj 9 0 obj 120 endobj 22 0 obj << /Length 23 0 R /Type /XObject /Subtype /Image /Width 140 /Height 57 /ColorSpace 40 0 R /SMask 57 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐ  ÷Om( 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0ð30]„ endstream endobj 23 0 obj 127 endobj 16 0 obj << /Length 17 0 R /Type /XObject /Subtype /Image /Width 162 /Height 57 /ColorSpace 40 0 R /SMask 59 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐ1 õOm ?ˆ@aÀ€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`ÀÀw`l6 endstream endobj 17 0 obj 144 endobj 24 0 obj << /Length 25 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace 40 0 R /SMask 61 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐàùSá…PaÀ€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€30\Ù endstream endobj 25 0 obj 127 endobj 10 0 obj << /Length 11 0 R /Type /XObject /Subtype /Image /Width 140 /Height 57 /ColorSpace 40 0 R /SMask 63 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐ  ÷Om( 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0ð30]„ endstream endobj 11 0 obj 127 endobj 12 0 obj << /Length 13 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace 40 0 R /SMask 65 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐ  ÷Om( 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€Ÿi¨ endstream endobj 13 0 obj 141 endobj 28 0 obj << /Length 29 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace 40 0 R /SMask 67 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐ  ÷Om( 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€Ÿi¨ endstream endobj 29 0 obj 141 endobj 32 0 obj << /Length 33 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace 40 0 R /SMask 69 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐ  ÷Om( 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€Ÿi¨ endstream endobj 33 0 obj 141 endobj 36 0 obj << /Length 37 0 R /Type /XObject /Subtype /Image /Width 129 /Height 57 /ColorSpace 40 0 R /SMask 71 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐ1 õOm ˆ@aÀ€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€çV+ endstream endobj 37 0 obj 120 endobj 18 0 obj << /Length 19 0 R /Type /XObject /Subtype /Image /Width 122 /Height 57 /ColorSpace 40 0 R /SMask 73 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xíÐ  ÷Om( 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ÏQ~ endstream endobj 19 0 obj 114 endobj 57 0 obj << /Length 58 0 R /Type /XObject /Subtype /Image /Width 140 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xí™±kâ`Æ5ÑS‰¦jµš‚¢V…P¡"ÆE¤-bºd©Ä)K A¤ —€¡¶.R… ÖÁ–Zî_»¯j=ÛËÝø]ò YÞO^$Ïóêtšþæ€^ Š¢xÓÀL½þ+A FÌ„ãf³™€#0 ÇM˜Ñ€~Á$F ',$i£(jŽÀ$IZ3š7ß!)ûžËã¡é8¢iǵg§ÈÀ|²è?P¬7í „Â‘(,E¡€v;¬0ŸÆ ÅæôúÃLì8‘dÙ ±l2qcÂ~¯Ó`ÖÆèQŒ°:é O¥O³9îޏ\ö4Š3AÚi%°µ1zN:¼Á#6Ãñy¡P„¥‚ç¹ {ô:HܰzIˆ‘ Ü~&yÆ %ñR*Wà¨,]Š%?K2~7E¬_‚Yìt8žá ¢T­7š-8j6êUI,ð™x˜¶[°Õ &ÒécRœ Vj­¶Ü¹…£ŽÜnÕ*¢À¥Ÿ“4­YpÒˆ¥ù’T»‘»½þõ{]ù¦&•øt,à"ñ ŠÛöCñ“ ±Ú’ïÃÑŽFÃÁܪŠ'ñо G—ÿv¨™ò&²ÂU­Ý*!ÕÜø–ý”ö£V~·VÖ endstream endobj 58 0 obj 751 endobj 51 0 obj << /Length 52 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xíšÝOYÆ™a†f`Ê0cF>­ÁŽÌbH?–5q»j©˜&Û…b{^ÌÆ6wÝ)MW“U¼Ðtm©½ ráF›ÐÐì¿¶g€Q[Icw7=ì†ç‚’yæ}sNÎû{ÐéZú×*€4¼‚¢¨ÛB¦GQ¹èØÃpi¤h D©Ï§Œ$aÀÇs‡ªÇ #Í\c­<Ï·Ax<DzŒ™&U‹g?’fضv»ËÝ!BU‡Ûå° 4ýQ|Ù`hâÜ7‡BÑTvsïðòØYz³iìÄ(«K˜˜O®æv^ÀÜK wÀfÿøìbzíùÎ^ }¨ø‚ û*úxXCÆ:úГÛõ¯‚áï“+k¹M¸ðh{+—½Dyð»Ù…dz5[Ão*‚ƒ e#ûà·ÙñJ˜x§Ç÷õHtq :À\zX˜NÞ¤L§XA”üÁ‰pd>¶‘'ñØýÈ @À’(X( £i¶Ú:%_ 8>š†IÑ«=ðI6+€èuÊè ÃÙDìó @Ž!«1„cŒ¸CèPŒ «à»{$j’ã•e5Èq V†:rt j"(3Ë 6‡Ë 5 Õ(Ì&ð“ñB¦Ó°Î@Òf†e9çÁÇZEâØYT§r`㢞Ǫ™(D©q,"c-J¬qjDÆz¬)mg«vÍ×GŸMòŸ€\µ¾þ³ ü+†v/ endstream endobj 52 0 obj 1081 endobj 63 0 obj << /Length 64 0 R /Type /XObject /Subtype /Image /Width 140 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xí™ëOiÆe.ÌÀÀàL¹ŽR –R*–ŠbKil´Œ”4’6–²%Û¥7ª–”5-¶ÁXmèÒ‹&¢)[¢Qc³ÿÚ V»l?¾›Mø}š¼_Þ'Ïœ79ç<--M~ê‡ýp8?ªbuÀŠr1 †qQ!è˜BP çB’ƒ$…ÇP‚¾{Á(Æ”X"“+P(ä2‰˜"< …Åp 'HZÊ(Õm‡ZZÉHi’ÀÑÃß!!+T:£ÙbµÙAa³ZÌFJ!R3†µ…OŠÑÒéºàñöùÀÐçõ\puZŒFLòëÆp\@3³ÝÝë Ž‚!824àïuÛ͆àÈÁ[bmi•©Mž+áñÛÑØ¯`ˆEo‡†¯x:MjY+kÌþS‚¸ݦ·ö‚‘»‰ä“Ô4RO’‰»‘` Çªo£ nM &”¨LNßH$žœÉ¼œ †ù—™™d<2âsšT!VÓ‚“2Å}5{˜Î.,çÿC~y!›~ _u[42?Ðã"…î¬gèÖÔlv©°Z\Cqµ°”º5ä9«Sˆpx¿^`œbôö¾`ôñÜb¡¸^þ åõbaqîq4Øg×3T] j38ûÇî=›Ï¯nT¶¶Á°UÙXÍÏ?»7Öï4´Q¼š/<ªÝxîòÉÙ\a­¼µ»†Ý­òZ!7;yãò9cûZ‰ç¹¥¯Û{ßþÁ·½í¯¥¹ç‰ðQ-ŸV»üáDzác©²³B {ÇÞN¥ôq!û»ŒJšì×nSKÓ—©¿f½46¦éKÓ—Æ4>mÖKÓ—Æ4>mÖËÿÔø ß=è1Ù¾TÉöuÿè1i©ö»`hØïVµœ—Bñ™7ï‹_6wvÁ°³ù¥øþÍL7â"¹öLϵñÉÔ\î]áÓ >ÞåæR“ã×zÎhåõyÂH©ÚìòMÜOe²¹Å·K x»˜ËfR÷'Æü.³ZJÖw\Xi°{Ãw¦Ó™ßÁIO?JÜ zí¥XPß¡¥Ðžvõ†"ÑøÔƒßÀð`*„û]§µ ЍíÈ8(NJ”zkwoàúhøf7ã×½ÝV½RBâèÁîc%;©·8Ü}þÀ(~ßE·Ã¢?)£ ®eìÚ[@É”:£Åæèê>ïÃùî.‡ÍbÔ)e”€]|׿ò„””Qiõ“Ùü Ìf“A¯U1RJÈãá℈–È™v¥J¥ƒJ¥lgäZDà\ä0háì%)¢èbpœ )IìÇ$G$6ÊBP.ŽóøHø<çVã£#Rغ©&|0Œ°Ù@®¦jǕԊ¸* (‡÷6?~æÀßΖ֊ endstream endobj 64 0 obj 1125 endobj 71 0 obj << /Length 72 0 R /Type /XObject /Subtype /Image /Width 129 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xí™ïOR{ÇåÀÃ9àœNòšÀY˜b˜hx§1-GþX? Mï¹™N™,ÒÍÙµe¦å‚Ù°ºdËeéú×îá(¼ëé÷μžðŒÏ›÷¾lŸ÷ûSQq‚üOüî' H(ÁyÄáˆDBS!à¦ÃÅ0™ ŠL†a("9 %FP\Auº(§)Š$8ŠÀ¢¢n¾X*SR*­ÞHÓ¦j€˜hڨת(¥L*.*ÈÏ—“*=]k=k«Œí¬µ–Ö«Hy^ÁÑ;€`'ÕUf›ýB³»Í”6wó»Í\¥&q> J0BM[í.O§ÿJW(]Wü—ÝJ« L"<|‡,UT­­Þ®¾ÐÀ¡á?1>ÁÞ ´Ô™TräP€Q¨kìžà`äIbym3Hzsm9ñ$2ôØkÔ DÈÿ…ˆRknêèe£sKëéì§¿ò)›^_š‹²½Mf­² @Jè,ŽË7îÅ’«ï·¿|ÛÈ·/ÛïW“±{7.;,:Bz䀔Ð3N_èA|q}+·»÷ {»¹­õÅøƒÏÉè pù‘™ÔÛìÎ÷ý€ìßɾMÍDÂ>WQ€% ŒËŽÌ.½Ë~ÝÛ?øŒƒý½¯Ùw©ÙHØïb *â!/ ¹(Øxî‹yKyÍŒ, (;Pv ì@Ù²eÊœ„ù¥´t'·üv'äp[ñÃøâÆ‡Üî}€üØÍ}ØXŒ?üïV¬³8½7GcÉ×é;`sÁÎÇôëdlô¦×Y’ "ŸŒúØè³åÌöç@>og6–ŸEÙ¾|2" ÉQhøl8_Xy³™ÙHfóÍÊB|ŒÏ†šB6äÓñ9w t÷ÑÓDêåê@V_¦OÝ ÜçŠéâú#ãè왈Í>_Hdáùllbd »ÓÁ)¼ÐÀ©­mhõ÷ö³÷Ç£S§ñx*:~Ÿíïõ·6ÔjÉ’|GTÅ4]ò¯ßbÙ¿€Á²Cƒ·¯}—š˜ªbG$Id„†f/¶{WƒÝ=é^ xÛ/62´†Z² ®&“ŸÒЖºóΖ6Oûi÷´¶8Ï×YhÍ)y¡$«¨àšRTNª ÕfÆVß`JC½1W¸¦-6¥– 8A©u®)®Jµ‰6èÔ£øx[`r%AQ•*ÀTR¡”cHIWÍ•ܽ#Rã®r à¸ C¥ˆ>v/àðÀç’ÃK 7„¿˜”Ü+ŽJsN'<ܘÂÄòç‰pà‘© endstream endobj 72 0 obj 1088 endobj 49 0 obj << /Length 50 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xí™ëSWÆe/°ìâʲ+"rY$A¼_PcÊ”¨EIRMMÒâ­ÍkÇflÓRMPÇÖÄÍÔXC$™‰JǨqÇ­ËͤM+_2=f†ß‡egøòð¼ç¼œó>YY>–<<1¼' FÐ| Ä% 0çÓßDòbêN"Q6PD"‚À…EޗȃÃE$%a˜\)Pr†¦rH‚“C'…†`#HZš¯PªYM!04 ˪”ò<†"q …SUæA(&çÊÕÚ¢bSiPJMFƒ®P)£IB€¦,ä!B,Uh eÕu Ö¦f€\°6Zj+Kô9Câü”…*$Ź’«­Åá¼r$—ÛÛì-UÆB9Mbh²ÆŸÈµ%u6Ç—7\=} éußê¾ÒÚ\cÔÈ("Uc#sU†êÏœ×{îzïdb|ø»oÝ_9.T)™lAr"Xެ°´á‹îþ¡‰Ÿ¦ýs™õO=ì½ÖRobóH N4DHÉu•¯Þšœž_ <IàñÜÔýA÷åæŠsùbaR ŠK”úZ{÷݉酕µ`$Ág_§Æ¿¹öyMQ…# Q‚V×·¹†̯¬¿Ú ÿ ŽðæË?s?~ÝZgPÒĉ@Fmjh¿32õdíUxwÿí0öwÃ/Ÿ=þeØí°˜T ¦dØ«³wÜnîDÁ9x³\z4Öë´–°œÀD#D‰¸À¾‰™•ð~$=F4²·½±<ã=EàÛÃèÑ10¢‘ýðÆÊŒ·ï¿ …3O­ÎÙwð0^≳[âO^àèM’ÎÁŒÀS÷ðññÙßÅ™F¦„龎¦Û$Àÿê>y™6“f¦]ƒÀL×f¨NoÔ^ÿòÆvìÈîÈÿbÙÿá‘_mjìè{¸ô|óÍA$;›Ï¹KSOG£Iýþ¥Ie´8nûVCÛ;{ûàØÛÙ ­.ø†o;,Æw×N„( æ–›÷&ç–ÖB¯·¶ÃÀØ~Z Ìþpïf‹Ù ”¤.îNèªm]c¾ù¥Õõà p×_š÷ tÙªuïF°Pœ¯-orº<^ßìÂb$‹¿Íø¼—³©\+§¦[Ü|PÊšê.u¹=£“¾éG~€Lÿ<9êqwÚÍFVz2~ƒ"Z¡«hjërõ{¾K0ƒ{ý?G†<ý·:[­åç h?9À„P\œÇª­öŽ®.wHÜ®ëvk•^—ƒ§FÀ‚‰$ù¬¡Âlµ]js´w€£ÝÑf·YÍåzVF‰0$9DçÁܘŸÎWëŒeUæzKC#8,õµUeÅçU2I¶=Éë D€“’¼V«ÓM 1ëuZµ\Je ùH*ÈÉâ¢&P$¦¥2¹B©RƒD¥TÈe¹’.¬CN ÌÊ‚ „KÅ”„f€BÓT,K ¸¸3ÕÅÆ¬É<r‰,`¸0öŸil| ÛaI„ÚñXÐA`.Ïþ·Ð=¡3žÈ}ÄudÏ¿¨‹v endstream endobj 50 0 obj 1156 endobj 53 0 obj << /Length 54 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xíšÿOwÇá¾Àq'§ÇCNOÏÖ¢àa†Á¨ø–X+ñl™‰Ý Ò¹-A—¹ .Ñ&ÐV)M§K„þ@ÓY¿ô£?¸Ù&Ìþµ}Q 36Y›~΄wüä^Oîy¿Ñh*ú„ЪCý"­AP ÃU CQÑ–Q*t¸NOH ¾H¡Çq´Q«à”±š1±l±L ]E: A΋øŠf83ß 4ŠPÕÔ(Ô[Ì\‘Ôãç5Ô"€¯š³Í7Úì’ÃÑM‡ÔnkmÌ&šÔcg%ÔbzÀÇ7·9œ]=î¨êww»œ’U´°´G 'Á 4W]r¹½Ã>¿,Éy}îW墣~ß§×i-&#qVBDG1–kR·×wgâ^(ü¢ÂSÁÉ€|kÐeÍ5$^è1JеB›ËëŸý8;]X„§…è\d:8~{Ðimàªô@Œ¨®»ÖÑç›Ï.<|´’x M‰Õ•ØR4rüV$~Aèé ÁH†·v~u74ûÛ£gë©ô xJo¬%c‹‘ïdÏ—×-5–Ôâ+غ‡'~Zxü{úåëíhÚÞṲ́žÇ¢ÓãC.+ÏιÆv÷ío~ø,ý盽˜ÚÛ}•J.E&Gºm‚‰,ŠRÿèý_ÿñòÍÁáÑ[x::Üßɬſ‚~w{#Ká…WÕŠŽ9<¿šz½÷×»ì14e³ï÷67žD§Fû¥&®°cpìÁâÓÛGÙÜ 4årÙ£ý­ôê|X¸pçà-LÀx°N,@Ç*ø=¨ <ÎýMÀ-ýIî¸ØbñýC¢Š_i@eÌäOñÇ6êÿÿòW?\Ùʘùp.ÿĨà•3ªÔ•1sùQÞ½ƒú²ûAU´ørÀ„ nùÿ¾è–ŸâòKStecsïPKÓÊûKÅ5I}þÐ\|=³»{íÜͬÇË×NMÞYèñMÎ,'S¯vT°¸/ÏLúJw Fšê[]7ÓÑøóTfs šó±sj}Ä£Ó!Wký™õ¡Á ßâôÊÁÈb,¹¶×> stream xí™ëSkÇÙ+ë.,¬¬,A@D ä–d\+)R£‹8c©9J̤6–—‘IÏ8TÞÊrJ*ªÑŽÚ&ËSi'=Îù×΂ڜ—=çM|Þ0¼Ù/ßgŸßò}¾+ýÊ@ úq…UÅ0\,&€!ã†ÂðuAà ’’д 4-¡HÇøÀ8£AÑò|VÉ©Ô ¨Uœ’Í—Ó!øþ. #xžDΪ´zc±¹Ä„s±Q¯U±r #pænC0FH®Ðd9fw¯Äq§ý˜ÅTÈ1Ëš†Q‚b8½Åæ®öò§Ïø€pæ4ï­vÛ,zŽ¡4cÆH™RgqÖ4œ;¼jBèrðü¹†§E§”‘XVY,QhK_k¨³7r³7#½¡VŸÇQ¢UHÄe„ 9ƒµÊ¼‰Nü„‰èÈ`øZÐWe5p4¤·„æ1³«¾åjäÎÝØìà <œÝ½¹ÚRï2k˜<4=WFæ–h¼Òw{ræI<ñ‰ø“™ÉÛ}WO”æ“XF™bõÖš¦Žþèôbbeí ¬­$§£ýþ«ž¥” uÍÝCS ‰Õä‡?ð!¹šX˜ên®«0(K ŒŽú ½£ž-'7·þÂÖfrùÙƒÑÞ õc$ëY¢49ù`x|öùêÆ—oáÛ—Õç³ãá ï4)*_¼{±öq{gïìíl\{1½qñ2ŒK¹bWÃ¥Htþåúæö.]á’»Û›ë/磑K ®bNЧ%9åÜjÿ¼Ý–Ûa¹©Ê=Ã~Þ<í_)7U¹©úÿ§ ¤©–MC»`ÒÐîá4$=’³Ê;{@ø¯aBötðÁ¾±™øÛ÷Ÿ¿îáëç÷oã3c}AÞq8{ìÞ–žá{‹oÞm|Ú§woï ÷´x톃¼M±E6O óÖä||y=¹„äúr|~òVgÀc+:8cP ]yÕÙöÈXìQüÕÊï@Xyµô(6i?[U®SdÏU(Éh-îSÁîÁñØÜã§Kq,=}<ìžr[´ ¹Š¡„Le²{šB=#S÷§pjbd 'Ôä±›T2Ý/‡„Π@WVÉÚºÂCã@wµøÊ2]A¶3Á8Ũ֓¼¿µ­£ëz®wu´µúù“V£š¡öÿ0D"¡£YÉê®åýæ 4ü|­ÛjÒ°´Pˆí¯6„ठm,µ¹*«kë¼@¨«­®tÙJ‚0‰#ÙúQ0MÑ •Î`.-·Ú*€`³–—š :•"Õ|f,‹D‚‰I)Ãrj­N_dB‘^§Us,#%ÅØwËÂN•Ì””–3  FNK©tÍœ)\S©‚y$2cGêíô/H½J@P¡×Š"‚Hvsòöä±_ðë¿Zæé endstream endobj 74 0 obj 1095 endobj 69 0 obj << /Length 70 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xí™ïOwÇá~ÈÁáw' È/© E‡“‰PiLépHÕhg»ÉP¦ëª¦(Ú™š:Y­Ú®ÕÛT§£µ&þ`±jMh0û×vˆ ­3ø Ùwx=8.Ü=xßû“ûÜ÷ûy³Xy>•l<)ìÓÏÄHƒ4EP% 0 Aˆd§Ôq0.Žóù…@áóqœÇÅ Pä¤DFÊáò !IÓEb Ñ4%âŒDʚчá).–+TjM)84µZ©IhÁÃP8[eˆÑ'¤e*­Î`ª0¥Òd4èJRŠÀ14c!æàÂ"y©Á\cµ9.:Òà°Ûj?¯Ôkd´/ÈXÈHÐr­©ÆÞø•çjkHZ¼M®Kõ£VFY !—𬗾n»îëù¡$Wg›ÛYkÔ‹ð‚£CœBZ¡·8›;»¹Ñp¨ÿ¦¿Óã´è4ÁÓï1ŒM…ÍÝLÍdzjr<ÜøÆm«ÐHXV Pv¡ÚÙâïÿ%2;}çѹÙÉ;ýþVgu™LÄEÒ"\‘ü³šË×~ O>ZXŠ­äuliáQdäf§«Ö  yhº"x>¿Nß•q0ßfN{s¾rµðßâ|›9_%ϼ+W‰ÁIr¬[PdÚÌš…/ùc‡Kþ$8N,ù³{F ¥4Ù<þPd~e}{?’ý·©MS8Ðâ8Þ4±¥(¯kò N<~¹º¹½»ŽÝí­7‹O&oû›í&Õñ¶“G–è­WnÇ<ýcu}s+ŒÍõÕåèÌÝ[ß¹ëÊǹ"™ÎÒØÑ;41ûôårì8b+‹ÏN ÷]»ü…¾$;ú€1Tkvx»‚á{~Ÿ‚dþñôÄèϾ« ÕгÃ#fü&V­®v04v/r ÷#cCÁîŽ+_šÔ"3~ƒ ø”¼¬Êánïê ††Ó„S0§ÿíoh0Øëëp;ªu%Ÿ“™°¢<¡De°8\Þöë>Hü¾^—ÃbPK„¼Ì˜Ÿ`|Rª6TY®&O³Íž&W£ÃZ¥WKI>†9ȆQ.AIUeF³¥¶ÎVoG½­®Öb./SJI‚‹fó:áðR"Wkuúr£ $Ær½N«’‰E…Ü‚Œ,JEuBJ,••(”*(%2i)`Â:$k ‹AŠñø„@DR ЉÎå0Yb6ªcFéGy,Æåá aÂØÓØÃY*l‡a$jÆÊ€H:Î>i_:ŒHy ‡“jòçŸÂ—¸v7 endstream endobj 70 0 obj 1178 endobj 65 0 obj << /Length 66 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xíšÿOgǹo|¹“+g)_=«Áftlˆ_Æ\lC•z¦‰ÌÄ­(P—&4&4(Yl™QÊÖÙ&‚MìZ[j0òƒí‚Áô_Ûszøm†.Ùâs&¼~¸ç$÷æs<Ï=Ÿ÷•ªÎÿWD!œõE1'”Ža(Š Çeu8¡Öju$hÈùŽÒµ¤N«! =¦A1B££èKŒÑIJl#@Îuט­§´jEkôi)šaÍV»£‰ƒJ“Óa³˜YFOjˆÃ"(Ðw‰µ8®º¾hÜq |[+g7iRƒWKˆàÊÐh»Êw^ûÆßÓ•ÞnŸ×#¸8 K“jLþ¢„Žfm-‚·§ÿÆ`H‡(‡nü¾ÙjÒkñª@5e´¶¾þÁÛc?MÄâw¡E'ÆÃb0àå9³"ä{ŒiéF'ïí¿56yo:9“†Èl*y*2:ð¸ìlƒFˆë WZ:{ÇâÓ³~]Ê>†F6»˜™K%¢£Á.»Lk±ƒ…'›ë«ïoONÿ²ðÛ³üêsh¬V–sóéÄ1ðe‹Å DÊäà}7Æî¥þ(¼x]| bq}-ÿd>5ðºlŒ߯ È:;º‡îL?ú½ðêÝf &›/ó¹¹ÄxÐÇ;Œä‘@ÎÝ;<ù`áÙŸïJïw>Àcg{kcm9“Œ„º;œ&ª*°¡‘ëìc3Kù×›ïÿ*ïB£\þ¸½¹¾²˜ŠÞêšXŠo±$ðÛ‘xúñj±´S®ìA£R)ïl½),ÍÄÄ>÷™ß–>ìV>Ac, ÙÙ3Þ”îAÓ÷©.ð¿Ö~¯²«ô[|¡JË ôY\«‚uŸŸBõeæó5ªý‰ PÁZ“Dº -°¾ÌÔž Ò»µŸÅЍ`­ý`U b÷ƒñtVI[þã= ÅrnÐ4¥¤¦iû£"š¦áMÅ6 =¡‰dæé‹­m¸mgéŸm§JrÚ»nŽß˜Ë¿ÜP^ã®ÂI£½íëðT*ó$¿¶Óúx#Y™SÖ‡ ×1ÖVO@Œ$Ò™ÜòJa…•§¹L:ž#óHüA3'øƒ£ÑDjn~²ýöpß~ó·ß0žu¸®†Â‘©D25 ÙÀü9>e`¢jŠ¹Âµ{A1<‰Æâðð?ŒÈ0Yµ€A ¡7Y›y?0 ‹HVºtv¾#0ѯç÷´7[G&:‚©Išµp.Áãõu÷BŽ!ºª1„ލÆ*”ÐP´ÉlçZÛø˜IŽÛ-g9*Du¤Da›Ã 7 “£0É(L%…‰j-¥§ Œ&Â¥&â‡Qp1¥°˜Pkä8ö …vÜcñq¬$Qqö¾û{ú à¿œ–Zý¯+ð7¹x endstream endobj 66 0 obj 1054 endobj 55 0 obj << /Length 56 0 R /Type /XObject /Subtype /Image /Width 129 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xí™ïOR{ÇåÀÃ9àœNòšÀY˜b˜hx§1-GþX? Mï¹™N™,ÒÍÙµe¦å‚Ù°ºdËeéú×îá(¼ëé÷μžðŒÏ›÷¾lŸ÷ûSQq‚üOüî' H(ÁyÄáˆDBS!à¦ÃÅ0™ ŠL†a("9 %FP\Auº(§)Š$8ŠÀ¢¢n¾X*SR*­ÞHÓ¦j€˜hڨת(¥L*.*ÈÏ—“*=]k=k«Œí¬µ–Ö«Hy^ÁÑ;€`'ÕUf›ýB³»Í”6wó»Í\¥&q> J0BM[í.O§ÿJW(]Wü—ÝJ« L"<|‡,UT­­Þ®¾ÐÀ¡á?1>ÁÞ ´Ô™TräP€Q¨kìžà`äIbym3Hzsm9ñ$2ôØkÔ DÈÿ…ˆRknêèe£sKëéì§¿ò)›^_š‹²½Mf­² @Jè,ŽË7îÅ’«ï·¿|ÛÈ·/ÛïW“±{7.;,:Bz䀔Ð3N_èA|q}+·»÷ {»¹­õÅøƒÏÉè pù‘™ÔÛìÎ÷ý€ìßɾMÍDÂ>WQ€% ŒËŽÌ.½Ë~ÝÛ?øŒƒý½¯Ùw©ÙHØïb *â!/ ¹(Øxî‹yKyÍŒ, (;Pv ì@Ù²eÊœ„ù¥´t'·üv'äp[ñÃøâÆ‡Üî}€üØÍ}ØXŒ?üïV¬³8½7GcÉ×é;`sÁÎÇôëdlô¦×Y’ "ŸŒúØè³åÌöç@>og6–ŸEÙ¾|2" ÉQhøl8_Xy³™ÙHfóÍÊB|ŒÏ†šB6äÓñ9w t÷ÑÓDêåê@V_¦OÝ ÜçŠéâú#ãè왈Í>_Hdáùllbd »ÓÁ)¼ÐÀ©­mhõ÷ö³÷Ç£S§ñx*:~Ÿíïõ·6ÔjÉ’|GTÅ4]ò¯ßbÙ¿€Á²Cƒ·¯}—š˜ªbG$Id„†f/¶{WƒÝ=é^ xÛ/62´†Z² ®&“ŸÒЖºóΖ6Oûi÷´¶8Ï×YhÍ)y¡$«¨àšRTNª ÕfÆVß`JC½1W¸¦-6¥– 8A©u®)®Jµ‰6èÔ£øx[`r%AQ•*ÀTR¡”cHIWÍ•ܽ#Rã®r à¸ C¥ˆ>v/àðÀç’ÃK 7„¿˜”Ü+ŽJsN'<ܘÂÄòç‰pà‘© endstream endobj 56 0 obj 1088 endobj 43 0 obj << /Length 44 0 R /Type /XObject /Subtype /Image /Width 140 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xí™ëOÓP†×µÝÚmÝì(tŒ16˜c3À"—f2‚‘L‘2„ à  B!‚ ¸DnF à%C‘‹†Ená_óµUâdz~èûåì|:Ož6KÏû“ɤüÇ‚ÈAPÅ †‚3Dˆ@PWA’*H!IpœRcç "Çp%©¦´:š¦õŽÒi)5©4 €¢ Ô:ša Æ S&¤˜2Œé,£×iHž€($E§Íֻà -»Íj6²´V¥ÄäÜSBPœ¤ô³Í™ï..ñx½¥0âõ”» œ³ )Z•åž’#4´Áâp•”WU×ê %P[í¯ð:-ézŠÀ91r\uÍrUT×›šC-jn Ö×øŠ–V+8T©aLv·/p³¹=Üó¨R÷„ÛCu•E¹™ E ñ#´¬%Ï[ÛØÚÕ746þR&Ɔû»ÛnÊò³ :‹¿0Imîʆ–î'Ï'#3³sp2y=þ´§5è/²iÇ‚«ô¦Ü+ך:ƧçW?|„“Õ¥ùÈÄ`øNÇ™™¢Æã^puŠùRi Ô;:5¿]߀”õèêÂôØÃ»õeyYL‚…±ä•_oëñv9º¹óóœìl®­Ì¾h¿ásYÓ4¼Mª¥À×ppráÓÆnì÷>œÄv¿~75Ô¬*Ìf©‹ÕUìšzý±·){[k‹oF·üîžÁ5©§,Àe+vp||#LJ±í/K‘gKüÏQPiÙ®ªàƒ‘éŵíØ!”““£ØÎ×åÈhWãUàE+±ð/€ä…7!\%/BüNò›®’¡~'yáMWɋп“¼ð&„«è½ˆèSƱˆáÛû”E> stream xíšëOÓ`Å»n½­[Gwa¬0†ÎA¦c8nÓ©L™  §‹aÑ¢ Š—p“8M¸èÁ   ™§Bü×,°›•O‹É[MÏ—æý𦧧mšçü A‚þV" Ãb±XZ¬Ö ,â\˜KÃq‚ ¤@E8Ž£ÂÚL5 ×’r*ƒ¦i%PÑt†‚’‘8ÆzLZ„Å&•g¨4Z“£ªœl&K«¦)G% ‹"ÁIJ¥Í6óÍ–À:`6åé -#P1{a F*ÔLž¹ÐVì(+¯©ò²RG‘ÕbÒki9ŽÄC„‚R3ÆB{™«²æt­¨jÝU'œŽCæ\-Mb’Ø“(ÆdJÑZrÜ}¶©Å{ÉT/4ŸóT9íf½FA »·Y$Á©LC£²®Ùw¥#ÐÕ T·:¯µyÝGl&FI¢1‡ˆ”fò‹\gZü=ú‡†j°¯·«Ý×X]Z`ÐPØ®C!UzKIõyàÞÐÓ±ç/@*ôläq_O»·Îe3e)pñÎË £2Áêôx¯÷NLϾ©¹™©ÐÓþnÓÉb3Cq‡rí>Û±†¶îÁÑɹ‹K@žŸïw´ž*µä(¥’Ý 1Jk²W6]í ¾œ G¢Ë õ5º´ðzl àóTêUd¡.ÿpUsÇÑ©÷‘åÕuZ[‰.Ά†o_®wZsÕ)÷;jZ:ûƦÃÑÕM Z_þôn"Øão8j5üá°üM8úýÇÖOpÚÚ\ÿ™¼sˆì|T`\Á˜îÖã3¿¬m‚óÇžykc%²0ù䮿Áu0OM Ó¸B†i„ÆÙ"dÈ $¥a¡q¶rIc)d˜Fhœ-B†œ@ÒX ¦gË¿š!FévæþNq‡¼ž¤x?òh¢ÿœ:ÑÇ;”­ˆ;µá³ÄÓvΘhçDÛ §ÉƆóQ²áÌM4œ¿·Ä7·Ä=Zb(Ù´×ó³i‡øO+¶‰ T¶‰%> ‘Oy ñ‘%‰ÿ©Ä7ò˜É%ÄÒ[„ô–¥Ç{Ñ[b=¿ 8ËøþAŒã ‡ÿ4_ð2 endstream endobj 60 0 obj 826 endobj 47 0 obj << /Length 48 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xíšíOZWǹOpáêÅ˽äYìPiiYQ«[çU°MlÝL)uk‚3k ¸´3Am­¶]×V´I[kú•:ÛcÓm÷:šléÁ„ï „÷Ë9çwr~ß<^Eÿã @å¡b¿‚`AQ¬ „¢ÃTh“u‡b|¬ª8¹§„Hˆ 0 B0‚ „)¦$4Ã0RVÙáóŽìCFBÕU"C ²þp‚¤¤2…J­Õ•V£VÖ£kª„‚¼Cfý‰™ZµÞÐØdn¶T³Ùd4ÔëT2 )â£pvBˆ€K•úFË©3­NPµ9ì¶“fƒVN“Bl‘aLH2Êz³ÍÙÙåî÷”×Ó×sîl‹Õ¨«•Táh¶N`>!QèÍöN÷Å¡+þ`è0…‚#W‡½Ýí6£NV#²kŒà¤Tc´uö®ßŒNT,r#<êt»¬%Mð³Q¼F®·8ÝC¡ñØäôì@Ý¿¿ »ì&Ý1R1¡BJa8ýÕÅÀøí™OKÏiiqáñ|<öy\'êåbI—1„´ÚhïþöúÄ̯‹¯Þü¾N«+/ã‘kƒ_Û Jˆîd4&ÇyßøäÃ¥×›IÚ\[^˜»þ®ÛnTQ¢¼A]s›gäÖÌÓWÉíwà´³õvíÅãøO¾óŽ&57(ÕY\¡ØlâÍÛ¥vÁ)õ~kóõ³»·ýN³†&°ý%–êN´_˜¾–|—ÚûN{©?ß®&f£AO›YË7¸»÷œöR;ÉÕÅ1øœ¿ƒÿuòs3èÍìÁôm=¨ ‹d·,–øH,‹*.5ƒƒ%*)W$¥ê²(’ŠÁËXê«Ü—*’²Xâ#m°r̔؄Ÿ´ËbÞ1cá®üsåråüóÊoqyƒQ¶iÚÜ~ºiZÉ6MÚ‚¦‰Ñšý›ÓO^n$··ëÙ¶Ó¤¦‰|_¬iju_ùqòAbypã¾¾œ˜¿î±Õ’\_,’¨¿ìú!:ý(ñrtôñ(=}páÑÖŽ þ±Ÿ§æ[X\§tx4öyÛOæÃ#‚‹euÍŽÞËÁ±è/S÷ßîMeâ·–‚ø‡ªuÃ鎾ËþïÇnDb`̱ѫéS•0Ù˜’×™Îtô\öCàñ_òöŠ€Y AÒ ½é”£ã›Þ>7£t”ξý¼£§¯÷ÜÙÖC!:„ðE$£Ð5˜­6»£ 0†h±YY Q›Æûœ„9$-W×o0š€’ä4? rx USŒL¡TkÀ²°4 “q(ŒM9œÈÁD>NT‹)Šƒ‰`E‰<c|.LóØ öZDz{±¼€6ÌílÊãŽtZùôé3ð7ýÂwÿ endstream endobj 48 0 obj 1079 endobj 45 0 obj << /Length 46 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xí™ÿOgÇ9Žƒã®òEN F9µXª”вuõ ¢`«™EQ›&87[”lm-j»Ùf‚MìÚ*¶É ü`«Mhlú¯íÊÚßúÔ%¼~9~âyåÃóÏçý*ü*€@¦le¡PˆŠDTD",‹üGˆˆ01ŽK &„—`@§D¢˜DJRrZ¡dà¡ «)c¢`‚“ͨ´:¶No€ƒ¾Ž­ÕÔ0Õ2©+º B`"gÔ¬±¡ÑÌq-pà,fS½A§RP„D$ä÷ ‚J€‰ÖØÈYÏÙ]N8t9:mg8“A£¤¤Å²€¢PŒö´¥Ýáº4àöÂaØÓÿ]Ýj6h2\Äï\¡˜¤5FK‡kÀ76˜ N‚ÁÜã >§®NŒzûºmf½ªšÀø_Ea›Îºïþaîözüé‹ýT©ý½§›k¿…¾ïë4너¯ Éè¹®¡ÀÂH¼>‚ÀááAjo{cùg¿û|3«,ªÈNZ¾àb,¾³ÿêMæ-2™7ÿ<û+z3àqpu Y¨ Pi뙉¬m%Ó‡™ãw8>μNíÄcá©á.N_¢Rclë¹<Y¼—>z EåÝqæ0µ-ó*Xîu‹`²œÊlAå=²*éÝÄ'TŠU`ò¾¢R®ÊŸ¯Ê Ú+ÐUNÐ ª¨|¼u?¿m+ï•r/þTè‡ùÓÿAÐU*‡¹Üa>AU)»W¾þ…²x‹ûj×ì»7'=Jï¶$cຆ'oD=y™~u¡÷8:â›_üƒÙæ£xã'™:‹cÐ?çAâÙË} X´dñõ[¡‰þN3[Ò’)Ysgßøõ¥èŸ‰¿w’{H&KÕZZZèƒZk:ûíåÉù_£÷Å·C`ëCû~¦^S]hßs¡Fë÷xð§¥;ÑØê Vï­€Pcj´ÏÎT¯"ÈG=6×ÐxàúüŲQÏÕ+ƒ=VËTIøÔ)€©ÀFÆ §g 0= °+¾þ[³AM“…, Ös6Ç7½î!¯o>Ÿ×3pÉåho6j•UxAAÅ„œ©56µ´w€¬´ N§Ã~ÎÊ5´ EˆQ>¡ä#d ˆÍ®ЖåK>Áw·pæÆ#«VRd±("~"¬×ÁIÕ³«èYVÅÐU åGù] ¢'¡Ì=È*0n`˜S`¥‚–W‘¸˜|4ûKp)ÁÈ –C˜œH© (  ¡(äÑ–›M!%%É…ƒù„òÀ®¼ÅŸÊ'à_ŸÇ24 endstream endobj 46 0 obj 1104 endobj 61 0 obj << /Length 62 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xí™ÿOgÇ9îŽ;8<¸–/zpÔEN-•)R²­:ѪmÂ4kGQ¦Ýµ›È¾´‰–‰Ún™Ð&v¶~k2"?ØÑ&46ý×ößÊÚßúÔ%¼9~:^yó<Ïûý‘Hjúÿ8€@VUg©TŠbU†‚¯Eþ@0\F$IÁ© ä8À©€A¤(.WP´šÑhYxÒ2u´’$dX !(šauÆÎÄC’ÙÄÕtlR!ÇË,ˆ¨Y=g9Ýd„V8춦ø†&嘴¸^THŒ–&Áñ±Ëíñ‘ÇÝå<#Xyƒ–V”m¦Ð¬ñ”½Ãí?ß?84 GCƒýŸù\oÐ( ¬¸r¥2Š1Xìþþ‹£W‘¯a(2qõòÃ}=N›YWGâÅ_¦pÍþÁÑðµ™¹ù… -ÌÏMO…‚¯ÃZ¯UÊ (F¨u§ZÝý£‘™èÍ¥åÄ -/ý2?=ìuÙù“4QBQ0ÆÓÿHxæÇ¥µ?6R÷a(µqom16îioÔ« 4¿…œÔ44wöŽ^‹Þþ-¹ùxg†vo&ï.ÎO?uZŒ¢„B±\KwàÊì͵äÖ~ú Eéý­ÕŸ§¿ìë²5hH¬è ŚυðÜíõ‡û™Ãì3ÊìmÞ[ü.èná´eå ¾Í;‰&’Ûé§Ïs/ (—{~ø÷£?ã?„Ý‚‰¥J®”vßÅÉØêýÝL6wô‚ŽŽrÿl'óCÁ\rÒÒî»4[{°—yö ÊË£\ö`'™ˆF (xþ¸Epeeª„ò ‚D”ÌNê-(eW ¼ª¡TsùÝ®£µåí Ê›K÷Ý˶v®T;ø‘+Ð7óÛÿƒ £Ô6sµÍ|Œ\©ºV>ü…²|‹û`×ì_Á5û\åÝ–byÁ34~#¾þðIæ)”ð‘-†ïCbø(ßø)Ödw„®ßº“zô$ %e2é½­$ˆd—A$ã*"™–³uõ}»ÿ=õ×öîí‚ ºQ ªõŒ¢”ƒHÆhíøäÒøìOñ;ëIÞ‰þ}=Á«_Ç÷3†ºR|Ï—mçc‘Ù…[ñÄÊ*­¬,/‚Rc"Øçx]D‘ „ T=N±êùæú(Œ¢'ËW=Wƒ>‡•cUòbë$`z‹ `c_…ÅþkRÔû|‚wç °Ï}N¯g¨RV¨P ö. À¨ÏûÝg[,F­Š(¡ ¨ŒT³õ–æÖ³Ý +í ¯×ãv9BodiR†JP!‹Å­TÈÍv¡ ’ZP![8½–¦Ê¦H$" Y(ÖMfH½:σbݨcIàhqÕ‚ê >d¥ã0l8G,«Õ0jEÈɳ™œP€!Œ’À´ aò •$À0BQÈ£)> stream xíšûOZgÆ978œ#G.§C®µCÑ£-‡Š ¦›w¥m‚5ë*Xœ[3œ[+b·ÎÄËê¥íl§èÛZ/5‘e:qÁiú¯í=€û¡YãË>?ðžœððœ÷}y¿ß‘(ËûsÉÒ}#AQ '2ÇPAReu8!&IЦé¸RR"&04E!‚b„„¤™\…’e/@…eUJE®Œ&Å8оõèòò´#ÇqОoÐkÕ¬BFIˆ·"(ЗËjŒ…&s_q &å|iɇ†<CIðc Lôé Í•¶Ú:‡³N‡½¦ÊÂsZ–¡ÄXrVWÄ[íMí]®k0qu¶65ÔV–hU2òØBTL+4…¼­±ízOo_ÿD>÷yoõ\km¨*åò4‘|ƘDÆJ¬=}w††ƒ£÷á1:rïë/½7:*M6Gr,ÌU–×¶õôŽMMÏAdvzrldÐ×ÝZÃsj†Ä .UhM• ×½CßM=þ9ô LBÏMÞô\m°\ÔÈI;¿Z‚Gha~nbÔïqja$£æøêfwßWÃßOMÃäÇñÿmwË©ö*Éaõ&‹³ÍÝ;àÿfx$AP\žï8ü­Àãn¯·˜ô' L” jÎlu6»ÜŸöz}0éóÜìvµ8­fN-§Ž[À(NÊTÎl©v^inëèrÁ£«³½åãú‹¹@£Môd—ÁÄšÊ.Ym5ö:<êìµ6ëeÞÄiTŒô$ÉAq Å(Õz®ÈTRÊÃ¥Ìl*âôjej#B@TGÉäìyZ½Á˜£Ñ Ó¨Y¹Lš…‰D ¬“t#W(U,\@–(gr(!LLÎ@¡'„Å<¥R!… âXDÆ)ú‰‚F Ç3 ÓŽçÙgäÅ™ñ—LøSÀ‰šìÕûpào,2x„ endstream endobj 68 0 obj 1143 endobj 75 0 obj << /Length 76 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream x…ROHQþÍ6„ˆA…xˆw •)¬¬ ÚvuY•m[•Ò¢gߺ£³3Ó›Ù5Å“]¢É`¨‰µé²™…}v*Ëìðèñ²bç{aÿ[QÓÀ'a?d‡yÖ­ö®Sà{„=5àήÅñÚŠ^-C÷T#hŒsMÄÓ×9s¤ˆï1Ô˜÷F9¦ 1w–ª7€;aYªf ±]û®ê%î{wÓã;Ñ›9 \ Ir±ÙÐ< X}‹°I<>ÎUàw¨˜À¹‰ÜÍ(÷Õg£RVzWÆOã¹ñÅøelÏ€~¬v×{|ÿéãu×¶><ùzÜ9®½UaVqe ÝÿÇ2„Ù'9¦ÁÓ¡YXkØväšÌL° (Ä>—ú’UÜÕîí¸EÌP>,l%ºKTn)Ôê=ƒJ¬+Øvp’Ä,Z¸Skº9xwØ"zmùMW²ë†þúözûÚòmʨ)(ͳDf”±[£äÝxÛýf‘Ÿ8:¾ç½ŠZÉþIE?…9Z*òUôVPÖÄog~¶~\?¥çõAý< =­ŸÑ¯è£¾ tIÏÂsQ£Ið°i!â Šƒ3ÔNTcâ)ñò´[d‘ý@ýf endstream endobj 76 0 obj 704 endobj 7 0 obj [ /ICCBased 75 0 R ] endobj 77 0 obj << /Length 78 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream x…”MHaÇÿ³±Ñ—ÅÐÁ$T& RÓõ+S¶eÕL b}wg§™Ý-E"„è˜uŒ.VD‡ˆNá¡C§:D™u‰ £E^"¶ÿ;“»cT¾03¿yžÿû|½ÃURŽcE4`ÊλÉÞ˜vztLÛüU¨F\)Ãs:‰Ÿ©•Ïõkõ-iYj”±Öû6|«v™P4*wd>,y<àã’/ä<5g$©4Ù!7¸CÉNò-òÖlˆÇCœžTµS“3—q";È-E#+c> ëvÚ´Éï¥=íSÔ°ßÈ79 Ú¸òý@Û`Ó‹ŠmÌÜv×Ulõ5ÀÎ`ñPÅö=éÏGÙõÊËjöÃ)ÑkúP*}¯6ß~^/•~Ü.•~ÞaÖñÔ2 nÑײ0å%Ôìfüäý‹ƒž|U °À9Žlú¯7?ûÛ‰j`¨‘Ël7¸òâ"çtæœi×ÌNäµf]?¢uðh…ÖgM Zʲ4ßåi®ð„[é&LYÎÙ_Ûx {xOö¹$¼î̥߬S]œ%šØÖ§´èê&7ïgÌž>r=¯÷·g8`候ï 8rʶâ<©‰ÔØãñ“dÆWT'“ó<çeLß~.u"A®¥=9™ë—š]ÜÛ>31Ä3’¬X3ñßüÆ-$eÞ}ÔÜu,ÿ›gm‘g…6ï64$Ñ‹áÀEzL*LZ¥_ÐjÂÃä_•å]½XážÏy¸[Æ?…Xs åšþNÿ¢/ë ú]ýó|m¡¾â™sϚƫk_Wf–ÕȸA2¾¬)ˆo°Úz-diâôä•õáê2ö|mÙ£Éâj|5Ô¥ejÄ8ãÉ®e÷E²Å7áç[Ëö¯éQû|öIM%ײºxf)ú|6\ kÿ³«`Ò²«ðä.> endobj 79 0 obj << /Type /Catalog /Pages 3 0 R /Version /1.4 >> endobj 80 0 obj << /Length 81 0 R /Length1 11844 /Filter /FlateDecode >> stream x½zy|TE¶pUݵ—tº;½ïNw§³t6 I’– ; LÂ4@ Ë/ ‰ˆ²n¸@5MÈ@âc˜qFtT—ÑgžyÌóCÇÒýº¢øùæóùMß®ýÞºg«sN[#„”¨ 1(4saC3ún‡ž7 ­™ÙÚâzä/%O#„Ç!Ä,˜Ó ý)–A9 î„fÒ‘r wÂŒð¥üÖL†äH³%@· R¢4¬†\ƒ´( é™ú,ÈÊ@jî8JåÚ€ YȉPìHiû‚;ƒÔÑ…±ÿaŠàþ#4‘hi1:A;QÀÒ õT4mGçð|tOG=è=ì@Aà‹"h zÇbo¡9踿D[Ѐ0-XÆ  Ø[íÔÑšØs( AkÑqT³n@½±½±ƒ0:MFûÐ~xþ·ØC°I±Wb—€ãaÎ50òVlL¬ pÌ@ehô®A¯a/s1Ö¸tO¢gÐ.ô+ô~÷Äšb­±ó±Ï€Â&dCáZ‰{ðgL»6öd쯱(P"¥Á[ëÑfô<Ìß× `W¾ ·àÍx ‘Hû gŒöh\UèôPà:…¾Ù¼BLŒšiaNÇòcÿ83°¤˜ÌF­pµÃµp:†yœ‡ãqx%~oÁ id2©!KÉ2ò3–™Î,gþÀ.a»¹õÜv^ý&v,v&ö.ðÑŽî@‹Ñ*Àî$:®¢k˜¹lØ‹‹pžWÞIŽà]ø‡Oàódþ#þ_Á× G”DOÒI ÙLö““ä÷ÌŒ6F×E+Š}ûVˆÜÀ™24݉Ûf4ý`ñ2\]ÀµSè4:']ŸcêEßÖb ÎÅÕpÅ·ã9x~…ë5 –o 0‚Ȉ†‰L$d!i#ï’6ÆÊ¤1£˜iL\g™÷˜ëÌu–c“X=;‚‰Ö³ Ùpíf;ÙnöM®+áÆrS¸6n·ž™É½Å½Ç¯â7ðÝüþoBª0F¸GXÜ92û+åï,NèsÑÝh&.Çh+pcn@ ]³ðC@¯f”«cV1#H6HÃkè ­;ÐJ´Ž™ŽvÅÞgö¡ ) `Ê6´‡-Cvnpç” RÔ…iT¿Ï›âIv»œ»Íj1›Œ½.I«Q'(r™(ðËŒ2*<•õ®°¯>ÌúAKÓªSŸB9zÂ0}“g$ÀvÍ”^â`‡ÐlöÔ1sÐ ~µМð Ææ¼#Âmo‚ÑT®~~y·Ìl¡8Ô—ÕÂýõê¡À)¸_íqu|ƒ€…žÞ¯níièïá½êo¤Œ•0n¸Yo•X7™BG¥à”ô£0 ‡¦¤gçäiÜ?¤2vCäÆŸ¸ã׆GØêëÁý"hZì"·ˆ» Þ¨Y¹mx+Ç8±“}·së’¸‰"³Ö®Ñèù¡vF9T/s‡ÃÌä"uŽÆâ’å˜ÍN×.÷ü9¦ôô±W«{Ǫ¿­î½Ú«-ÌB¥¥½¥´¢îÍɾ<4ÙŒÞ$ŸÊkõ) ²\” Sçb­&Q-Ø Å!&cÂ2r“2%j!-|.f1déðÃêbuqzz<§÷×á:=AìIFµ6/wpÁà<^àÝ.¿O£\àö°vå©v.^æd£ºÅ‹ðâºEIn´5ƒ ò±ëu½Æ³ Ûñnü<¶g£u§£Ó¸×¸ã×}ìÅkÙ™™ç—^°2 >tã)IN»`=|t‘C”¢!”?O9O»\¹BËVéjtMº:VµZŽU‰Œˆ\$¼VÉÊtºÖbH”y‘Yoˆ`ÅA÷–uqI•xTݧt@RCjU(p]Nv]’;v^¼`F~îÜ‚ü.²åÔßÞû$š{†i[V¶$ڂׯÝÃÿøìK±¾Íì‘¡Î(³ø1º¦z@f–¬2äG‡´BÂH\ÅÕân7K·Œ Ç`CoFVl •yÜ._½v‘ö^£u8u6=ãvt¬O›âu ™Ì*8Äg³Š.¯Þé509‰ó¬–€èóúåæÔÀ{î-ñu×/rÕW{ß ¤®¸´/ŽN¡ÆXˆ5ÚÂBø×A™ž“ë0`3H‹qçÒ=&/8°Œ£ÖSöIƒfÄú盵œ! ß\Ø8e*'0 mðª\É*…Y…+¢Eg[ó¦§ Q9Ù•3£oMgžgqÛéIJ;©xÊ7åXû:€&õ±wÙoAÏdÁž7šHô{|¾U¾{„¯Ñ·Bµ4Ev—hR½¤VÕ¤Ú—ÌÈUC“S’å k3­Õee¥Û†êvhº,›ÈU¢&%Ù™š­1y#Eoª%×éÕŒDÞ,sNî³îùý -ô½2Òj€~ ”(çƒ}yu‹$íTÔ8‘H|Ä—é当ÒQfP*¸41Û“œéȪ7¥c³ g²éHæW¤c¯¡. shm0h€ Q¥VKZKª‚梿ûï¿ÕQ:SeEY ‘:PJ^.«÷Pª'ózÑ ñB¯c= ÊcìͼÖ<½{ô˜çÎüzüz¬½þg<üXbÎÃ;¦ÿý–ñë£OýWô¿wîdH5¾¸rì&WɳËòr½™ùÓ¿ýã7­¥Ko\ëÊÎJ.š{êêÛëþoVAõ›Öh!°ƒBÌ;@XQZ]'Œ—c¯ófqý I'T_…åqul\”R‘YÒÓeíÎgÏE5¿‰j¸ã]×¾æT°XéÜ^„„E0·O mex™°\¶LюײÜ<š”3UlµX&_'¶ËÏ’3Ìá¬BY£˜+4)Ö‘µÌZaâ ²•Ù"ìPì%»™…}ŠDQä¢Â,äS^!²rR’Z‘Êyy^@^¥R!c1£ Ç+9DD¹‚D #püÚȰWåDvµMðZ¥9a e]gªî+,´@ê/ÌŠ&IÛ©ºÃíÕÁÞö`/¨½Äaä¼#”¨¥æŠcX^‰2¹HûäZ–e )í+Õâéö ‰KWªO·‹n6F_~ƒŽ‚'Át ŽiB™LŒÏ!13ˆêRRs+úLâ)S;­¬OÕ×Õ-Ýš$ÃyðÇhÕ>¬ÇcÞÇc°þbtÕ[Ñ—£ûߊ¶JÌî§éÚpöäõàƒ&Ä>’"d‰û,F‡†¤ec¹ìŠÍŸW¥ž'›¯ E­RÆXs…™]­´¥“` èp)ÊMójÕ'ÚüÉF[w„?-|ùƒ 'aÕâ±wÖnu7å.lÌ™ˆ{JôÊÕ+)rË;¹¿?¼õ^£WéФeøêÒ ²Á¿¿oËñ£Û:Þœ–1r÷F½W%زæâb†)súÄ1i_ßYUµ½o›-™aTòežPÕü_>´å…$|‰ÚŒÖØ'¬—; ‘xjw {llL²˜è BF;'hä»B¡ó‹—%¨âÒ€ëÕî>^'•ZìK’ÂCàwÁ_S¨‰SϤ5ðr¯óa­2½`ôá$™ÃÄÏŠj$pM()´‘( ÷¤Ä‰$)£¼Ö®¢êÏþãÛ‹+&åî&s6n|äG|#Nr'ûþ«z|´7z5 yª×­üòµ½ŸzkÛŒ’͆¨0sžK¿$ =¡¬=f¼ÝÔ)î31£DÍNÃèx»EH°ƒG#X­Fµ_‹?ÑXìr¿Ñl³G°pнxe¿ÄHUoaáOy–ƒYô*õrR%©KêSš¡>¥[ò)†ø”ÉL¼ú”îŸð)©j®C†¸G ¢—Š<*$_òòÞçÆ.õâU/Ê~hSójs—ãoÇÞ¾†µïØØ±á 3Ww.|v×Gë–¾{ç}!í¡ ‚ÐØE¦øª@v´4”;X5B5Uµ‡Ýkå¼¢Ž$ÚÕH´Û…$9±\0)¨h´§Âo1;œíîÅe?DücÞZL6™alRn6È™øÜ*úA‰»€•–Š·$ô¼§^h>E åÒæ}»i×Ê]»W<´wLÌöòs¥/Ýs0zíÊ'øÎ//œûí¯Ïÿ† äMì×J¶Ì¬Á™×þЧ‚©Š]d-e·Á/V†–oŸ°ìq2œŠ$r:½J›¨×…”!°àÑŠCÌü:sÆú¾øì=çûž/_zg4g´dºÈ¹Swì)…¼ Üv› ·^a›mí0¬ÖkHôÚ8³\)hTþD»Ÿ³øS‚‚ßlöùßqïŽ ?Ⱦ$úïôQ?'îîdÕ {êÝõB¯¤L*‘Ô,|ÂÀË;a§ U'©uj–Wz“­)>äBvvØeFÁ‡z•'¨<7tq‰&«5d’‰—t¤oÒÒÓîÇ‹êТ:*BpéÝXRtK¢Â kxi“‚ò$×*™0éyoHV}ã ÷ضG&eë·çLX~Û„³Ñ¿bÓŸ°S‘:êåû:9ìaGÜ5yü‚QÏ=º®`DÑÆà8›´= .‹úî­|à`þˆÚ[ ‹1_Oœ(¾°UèFŠ#e5b­ì!å^k§}¯wú«,¡!9 :%OÕÍò»Y®µËƒB0ÈÙ˜ !˜à,ÙJ•?¡Äç·™³² ˆW{ )¥û.}ôìß㶑ȧo†'ÕâPhR¼jŸÇáó¡T d…ÊUʯ=Ù‡ýÖ¬G¥œ¸ÂŽ«ì¸{D%4?O£ƒ\²ÏŸ×ï,IZ9EËIÊ[Z Ê1¹oF^þîâæè¹—¿RNð[ýfÈÇl_ùJô:ŽâòþãµJïæûNÞž}‹-+ñ o¿‘ûFëÅ/Vù‹7Mùx¸¿ÃF$£»Ntß¹ã—Ç»f®!™’þZNL‘d1T² —YpjxFNÝ# @`@ñÈö¹ã«´¸úT_ñ©ÿ¨´ö½ Y=š<½gÍaø±i×ßãŽÓ¯É­ƒl˜4w ¤æÉ9˜æDŒ™å~0%lSú®ødëzzèþ&|L/ðÛ vF(ç0†',¯ãýºV¾EàtJ¢3©Ár Þ¤[‹)2‹ M32[Á|ó¿¾ ŹZ <wÓ5CÕbRžþ¦±„]õSA¦U¶qxÍþ1ûš.Ë8lÏ^ Œ’iíÁ{جí3&<3õ¹¾ñäùÆâY †²üEóúÞ`AN‹b°n° JéKóc¡¼íâVõ†ÙNq·z¯!"ž/°—UÑ)‡Š¼Ý$(íZ…Y0›õÄŸh±Êüz³ÅÁ2°ý«?îèÈ£´Ì3‘õ)’d°R5ć#Ô¸¨ÉuJÂjÈDFu¤,ÔeŠVÚQOܧ…Ð?#n>}0{ÌÑ·n}>b߈þýãè ¬ý3ß‚woñøîý—˜‹Ñ¯ÀöE_Áé7ÀéQÐÌzuJF-¡Œ½â#I]6Š·ë…D^e·)’UÄo²¤ÈÁ²»ɉfOÊOZvÉ´k@ÉI8Ú VÄY|¬Y1Î6«|ˆ1J8IQûN­yœgts‘‡óôàQ{¯¦z \‡¼¾Ç[yôX…òh°« tÇ/E·ìX>!»¨gùÞn›~àØ¬÷MÝÍØ02µ8úÀñ¹­wæ;Fö}Lý—âèdÅ€£ ­å 1U™jLx×iãSE­‘QØ]BÏØ- ƒJCgèu–d•ßnv'ÿ@¿Hv^2tý¨öcju*Á>bü”NÈUìPô[º¸òÐ~¿µ¢[©~]âÑHÖŽ‰¾óWt¿:Ÿ>2rïüè¹Áý¿Ì|féþè×}çðª{ Û®{æ·ï’á)•[®Án°j2VÂjŒGÝ\·dà©A·‡|~Æ—0˜Á²*QMT2LéérÓÈEK¦¶™µI\ËlÕ€—6V ‘”ÒêÒS}§¨¥¢Ž.]dýK ¶àA0Í<,­uûõ/ÜÅ™ìj«ú¡M=lÖ‘‚„y!]‹û¶Sš—Å.0‡ØÑ ë³p0ôèÙvn«ö Ývýö4>5Åë/pWºG¤ŒðOI™êŸ“2×·\¹=l½Ý*§É|‚ÃîÛ¸4¨ÙµÐgՙܨ•˜ìFîdU‚è—»±Ï+“ÃnÜødÍMwàñ@Ì¿äÑu·µ|xä뻆“}œ¯ä‰9ó*RÇ.=Y6ïƒO®œða‘q2„¹a0›-7Üsû½â¾ºÂS4f¥ŽÛˆ,ˆcÁ®¼WÝwI2`w4t½ßÜÛøòÁïËë<´¿OŸ“àÐ9‡ûWMÛ¸‘›}ws_Å$&dâýsÉéÍ’}i‹}Î|z‹žšÑÕY’¨3'™u©üRæ‚ ˆˆSÉŸ ç@G›“ \í < TX,8@}û¦‘BÃt“ìû í}ˆHŃNÓÁ’¿äx½xˆ%{õ«åÞž}Ä3hîæË3q›ÕW8aP}ç´§ˆêú[OK›ôÄ„uä} µ«Ô`þÊf!°Ï¡`> ›ñ¹¨‰41sùvö!nê$"œÄ!ì(n-»Ž;ÞåÄ‘©KRØÁƒI™K×)lô#±æp]l¯>Ì0 µé„°éêƒçjáMO·úaxÁ¹ ¹H™ÕEŽbê5¬9ˆ»x³y,-|úiß@D¡"¨ZiÅk …ê D‹/U ñ"Â!/ h†E-σzËäïâÐ÷óJñŠÍÌ êtøC„\Q»JÁüvàôÓÑ'¢÷²Y7¶3M×ß ÅiõÔ(Ÿ~a€óXô“‰§Ÿ²ȩ̀¶ð(œÖºYûkÙ9IyVl„Ð>8þòí?>ŒnÃË¿ˆ~^ÂËÙ¬h;^Îõ]ïûoŠÞM Du–>:RòQé³ß„îîÐ?dÚcbÞÈÑVik´s…¥ÌRa½n;ÚÆm×o3l3v¢Nƒº Ö0žÓ³åÜëiçv£ÝÔ¶¹”TΤ7À/Ó+‰vQEƒ˜AieÔ›º”À_x'ÎY`Iõ%S<ÖÓO»¸8B (לe‚È)0¨ƒ„´z8gX¨5MÆ”é¦vàÕJˆÄ@!B‰iðplëpÏHÊ"Ÿ:þƒKð`Í0ŒûŒoucÙ“mOúެ4un–š+QE[Þ€€+›57º1úÕ+Ñ9=¼øBï6‰§°cEPYŽÿšï À±AüÝ콊#ô1ú³qZTg÷¦AÚÅïJOA]Pﲞý¹…G—]‚&@je*‚r¤*HÃð´Ò:¨¯DÇZ!“}ЇP)Çk jƒº¢? çÀN¡pVêXŠƒ˜F6ÑüFî?N°'…¿‰Zñnñ Yì ¹Vþµ¢Lñ¤2W¹ À“”68KÆ » JI®:ˆ,~)W‚TÒQ 'ûâÔâa UNš4yê´ôªÙ Zg·Ì›ÙwÐyà› gë~êgƒNˆ‡@l:å£8g9•£ T)Úçòn‡Sƒà$à$8Ÿ7ME5¨N×MG°hè·¹‘J!åCJO¿Í„Úðnô¤g!1h~-‡´ÒØÚ^hÁw³bè(^Ž,xTHÁ:'éÌN“\á|\ôž§˜>? ÐgØÜ€d·Éñ³ø4 9ñ‹°û^' SñŽƒÎzÚ‹š!µAb¤ã½ÝŽ\çk8¸Šár°øóÏ9™ÎË9‚»'ýŠ_9 Jtž°?íüOû\çköLJöàŽCνöÎÍWv;7A„žÙ/îµÃ£‡œ [³r¤ñ1[#d·³Ƨ„΂!ng¾ý’3Ë1´3ícœi9¿s¦Àƒp› &õ†4N›}³s( 9ìþ¡Žá}x'JÃ;»½£œG¡ è²5‚q°*5ÇÁ+BU©[U~o`ŒÓ¨ôû¡>嬰F¸C¸MÈÒáp8‚UИ©E•¨å"D’#ø¥îR' ïG¥@–ýE^ÿ t²ÇðËRçˇEV$"u‘اða#]ïï1Ã*‡x©ÆGðËð=•v½r‚ØcÄJj<õ‚x€,4 NQ=áу†ÖRS©¶DSXYþ¿eõÒÈÍœz/ÿËÏ„íá­pŽ'¼Ï^ G¦ ³×Þ¼ Úÿç×r/Ü0»L2|[›çÏ‘Ž€y*f×ÃI°ðíp$¯­Ñå:0¿™гGõ3›hÙ0;Üì™]žï)wh•žûÑð:Üê)?€æTLª90'4»¼»5ÔZAÂl,[\wË»Ö ¼kqÙO¼«ŒN¶˜¾«QzîG画Ãô]uô]uô]¡Fé]”ó&–-ié„cbpL+ubxäøi5p²¶<‚wÓ³c÷¢ÿ TÀp endstream endobj 81 0 obj 8153 endobj 82 0 obj << /Type /FontDescriptor /Ascent 770 /CapHeight 727 /Descent -230 /Flags 32 /FontBBox [-951 -481 1445 1122] /FontName /FTTUWZ+Helvetica /ItalicAngle 0 /StemV 98 /MaxWidth 1500 /StemH 85 /XHeight 531 /FontFile2 80 0 R >> endobj 83 0 obj [ 722 0 0 0 0 722 0 0 0 0 833 0 0 667 0 722 667 611 0 0 944 0 0 0 0 0 0 0 0 0 556 556 500 556 556 0 556 0 222 0 0 222 0 556 556 556 556 333 500 278 556 500 0 500 500 ] endobj 41 0 obj << /Type /Font /Subtype /TrueType /BaseFont /FTTUWZ+Helvetica /FontDescriptor 82 0 R /Widths 83 0 R /FirstChar 67 /LastChar 121 /Encoding /MacRomanEncoding >> endobj 84 0 obj << /Length 85 0 R /Length1 7924 /Filter /FlateDecode >> stream x½Y tTÕ¹þÿ}^óJ2“d2f&3É÷HÈ!Ì$Â+‰IÍB—h°AÄR@úh‹Pä­\«Pí$±tЫ‹kñ¶bé¥>ª"J­ Xx-J¯afî΄T\]^Öº.ÏYûüûýûûÿ½ÏÙû€6rWo°Ɖ”ó{ ǻ֮q~{VŽ €{¸;—÷}»÷d÷{'€.åÛ«Ö/Ï}ðí IS(} §;¸ì£c€í5j_ÖCÚ;¥4»‘ÒžžÞ5ëjÞ¡4ÕyÕM]Aó‹É[)½†Ò™½Áu}š5ºË”&}à¼1ØÛ}ì\äO”SÚÛwÓwÖàk¡ôŸ)]Ýwsw_¤yûr€táû/ÊCº•Ë"¨¢û< `†ið~lCìw±ÿj€c(a fÄŽ@ôÓ½ö¡- ‚æÁ-°‰úxNņb¥þËàš°ˆ¯ˆ½ ÊñÁv8¿Fº1¯£|+al‡ƒ±†ØZjwjA#l mo£³1÷â[ÜHlSì.Û*[]t÷Â÷aìƒÇÔZKù ‚™ú÷C=•ÝEþ{>!gÈÁj\Ç^áþÊ}ÌWð{cÇÇ"Ò× û‘#V<¸—a>†Oàoð3V΂œ{…ïã$l‹`<OÃoá%x>€ø"Ȧ™xnÀ¥va“YÛÈv²SìW½ÅKüáá©{%ö9až¹Pµ0Z ›îåp#|¾[Q‚Ý0¿!´gà êЈEX‚µ¸¯ÇÁõp/À'ñ4žÅwñ}B—ÂÌÍŠØZÒ·™mg±!v„p&n ·‘;ʽÅ}Æ›ùþ(Ýg„a8A¬—æG=+ˆÝÛKvI£Û9P3‘'{a+Yr;q¶À!x†`(6Š>8$\oøD›@· Kq6á|B¸ {ñ{¸‡ÄÄò)| ^ÅWq”î(ؘ–°ëY­§{/ìa/©ü87‰+àê¹±ÿæã¹Oø,¾_Íoàø=ü~a‚0CX"´ }Â.á°ð‚ð'á‚pQÌûÅââK’Fš"í‘¢˜IXœ˜OÐ<ß ÷q}”öÀlÜJV] ¿'ïç`þŽÂÏ1¢œbÍìØƒŽm#k> ¿ânƒJ¸—ýˆÍUqpZ,]¢¾ŠÉ^Wnss&y³³<îL—Ó11cBºÝfµ¤™SS’MƤă^§ÕH¢Às !?à®ét†²;C|¶»®®@I»ƒ”üBFgÈIY5W× 9•vA*ºª¦L5—©¦¯)×D£³* ò·3tÂïv†±m~ Åàw·:C#j¼AߣÆ(îrQgÀÚãw†°ÓÕ¬ítú òñˆL+® ŽÈ W:ÁìàÆ+ ¥F dwû!››âTÆe‚ËBMó[þt—«µ ?„³»ÜKCà®%å5WÚ9©js é.È_"ü°Ã°Ì½lGX†¥J,ØÞâ‚­!Ö©è0å…,nÈrë9ë?’Wb_( ±¬š`÷@MHîÜA¤+ÉN%ÜI©úNê–ÝÑÚÂ;œBÅE·; ät®t†´îjwÏÀÊNâšZ†ì²=àîô·† ¹eÈ&ÛÔDAþëí."åHÁ¬‚YЬpYoË÷¶Äó_<ªHëíÇþL²¾yœT4¹ç̳‹”„ušòèž]Óˆ>ºZ‘F¹‚ðÌ1r%.+$dÍ †6-ƒìñ[éÒÚìCgu+Õï0N'R}£Û9ð)eÝ#^˳ŒŸ‚R¨ØÜ…B¼_«p{¬îÅ|kUSSÚm |!ƒÒTÉ_†Üüú0h›Zïj cìŽ0ø3ŽÐ †»á[Tœ§8Ü ?©£D~>eäº(Fjh5Šg8œs– 8kœ=äR|–*© { µˆ[ÐB´ÀÂWHnMv·¶N§~ •~¨ Uh¥VŽõ@RÍ*ŠP¥¢üz2BvSËü–Ð&zHö·éäÄG›ZBGÉ[[©Vñ8RB¼q…u s a.Î¥òÒx/ ¨ê¢u`@ésA‹Û::0> Ìºx:Œðå y,# Jx Œ›š¨- ·+]Ép»Ü.‚Õªp:™øŠ…aÊW3ƒã˜]+J6ö kU¥5/¯ñbeC¤²ÑøYeƒ1R U•‘J%”O6¹L^ {ù‡Â—OÏ~>3Ì7>Na´sÝGÛ˃¤G€9 ›%h8»Ä²À&Jaœ0ìj>¤öÝi4¾ U ‘ª’âõæÚ‡SØ©ÑO„gGk£—¨/F{ üÂsôBÖÁ¹HÖ0ÆD ¥ÜdDÆ$ŽC¦5:ŠæìIãÕÚô†£®æõcZ”4DL>Ÿ¯ˆ†PUY™ìóñý…yÆþÇJŠ¡#Å…ŠrzànœÍêÑý}äáèÛl)å…Ïgò–Ñ÷ áyˆðèilH!'ìÆÝ"3äò|"—›Ä5šò»™KÈJ´¥šÃ˜AC]üE#PU5’ì+))ÆÈv“ÖÒ²©À+ŠòfîÔúÞ(í!{×cIôïŸFýÛüjøÎ¥Ñƕ߉F^‹|$<{–N/ÈŠ±·øiü H{Èép·|]›Z¶·#ÿÚDÌþÛ»¹ï¹ÚŦØóh/Àgfæ*|º>3=-ºCÊÕéóKõÓS ¡púÔÜ™ÙöJ{Cz¦aª­¢òßÑ.¨ÃÇ!>†‘‹# “gM¾çΕ#Uä '|¦d‹EE*!O\&bŠ’hNM›\ZVî-+/›:%Û)‰’‹â®RÚ‘˜R-Ñbv¢—jº3³§N)/+Oao¥—ËmÞêùÓÛïç».sFG[wîD]tD[»S†wì`Ü„ Ñã :®¢¡}ÍÿãþEÿÖÇ’Mf­Áhñ6Ï™µêî º${ùìÉ¥YUw·ßS[û\Ô0eî´I ¹®éYrÁÔGï¾­ÄŒ/+þÊ`Cì~Ÿp’éä¥ZÎÒ:õ‰É°y’%½Îéôæ­Ìž™áÐ9¼z›+s«©q̨Ï*„U‰Š‘* ßG•lNeîLo¶×¬˜•Æ:9™†îUÇ®°Á=ú·_ío.ñEßÇ e³nɺu¢ï'÷OŸxÛ÷ø¶èñO£Ñ¡2gÓváhäâ¼I¥—× Ý»fÞ=?¨¿e§r Dv/Šæ§“ÝE²N&’çÔhúSwãOt¼ˆZA4 öz¡Æ8Çy'Þ‘ÔïÐqiœ%%-ÅR§™—6Ï2ÇÞžÖni³ŸÆ7ø÷3Þs^rçbq›°Åȳ0î’'_—xCâM‰\bbºèÉtI–äüt}Ç2¹2ˆ̉†Mf°{˜#q×D›Û³ÇUw… …ŒŽ“ïìHA¤œ¨ªT¼½#B¤¬îÀÕ@¶/DwYš…nÉEÉ¥dp—j|0¡ñdo">%m¸~Û©Z9EÏ"ib°bAKùD ºõm;/ŸŒ>‹Žs©ÜšÛV®þîËo nªÿÁêœÒôâà²ýhÀBLǸ]·ÓbtPxA]ï*äÌy0Û¡ŽBi ˆ’Nk±ØAô¢D Þ«) U]ðÝ~Z˜ªªh¢B’Õp0z]ñÀÓ±Rô–Q:®CÚ}ß+šr´˜Òbâ2]™dÊjjV&ž—x5zÚ’»öÞ² ѳ˜R^ÒÒ¿‚o<Éd».Ü0«;2ÄËûfUsêܪŽâ÷ñÝdK ò5È“,j Û ÛŒœ%Áš´<<ÖTIïIÔ[­Vf±Û5e&›ÍƵÃãSA]'GLÊûf„æ¼n^í‰/€êŠè—¦NQžfdÜyçÆýýYaôÃè{tˆ©h£;5òÒóC 80´%=7á.z7«Kš6ñíˆÑÓë«Ú¹ÄW?Ó;i6ÑG˜Ì±¿²uBÙwîac~’ÃozWírší"ŠV‚“$^äµ^ø!a³†1qØÕ©@z¹òl¤òb¥‚é£õcc¤*rñ,}LU¾7&›Ý¦ø»Ä,‰Þì©&ó´f.IÈHì?>·˜ë}‹£'_ˆíB|EJ–³ý„‰N§EGÀGþ<ƒP  ÀQÐ=I¾)кõ$}]‰ÆbÅ%èJ'/wé•G ëG×Ã1'z,úơǢ¯Eÿ€¥ùêË8Óè3œýò»ÿDáƒ9ZË7‘¿§@*¼.÷yu‹uËu»tt/éh²¢(NL ’3a†T’P/uHÊL¸EZŸ`I*Kè×nÓïчõbjªA“Àœƒ7Y¯×‰sh4Þd­V‰&è̽V#JZp°ü‡1)UJ#’ô†0†©@GR6¤üPcë6§=g{mãņ³ÖËôU¤›ê Vr„†³‘³´ ¨_IDÒ‡’@«@óº[Ÿ›Ü_hÍ‹ÓëÞW¤Ì¼Õ´ 80­¬|&zã,1åMîÅAOî<»-öáŒÞÆ¢èÀªÛŸÎ.,ÄÍdL—lZeào¾|šóŒžŒß…œ˜ªø†ê¹!©òS0)?ŽÝÖõÀ¸LŒÖŠ.ZÕ‘¾ •úÊER̉æÐ/¼túòúÛÇKâåFá·°—ùhõyöQ|·°â¿”Þ@²ˆÊ¶“ÜLé~ Õ\lfÁ,ú ‘òÍÔѺÛàgô—a'žeëØ/¸jî‡Üy¾”¿RhŽã#¬¤7Î*úBd7Ò¹=Hçu)ôw#>ºä1l¢Òç¼ùMÍ5KòêºW­í^³¢+XP}ÓªeŠß¨WL9yÿg—ògо &Ó߃ÔÑŸŒF:«o¦Óÿ%„‘t†¡9/ ufR˜B!7oP#?‰÷@jÇEY‹ôŽ×l=C¯ËxW}†°P6$€¶kK¥£kË–ºœYZ¬‡rÁð¨Ò?ä9äãÌ!›ÄŒ¸`Cå”Y[îqDÊ—:.—‡5(§;þîù‘ã…Ï?§?.9ØYø“áºÂŒ÷ 9¶Ø;\7©<+Ì—“ÃÞ:ïV e²(, ãB9_Ú--“I“¥<)GÊ–\ÒD)]JÕ$kŒšDA£Óhh—Dß Ф†c–ó”Y“*’'!ˆ¼òäÕ¸‘|U$we¨a0Â"Ü‘¶¶ÊZ•<Óä«ñÿ“G§šÙéÏûÇE úøeÅŒÐ}t(:˜Ñ*U"±ŒÖñÒÿ_¤»šÚ×7¯n^ÿÁbõ\Ùèî¤ãåÐŽµtü¿i©Ó9øÁz¥@9áì\ÚÕ£È`wh½»ÛúÀíw6«í¾T¼X)nvûaq`aËàb¹Û?Ô,7+çÆ­ÃM:Z0IÉ]ÛÇuÕþ‰®€ÒY¢«Im÷%]Jq“¢«QÑÕ¨èj’›T]yy ªá†G÷ endstream endobj 85 0 obj 5066 endobj 86 0 obj << /Type /FontDescriptor /Ascent 770 /CapHeight 731 /Descent -230 /Flags 32 /FontBBox [-1018 -481 1436 1159] /FontName /LQPRFW+Helvetica-Bold /ItalicAngle 0 /StemV 149 /MaxWidth 1500 /StemH 124 /XHeight 540 /FontFile2 84 0 R >> endobj 87 0 obj [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611 0 722 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 611 0 0 556 0 0 0 278 0 556 0 0 611 611 0 0 389 0 333 0 0 778 0 556 ] endobj 42 0 obj << /Type /Font /Subtype /TrueType /BaseFont /LQPRFW+Helvetica-Bold /FontDescriptor 86 0 R /Widths 87 0 R /FirstChar 32 /LastChar 121 /Encoding /MacRomanEncoding >> endobj 1 0 obj << /Producer (Mac OS X 10.5.3 Quartz PDFContext) /CreationDate (D:20080616183824Z00'00') /ModDate (D:20080616183824Z00'00') >> endobj xref 0 88 0000000000 65535 f 0000046659 00000 n 0000004338 00000 n 0000031821 00000 n 0000000022 00000 n 0000004318 00000 n 0000004442 00000 n 0000030833 00000 n 0000006833 00000 n 0000007133 00000 n 0000008156 00000 n 0000008465 00000 n 0000008485 00000 n 0000008808 00000 n 0000004803 00000 n 0000005112 00000 n 0000007481 00000 n 0000007807 00000 n 0000009836 00000 n 0000010132 00000 n 0000005132 00000 n 0000005441 00000 n 0000007152 00000 n 0000007461 00000 n 0000007827 00000 n 0000008136 00000 n 0000005461 00000 n 0000005784 00000 n 0000008828 00000 n 0000009151 00000 n 0000006490 00000 n 0000006813 00000 n 0000009171 00000 n 0000009494 00000 n 0000005804 00000 n 0000006127 00000 n 0000009514 00000 n 0000009816 00000 n 0000006147 00000 n 0000006470 00000 n 0000031784 00000 n 0000040653 00000 n 0000046479 00000 n 0000022800 00000 n 0000023762 00000 n 0000026074 00000 n 0000027351 00000 n 0000024801 00000 n 0000026053 00000 n 0000014972 00000 n 0000016301 00000 n 0000011096 00000 n 0000012350 00000 n 0000016322 00000 n 0000017588 00000 n 0000021518 00000 n 0000022779 00000 n 0000010152 00000 n 0000011076 00000 n 0000023782 00000 n 0000024781 00000 n 0000027372 00000 n 0000028647 00000 n 0000012371 00000 n 0000013669 00000 n 0000020270 00000 n 0000021497 00000 n 0000028668 00000 n 0000029984 00000 n 0000018898 00000 n 0000020249 00000 n 0000013690 00000 n 0000014951 00000 n 0000017609 00000 n 0000018877 00000 n 0000030005 00000 n 0000030813 00000 n 0000030869 00000 n 0000031764 00000 n 0000031904 00000 n 0000031968 00000 n 0000040212 00000 n 0000040233 00000 n 0000040469 00000 n 0000040828 00000 n 0000045984 00000 n 0000046005 00000 n 0000046249 00000 n trailer << /Size 88 /Root 79 0 R /Info 1 0 R /ID [ <06bb8a184bebf551c289cefd1476dc39> <06bb8a184bebf551c289cefd1476dc39> ] >> startxref 46801 %%EOF 1 0 obj <> endobj xref 1 1 0000048719 00000 n trailer < <06bb8a184bebf551c289cefd1476dc39>] /Info 1 0 R /Prev 46801 /Root 79 0 R /Size 88>> startxref 48935 %%EOF pion-5.0.4+dfsg.orig/doc/pion-net.tag0000644000372000001440000103725712215647143016754 0ustar robertousers HelloServer class_hello_server.html pion::tcp::server HelloServer class_hello_server.html a7417b37a77beb236800e206faf176179 (const unsigned int tcp_port) virtual void handle_connection class_hello_server.html ad5276a2b43e89bd30ccd117bf76dbb40 (tcp::connection_ptr &tcp_conn) pion::admin_rights classpion_1_1admin__rights.html admin_rights classpion_1_1admin__rights.html abfb9f3aea1e085f4a5a666a98fa36c7c (bool use_log=true) virtual ~admin_rights classpion_1_1admin__rights.html a3dd9a6d85bdeffe1243a25b78e562716 () void release classpion_1_1admin__rights.html a2979c3b20e89e29113a9593d14a563b8 (void) static long run_as_user classpion_1_1admin__rights.html ab8ebba2984ee6610829fbac64c149f06 (const std::string &user_name) static long run_as_group classpion_1_1admin__rights.html ae2b1e96be191af3cf81851cdf2c69e2a (const std::string &group_name) pion::algorithm structpion_1_1algorithm.html static bool base64_decode structpion_1_1algorithm.html ad1700ce7cf8e29bb7600d5729fd4cdad (std::string const &input, std::string &output) static bool base64_encode structpion_1_1algorithm.html ae5f52e52ac349ecf20410f2ad3e257dd (std::string const &input, std::string &output) static std::string url_decode structpion_1_1algorithm.html a440bd54b07a24c80bc939fdb03583721 (const std::string &str) static std::string url_encode structpion_1_1algorithm.html aa4eaedaecac95a638cedf5c4884de1b8 (const std::string &str) static std::string xml_encode structpion_1_1algorithm.html a2177ca0d0f01e6ef6d4d3bceb73d82bb (const std::string &str) static void float_from_bytes structpion_1_1algorithm.html ab3cce74846661c3585ec5f540a99ff07 (long double &value, const unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits) static void float_to_bytes structpion_1_1algorithm.html a61872c7ccf75793a16d8ce7961f28842 (long double value, unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits) static boost::uint8_t to_uint8 structpion_1_1algorithm.html a79898e00c20439125c68d90248afb2e0 (unsigned char byte) static boost::int8_t to_int8 structpion_1_1algorithm.html afb09388ae577897cd3fac5572c9e4eef (unsigned char byte) static boost::uint8_t to_uint8 structpion_1_1algorithm.html a6088634700c44316b7d6d55e687d65aa (char byte) static boost::int8_t to_int8 structpion_1_1algorithm.html a8a891be43c16371c9cf9447224f1705c (char byte) static boost::uint16_t to_uint16 structpion_1_1algorithm.html aa755b157b2cda061aec92c49b7ee9dac (unsigned char high, unsigned char low) static boost::int16_t to_int16 structpion_1_1algorithm.html a32a9690172523ef7c558f92b319429c9 (unsigned char high, unsigned char low) static boost::uint32_t to_uint24 structpion_1_1algorithm.html ad1fd95bf2a6c3c2a775492c1acd0b5c1 (unsigned char high, unsigned char mid, unsigned char low) static boost::int32_t to_int24 structpion_1_1algorithm.html a607abc832ec9f6983cb42b76cc8914e6 (unsigned char high, unsigned char mid, unsigned char low) static boost::uint32_t to_uint32 structpion_1_1algorithm.html af2092366e2a82fbfc456bceb15a0f599 (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low) static boost::int32_t to_int32 structpion_1_1algorithm.html ac8dd9cfadaa3fb758b4ea3f9bd524595 (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low) static boost::uint64_t to_uint64 structpion_1_1algorithm.html ab4622cfb454d0ca206ffe42077a15c52 (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low) static boost::int64_t to_int64 structpion_1_1algorithm.html aa08271822b58fa0ca87fb4f0740b1d3a (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low) static boost::uint16_t to_uint16 structpion_1_1algorithm.html a7052628a032ebcd1c3b740df7200a8de (T1 high, T2 low) static boost::int16_t to_int16 structpion_1_1algorithm.html a034466e83420673e09a472c71c493141 (T1 high, T2 low) static boost::uint32_t to_uint24 structpion_1_1algorithm.html ae409867961cddd04961428e569ea5ff5 (T1 high, T2 mid, T3 low) static boost::int32_t to_int24 structpion_1_1algorithm.html a87d45ecf097910616abfbba0e2de07c4 (T1 high, T2 mid, T3 low) static boost::uint32_t to_uint32 structpion_1_1algorithm.html ab7bce4210081b843534ea5db13991716 (T1 high, T2 mid1, T3 mid2, T4 low) static boost::int32_t to_int32 structpion_1_1algorithm.html aeeb4ad9f76ad506cec4c731b054c2f31 (T1 high, T2 mid1, T3 mid2, T4 low) static boost::uint64_t to_uint64 structpion_1_1algorithm.html a3157664a93778809b50791f5d6361eab (T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low) static boost::int64_t to_int64 structpion_1_1algorithm.html ac833e7576309a63c514ad23066a5c86d (T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low) static boost::uint8_t to_uint8 structpion_1_1algorithm.html ac543d70ca58331348b6acd3bf2d81e87 (const Byte *buf) static boost::int8_t to_int8 structpion_1_1algorithm.html a79ecbc1784fbff99ab430e0deaeab745 (const Byte *buf) static boost::uint16_t to_uint16 structpion_1_1algorithm.html aa9cf03ca1aad0a9130aca2623ed89d1c (const Byte *buf) static boost::int16_t to_int16 structpion_1_1algorithm.html a61c5017275dd7b62e0ab7f91ddb0a3f1 (const Byte *buf) static boost::uint32_t to_uint24 structpion_1_1algorithm.html aa0c7e4ffe39e195b048226a231edb410 (const Byte *buf) static boost::int32_t to_int24 structpion_1_1algorithm.html ab5ee29a3c6df9fc556a8de432676c2bf (const Byte *buf) static boost::uint32_t to_uint32 structpion_1_1algorithm.html a0296b43ce06c2882e2bc07b9a3e67f53 (const Byte *buf) static boost::int32_t to_int32 structpion_1_1algorithm.html a5bcf5c5e18d33606425e8119b6561f12 (const Byte *buf) static boost::uint64_t to_uint64 structpion_1_1algorithm.html a1cd6fc861db28b3bf8ab896e2e9ce50d (const Byte *buf) static boost::int64_t to_int64 structpion_1_1algorithm.html acd8f7a0dbf2d3940845b4d16d082d6f6 (const Byte *buf) static void from_uint8 structpion_1_1algorithm.html adee6fd962b989fa74e1aa252f3dc2843 (Byte *buf, const boost::uint8_t n) static void from_int8 structpion_1_1algorithm.html a2990b14778b9f0620f30a49e03710b92 (Byte *buf, const boost::int8_t n) static void from_uint16 structpion_1_1algorithm.html af648bb4c015fbc0f489f8562c497320a (Byte *buf, const boost::uint16_t n) static void from_int16 structpion_1_1algorithm.html a103a14505b46b6557afe51a59bb2e2f2 (Byte *buf, const boost::int16_t n) static void from_uint24 structpion_1_1algorithm.html a74e079bdd49c996d1d6e089d71c31692 (Byte *buf, const boost::uint32_t n) static void from_int24 structpion_1_1algorithm.html a3fe9cd2ca9d818166406bdcce9c78e37 (Byte *buf, const boost::int32_t n) static void from_uint32 structpion_1_1algorithm.html a083603e3fc47a08f9e1e2879ccc2089c (Byte *buf, const boost::uint32_t n) static void from_int32 structpion_1_1algorithm.html a76f4b44a7f9dc1693f64182de05ccff5 (Byte *buf, const boost::int32_t n) static void from_uint64 structpion_1_1algorithm.html a3238718a13072616acde0c17e9598c85 (Byte *buf, const boost::uint64_t n) static void from_int64 structpion_1_1algorithm.html a404abee06f376da18bb1903f7e38a010 (Byte *buf, const boost::int64_t n) static float to_float structpion_1_1algorithm.html ac89c656607e9fd2cdff0e83357305410 (const Byte *ptr) static double to_double structpion_1_1algorithm.html acba0b28df02a7cb55b6d7ab0b9afdf06 (const Byte *ptr) static long double to_long_double structpion_1_1algorithm.html aa50b600c44049191534889b1849bb906 (const Byte *ptr) static void from_float structpion_1_1algorithm.html acbff48b249a7f07c572267ff1023e366 (Byte *ptr, const float n) static void from_double structpion_1_1algorithm.html a3ea0d3aec95dc5d414a8d3fa4e0e4fcb (Byte *ptr, const double n) static void from_long_double structpion_1_1algorithm.html a4e68ee1d2e4fd3087f1e947eb466eea2 (Byte *ptr, const long double n) pion::exception classpion_1_1exception.html exception classpion_1_1exception.html aaec2c298dcad795cf4b66c18c440dfcb (const std::string &msg) exception classpion_1_1exception.html a970d4da1afade252a5024dec90aa48d7 (const char *const msg) virtual const char * what classpion_1_1exception.html a40a62768258b7772de35398177dbd6ce () const void set_what_msg classpion_1_1exception.html ab7aa00d924b61114cd98a96ec8a78a98 (const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const virtual void update_what_msg classpion_1_1exception.html a13a7f06c1c25bfa139447f5ac091f85f () const std::string m_what_msg classpion_1_1exception.html ae1c8e87bb8013e9abccc5326bdcbab72 pion::iequal_to structpion_1_1iequal__to.html bool operator() structpion_1_1iequal__to.html abdbf26bf08c7d62d25d76968558b4818 (std::string const &x, std::string const &y) const pion::ihash structpion_1_1ihash.html std::size_t operator() structpion_1_1ihash.html a9def756411120d3503edb9fd84ca67b7 (std::string const &x) const pion::plugin classpion_1_1plugin.html pion::plugin::config_type pion::plugin::data_type bool is_open classpion_1_1plugin.html a61186fb4cf7ec683e7d9e9f54c507df8 (void) const std::string get_plugin_name classpion_1_1plugin.html afbb2e9290143f779b0d01d1ab925cde2 (void) const void open classpion_1_1plugin.html ad2f241076913d3ef35caa298992aa21d (const std::string &plugin_name) void open_file classpion_1_1plugin.html aa3848e4da0ef4592079a378f1d81fe12 (const std::string &plugin_file) void close classpion_1_1plugin.html a4de512c3cdeb3cd9dedd3a49f754cc1a (void) static bool find_plugin_file classpion_1_1plugin.html a8bded1e5b0c6e5008fb62613bf7bed63 (std::string &path_to_file, const std::string &name) static bool find_config_file classpion_1_1plugin.html a885fb365fc2fedf251853eb949fcf38a (std::string &path_to_file, const std::string &name) static void add_static_entry_point classpion_1_1plugin.html a7f070e7afa7b82ee9da454495ee7d659 (const std::string &plugin_name, void *create_func, void *destroy_func) static void check_cygwin_path classpion_1_1plugin.html a424890d78c0e7fe566043b75016bf738 (boost::filesystem::path &final_path, const std::string &path_string) static void add_plugin_directory classpion_1_1plugin.html aed4ab06e4aa42456df83e4e3e120dda5 (const std::string &dir) static void reset_plugin_directories classpion_1_1plugin.html a797d2923f9495109290755625070f93e (void) static void get_all_plugin_names classpion_1_1plugin.html add067f91834b99ad73d2ec448aebe33b (std::vector< std::string > &plugin_names) plugin classpion_1_1plugin.html a132d7077794fd139df56350908805f75 (void) plugin classpion_1_1plugin.html aa651a50b3be4d9e35ade63b9c9ee66a7 (const plugin &p) plugin & operator= classpion_1_1plugin.html a31b0610dce244c86d80981240bdb0e62 (const plugin &p) void * get_create_function classpion_1_1plugin.html a8300881be4224c9331fcbdfc69beb078 (void) void * get_destroy_function classpion_1_1plugin.html a473f250fea6e643944aad4484db2b3c9 (void) void release_data classpion_1_1plugin.html a6170412055354b9d32c6551baa0bed37 (void) void grab_data classpion_1_1plugin.html a928793b2ab39387ec1b467ee618fbaa1 (const plugin &p) pion::plugin::data_type structpion_1_1plugin_1_1data__type.html data_type structpion_1_1plugin_1_1data__type.html a22a8f203cafa3f97ae61fdbe607557a8 (void) data_type structpion_1_1plugin_1_1data__type.html aece7d2d77c4c119df5859f765fa568b4 (const std::string &plugin_name) data_type structpion_1_1plugin_1_1data__type.html a15d9c1fdfdab4585e516b041084bbe5d (const data_type &p) void * m_lib_handle structpion_1_1plugin_1_1data__type.html ab53016d3d93ba84c07490a413fd01bcf void * m_create_func structpion_1_1plugin_1_1data__type.html a11bd2c34a50310a4ed6042eae415c0c4 void * m_destroy_func structpion_1_1plugin_1_1data__type.html a19893ea2b05e69dfb2b346ee5f7aea41 std::string m_plugin_name structpion_1_1plugin_1_1data__type.html a9ae35daeb06cf5f00675ff690d37db69 unsigned long m_references structpion_1_1plugin_1_1data__type.html a2536d38120032c485b556d174ad46013 pion::plugin_ptr classpion_1_1plugin__ptr.html InterfaceClassType pion::plugin plugin_ptr classpion_1_1plugin__ptr.html a3fb9fad6bdaee03c90651b46564075a1 (void) plugin_ptr classpion_1_1plugin__ptr.html ab79c8e53cd10a3471f0ff68651c1514b (const plugin_ptr &p) plugin_ptr & operator= classpion_1_1plugin__ptr.html af86e0fd368c1b60a471b9e107f829f27 (const plugin_ptr &p) InterfaceClassType * create classpion_1_1plugin__ptr.html abbe4fd78867b4a9dcae2245e54f47b55 (void) void destroy classpion_1_1plugin__ptr.html a0f128cd11b09e603dc8cd8d86a6f6824 (InterfaceClassType *object_ptr) InterfaceClassType * CreateObjectFunction classpion_1_1plugin__ptr.html a1082ceb3823f7f881cce49be1ebedb59 (void) void DestroyObjectFunction classpion_1_1plugin__ptr.html a38007852c54314c3c33bdb865cce7c8e (InterfaceClassType *) pion::plugin_instance_ptr classpion_1_1plugin__instance__ptr.html plugin_instance_ptr classpion_1_1plugin__instance__ptr.html a79eb26b5a1ff329e4893c644a625dcc6 (void) virtual ~plugin_instance_ptr classpion_1_1plugin__instance__ptr.html a6567dda0004c26eba60a6c714d52c696 () void reset classpion_1_1plugin__instance__ptr.html a3c6d24f4501a0e1838e5bedd34e20372 (void) void create classpion_1_1plugin__instance__ptr.html a7cc8432ad7e88298c719e9b41007e93d (const std::string &plugin_type) bool empty classpion_1_1plugin__instance__ptr.html ac4655ccda770223a852233c7c9ffb0d0 (void) const InterfaceClassType * get classpion_1_1plugin__instance__ptr.html a30f57ad0560c0cbdd0f00f345cd3a41a (void) InterfaceClassType & operator* classpion_1_1plugin__instance__ptr.html af1919987100381b912d49144f75c46fe (void) const InterfaceClassType & operator* classpion_1_1plugin__instance__ptr.html a0ed2270357907c47060b5c0bd14cb6fb (void) const InterfaceClassType * operator-> classpion_1_1plugin__instance__ptr.html a84f65b0841e70a2a6017792d5749390e (void) const InterfaceClassType * operator-> classpion_1_1plugin__instance__ptr.html a26b25d3a76f14a22636727ed774eac29 (void) const plugin_ptr< InterfaceClassType > m_plugin_ptr classpion_1_1plugin__instance__ptr.html a65856c5fbd856e3c106e3ae708369109 InterfaceClassType * m_instance_ptr classpion_1_1plugin__instance__ptr.html a414a8f8e915a41caa94aca991cbb775e pion::plugin_manager classpion_1_1plugin__manager.html PluginType pion::plugin_manager::map_type boost::function1< void, PluginType * > PluginRunFunction classpion_1_1plugin__manager.html a275b88a2c9f7c89d6d737c1b444be8b2 boost::function1< boost::uint64_t, const PluginType * > PluginStatFunction classpion_1_1plugin__manager.html a1e6a4223438c74e4e928401f734d2e0c plugin_manager classpion_1_1plugin__manager.html a6f451cdb1f4ea91b954e5dd453a827d3 (void) virtual ~plugin_manager classpion_1_1plugin__manager.html aff2f27834dee6eb0087e68f2af86b9e9 () void clear classpion_1_1plugin__manager.html ac56a5e432352d1b9c2a4853ce82a5a8c (void) bool empty classpion_1_1plugin__manager.html adee5498ef23acb797355b2a79f3fd059 (void) const void add classpion_1_1plugin__manager.html ad017fef715f7b049513eb176e1df809b (const std::string &plugin_id, PluginType *plugin_object_ptr) void remove classpion_1_1plugin__manager.html a2acdd8496472871d8ab881637577240d (const std::string &plugin_id) void replace classpion_1_1plugin__manager.html ab8d0b6ecfa27e23495a64d94147c4d60 (const std::string &plugin_id, PluginType *plugin_ptr) PluginType * clone classpion_1_1plugin__manager.html abb39b6639117e8a3f557a628fa302c44 (const std::string &plugin_id) PluginType * load classpion_1_1plugin__manager.html a3e03e5f6023f530c91464b766b2fab9e (const std::string &plugin_id, const std::string &plugin_type) PluginType * get classpion_1_1plugin__manager.html a348da20310edf84242a2688ddc1639e9 (const std::string &plugin_id) const PluginType * get classpion_1_1plugin__manager.html a716a150691df75fb46d1f472e3eda2f6 (const std::string &plugin_id) const plugin_ptr< PluginType > get_lib_ptr classpion_1_1plugin__manager.html abb0ab4f0a27e5739682430b8a6d06f15 (const std::string &plugin_id) const PluginType * find classpion_1_1plugin__manager.html ab58061848dde1682a7c013c7f468d191 (const std::string &resource) void run classpion_1_1plugin__manager.html a1c2f6105acfcfcf1b742aecab122a368 (PluginRunFunction run_func) void run classpion_1_1plugin__manager.html af530db568a45e50b3d8b06976c13d994 (const std::string &plugin_id, PluginRunFunction run_func) boost::uint64_t get_statistic classpion_1_1plugin__manager.html a40b42b430ba69d4f0143c04ceed81f57 (PluginStatFunction stat_func) const boost::uint64_t get_statistic classpion_1_1plugin__manager.html a9a569d4782392bf94a0faed3143eedd4 (const std::string &plugin_id, PluginStatFunction stat_func) const map_type m_plugin_map classpion_1_1plugin__manager.html a6022dd5905f5079523844d68cd89977d boost::mutex m_plugin_mutex classpion_1_1plugin__manager.html a4ce56259eca75c8c88bdc4f778526ec4 pion::plugin_manager::map_type classpion_1_1plugin__manager_1_1map__type.html void clear classpion_1_1plugin__manager_1_1map__type.html a68c8fa315ba4a7ff7bb81a14e362dff1 (void) pion::process classpion_1_1process.html pion::process::config_type process classpion_1_1process.html a75bde31b3d1651f92705ae06eda36917 (void) static void shutdown classpion_1_1process.html aed3145650f11fcea4e968efc55127aba (void) static void wait_for_shutdown classpion_1_1process.html a0141a4c774af4e4e605230c277cfa4f7 (void) static void initialize classpion_1_1process.html af6bf25c64faa04c8dba9cb215201d50e (void) static void daemonize classpion_1_1process.html af944a4e1fc8b6e4c1d8b4d8be52d1a8b (void) static config_type & get_config classpion_1_1process.html ae3a984eb1083aa0d3d45af1f96e90a29 (void) pion::process::config_type structpion_1_1process_1_1config__type.html config_type structpion_1_1process_1_1config__type.html a89ae5c8f99282b03c22006ce00c619e2 () bool shutdown_now structpion_1_1process_1_1config__type.html aea142e63e9a962ffefb5c0d2091ed303 boost::condition shutdown_cond structpion_1_1process_1_1config__type.html aec765e2fe0c8e6a474c78c2511079957 boost::mutex shutdown_mutex structpion_1_1process_1_1config__type.html aeea8f463fcb510add8cab8e5fa20f0e4 pion::scheduler classpion_1_1scheduler.html scheduler classpion_1_1scheduler.html a745efe16565852dc0b54bea88eb6d7fb (void) virtual ~scheduler classpion_1_1scheduler.html a24c6e2c943335bba6ec6d1d8dae20c0e () virtual void startup classpion_1_1scheduler.html ab656139dc844a547d5c1001b3ef17d13 (void) virtual void shutdown classpion_1_1scheduler.html a54887d0e772ed9c01156a46f2d89ce93 (void) void join classpion_1_1scheduler.html ab9a1777f25b90f1970ea97035dd7310d (void) void add_active_user classpion_1_1scheduler.html aff5a6778a3a6174d7d684b709901d1d0 (void) void remove_active_user classpion_1_1scheduler.html a402e15e25d6c4b63241a636bd3ca53cf (void) bool is_running classpion_1_1scheduler.html a83d328c2947c65e77a603a4127442eb4 (void) const void set_num_threads classpion_1_1scheduler.html acd1c3b2393354a9db7a4dba6aa028b83 (const boost::uint32_t n) boost::uint32_t get_num_threads classpion_1_1scheduler.html af9b6fe7245c024bd18e3f245993cd965 (void) const void set_logger classpion_1_1scheduler.html a3842b00e98a84105cbeb8a1786c9e353 (logger log_ptr) logger get_logger classpion_1_1scheduler.html a3fba5b7cb9d99d49394241e386e5f581 (void) virtual boost::asio::io_service & get_io_service classpion_1_1scheduler.html a037e0ee2c2c83b7002180a4656ccbbfa (void)=0 virtual void post classpion_1_1scheduler.html aad1b779b29a0dc3b8c2e38e5e67263bb (boost::function0< void > work_func) void keep_running classpion_1_1scheduler.html a8bda557ed5c95e2fbec96e14c793e844 (boost::asio::io_service &my_service, boost::asio::deadline_timer &my_timer) void process_service_work classpion_1_1scheduler.html a53cdc5fc1fb829de12cefd4183021d28 (boost::asio::io_service &service) static void sleep classpion_1_1scheduler.html aeaa9a398167fdab0fa0f5a1e16d0a279 (boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec) static void sleep classpion_1_1scheduler.html a0eca170d3ff225f2461080f2f5f763cb (ConditionType &wakeup_condition, LockType &wakeup_lock, boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec) virtual void stop_services classpion_1_1scheduler.html a62b59f0561bd527d78768fd3a5ceeb36 (void) virtual void stop_threads classpion_1_1scheduler.html abd7b1239bb9cf5a6ca1492341adfc4db (void) virtual void finish_services classpion_1_1scheduler.html a64dbc267db8e1481f80ba6d42bbb24ea (void) virtual void finish_threads classpion_1_1scheduler.html a6436e075a8c23734e55329f4286b5509 (void) static boost::system_time get_wakeup_time classpion_1_1scheduler.html ad4ca39f249281cb2c6bd354cc52d0b9e (boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec) boost::mutex m_mutex classpion_1_1scheduler.html a0a1cf13bf9b31229c6d6f030ddbb0d09 logger m_logger classpion_1_1scheduler.html aa611e2e63bc69eefce43c243846d99e5 boost::condition m_no_more_active_users classpion_1_1scheduler.html a35fe165b525a1babfa8dd2a602d0e598 boost::condition m_scheduler_has_stopped classpion_1_1scheduler.html ab5321fccd4a1136f4358cce8679d22fd boost::uint32_t m_num_threads classpion_1_1scheduler.html a0ecf6f549714b0e9e33fea80a11a073f boost::uint32_t m_active_users classpion_1_1scheduler.html aa8028397b2e084c8808032ac448955b8 bool m_is_running classpion_1_1scheduler.html a1fa5ef108570fe6c4a984fb1c01e8bd9 static const boost::uint32_t DEFAULT_NUM_THREADS classpion_1_1scheduler.html ab8d6ac8ea6a3946abe86cbd20f0783e0 static const boost::uint32_t NSEC_IN_SECOND classpion_1_1scheduler.html aa5633b15c629c78c2aeb451ae428ea25 static const boost::uint32_t MICROSEC_IN_SECOND classpion_1_1scheduler.html acbe8f3104aa4713c93bbf3f2abe8615a static const boost::uint32_t KEEP_RUNNING_TIMER_SECONDS classpion_1_1scheduler.html a4f2047f8ecdaf5901f3548ee693b39ce pion::multi_thread_scheduler classpion_1_1multi__thread__scheduler.html pion::scheduler multi_thread_scheduler classpion_1_1multi__thread__scheduler.html a7e60ea90622a43533abd1c7c6106d66c (void) virtual ~multi_thread_scheduler classpion_1_1multi__thread__scheduler.html a708525e3a1d80e350ca7030c8859221e () std::vector< boost::shared_ptr< boost::thread > > ThreadPool classpion_1_1multi__thread__scheduler.html a0cf5fa4c72b0c1f38043cf9ea61efeef virtual void stop_threads classpion_1_1multi__thread__scheduler.html a91945cc6c4a05a716fec36fc48474265 (void) virtual void finish_threads classpion_1_1multi__thread__scheduler.html a5e602b3bb9fd7208e7d3325f596e8266 (void) ThreadPool m_thread_pool classpion_1_1multi__thread__scheduler.html ad2b984248e4b064faae3cc3c7e75d30e pion::single_service_scheduler classpion_1_1single__service__scheduler.html pion::multi_thread_scheduler single_service_scheduler classpion_1_1single__service__scheduler.html a765e8e4dd3dc2f885dc0b1eb4009d3bd (void) virtual ~single_service_scheduler classpion_1_1single__service__scheduler.html a5a8e8455c8442eeebef78b78f549047e () virtual boost::asio::io_service & get_io_service classpion_1_1single__service__scheduler.html a9afe2d43c1deb4f78dc4cfabd5f3a873 (void) virtual void startup classpion_1_1single__service__scheduler.html a1f7e3583fb384e97eea9303201ae1631 (void) virtual void stop_services classpion_1_1single__service__scheduler.html a954817cfba7dddde2abe96f6fbb5d1a8 (void) virtual void finish_services classpion_1_1single__service__scheduler.html a87b3dd728dece02e378675d1536aea72 (void) boost::asio::io_service m_service classpion_1_1single__service__scheduler.html a2c46174147ba01f522f5e2e0a9f81d8c boost::asio::deadline_timer m_timer classpion_1_1single__service__scheduler.html a5898ac8ca81dfedb2b38b14d63519c2d pion::one_to_one_scheduler classpion_1_1one__to__one__scheduler.html pion::multi_thread_scheduler pion::one_to_one_scheduler::service_pair_type one_to_one_scheduler classpion_1_1one__to__one__scheduler.html a1cf085d6cabbbe06891f316a3c0cb938 (void) virtual ~one_to_one_scheduler classpion_1_1one__to__one__scheduler.html a76da28c9f319dced91f30b1d303da518 () virtual boost::asio::io_service & get_io_service classpion_1_1one__to__one__scheduler.html a6ead3ddcbbcbfb0eba98b102530d2a90 (void) virtual boost::asio::io_service & get_io_service classpion_1_1one__to__one__scheduler.html a5af0e30b2ef08cbbaf40278c9066c166 (boost::uint32_t n) virtual void startup classpion_1_1one__to__one__scheduler.html a8f32fd88bc0d95d9952c5045849e09b9 (void) std::vector< boost::shared_ptr< service_pair_type > > service_pool_type classpion_1_1one__to__one__scheduler.html ac41a2d4f38f49673139a77e609b1d084 virtual void stop_services classpion_1_1one__to__one__scheduler.html a39c02d4a67bf5cd28da3ce22363dd698 (void) virtual void finish_services classpion_1_1one__to__one__scheduler.html a3e9f1380789598587a27f0857e7c9133 (void) service_pool_type m_service_pool classpion_1_1one__to__one__scheduler.html a8b6ae075086a579e46ca08a89085c07a boost::uint32_t m_next_service classpion_1_1one__to__one__scheduler.html ae4e2b2a157c1c9e36694e86b6ae354b1 pion::one_to_one_scheduler::service_pair_type structpion_1_1one__to__one__scheduler_1_1service__pair__type.html boost::asio::io_service first structpion_1_1one__to__one__scheduler_1_1service__pair__type.html a74fee2ba10cca771f6db6da000b0d9bb boost::asio::deadline_timer second structpion_1_1one__to__one__scheduler_1_1service__pair__type.html ac809326d5069e14a65eb6effb94dac7b pion::user classpion_1_1user.html user classpion_1_1user.html a7215ae3543a0fc3c8c68e4e20f67d542 (std::string const &username) user classpion_1_1user.html a0d26edcf0b01dee7e3c4457ced9108d1 (std::string const &username, std::string const &password) virtual ~user classpion_1_1user.html adabb39ff720554fe13d8e93d7d647953 () std::string const & get_username classpion_1_1user.html abb1f00fc40a240786ca3f4f0703866e6 () const std::string const & get_password classpion_1_1user.html ab88146712e075ec69d9dfc4f3ba7f5ae () const virtual bool match_password classpion_1_1user.html af3f539ee4d00a29780d2c6e1c4396aaf (const std::string &password) const virtual void set_password classpion_1_1user.html aff790ab701624dce1a686737f391b6bc (const std::string &password) virtual void set_password_hash classpion_1_1user.html acb6cb362d99d6e1844bdb90e8121f806 (const std::string &password_hash) const std::string m_username classpion_1_1user.html a49689c1ffbdfa6a6d69fe445d290ddaa std::string m_password classpion_1_1user.html aebf5fb3a48c950dc906ee3bfeb414562 unsigned char m_password_hash classpion_1_1user.html a111ddd315310bf1ed484fd1a59fc878d [SHA_DIGEST_LENGTH] pion::user_manager classpion_1_1user__manager.html user_manager classpion_1_1user__manager.html a77ce496a03d84d4bd6e50747b53fd75d (void) virtual ~user_manager classpion_1_1user__manager.html a375a8b8618977fc60491c525390f1fb6 () bool empty classpion_1_1user__manager.html a88965b0300b9d137d45ae454f05b0952 (void) const virtual bool add_user classpion_1_1user__manager.html a533373b79db2ce4c0bcd42f9fcd9ab71 (const std::string &username, const std::string &password) virtual bool update_user classpion_1_1user__manager.html a78b22f774144fa0c65c2938a85ae06e0 (const std::string &username, const std::string &password) virtual bool add_user_hash classpion_1_1user__manager.html a8ea9661b0e9a30d23de18604ad59ba2d (const std::string &username, const std::string &password_hash) virtual bool update_user_hash classpion_1_1user__manager.html afb4107e5aa12a88b9fc131b2609ddbcf (const std::string &username, const std::string &password_hash) virtual bool remove_user classpion_1_1user__manager.html a5e9014c6d1a351bd5d997d1f5c3b89f0 (const std::string &username) virtual user_ptr get_user classpion_1_1user__manager.html ae3ac613907d88d967edc1849a937b10e (const std::string &username) virtual user_ptr get_user classpion_1_1user__manager.html a2f1534906b678b6cfe375fdd643edf39 (const std::string &username, const std::string &password) std::map< std::string, user_ptr > user_map_t classpion_1_1user__manager.html a6e856c85929ffbf1a558f61fd7e0b557 boost::mutex m_mutex classpion_1_1user__manager.html a89489a9cd9499628f9bc764143b06227 user_map_t m_users classpion_1_1user__manager.html a366cf3ed44fd3f4bb93f430884934f9d pion::error::bad_arg classpion_1_1error_1_1bad__arg.html pion::exception pion::error::bad_config classpion_1_1error_1_1bad__config.html pion::exception pion::error::open_file classpion_1_1error_1_1open__file.html pion::exception pion::error::open_plugin classpion_1_1error_1_1open__plugin.html pion::exception pion::error::read_file classpion_1_1error_1_1read__file.html pion::exception pion::error::file_not_found classpion_1_1error_1_1file__not__found.html pion::exception pion::error::directory_not_found classpion_1_1error_1_1directory__not__found.html pion::exception pion::error::plugin_not_found classpion_1_1error_1_1plugin__not__found.html pion::exception pion::error::duplicate_plugin classpion_1_1error_1_1duplicate__plugin.html pion::exception pion::error::plugin_missing_symbol classpion_1_1error_1_1plugin__missing__symbol.html pion::exception pion::error::plugin_undefined classpion_1_1error_1_1plugin__undefined.html pion::exception pion::error::bad_password_hash classpion_1_1error_1_1bad__password__hash.html pion::exception pion::http::auth classpion_1_1http_1_1auth.html auth classpion_1_1http_1_1auth.html a464d923e5f67955ae6862f749ea79cd7 (user_manager_ptr userManager) virtual ~auth classpion_1_1http_1_1auth.html a8e58182470ebd406f5754064a890786c () virtual bool handle_request classpion_1_1http_1_1auth.html aa3d943f0ac7c703abb4bf94e88100a5e (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)=0 virtual void set_option classpion_1_1http_1_1auth.html a575b866b9bc1e668ab6535cbc117c580 (const std::string &name, const std::string &value) void add_restrict classpion_1_1http_1_1auth.html a4f3dee0db0f53e8c78a24970fcd920ea (const std::string &resource) void add_permit classpion_1_1http_1_1auth.html a915cab76915bb3140007d4a432f881ce (const std::string &resource) virtual bool add_user classpion_1_1http_1_1auth.html a5d2af1bf25e6e3342cafe8b1f2cf9df9 (std::string const &username, std::string const &password) virtual bool update_user classpion_1_1http_1_1auth.html a850f65087e873e31de22b0a0fef79232 (std::string const &username, std::string const &password) virtual bool remove_user classpion_1_1http_1_1auth.html a5bb4dce624e8cfe416951bbed3ddce43 (std::string const &username) virtual user_ptr get_user classpion_1_1http_1_1auth.html aa066cc49589f0629b5b6e2a0e7050516 (std::string const &username) std::set< std::string > resource_set_type classpion_1_1http_1_1auth.html afba7081a3795e3010f0051e4e85a38e3 std::map< std::string, std::pair< boost::posix_time::ptime, user_ptr > > user_cache_type classpion_1_1http_1_1auth.html a57a2002495d45ac3ea508ee4186356b5 bool need_authentication classpion_1_1http_1_1auth.html a62f9ddca03be608b7884542b0d6904f6 (http::request_ptr const &http_request_ptr) const bool find_resource classpion_1_1http_1_1auth.html a87046c8b7fe4b74b1b76704c2093f6a9 (const resource_set_type &resource_set, const std::string &resource) const void set_logger classpion_1_1http_1_1auth.html af25a5d74ab812554d6c04379c856d019 (logger log_ptr) logger m_logger classpion_1_1http_1_1auth.html a936282ab441711ea3c5e52eab6ac9948 user_manager_ptr m_user_manager classpion_1_1http_1_1auth.html a5f85a718dc74306a6f62c931d2b4bc53 resource_set_type m_restrict_list classpion_1_1http_1_1auth.html a39970188567b9719e779dfe9ec0c901b resource_set_type m_white_list classpion_1_1http_1_1auth.html a7c65c43c168549ae65ce443c10a9021a boost::mutex m_resource_mutex classpion_1_1http_1_1auth.html a5c1e57d2531c833a747ebbf9f3efe213 pion::http::basic_auth classpion_1_1http_1_1basic__auth.html pion::http::auth basic_auth classpion_1_1http_1_1basic__auth.html a81644f280b0c499a06e0d44bccc83773 (user_manager_ptr userManager, const std::string &realm="PION") virtual ~basic_auth classpion_1_1http_1_1basic__auth.html a27a464fec905b9f071d1ecb3c026709b () virtual bool handle_request classpion_1_1http_1_1basic__auth.html af7072c2fec706d685cd7375bc7bc8574 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn) virtual void set_option classpion_1_1http_1_1basic__auth.html a9da335bd02b00b82cff40cb333fe7ee7 (const std::string &name, const std::string &value) void handle_unauthorized classpion_1_1http_1_1basic__auth.html a4f95f24882227d8c5d990d44520a4d65 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn) static bool parse_authorization classpion_1_1http_1_1basic__auth.html ae93865f8cdee463b021a8746aa802026 (std::string const &authorization, std::string &credentials) static bool parse_credentials classpion_1_1http_1_1basic__auth.html a54f121e4a3385e44d9503bc3cb9f3385 (std::string const &credentials, std::string &username, std::string &password) pion::http::cookie_auth classpion_1_1http_1_1cookie__auth.html pion::http::auth cookie_auth classpion_1_1http_1_1cookie__auth.html a769336238f9a20b74eb29be7db6e8bd3 (user_manager_ptr userManager, const std::string &login="/login", const std::string &logout="/logout", const std::string &redirect="") virtual ~cookie_auth classpion_1_1http_1_1cookie__auth.html af161887edda25c1e95bae51a74dc843a () virtual bool handle_request classpion_1_1http_1_1cookie__auth.html a83a9f7e27e1c8f714f6ba79101dea498 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn) virtual void set_option classpion_1_1http_1_1cookie__auth.html a87eb9ebf16f524aaf672465c37299772 (const std::string &name, const std::string &value) bool process_login classpion_1_1http_1_1cookie__auth.html a5263531417c673055b050ca76d3844a3 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn) void handle_unauthorized classpion_1_1http_1_1cookie__auth.html a290a0bfd6f886600fd7eb006a2b28e99 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn) void handle_redirection classpion_1_1http_1_1cookie__auth.html a80517399e8467252c8fb8417e794f5dd (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &redirection_url, const std::string &new_cookie="", bool delete_cookie=false) void handle_ok classpion_1_1http_1_1cookie__auth.html a0c38b182c3374382f6000abb8e8d4319 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &new_cookie="", bool delete_cookie=false) void expire_cache classpion_1_1http_1_1cookie__auth.html a2ed6fd5500e68795955aedd6570328f4 (const boost::posix_time::ptime &time_now) pion::http::message classpion_1_1http_1_1message.html pion::http::types pion::http::message::content_buffer_t pion::http::message::receive_error_t data_status_t classpion_1_1http_1_1message.html ab71e06f72cacb4945dbf84663b0420e9 std::vector< boost::asio::const_buffer > write_buffers_t classpion_1_1http_1_1message.html aacf9a6a7677c32e4ab764ac97d0b5e7b std::vector< char > chunk_cache_t classpion_1_1http_1_1message.html a4bcf1ea1d4e7a5637d04ae109adb5e46 message classpion_1_1http_1_1message.html ad07a7f30359b9f44c9159f3f9a9db507 (void) message classpion_1_1http_1_1message.html a576e849f9d4a138d4856c83ceb0c47a3 (const message &http_msg) message & operator= classpion_1_1http_1_1message.html a854b089e577498c9b01e5ec460595a35 (const message &http_msg) virtual ~message classpion_1_1http_1_1message.html ac71ae21f149f7d74b2bdee1bf1149ead () virtual void clear classpion_1_1http_1_1message.html af13279269cf1e00ae4fc5091c1c7cae5 (void) virtual bool is_content_length_implied classpion_1_1http_1_1message.html a08bd257bd46e7a42b64bbc4482f28363 (void) const =0 bool is_valid classpion_1_1http_1_1message.html a52850e6fe48b141f46662c83d4edbbf5 (void) const bool get_chunks_supported classpion_1_1http_1_1message.html a42ea3cfa8633a99a9c517afe2db00a1a (void) const boost::asio::ip::address & get_remote_ip classpion_1_1http_1_1message.html a42fdde8d94227c6d08d475c5ed8a6388 (void) boost::uint16_t get_version_major classpion_1_1http_1_1message.html a6d36c13df002129d3044d9c34999161d (void) const boost::uint16_t get_version_minor classpion_1_1http_1_1message.html ac986c7014db695241db1823f17eda4cd (void) const std::string get_version_string classpion_1_1http_1_1message.html a0bb6e14bd27dc1b956bb74dcccc7ee27 (void) const boost::uint64_t get_content_length classpion_1_1http_1_1message.html a09e2806417b776e33503e48073702616 (void) const bool is_chunked classpion_1_1http_1_1message.html a96264a238b04e1957c87ab7930a8023b (void) const bool is_content_buffer_allocated classpion_1_1http_1_1message.html a7229c3a00b35846cdb050fc2b9b6ec73 () const std::size_t get_content_buffer_size classpion_1_1http_1_1message.html a172346504faba36f73d7527551c199a2 () const char * get_content classpion_1_1http_1_1message.html a60ddb1bd09afecdadc5e9c33c8c1de28 (void) const char * get_content classpion_1_1http_1_1message.html aa2363086d3f0c17a54ecebaef558b971 (void) const chunk_cache_t & get_chunk_cache classpion_1_1http_1_1message.html aa672e8369ab07a212902a98f351805f3 (void) const std::string & get_header classpion_1_1http_1_1message.html ab9e2735d01890cd8e93f86390cd46969 (const std::string &key) const ihash_multimap & get_headers classpion_1_1http_1_1message.html a8d067675e0396114e814ad688bed2b4f (void) bool has_header classpion_1_1http_1_1message.html ac6667e7a771b157e24858700b4777223 (const std::string &key) const const std::string & get_cookie classpion_1_1http_1_1message.html a735de2125e0b3c3a8caae7fad757cfc0 (const std::string &key) const ihash_multimap & get_cookies classpion_1_1http_1_1message.html ab5e744890af0936eda97c21888bb4a2e (void) bool has_cookie classpion_1_1http_1_1message.html af033e860c1f7295a6ef8eb5ea75f53e8 (const std::string &key) const void add_cookie classpion_1_1http_1_1message.html a0bc8756a9db916d5423dad19211de771 (const std::string &key, const std::string &value) void change_cookie classpion_1_1http_1_1message.html a1bfed0c1dc6a76384798c51ae74ea2da (const std::string &key, const std::string &value) void delete_cookie classpion_1_1http_1_1message.html a79e4153703ae62a1b8b0585510d032fd (const std::string &key) const std::string & get_first_line classpion_1_1http_1_1message.html ad9c43932bae03916ad193c257a7ec6c8 (void) const bool has_missing_packets classpion_1_1http_1_1message.html a0ab661db865a6d018e8487a1b4f6932b () const void set_missing_packets classpion_1_1http_1_1message.html ac0749dac4643586e3925d73782840b26 (bool newVal) bool has_data_after_missing_packets classpion_1_1http_1_1message.html a52fd51aca9d5a37f41a0ad18d577ddec () const void set_data_after_missing_packet classpion_1_1http_1_1message.html af9081484fde89d5e8bdfcb689bebdeb1 (bool newVal) void set_is_valid classpion_1_1http_1_1message.html a24b208fd31a21a5bdb76a6ba8683321e (bool b=true) void set_chunks_supported classpion_1_1http_1_1message.html a524e682e0c1843d2bee6ad83c6b9e218 (bool b) void set_remote_ip classpion_1_1http_1_1message.html a476f852158ecaefef8f3e93a84e1f76a (const boost::asio::ip::address &ip) void set_version_major classpion_1_1http_1_1message.html aab454a1ce4eebd904b8ee7fff3dbe5d9 (const boost::uint16_t n) void set_version_minor classpion_1_1http_1_1message.html a311e93b0818ec735a4933e825a55c12e (const boost::uint16_t n) void set_content_length classpion_1_1http_1_1message.html acf2530382367549fb83fe2f3c6fac687 (const boost::uint64_t n) void set_do_not_send_content_length classpion_1_1http_1_1message.html af6cf5b229cacaaec5ea2bac0df53e199 (void) data_status_t get_status classpion_1_1http_1_1message.html aabb2581095e035b5b274ee88442ad9ed () const void set_status classpion_1_1http_1_1message.html ad24b94c3ad437b2044c2658fa34bd78d (data_status_t newVal) void update_content_length_using_header classpion_1_1http_1_1message.html a6a7a6a5114da843c033283a6c1db48aa (void) void update_transfer_encoding_using_header classpion_1_1http_1_1message.html a8118770f69c9a479f3f5dcbc58d6d644 (void) char * create_content_buffer classpion_1_1http_1_1message.html a468f42e5bc2866d9c93138e3a4cec31b (void) void set_content classpion_1_1http_1_1message.html a3600676865fc813897e0ed45b58e5600 (const std::string &content) void clear_content classpion_1_1http_1_1message.html a33567717927344a33bc8332ad3a391a6 (void) void set_content_type classpion_1_1http_1_1message.html add4f889bb2d22e163556c2fd5fd993a8 (const std::string &type) void add_header classpion_1_1http_1_1message.html a115c9657c4933f034dcf2f4ce7bd55f0 (const std::string &key, const std::string &value) void change_header classpion_1_1http_1_1message.html aa1643164e7f60bae1b640d55735a4728 (const std::string &key, const std::string &value) void delete_header classpion_1_1http_1_1message.html a070ef742af75674725da392c25774884 (const std::string &key) bool check_keep_alive classpion_1_1http_1_1message.html ab0aa463a1327eac0d73ff6ab62ca3891 (void) const void prepare_buffers_for_send classpion_1_1http_1_1message.html a668182618dfc614ddbe6c1af26552568 (write_buffers_t &write_buffers, const bool keep_alive, const bool using_chunks) std::size_t send classpion_1_1http_1_1message.html ab90f91badb0f98f900a7624418781bea (tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false) std::size_t receive classpion_1_1http_1_1message.html a7e3c3f1ea265f91b87a9e075234b5d31 (tcp::connection &tcp_conn, boost::system::error_code &ec, parser &http_parser) std::size_t receive classpion_1_1http_1_1message.html a029d3c6260deabf91fdcc9f1f0157268 (tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1)) std::size_t write classpion_1_1http_1_1message.html a4a3911ad03031a1ddacfa4cedeb125a2 (std::ostream &out, boost::system::error_code &ec, bool headers_only=false) std::size_t read classpion_1_1http_1_1message.html a7b67f3e8303d838bb5d379ab72a35e2d (std::istream &in, boost::system::error_code &ec, parser &http_parser) std::size_t read classpion_1_1http_1_1message.html ae99b6c39dd1b878520125f7037c035de (std::istream &in, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1)) void concatenate_chunks classpion_1_1http_1_1message.html aeffca5e2173be2b83f38b630d07f4bfd (void) void prepare_headers_for_send classpion_1_1http_1_1message.html a1addd3b90c3b048c895f9723371f329f (const bool keep_alive, const bool using_chunks) void append_headers classpion_1_1http_1_1message.html a3184733c3a21b8aa44d8f301eaf52697 (write_buffers_t &write_buffers) virtual void append_cookie_headers classpion_1_1http_1_1message.html a532d475ab2dfdcdb969445902fad2e6f (void) void clear_first_line classpion_1_1http_1_1message.html ab47dc3343c9b2cbc7fdf8605e4b7d3b2 (void) const virtual void update_first_line classpion_1_1http_1_1message.html a697a832ab0741d02ddecd8df8da0265d (void) const =0 static const std::string & get_value classpion_1_1http_1_1message.html ada83b932a271cedc95a8318c6822360b (const DictionaryType &dict, const std::string &key) static void change_value classpion_1_1http_1_1message.html a71e183f222d96cdf51ff8d2c773a59d2 (DictionaryType &dict, const std::string &key, const std::string &value) static void delete_value classpion_1_1http_1_1message.html ace95da93ea1a4488f927e9340f2d3f53 (DictionaryType &dict, const std::string &key) std::string m_first_line classpion_1_1http_1_1message.html ad97c570395428af30074bd1b75672125 pion::http::message::content_buffer_t classpion_1_1http_1_1message_1_1content__buffer__t.html ~content_buffer_t classpion_1_1http_1_1message_1_1content__buffer__t.html a3ea8a034039b47b3cbdbab2591812353 () content_buffer_t classpion_1_1http_1_1message_1_1content__buffer__t.html a338e2dbbb2fa4b4ab4eb876837d39d90 () content_buffer_t classpion_1_1http_1_1message_1_1content__buffer__t.html a2f0ef54675bfaa620b4900866b8174e3 (const content_buffer_t &buf) content_buffer_t & operator= classpion_1_1http_1_1message_1_1content__buffer__t.html a79d3e130075949cb148734a4435a404a (const content_buffer_t &buf) bool is_empty classpion_1_1http_1_1message_1_1content__buffer__t.html a709d6984941254634cdb8b3527bb7ad6 () const std::size_t size classpion_1_1http_1_1message_1_1content__buffer__t.html a4af97b94d9c7a9dabcdb61fcf29a6742 () const const char * get classpion_1_1http_1_1message_1_1content__buffer__t.html a0612969681bf2b0a4078e31205e1cd86 () const char * get classpion_1_1http_1_1message_1_1content__buffer__t.html a768b0cce716f2dc01d2371ade49f9616 () void resize classpion_1_1http_1_1message_1_1content__buffer__t.html a1dc5a7c1a0864d7431bd335b7a86f466 (std::size_t len) void clear classpion_1_1http_1_1message_1_1content__buffer__t.html ad4b7e8e9c83c928800d06d78708c1c21 () pion::http::message::receive_error_t structpion_1_1http_1_1message_1_1receive__error__t.html virtual const char * name structpion_1_1http_1_1message_1_1receive__error__t.html ac1ebdeeaa859a18edbd9f2a290a5a1da () const BOOST_SYSTEM_NOEXCEPT virtual std::string message structpion_1_1http_1_1message_1_1receive__error__t.html aea06a28a16d1330a131778e251ac7883 (int ev) const pion::http::parser classpion_1_1http_1_1parser.html pion::http::parser::error_category_t error_value_t classpion_1_1http_1_1parser.html a056c791c4b2dda0dd4c2037dd941d5d8 boost::function2< void, const char *, std::size_t > payload_handler_t classpion_1_1http_1_1parser.html abff772b79d2a912b0f9a4932d8f03a35 parser classpion_1_1http_1_1parser.html a33fe9cfd9bcae8868b817332d38a9261 (const bool is_request, std::size_t max_content_length=DEFAULT_CONTENT_MAX) virtual ~parser classpion_1_1http_1_1parser.html ac9df3da159b11389dba00e222410a599 () boost::tribool parse classpion_1_1http_1_1parser.html aead5bbb8da80c78bc2de3c264e4ace9c (http::message &http_msg, boost::system::error_code &ec) boost::tribool parse_missing_data classpion_1_1http_1_1parser.html ae77669284c876d7b107ba30a78af6d02 (http::message &http_msg, std::size_t len, boost::system::error_code &ec) void finish classpion_1_1http_1_1parser.html afcf9b52d540f78af9177642a5c571362 (http::message &http_msg) const void set_read_buffer classpion_1_1http_1_1parser.html a71fdd1e6e681a3bd932baf2bd6a9f9c9 (const char *ptr, size_t len) void load_read_pos classpion_1_1http_1_1parser.html a3feba34ee7fb1c4f59dda5c1e58d3d82 (const char *&read_ptr, const char *&read_end_ptr) const bool check_premature_eof classpion_1_1http_1_1parser.html ad41eedba2dd5977ffddb1bc65dddc8fc (http::message &http_msg) void parse_headers_only classpion_1_1http_1_1parser.html a1f7f084f396c9c912d65426883b33a38 (bool b=true) void skip_header_parsing classpion_1_1http_1_1parser.html a0fb8ebee189b4c3613ee67c85e2ac9ce (http::message &http_msg) void reset classpion_1_1http_1_1parser.html aed8cfd92c078205e38294bd8109eb2d3 (void) bool eof classpion_1_1http_1_1parser.html adf957476284a4833ea89306e412b1862 (void) const std::size_t bytes_available classpion_1_1http_1_1parser.html a4e8f394a1c2296ac01d2c16c5128b7b4 (void) const std::size_t gcount classpion_1_1http_1_1parser.html ad708d537fabbc3093ea0ea9a519567dc (void) const std::size_t get_total_bytes_read classpion_1_1http_1_1parser.html ae458700259bab34f090832c3bc23ab80 (void) const std::size_t get_content_bytes_read classpion_1_1http_1_1parser.html ab0ca19c444c2d3cf816347422b1c5402 (void) const std::size_t get_max_content_length classpion_1_1http_1_1parser.html a2c6bf6775a9b1d8f1965190ef0dec780 (void) const const std::string & get_raw_headers classpion_1_1http_1_1parser.html a83774cd75b3a549a72ad45da17c99431 (void) const bool get_save_raw_headers classpion_1_1http_1_1parser.html ab5b4e9b0acdd3cd6b4ac3cfcc76c9a6f (void) const bool get_parse_headers_only classpion_1_1http_1_1parser.html a37e691fd12abb6be3bf2f0dda3c412d7 (void) bool is_parsing_request classpion_1_1http_1_1parser.html a94bf8701f781109b664d10e86bd67b8f (void) const bool is_parsing_response classpion_1_1http_1_1parser.html a057f0ee607bef1057902093f12861c1f (void) const void set_payload_handler classpion_1_1http_1_1parser.html a4605c605bf452336f34d7d48fce68ef6 (payload_handler_t &h) void set_max_content_length classpion_1_1http_1_1parser.html a6533144b6f6d1e93dd000360748ac271 (std::size_t n) void reset_max_content_length classpion_1_1http_1_1parser.html a8834a77e417b4127bdda4fa79ff5fe59 (void) void set_save_raw_headers classpion_1_1http_1_1parser.html a06b96d27daaea9ae3dd15f188e01f70b (bool b) void set_logger classpion_1_1http_1_1parser.html a3f93047d2f938a845967d22073122311 (logger log_ptr) logger get_logger classpion_1_1http_1_1parser.html ad799af46a7b4e3f1e27c047f76849d77 (void) boost::tribool finish_header_parsing classpion_1_1http_1_1parser.html ac707ec5cecacf3b56c151e6891c5cf9d (http::message &http_msg, boost::system::error_code &ec) static bool parse_uri classpion_1_1http_1_1parser.html a0688e577644445e854e6e9c1d614fd25 (const std::string &uri, std::string &proto, std::string &host, boost::uint16_t &port, std::string &path, std::string &query) static bool parse_url_encoded classpion_1_1http_1_1parser.html a3cda26a67405acd5ba04ee19bca52ea7 (ihash_multimap &dict, const char *ptr, const std::size_t len) static bool parse_multipart_form_data classpion_1_1http_1_1parser.html aa297a0f51bb5a605fb99f188066d9e15 (ihash_multimap &dict, const std::string &content_type, const char *ptr, const std::size_t len) static bool parse_cookie_header classpion_1_1http_1_1parser.html af9a9744b9376e79d4cc05d8c37533bec (ihash_multimap &dict, const char *ptr, const std::size_t len, bool set_cookie_header) static bool parse_cookie_header classpion_1_1http_1_1parser.html aaf57ebb2c31ecb126d5c4b2aba305417 (ihash_multimap &dict, const std::string &cookie_header, bool set_cookie_header) static bool parse_url_encoded classpion_1_1http_1_1parser.html a988623311585ce6097c90586f5711ee0 (ihash_multimap &dict, const std::string &query) static bool parse_multipart_form_data classpion_1_1http_1_1parser.html a456501e5a0e9b83fb3c030b003b60676 (ihash_multimap &dict, const std::string &content_type, const std::string &form_data) static bool parse_forwarded_for classpion_1_1http_1_1parser.html ab8bd069a0ae8fb51fb8ec6c3d02c065b (const std::string &header, std::string &public_ip) static error_category_t & get_error_category classpion_1_1http_1_1parser.html a9313aa230ae4af4c30702c0605a1f701 (void) static const std::size_t DEFAULT_CONTENT_MAX classpion_1_1http_1_1parser.html a77d2e93061f62e1b7028c783145adf22 virtual void finished_parsing_headers classpion_1_1http_1_1parser.html a1fc33380b9de53103f5f0c2dbabcd0c0 (const boost::system::error_code &ec) boost::tribool parse_headers classpion_1_1http_1_1parser.html a7377c221aaf546cfaf98fdb308c8739e (http::message &http_msg, boost::system::error_code &ec) void update_message_with_header_data classpion_1_1http_1_1parser.html ad1ffb1db7870fa7cfbcfe743a67aca23 (http::message &http_msg) const boost::tribool parse_chunks classpion_1_1http_1_1parser.html a658f65ec298a48e01054490da841f75c (http::message::chunk_cache_t &chunk_buffers, boost::system::error_code &ec) boost::tribool consume_content classpion_1_1http_1_1parser.html aaff1b32ea824c7d7782f8e58346506a7 (http::message &http_msg, boost::system::error_code &ec) std::size_t consume_content_as_next_chunk classpion_1_1http_1_1parser.html ac7234e092bdd29379a23b720e6566f56 (http::message::chunk_cache_t &chunk_buffers) static void compute_msg_status classpion_1_1http_1_1parser.html a50628b4ffc6ab8f0cf46873d6e8075bb (http::message &http_msg, bool msg_parsed_ok) static void set_error classpion_1_1http_1_1parser.html a0d8875ea346743ed37ae0cd7c2a73672 (boost::system::error_code &ec, error_value_t ev) static void create_error_category classpion_1_1http_1_1parser.html ad16455747863108b62c77d89bd5dcf0d (void) static bool is_char classpion_1_1http_1_1parser.html aa1099c00a26a33a615dfd54fd945873c (int c) static bool is_control classpion_1_1http_1_1parser.html aaf665f61057ffc430746134b88f20d11 (int c) static bool is_special classpion_1_1http_1_1parser.html a0e5e96ae29b09b95e407eb63403fa2a3 (int c) static bool is_digit classpion_1_1http_1_1parser.html add90b4c4bb8cc44eb79d2e6ba989ae9a (int c) static bool is_hex_digit classpion_1_1http_1_1parser.html a3d83fdf4309c2b57284759948b2bbc4b (int c) static bool is_cookie_attribute classpion_1_1http_1_1parser.html abeb585af8111e5a5f99d1ce87f6e107b (const std::string &name, bool set_cookie_header) logger m_logger classpion_1_1http_1_1parser.html ac0df021ba559d1af96dc9b0a5fa99df5 const bool m_is_request classpion_1_1http_1_1parser.html a5c24acf28ddd9c6133be4aa3127da530 const char * m_read_ptr classpion_1_1http_1_1parser.html a3ca52095a690cb92197755a5eea24cd7 const char * m_read_end_ptr classpion_1_1http_1_1parser.html a6788da854f2d77ae2c92c739d0a2c191 static const boost::uint32_t STATUS_MESSAGE_MAX classpion_1_1http_1_1parser.html a5480070912368dd015d72d54fcbece66 static const boost::uint32_t METHOD_MAX classpion_1_1http_1_1parser.html ad781cc2dcdb333a8d286a4534d4509cb static const boost::uint32_t RESOURCE_MAX classpion_1_1http_1_1parser.html adf1d822b13731ee6430d5cfd8ad78a95 static const boost::uint32_t QUERY_STRING_MAX classpion_1_1http_1_1parser.html a2ef9e2d01055c727c40cd6af47cbfd2a static const boost::uint32_t HEADER_NAME_MAX classpion_1_1http_1_1parser.html aa0d75346e6643078bb48efe9c382497d static const boost::uint32_t HEADER_VALUE_MAX classpion_1_1http_1_1parser.html a803490d20fadf6ee1253dd9d62844dd8 static const boost::uint32_t QUERY_NAME_MAX classpion_1_1http_1_1parser.html a730afd8438cd3c179bafc7d9eaad27b6 static const boost::uint32_t QUERY_VALUE_MAX classpion_1_1http_1_1parser.html a5b0039834377ba6797d6628acf59f240 static const boost::uint32_t COOKIE_NAME_MAX classpion_1_1http_1_1parser.html a12cb4b88d7debd8467cc9de786721be2 static const boost::uint32_t COOKIE_VALUE_MAX classpion_1_1http_1_1parser.html a50ae5c379ee3ad611fa6874bfcd8ed83 pion::http::parser::error_category_t classpion_1_1http_1_1parser_1_1error__category__t.html const char * name classpion_1_1http_1_1parser_1_1error__category__t.html a8b321a84e109e48fc9313115b27359cf () const BOOST_SYSTEM_NOEXCEPT std::string message classpion_1_1http_1_1parser_1_1error__category__t.html aeb4d9dcd75fe161241e0f691cfab99d9 (int ev) const pion::http::plugin_server classpion_1_1http_1_1plugin__server.html pion::http::server virtual ~plugin_server classpion_1_1http_1_1plugin__server.html a1a13fd90941df5f55fe031fb3e7cd112 () plugin_server classpion_1_1http_1_1plugin__server.html a1665134bc973811e4f56d9f9824a3d2e (const unsigned int tcp_port=0) plugin_server classpion_1_1http_1_1plugin__server.html abeb581d6ccb5b2a2e7758fdda5f823a1 (const boost::asio::ip::tcp::endpoint &endpoint) plugin_server classpion_1_1http_1_1plugin__server.html aded4ff4815ca2b9823e0b1d2d41d5e36 (scheduler &sched, const unsigned int tcp_port=0) plugin_server classpion_1_1http_1_1plugin__server.html a31afd25acb341046ed1bb02ae7097776 (scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint) void add_service classpion_1_1http_1_1plugin__server.html a03cfde741f7ab4cfd55477c138b7e222 (const std::string &resource, http::plugin_service *service_ptr) void load_service classpion_1_1http_1_1plugin__server.html af528e5b824fe420f2193512a3ccb204f (const std::string &resource, const std::string &service_name) void set_service_option classpion_1_1http_1_1plugin__server.html abc695deb661af5e24953a1a43e9b56fd (const std::string &resource, const std::string &name, const std::string &value) void load_service_config classpion_1_1http_1_1plugin__server.html a5da474d4ecbc39ef8ab6ab92e4b5e526 (const std::string &config_name) virtual void clear classpion_1_1http_1_1plugin__server.html a81c0779f8ddda5cdb6e05e1b74ec2fee (void) virtual void before_starting classpion_1_1http_1_1plugin__server.html af1384c8177300053f36bc705ca0fa9bf (void) virtual void after_stopping classpion_1_1http_1_1plugin__server.html aacd60688763e91387f6bd885cad5acfe (void) pion::http::plugin_service classpion_1_1http_1_1plugin__service.html plugin_service classpion_1_1http_1_1plugin__service.html a587b482f3e8d7bd03ac0d7d693538b23 (void) virtual ~plugin_service classpion_1_1http_1_1plugin__service.html a1d7ffeb7d24a0ab951562031b7c16552 () virtual void operator() classpion_1_1http_1_1plugin__service.html a2ea7bfac96e9d5fc2dbd327871540621 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)=0 virtual void set_option classpion_1_1http_1_1plugin__service.html a49cddd4c2a99e276373b5f7162ff3cde (const std::string &name, const std::string &value) virtual void start classpion_1_1http_1_1plugin__service.html acb534a38c423ead57c98d07077579ecc (void) virtual void stop classpion_1_1http_1_1plugin__service.html a6d8c34f35f95d8e45c5476314bebdf6f (void) void set_resource classpion_1_1http_1_1plugin__service.html a081c90dafdae862ca35b4684eaed4b36 (const std::string &str) const std::string & get_resource classpion_1_1http_1_1plugin__service.html ae65490a94aeeabfdb0f890dc9a93e0be (void) const std::string get_relative_resource classpion_1_1http_1_1plugin__service.html a72659ae4dfd83e5a8411e5f1e9bf8dcb (const std::string &resource_requested) const pion::http::reader classpion_1_1http_1_1reader.html pion::http::parser void receive classpion_1_1http_1_1reader.html af9f883cb767252fb9976e229e68f20ea (void) tcp::connection_ptr & get_connection classpion_1_1http_1_1reader.html a6df8c9dd8f6587b49eb54ce4f7ace431 (void) void set_timeout classpion_1_1http_1_1reader.html aabe13844673a420869d0e0fe31e198ad (boost::uint32_t seconds) reader classpion_1_1http_1_1reader.html a32970499fa606eb9a8a71ce7afbcf252 (const bool is_request, tcp::connection_ptr &tcp_conn) void consume_bytes classpion_1_1http_1_1reader.html afd7a8af3a502d6863ef5c2166d3d7208 (const boost::system::error_code &read_error, std::size_t bytes_read) void consume_bytes classpion_1_1http_1_1reader.html acc3496a25c7bd1fb3ecc704ed752b190 (void) virtual void read_bytes classpion_1_1http_1_1reader.html a8a3b9767dc84fd1a6ee0e1558ec3d76e (void)=0 virtual void finished_reading classpion_1_1http_1_1reader.html ae7d3818810df72a7d2895ff1f767be9b (const boost::system::error_code &ec)=0 virtual http::message & get_message classpion_1_1http_1_1reader.html a6186ceb636d352cae97c33fe105bd9a3 (void)=0 pion::http::request classpion_1_1http_1_1request.html pion::http::message request classpion_1_1http_1_1request.html a186975ae3a5cb72c0faeb0f8f66ce594 (const std::string &resource) request classpion_1_1http_1_1request.html a4cf48bf36c01ed7899b72784e01adf83 (void) virtual ~request classpion_1_1http_1_1request.html a6b8d3e709899131b6d23ce623af4a7d3 () virtual void clear classpion_1_1http_1_1request.html a820ac867130387a16859a6cf9ca77c74 (void) virtual bool is_content_length_implied classpion_1_1http_1_1request.html a9ec7262ec35b4282ea66cf07e49fd4fb (void) const const std::string & get_method classpion_1_1http_1_1request.html a43fa910a94a42fe8b26700a94ab9c3c2 (void) const const std::string & get_resource classpion_1_1http_1_1request.html a929787cdfb1a8cca18c1971e3cfc5d54 (void) const const std::string & get_original_resource classpion_1_1http_1_1request.html a79e8400cd9f7b956a4116b9bf218486b (void) const const std::string & get_query_string classpion_1_1http_1_1request.html a0a4f0e3f4ee577db353a55524efb3526 (void) const const std::string & get_query classpion_1_1http_1_1request.html aee545d0144035125655d0a4de441820a (const std::string &key) const ihash_multimap & get_queries classpion_1_1http_1_1request.html a2e75b875b0858057b6b4bd6255f7424f (void) bool has_query classpion_1_1http_1_1request.html ac0da1fdcb02cf58ab0391d9f7955aeab (const std::string &key) const void set_method classpion_1_1http_1_1request.html a0878aad94ef74810b8df2670a17c22b2 (const std::string &str) void set_resource classpion_1_1http_1_1request.html a421f57b069fd2442397dbcdb8c382a87 (const std::string &str) void change_resource classpion_1_1http_1_1request.html a2e0eff2dbba55adc260b13a8be013e8c (const std::string &str) void set_query_string classpion_1_1http_1_1request.html adbcb876e6bf19efb6a84802d90347e2b (const std::string &str) void add_query classpion_1_1http_1_1request.html a4167f9aed250f3f7cb6d935b5787bbba (const std::string &key, const std::string &value) void change_query classpion_1_1http_1_1request.html a5bc1d88faa0f3bb054f32c7ff0257f3b (const std::string &key, const std::string &value) void delete_query classpion_1_1http_1_1request.html acfcd67cdc0c390f3c264935718fe0b57 (const std::string &key) void use_query_params_for_query_string classpion_1_1http_1_1request.html aa3dd2b6074201004ea631051367b21d7 (void) void use_query_params_for_post_content classpion_1_1http_1_1request.html abb1410c7dbbdc3a18997ee2486585106 (void) void set_content classpion_1_1http_1_1request.html a343d9892b3a658acd3a28eadb908748d (const std::string &value) void set_content classpion_1_1http_1_1request.html a32575a6e5a38592d986822557fd1cf40 (const char *value, const boost::uint64_t &size) void set_user classpion_1_1http_1_1request.html abe13dc66982da6ab6cc08ff68710d4af (user_ptr user) user_ptr get_user classpion_1_1http_1_1request.html a0c525f2d99bad69e67353cb2478c6b74 () const virtual void update_first_line classpion_1_1http_1_1request.html a48f4d55f5be5e6bed2936ad8efa8b8ff (void) const virtual void append_cookie_headers classpion_1_1http_1_1request.html a17fbce903b00388346ad85e8b3d997b3 (void) pion::http::request_reader classpion_1_1http_1_1request__reader.html pion::http::reader boost::function3< void, http::request_ptr, tcp::connection_ptr, const boost::system::error_code & > finished_handler_t classpion_1_1http_1_1request__reader.html a4cc323f3e852134f2ac785e51e1d623e void set_headers_parsed_callback classpion_1_1http_1_1request__reader.html a858278778288495a8045bee27b2637ab (finished_handler_t &h) static boost::shared_ptr< request_reader > create classpion_1_1http_1_1request__reader.html a889653828718972c32e8671a3b6e29b0 (tcp::connection_ptr &tcp_conn, finished_handler_t handler) request_reader classpion_1_1http_1_1request__reader.html af8900b4977a16edd264bf4c68b1fa327 (tcp::connection_ptr &tcp_conn, finished_handler_t handler) virtual void read_bytes classpion_1_1http_1_1request__reader.html a0414343e9f3376f751230ba4483d74ae (void) virtual void finished_parsing_headers classpion_1_1http_1_1request__reader.html abe3db3cee63f040d4af8ce72263f01f1 (const boost::system::error_code &ec) virtual void finished_reading classpion_1_1http_1_1request__reader.html aeeb55569c505d21767389ddcb5c51633 (const boost::system::error_code &ec) virtual http::message & get_message classpion_1_1http_1_1request__reader.html a62124c27ecd6404e7f1124391adabfd4 (void) http::request_ptr m_http_msg classpion_1_1http_1_1request__reader.html a670ecf2327f01509109043f182a04ab7 finished_handler_t m_finished classpion_1_1http_1_1request__reader.html a035b12eef619e4223c141686c55d2686 finished_handler_t m_parsed_headers classpion_1_1http_1_1request__reader.html ac57f7fe823e1a5c560907fa192b56fd5 pion::http::request_writer classpion_1_1http_1_1request__writer.html pion::http::writer virtual ~request_writer classpion_1_1http_1_1request__writer.html a4e864e362bfa9d132175f80503b32782 () http::request & get_request classpion_1_1http_1_1request__writer.html a16c7f5af36362dbb360fc46fd591c2b2 (void) static boost::shared_ptr< request_writer > create classpion_1_1http_1_1request__writer.html a48f732224837b249560dedbaba56096d (tcp::connection_ptr &tcp_conn, finished_handler_t handler=finished_handler_t()) static boost::shared_ptr< request_writer > create classpion_1_1http_1_1request__writer.html a2384146dc06aa0340ccbd6014bb0be8a (tcp::connection_ptr &tcp_conn, http::request_ptr &http_request_ptr, finished_handler_t handler=finished_handler_t()) request_writer classpion_1_1http_1_1request__writer.html a5d7e26703684a0214af3ce5df33add84 (tcp::connection_ptr &tcp_conn, finished_handler_t handler) request_writer classpion_1_1http_1_1request__writer.html a2b75e1dae183e7d7eaa43adbf8a36584 (tcp::connection_ptr &tcp_conn, http::request_ptr &http_request_ptr, finished_handler_t handler) virtual void prepare_buffers_for_send classpion_1_1http_1_1request__writer.html aeef6096bf4fa008248be93a3c3158c2d (http::message::write_buffers_t &write_buffers) virtual write_handler_t bind_to_write_handler classpion_1_1http_1_1request__writer.html a1ac6c4591f4a936391e78f394e18c9ed (void) virtual void handle_write classpion_1_1http_1_1request__writer.html a8cb6beccbb5f89356be78935f2ca59d4 (const boost::system::error_code &write_error, std::size_t bytes_written) pion::http::response classpion_1_1http_1_1response.html pion::http::message response classpion_1_1http_1_1response.html af459c78b24147ae4bd1bea8c2da2d294 (const http::request &http_request_ptr) response classpion_1_1http_1_1response.html a18b0b58e5ae3a7d885745907e0ac9cd6 (const std::string &request_method) response classpion_1_1http_1_1response.html aa6d18e376129813e953d7b100a82e199 (const response &http_response) response classpion_1_1http_1_1response.html a05a0b5ff4bd220b250b887ce148a6bbc (void) virtual ~response classpion_1_1http_1_1response.html a9802a656f1dc6c0a9ecc706c06167dc6 () virtual void clear classpion_1_1http_1_1response.html a0713749f7a9ac79b6e04a753e7332e83 (void) virtual bool is_content_length_implied classpion_1_1http_1_1response.html ad9e7b85bac1ad8f69145ccc719efd3da (void) const void update_request_info classpion_1_1http_1_1response.html a6a2428e8d529db703e14260fab28f887 (const http::request &http_request) void set_status_code classpion_1_1http_1_1response.html a3f84cd25cec31c9ca4b0b5718f6d58ed (unsigned int n) void set_status_message classpion_1_1http_1_1response.html a0d991f62da50d7bd74c0d21334bec2b9 (const std::string &msg) unsigned int get_status_code classpion_1_1http_1_1response.html a31c291703dda1fd25efc920b9b35fca2 (void) const const std::string & get_status_message classpion_1_1http_1_1response.html a58829c8e1cbb298135fd1c3895b54ba8 (void) const void set_cookie classpion_1_1http_1_1response.html a49aa79083d321eabfc4991aa0194fb09 (const std::string &name, const std::string &value) void set_cookie classpion_1_1http_1_1response.html a5e913a111e16773e2da83adf036a1431 (const std::string &name, const std::string &value, const std::string &path) void set_cookie classpion_1_1http_1_1response.html ad5d56b58acc9a5f93f66f48972749345 (const std::string &name, const std::string &value, const std::string &path, const unsigned long max_age) void set_cookie classpion_1_1http_1_1response.html aca578f57f31824c1f5b04682c5f65883 (const std::string &name, const std::string &value, const unsigned long max_age) void delete_cookie classpion_1_1http_1_1response.html a966ca40fe93496d7eae90b4d6c1afe69 (const std::string &name) void delete_cookie classpion_1_1http_1_1response.html a3886a2d0fc05db863dd23c3269b509eb (const std::string &name, const std::string &path) void set_last_modified classpion_1_1http_1_1response.html a224bbb594892c7a04ada36afa0dc1d1e (const unsigned long t) virtual void update_first_line classpion_1_1http_1_1response.html a2777a77848e97f3ea205ccfaaa06c0bf (void) const virtual void append_cookie_headers classpion_1_1http_1_1response.html ad86616700baf2ba068268b3fd725d5f8 (void) pion::http::response_reader classpion_1_1http_1_1response__reader.html pion::http::reader boost::function3< void, http::response_ptr, tcp::connection_ptr, const boost::system::error_code & > finished_handler_t classpion_1_1http_1_1response__reader.html a5ca8a2f566ad6c5f6c6ae264d557944e void set_headers_parsed_callback classpion_1_1http_1_1response__reader.html acbf0d25e943c1947a928970792b6a273 (finished_handler_t &h) static boost::shared_ptr< response_reader > create classpion_1_1http_1_1response__reader.html aebcf3650734f6741d7e051c08a384047 (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler) response_reader classpion_1_1http_1_1response__reader.html a6eafb47360b3e50d9cf6c78c4612fcdb (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler) virtual void read_bytes classpion_1_1http_1_1response__reader.html a538144396cd3744d01972fe857902c06 (void) virtual void finished_parsing_headers classpion_1_1http_1_1response__reader.html a0108970a1783d3983dbfa16ba5d90e31 (const boost::system::error_code &ec) virtual void finished_reading classpion_1_1http_1_1response__reader.html a775a668c0fa10535ca7bf28103b1fdc6 (const boost::system::error_code &ec) virtual http::message & get_message classpion_1_1http_1_1response__reader.html a9bd4bf810cb215ddf36f6cec31f5d078 (void) http::response_ptr m_http_msg classpion_1_1http_1_1response__reader.html ac06fea6a8b6b5383dacd99c313b6f77d finished_handler_t m_finished classpion_1_1http_1_1response__reader.html aff7c50ffd2cb1748620b6051d8f9233c finished_handler_t m_parsed_headers classpion_1_1http_1_1response__reader.html a1671bc073f332ea3c14a09af89c99c83 pion::http::response_writer classpion_1_1http_1_1response__writer.html pion::http::writer virtual ~response_writer classpion_1_1http_1_1response__writer.html a5e5e539e05550960f3a2819fe5b13a1a () http::response & get_response classpion_1_1http_1_1response__writer.html a65ab6d2a64ac7c76b8bccf4fcf8fc603 (void) static boost::shared_ptr< response_writer > create classpion_1_1http_1_1response__writer.html a75084960d3162f724342ae947e7d07e3 (tcp::connection_ptr &tcp_conn, http::response_ptr &http_response_ptr, finished_handler_t handler=finished_handler_t()) static boost::shared_ptr< response_writer > create classpion_1_1http_1_1response__writer.html a6d4e70e5acce84272f8acdc5833320f4 (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler=finished_handler_t()) response_writer classpion_1_1http_1_1response__writer.html a7203e168df87def5ad07cdfa8bae16af (tcp::connection_ptr &tcp_conn, http::response_ptr &http_response_ptr, finished_handler_t handler) response_writer classpion_1_1http_1_1response__writer.html abd234468a489ea3efe1e9280256efddd (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler) virtual void prepare_buffers_for_send classpion_1_1http_1_1response__writer.html a5f18282e90307978ca33be6c4e4f7bf9 (http::message::write_buffers_t &write_buffers) virtual write_handler_t bind_to_write_handler classpion_1_1http_1_1response__writer.html a95b3d41b77828f8ec14862c03accb58a (void) virtual void handle_write classpion_1_1http_1_1response__writer.html a216d682fd204bd15e92b2babb55c216a (const boost::system::error_code &write_error, std::size_t bytes_written) pion::http::server classpion_1_1http_1_1server.html pion::tcp::server boost::function2< void, http::request_ptr &, tcp::connection_ptr & > request_handler_t classpion_1_1http_1_1server.html a74c41bc6ca8355497abb1401339a1306 boost::function3< void, http::request_ptr &, tcp::connection_ptr &, const std::string & > error_handler_t classpion_1_1http_1_1server.html a699708eee95801f47d59cb9f2279ab4b virtual ~server classpion_1_1http_1_1server.html a5632ccba73177582414d649c6316362d () server classpion_1_1http_1_1server.html a12ed7b808ae35c5e503f9d23d73860d7 (const unsigned int tcp_port=0) server classpion_1_1http_1_1server.html ac63e91762958da5d8122a1be80650382 (const boost::asio::ip::tcp::endpoint &endpoint) server classpion_1_1http_1_1server.html abdfcbc45db2b886e3bfcf0c6b867b0c2 (scheduler &sched, const unsigned int tcp_port=0) server classpion_1_1http_1_1server.html ae84f4442d8bd468a1d77a1c96e29e681 (scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint) void add_resource classpion_1_1http_1_1server.html a312ad564b529bda2b4ddd12f02fd6d62 (const std::string &resource, request_handler_t request_handler) void remove_resource classpion_1_1http_1_1server.html ac75fe5968f4d5e5c68e6328d483d0794 (const std::string &resource) void add_redirect classpion_1_1http_1_1server.html a114c86a620ac425e4da9ebacebda3f21 (const std::string &requested_resource, const std::string &new_resource) void set_bad_request_handler classpion_1_1http_1_1server.html ae519fa972938c911f02b0ec156615a0d (request_handler_t h) void set_not_found_handler classpion_1_1http_1_1server.html a817a94e4117d2d8616c37b5f8d093e92 (request_handler_t h) void set_error_handler classpion_1_1http_1_1server.html ae88ab890a352b5bb389cbc8e6363e671 (error_handler_t h) virtual void clear classpion_1_1http_1_1server.html af7e7f7b23f1d90d1e1e7171a33b29d7b (void) void set_authentication classpion_1_1http_1_1server.html a5ccee5bdd4d7f59a348dd9475cba7ded (http::auth_ptr auth) void set_max_content_length classpion_1_1http_1_1server.html acf80fa19484a66649c89cf9a23cc9251 (std::size_t n) static std::string strip_trailing_slash classpion_1_1http_1_1server.html a375e54d0970e5d3dfc0eb50f902cf4c9 (const std::string &str) static void handle_bad_request classpion_1_1http_1_1server.html a080297b6789515f60ef8b856d6e0f372 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn) static void handle_not_found_request classpion_1_1http_1_1server.html ae2484144be6281ac5c1cbbcea99da81b (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn) static void handle_server_error classpion_1_1http_1_1server.html aae06fc86091293ff3168822f0018c183 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg) static void handle_forbidden_request classpion_1_1http_1_1server.html acc9ff11da47156419e059bebdddb5941 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg) static void handle_method_not_allowed classpion_1_1http_1_1server.html a6c9f8330d4c0569da5f719438dccbc22 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &allowed_methods="") virtual void handle_connection classpion_1_1http_1_1server.html a3366fd6be76ebb5ade34413be330aa6a (tcp::connection_ptr &tcp_conn) virtual void handle_request classpion_1_1http_1_1server.html ad3e6180d412e8d2f135423e7e15f43ea (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const boost::system::error_code &ec) virtual bool find_request_handler classpion_1_1http_1_1server.html a2a0e8e0c21438a9928e680cb0d94430c (const std::string &resource, request_handler_t &request_handler) const pion::http::types structpion_1_1http_1_1types.html virtual ~types structpion_1_1http_1_1types.html abb9f73024856ac4c582259781a70b02b () static std::string get_date_string structpion_1_1http_1_1types.html a7772dbeb3b5bdde2387f8899d358087e (const time_t t) static std::string make_query_string structpion_1_1http_1_1types.html aa8d84f3f7199fc20715d67d096ecfa9b (const ihash_multimap &query_params) static std::string make_set_cookie_header structpion_1_1http_1_1types.html a1908960aabfff3e1c263018f659f62c0 (const std::string &name, const std::string &value, const std::string &path, const bool has_max_age=false, const unsigned long max_age=0) static const std::string STRING_EMPTY structpion_1_1http_1_1types.html ac329dd732e03e0a0b1651a84d629280d static const std::string STRING_CRLF structpion_1_1http_1_1types.html a2716c2eefa7527fd8e342f82cc45f1b8 static const std::string STRING_HTTP_VERSION structpion_1_1http_1_1types.html a432751abff7daf4f043a8f48a0a9e326 static const std::string HEADER_NAME_VALUE_DELIMITER structpion_1_1http_1_1types.html a483a9875308673605d6f9e826a374970 static const std::string COOKIE_NAME_VALUE_DELIMITER structpion_1_1http_1_1types.html a8f2d833388e71b234d388a1f2770480a static const std::string HEADER_HOST structpion_1_1http_1_1types.html a841eb803243259e069139fa6dcd51754 static const std::string HEADER_COOKIE structpion_1_1http_1_1types.html a0d1f132b8dbf10181c0d05ebaaf0ebb0 static const std::string HEADER_SET_COOKIE structpion_1_1http_1_1types.html a70871332398ee2aedfc481277d734a58 static const std::string HEADER_CONNECTION structpion_1_1http_1_1types.html a86316d32031150a01bd2c19e92303967 static const std::string HEADER_CONTENT_TYPE structpion_1_1http_1_1types.html af5e0cb6e2855a5d0e0f46dbe177799a5 static const std::string HEADER_CONTENT_LENGTH structpion_1_1http_1_1types.html aa942d4adb41ec6b7418615f2cf84670d static const std::string HEADER_CONTENT_LOCATION structpion_1_1http_1_1types.html af5f9c5484ed5334c2cd33cfacb353288 static const std::string HEADER_CONTENT_ENCODING structpion_1_1http_1_1types.html aed13bd484d84e216c96b056fea7a7527 static const std::string HEADER_CONTENT_DISPOSITION structpion_1_1http_1_1types.html a514e757b37679add3b57c88209e46ab3 static const std::string HEADER_LAST_MODIFIED structpion_1_1http_1_1types.html a9873e0461ffbdace4e7d6cbe007ba3ed static const std::string HEADER_IF_MODIFIED_SINCE structpion_1_1http_1_1types.html a33ecae14c2b1ab25c04a823e14571d7c static const std::string HEADER_TRANSFER_ENCODING structpion_1_1http_1_1types.html a3b39d44f38cbc04b75cfd4d9c0e5b18a static const std::string HEADER_LOCATION structpion_1_1http_1_1types.html a3d86eec9408f000aa26f84f7f6e4a098 static const std::string HEADER_AUTHORIZATION structpion_1_1http_1_1types.html a631e29eb1f859c41ae65a6a2861e60ac static const std::string HEADER_REFERER structpion_1_1http_1_1types.html a39efd8df51b418623d822f156b4b7e05 static const std::string HEADER_USER_AGENT structpion_1_1http_1_1types.html af910e9d9d8748d77d5f3a5b79c459b77 static const std::string HEADER_X_FORWARDED_FOR structpion_1_1http_1_1types.html ab9ddd93284acb0162b389e465708fb1d static const std::string HEADER_CLIENT_IP structpion_1_1http_1_1types.html abdbd353ba458a132ef432bcbffa02f75 static const std::string CONTENT_TYPE_HTML structpion_1_1http_1_1types.html a02850c07dccf6c375ee662bb46cbcfed static const std::string CONTENT_TYPE_TEXT structpion_1_1http_1_1types.html a503a1918d9f37cc4ec6bd4229d3952bf static const std::string CONTENT_TYPE_XML structpion_1_1http_1_1types.html a49900068a6ffb8699df017f689a3bdb9 static const std::string CONTENT_TYPE_URLENCODED structpion_1_1http_1_1types.html a7c3a7283e007c9666c2e97ad9b5eecfa static const std::string CONTENT_TYPE_MULTIPART_FORM_DATA structpion_1_1http_1_1types.html ab85889d9ccd680e47988646d290b0725 static const std::string REQUEST_METHOD_HEAD structpion_1_1http_1_1types.html af988464448ca2741b8277b464ade4d16 static const std::string REQUEST_METHOD_GET structpion_1_1http_1_1types.html a41df465e1665956a34c25401943c8a1f static const std::string REQUEST_METHOD_PUT structpion_1_1http_1_1types.html a3740184a9ca3686a2e7ec0a6a5869971 static const std::string REQUEST_METHOD_POST structpion_1_1http_1_1types.html a31458141c7a1704b8e24fbfaa0f92e6c static const std::string REQUEST_METHOD_DELETE structpion_1_1http_1_1types.html a442f3bad1e148210bc02b364a13bd703 static const std::string RESPONSE_MESSAGE_OK structpion_1_1http_1_1types.html a0aaeb54afab3950bd0c36e6213e997be static const std::string RESPONSE_MESSAGE_CREATED structpion_1_1http_1_1types.html aebc4500ff17c3fe3c89f81ef24da765f static const std::string RESPONSE_MESSAGE_ACCEPTED structpion_1_1http_1_1types.html ae73856adf6fa589178d5c88cd6285974 static const std::string RESPONSE_MESSAGE_NO_CONTENT structpion_1_1http_1_1types.html aa883de68ebea3c99a630f506acbc15ad static const std::string RESPONSE_MESSAGE_FOUND structpion_1_1http_1_1types.html a3c4967430712b0756c053c3cdd7a8494 static const std::string RESPONSE_MESSAGE_UNAUTHORIZED structpion_1_1http_1_1types.html a587d94bed01177054387f448b7c5287c static const std::string RESPONSE_MESSAGE_FORBIDDEN structpion_1_1http_1_1types.html ab08701ef8170cbb0514f813f3846dd7d static const std::string RESPONSE_MESSAGE_NOT_FOUND structpion_1_1http_1_1types.html a2a3504c60731df6c0aa6f77b4aeb0b23 static const std::string RESPONSE_MESSAGE_METHOD_NOT_ALLOWED structpion_1_1http_1_1types.html ae21baafd36761b8bb82a2c06c5565cf1 static const std::string RESPONSE_MESSAGE_NOT_MODIFIED structpion_1_1http_1_1types.html ade4b1c7fb04dbf6b323a21f7d1959330 static const std::string RESPONSE_MESSAGE_BAD_REQUEST structpion_1_1http_1_1types.html a8b1ca932d6f4b9061bef4e7cc3fca724 static const std::string RESPONSE_MESSAGE_SERVER_ERROR structpion_1_1http_1_1types.html a27379812e3cfc86bf6ef43e873b25231 static const std::string RESPONSE_MESSAGE_NOT_IMPLEMENTED structpion_1_1http_1_1types.html ad65de0d9732bfdb57998871b071c4aba static const std::string RESPONSE_MESSAGE_CONTINUE structpion_1_1http_1_1types.html acb63fcfb74186e6fed84492d02735417 static const unsigned int RESPONSE_CODE_OK structpion_1_1http_1_1types.html a5f5e6e1a214b3b91313843fa8f36cc4c static const unsigned int RESPONSE_CODE_CREATED structpion_1_1http_1_1types.html a72a0af74251c62d7271f70369c0b7c55 static const unsigned int RESPONSE_CODE_ACCEPTED structpion_1_1http_1_1types.html ad6627bcaec2488da093e8ad6ebd8bc22 static const unsigned int RESPONSE_CODE_NO_CONTENT structpion_1_1http_1_1types.html ab31ecbc138d67e5e098e16bc21c55bd4 static const unsigned int RESPONSE_CODE_FOUND structpion_1_1http_1_1types.html ab24b9a4098bce2885dfd3e2eb846a901 static const unsigned int RESPONSE_CODE_UNAUTHORIZED structpion_1_1http_1_1types.html a04e9680b7d896983fefe6d256d54094d static const unsigned int RESPONSE_CODE_FORBIDDEN structpion_1_1http_1_1types.html a5d02faf5aa46957db9b4d01f6134c7c9 static const unsigned int RESPONSE_CODE_NOT_FOUND structpion_1_1http_1_1types.html af6392ad941d01c446d95999252888f45 static const unsigned int RESPONSE_CODE_METHOD_NOT_ALLOWED structpion_1_1http_1_1types.html afdaf4bd3e562cc81ac01e4261d190b60 static const unsigned int RESPONSE_CODE_NOT_MODIFIED structpion_1_1http_1_1types.html a6479482d3538737851c92b5dca0ee2b4 static const unsigned int RESPONSE_CODE_BAD_REQUEST structpion_1_1http_1_1types.html a45e55c48104a6511f28467d8f44bb48c static const unsigned int RESPONSE_CODE_SERVER_ERROR structpion_1_1http_1_1types.html a685d49b20c27b0d2b9365edd374416b9 static const unsigned int RESPONSE_CODE_NOT_IMPLEMENTED structpion_1_1http_1_1types.html a633343f33f232ed411511ec18f112d7c static const unsigned int RESPONSE_CODE_CONTINUE structpion_1_1http_1_1types.html a65920fc72bb4d4d9b7c44b3f7fa8f539 pion::http::writer classpion_1_1http_1_1writer.html pion::http::writer::binary_cache_t virtual ~writer classpion_1_1http_1_1writer.html ae8a84fa8012af64f2b5c22582f37f0ef () void clear classpion_1_1http_1_1writer.html a17e88be48ecde04b8dbe54239a14dc25 (void) void write classpion_1_1http_1_1writer.html a5bd3e415e5490cf68bdb9636620e49b4 (const T &data) void write classpion_1_1http_1_1writer.html aaa847dd2364e85844395fc4815a654ca (std::ostream &(*iomanip)(std::ostream &)) void write classpion_1_1http_1_1writer.html a8b0b29526fb03597934145eb9f21e932 (const void *data, size_t length) void write_no_copy classpion_1_1http_1_1writer.html ad82908f247f558770c6c4d9f58d2a5f2 (const std::string &data) void write_no_copy classpion_1_1http_1_1writer.html a33832b2c08f3696a50614d0ad3c886a9 (void *data, size_t length) void send classpion_1_1http_1_1writer.html a6c96aa95d710babcf5096d8294f703d5 (void) void send classpion_1_1http_1_1writer.html a116467a20091c4a6a76aee0d9975f15b (SendHandler send_handler) void send_chunk classpion_1_1http_1_1writer.html a5f706e22dcd821092dd256248b3ba474 (SendHandler send_handler) void send_final_chunk classpion_1_1http_1_1writer.html ab95475d6a9a21a94a8eff798ecf37b14 (SendHandler send_handler) void send_final_chunk classpion_1_1http_1_1writer.html a902953ed4ab1f0a009f8fc4517735351 (void) tcp::connection_ptr & get_connection classpion_1_1http_1_1writer.html ae65148e4a1e72266e64c4ab1ceed2c17 (void) size_t get_content_length classpion_1_1http_1_1writer.html a980285662a960320b561e419563a83e2 (void) const void supports_chunked_messages classpion_1_1http_1_1writer.html ae2d856d25a3e4859d3f5f86d4d269364 (bool b) bool supports_chunked_messages classpion_1_1http_1_1writer.html ab7a31c41238ac7524eb8a2cc461a153b () const bool sending_chunked_message classpion_1_1http_1_1writer.html a7a9f95f0cc0ccf1d091a94d5ba5ecebc () const void set_logger classpion_1_1http_1_1writer.html a25f0a6f75c22eb95d619ae600c0f2121 (logger log_ptr) logger get_logger classpion_1_1http_1_1writer.html a58c000ca432c7c168ebd666f4bd17c30 (void) boost::function1< void, const boost::system::error_code & > finished_handler_t classpion_1_1http_1_1writer.html a7e3ce4b88e0427adf673a99fca3af982 boost::function2< void, const boost::system::error_code &, std::size_t > write_handler_t classpion_1_1http_1_1writer.html a36fa31c850362d907559a0c1157a1bf3 writer classpion_1_1http_1_1writer.html a50963534a051029e1645ce6386774192 (tcp::connection_ptr &tcp_conn, finished_handler_t handler) virtual void handle_write classpion_1_1http_1_1writer.html a8bf871122153a6048ca5b21cacf5310c (const boost::system::error_code &write_error, std::size_t bytes_written)=0 virtual void prepare_buffers_for_send classpion_1_1http_1_1writer.html ab7a583948d97402772dc1fe2e87bcf66 (http::message::write_buffers_t &write_buffers)=0 virtual write_handler_t bind_to_write_handler classpion_1_1http_1_1writer.html acea77b1d3cd2af31f4f1f410900aa207 (void)=0 void finished_writing classpion_1_1http_1_1writer.html a28a73762ddc3c59091aa44d10adad5ea (const boost::system::error_code &ec) pion::plugins::AllowNothingService classpion_1_1plugins_1_1_allow_nothing_service.html pion::http::plugin_service virtual void operator() classpion_1_1plugins_1_1_allow_nothing_service.html ad2d81ee952406b541dae3c482cd564a9 (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) pion::plugins::CookieService classpion_1_1plugins_1_1_cookie_service.html pion::http::plugin_service virtual void operator() classpion_1_1plugins_1_1_cookie_service.html a22b641486c3d9aa0a952268ea5cea444 (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) pion::plugins::EchoService classpion_1_1plugins_1_1_echo_service.html pion::http::plugin_service virtual void operator() classpion_1_1plugins_1_1_echo_service.html ad9cd0b8b88039e2f08bc4333fc576656 (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) pion::plugins::DiskFile classpion_1_1plugins_1_1_disk_file.html DiskFile classpion_1_1plugins_1_1_disk_file.html a06b1d484c4da504c93b654b45dcd79a6 (void) DiskFile classpion_1_1plugins_1_1_disk_file.html ae10735756b815f54695395689fd8ea74 (const boost::filesystem::path &path, char *content, unsigned long size, std::time_t modified, const std::string &mime) DiskFile classpion_1_1plugins_1_1_disk_file.html a7797fe60cf1bc8599eeb6a6eeabf7283 (const DiskFile &f) void update classpion_1_1plugins_1_1_disk_file.html ab139af7298f05de181f07fb0ecc4f7e4 (void) void read classpion_1_1plugins_1_1_disk_file.html aaa53b41c7c20d2615d445a90fa088636 (void) bool checkUpdated classpion_1_1plugins_1_1_disk_file.html ada8bf6e3c5f225b11a69c5a0efd47c30 (void) const boost::filesystem::path & getFilePath classpion_1_1plugins_1_1_disk_file.html a5a70cb52e6d8626c70b4b5632d3f0ce5 (void) const char * getFileContent classpion_1_1plugins_1_1_disk_file.html ad5427b8069d1d6843024598594e23874 (void) bool hasFileContent classpion_1_1plugins_1_1_disk_file.html ae843f23a6a94d61a45422c9441b39200 (void) const unsigned long getFileSize classpion_1_1plugins_1_1_disk_file.html a31ef9453375d649069d29e37773c0283 (void) const std::time_t getLastModified classpion_1_1plugins_1_1_disk_file.html aea7d64b667421c6a6c58c7e53409bc70 (void) const const std::string & getLastModifiedString classpion_1_1plugins_1_1_disk_file.html a78281a91c2084ebbf516016f2604ebe3 (void) const const std::string & getMimeType classpion_1_1plugins_1_1_disk_file.html a9056fa1495c9280606960c0c0c959539 (void) const void setFilePath classpion_1_1plugins_1_1_disk_file.html ab033df22506e172bd87e6eb327a9a0f7 (const boost::filesystem::path &p) void appendFilePath classpion_1_1plugins_1_1_disk_file.html a0fda9b61a92172c12478d3c8171511be (const std::string &p) void setMimeType classpion_1_1plugins_1_1_disk_file.html ac117af46a398de30b6fb64c2dc30e0ef (const std::string &t) void resetFileContent classpion_1_1plugins_1_1_disk_file.html aa5dafe64a4c18e2402b777d8c948990f (unsigned long n=0) boost::filesystem::path m_file_path classpion_1_1plugins_1_1_disk_file.html abcfc6460826ee37ab680a6e4282f2cb6 boost::shared_array< char > m_file_content classpion_1_1plugins_1_1_disk_file.html aa62c842f801d20f9e97c3325777ead1f std::streamsize m_file_size classpion_1_1plugins_1_1_disk_file.html af48e220681d3fb5ed563917aa96ae686 std::time_t m_last_modified classpion_1_1plugins_1_1_disk_file.html ae9e649ded8ea6b84bc4f77f9b5c59534 std::string m_last_modified_string classpion_1_1plugins_1_1_disk_file.html a0db3c1484be194f6967d7ab00fea9c9f std::string m_mime_type classpion_1_1plugins_1_1_disk_file.html a4d07f1a3a0ab328fcb42887497c3ab6e pion::plugins::DiskFileSender classpion_1_1plugins_1_1_disk_file_sender.html virtual ~DiskFileSender classpion_1_1plugins_1_1_disk_file_sender.html a01779adb0fae6341d6b5b349bc893057 () void send classpion_1_1plugins_1_1_disk_file_sender.html adab16e17f7cf8f315965138d30d8db3d (void) void set_logger classpion_1_1plugins_1_1_disk_file_sender.html a3923cd6ecdaa8f83ed219e78f3b0a976 (logger log_ptr) logger get_logger classpion_1_1plugins_1_1_disk_file_sender.html ad9e6e934763bd5518270d2eb7d21b394 (void) static boost::shared_ptr< DiskFileSender > create classpion_1_1plugins_1_1_disk_file_sender.html a206bc98eed2c722e3cd81e754a0e13a5 (DiskFile &file, pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn, unsigned long max_chunk_size=0) DiskFileSender classpion_1_1plugins_1_1_disk_file_sender.html a41d8c1f071301ddacd0d6dc5b5f5197f (DiskFile &file, pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn, unsigned long max_chunk_size) void handle_write classpion_1_1plugins_1_1_disk_file_sender.html ae646f10871d31268170411d31b1274e3 (const boost::system::error_code &write_error, std::size_t bytes_written) logger m_logger classpion_1_1plugins_1_1_disk_file_sender.html ac02b0ced6bef85a9e82323e813dfd4e0 pion::plugins::FileService classpion_1_1plugins_1_1_file_service.html pion::http::plugin_service virtual void set_option classpion_1_1plugins_1_1_file_service.html a9a2e7ce1dd455a7213bae7c2e47e8a13 (const std::string &name, const std::string &value) virtual void operator() classpion_1_1plugins_1_1_file_service.html a98a2a90a2a8846e94c737a34902644fc (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) virtual void start classpion_1_1plugins_1_1_file_service.html a9ba023821844c174e268d4c04a0ee2bc (void) virtual void stop classpion_1_1plugins_1_1_file_service.html a99259cf6308a2745943f4e6e45976c26 (void) void set_logger classpion_1_1plugins_1_1_file_service.html a33990e40c5c80e10b70ea29dc5bfaba3 (logger log_ptr) logger get_logger classpion_1_1plugins_1_1_file_service.html aeb189cb25aacc0ad89031043610c751e (void) PION_HASH_MAP< std::string, DiskFile, PION_HASH_STRING > CacheMap classpion_1_1plugins_1_1_file_service.html a06d3f20537e992038c15ed362470b5af PION_HASH_MAP< std::string, std::string, PION_HASH_STRING > MIMETypeMap classpion_1_1plugins_1_1_file_service.html ad39a3a2dd8b7f6753093e803c76b5b36 void scanDirectory classpion_1_1plugins_1_1_file_service.html a846472efdb9cf091b66ac941863bbc65 (const boost::filesystem::path &dir_path) std::pair< CacheMap::iterator, bool > addCacheEntry classpion_1_1plugins_1_1_file_service.html accda870fc20d08e689e394dc3d780eef (const std::string &relative_path, const boost::filesystem::path &file_path, const bool placeholder) void sendNotFoundResponse classpion_1_1plugins_1_1_file_service.html ab701cf982801ca3b88a7681b69e3ec54 (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) static std::string findMIMEType classpion_1_1plugins_1_1_file_service.html a80482b4687642f4d777956c73de6a3e6 (const std::string &file_name) logger m_logger classpion_1_1plugins_1_1_file_service.html a6ca4dbf4a8c1658f330a034842d12b89 pion::plugins::HelloService classpion_1_1plugins_1_1_hello_service.html pion::http::plugin_service virtual void operator() classpion_1_1plugins_1_1_hello_service.html a5336f34d58cf62045897d0d6fc0b2b38 (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) pion::plugins::LogServiceAppender classpion_1_1plugins_1_1_log_service_appender.html void setMaxEvents classpion_1_1plugins_1_1_log_service_appender.html a3b63273c186d923980e6311815a0ac5d (unsigned int n) void addLogString classpion_1_1plugins_1_1_log_service_appender.html a70d9bdf5d9e753ee15a6eadac036baf2 (const std::string &log_string) void writeLogEvents classpion_1_1plugins_1_1_log_service_appender.html a6b7c94ef166af29094bfe93ca9a2038b (pion::http::response_writer_ptr &writer) pion::plugins::LogService classpion_1_1plugins_1_1_log_service.html pion::http::plugin_service virtual void operator() classpion_1_1plugins_1_1_log_service.html ad0f2602a20fd26a51f4cc64e3d6bcae5 (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) LogServiceAppender & getLogAppender classpion_1_1plugins_1_1_log_service.html a9ecc41077ab7d1f52a21a54fde62b166 (void) pion::spdy::decompressor classpion_1_1spdy_1_1decompressor.html data_size_t classpion_1_1spdy_1_1decompressor.html a9fb34f033b4d95e5f23fa9b0d03c4818 MAX_UNCOMPRESSED_DATA_BUF_SIZE classpion_1_1spdy_1_1decompressor.html a9fb34f033b4d95e5f23fa9b0d03c4818a44ab53316cb7bd9c9d66621b6e537e08 decompressor classpion_1_1spdy_1_1decompressor.html ab60b284101b5b7ffedc2fb4daab2f77d () ~decompressor classpion_1_1spdy_1_1decompressor.html adc518d8ec91bb78d58077f7fb661881f () char * decompress classpion_1_1spdy_1_1decompressor.html a9e6e8b557657365b9e30a501c9bdd00b (const char *compressed_data_ptr, boost::uint32_t stream_id, const spdy_control_frame_info &frame, boost::uint32_t header_block_length) bool spdy_decompress_header classpion_1_1spdy_1_1decompressor.html ab6c148eb985c1e016235cef3863913c8 (const char *compressed_data_ptr, z_streamp decomp, boost::uint32_t length, boost::uint32_t &uncomp_length) pion::spdy::parser classpion_1_1spdy_1_1parser.html pion::spdy::parser::error_category_t error_value_t classpion_1_1spdy_1_1parser.html abaab54ece6835d5763900809a1d6915b parser classpion_1_1spdy_1_1parser.html a289c7ef60496f20705af20bec52d5302 () ~parser classpion_1_1spdy_1_1parser.html a4cc2b6ef5639870a53ba9b7a816424fc () boost::tribool parse classpion_1_1spdy_1_1parser.html a824b2f98f915c0402c75c50e33af1d4f (http_protocol_info &http_headers, boost::system::error_code &ec, decompressor_ptr &decompressor, const char *packet_ptr, boost::uint32_t &length_packet, boost::uint32_t current_stream_count) const char * get_spdy_data_content classpion_1_1spdy_1_1parser.html aa3822674ceaa040a6ad36189fbc58744 () const char * get_spdy_read_pointer classpion_1_1spdy_1_1parser.html a0027e6ba54dd393ba32b1a5f8e80aa1d () static spdy_frame_type get_spdy_frame_type classpion_1_1spdy_1_1parser.html afa6e6079f12d6adc17688b38bc0727dd (const char *ptr) static bool is_spdy_control_frame classpion_1_1spdy_1_1parser.html a9d162f5bb587fe627f678a9ab19dd712 (const char *ptr) static boost::uint32_t get_control_frame_stream_id classpion_1_1spdy_1_1parser.html a472c57e8a77ee5ad056ef11fe5aad50e (const char *ptr) void set_read_ptr classpion_1_1spdy_1_1parser.html a84d142819f982415844b77f5c3d8d0bb (const char *ptr) bool populate_frame classpion_1_1spdy_1_1parser.html aa0000b4cee0f8a2084f3e0056ab561de (boost::system::error_code &ec, spdy_control_frame_info &frame, boost::uint32_t &length_packet, boost::uint32_t &stream_id, http_protocol_info &http_headers) void parse_header_payload classpion_1_1spdy_1_1parser.html a76731f8ae345f1a5af910e5e92b64bbe (boost::system::error_code &ec, decompressor_ptr &decompressor, const spdy_control_frame_info &frame, http_protocol_info &http_headers, boost::uint32_t current_stream_count) void parse_spdy_data classpion_1_1spdy_1_1parser.html aae6750b7a90921dd6d8bc2da50cc1aa7 (boost::system::error_code &ec, const spdy_control_frame_info &frame, boost::uint32_t stream_id, http_protocol_info &http_info) void parse_spdy_settings_frame classpion_1_1spdy_1_1parser.html a36bd7ae76e3796cf4f99a30aa728c800 (boost::system::error_code &ec, const spdy_control_frame_info &frame) void parse_spdy_rst_stream classpion_1_1spdy_1_1parser.html ad69dd18af5afc1b6d84d743c3d21d8e0 (boost::system::error_code &ec, const spdy_control_frame_info &frame) void parse_spdy_ping_frame classpion_1_1spdy_1_1parser.html a22199322320ed1a68407b438a898d98b (boost::system::error_code &ec, const spdy_control_frame_info &frame) void parse_spdy_goaway_frame classpion_1_1spdy_1_1parser.html ae213965a7a77b4cfb385bfa8685c3e50 (boost::system::error_code &ec, const spdy_control_frame_info &frame) void parse_spdy_window_update_frame classpion_1_1spdy_1_1parser.html a0ce476c60751c29909aec2af32b5b64e (boost::system::error_code &ec, const spdy_control_frame_info &frame) boost::tribool parse_spdy_frame classpion_1_1spdy_1_1parser.html a7fa079f8501944f9d55f2054f896d08a (boost::system::error_code &ec, decompressor_ptr &decompressor, http_protocol_info &http_headers, boost::uint32_t &length_packet, boost::uint32_t current_stream_count) static void create_error_category classpion_1_1spdy_1_1parser.html a81f25358fc4fbffeb6532cf10c6f7aa4 (void) static error_category_t & get_error_category classpion_1_1spdy_1_1parser.html aba54c4e506d27521190271a35f020257 (void) static void set_error classpion_1_1spdy_1_1parser.html a8caaf3917f65aeab5feee513e8b656b5 (boost::system::error_code &ec, error_value_t ev) pion::spdy::parser::error_category_t classpion_1_1spdy_1_1parser_1_1error__category__t.html const char * name classpion_1_1spdy_1_1parser_1_1error__category__t.html a77836522c66db96d2eb2ffcd6b7a12c8 () const std::string message classpion_1_1spdy_1_1parser_1_1error__category__t.html a89956154b900ad8cfa578041c11c20de (int ev) const pion::spdy::_value_string structpion_1_1spdy_1_1__value__string.html boost::uint32_t value structpion_1_1spdy_1_1__value__string.html a2c2c1aa22bd057dbb9c43469aad2e8d9 std::string str structpion_1_1spdy_1_1__value__string.html a656b99c82bbe992ca42e1a6710924d0c pion::spdy::spdy_control_frame_info structpion_1_1spdy_1_1spdy__control__frame__info.html bool control_bit structpion_1_1spdy_1_1spdy__control__frame__info.html aab8a4df01cd7ab33225e75d3f2d6eac2 boost::uint16_t version structpion_1_1spdy_1_1spdy__control__frame__info.html a4616ceeb89c9fc021558ff10d956fa87 boost::uint16_t type structpion_1_1spdy_1_1spdy__control__frame__info.html ac5dcfbebbe23ff86c277c93f6463020c boost::uint8_t flags structpion_1_1spdy_1_1spdy__control__frame__info.html a29431bbcacc702fe6e24ad5f0c11e6b4 boost::uint32_t length structpion_1_1spdy_1_1spdy__control__frame__info.html aae971220edc8d59da5e7b7018e2c7e6d pion::spdy::_spdy_header_info structpion_1_1spdy_1_1__spdy__header__info.html boost::uint32_t stream_id structpion_1_1spdy_1_1__spdy__header__info.html a34f64295be06d0aabaf70142f78e3050 boost::uint8_t * header_block structpion_1_1spdy_1_1__spdy__header__info.html a04e2da993193a952036d13477114bd0e boost::uint8_t header_block_len structpion_1_1spdy_1_1__spdy__header__info.html a0b5e5f60e357c45af5069d8c7e270028 boost::uint16_t frame_type structpion_1_1spdy_1_1__spdy__header__info.html afa1a89722edd7a2eda6fd7a15abf7e76 pion::spdy::_http_protocol_info_t structpion_1_1spdy_1_1__http__protocol__info__t.html std::map< std::string, std::string > http_headers structpion_1_1spdy_1_1__http__protocol__info__t.html aa5fe851be6df6f20882ecfb4b0a17173 boost::uint32_t http_type structpion_1_1spdy_1_1__http__protocol__info__t.html a2b40596ec08c3f01e3b42a3c9f46144f boost::uint32_t stream_id structpion_1_1spdy_1_1__http__protocol__info__t.html a17e4bd218ca2af1c9441c4d78b33c91a boost::uint32_t data_offset structpion_1_1spdy_1_1__http__protocol__info__t.html ac7eaf2e8f75959697589437fa27dff9a boost::uint32_t data_size structpion_1_1spdy_1_1__http__protocol__info__t.html a9f92f9f33b30a85ed7fd1758206d632e bool last_chunk structpion_1_1spdy_1_1__http__protocol__info__t.html ab497d1956139ddbe0773fe6515ef72c7 pion::tcp::connection classpion_1_1tcp_1_1connection.html lifecycle_type classpion_1_1tcp_1_1connection.html a1888aaf31f431a3f00c70c2568f4cb25 boost::function1< void, boost::shared_ptr< connection > > connection_handler classpion_1_1tcp_1_1connection.html aa2b220bff63f258b6aeba7eaf9a39aed boost::array< char, READ_BUFFER_SIZE > read_buffer_type classpion_1_1tcp_1_1connection.html abd482572a19c1aecadaccd360837f7c2 boost::asio::ip::tcp::socket socket_type classpion_1_1tcp_1_1connection.html a353c4d500505d51924d165c28b04641c boost::asio::ssl::stream< boost::asio::ip::tcp::socket > ssl_socket_type classpion_1_1tcp_1_1connection.html aff03c412aa0f3266be30db7619cbf5e0 boost::asio::ssl::context ssl_context_type classpion_1_1tcp_1_1connection.html ae3e4aa69cacf69d2b9907dbda79b1f54 connection classpion_1_1tcp_1_1connection.html a0b2f63b845ee0f7bba3c94c5fb7f567c (boost::asio::io_service &io_service, const bool ssl_flag=false) connection classpion_1_1tcp_1_1connection.html a33326975c04036c79e2481d6e3541c7e (boost::asio::io_service &io_service, ssl_context_type &ssl_context) bool is_open classpion_1_1tcp_1_1connection.html aa454ce0733cbd9bc97d4fe22f2eb8218 (void) const void close classpion_1_1tcp_1_1connection.html a8b52fce50e8987a982c46bc82b463075 (void) void cancel classpion_1_1tcp_1_1connection.html ae0172c7e218f12a0b396a4e0e42e4de2 (void) virtual ~connection classpion_1_1tcp_1_1connection.html a4fbf93efbbb9f67dbe882c33ce3964da () void async_accept classpion_1_1tcp_1_1connection.html a4dbc2bd40cae5d8390014f8f3a175629 (boost::asio::ip::tcp::acceptor &tcp_acceptor, AcceptHandler handler) boost::system::error_code accept classpion_1_1tcp_1_1connection.html a5939637bc376552349938e2be4c72188 (boost::asio::ip::tcp::acceptor &tcp_acceptor) void async_connect classpion_1_1tcp_1_1connection.html a9b4262a85ab1a5630d8536e4c378f591 (boost::asio::ip::tcp::endpoint &tcp_endpoint, ConnectHandler handler) void async_connect classpion_1_1tcp_1_1connection.html a63cac165073687107d415be834a777ca (const boost::asio::ip::address &remote_addr, const unsigned int remote_port, ConnectHandler handler) boost::system::error_code connect classpion_1_1tcp_1_1connection.html a5b183b3389ab9edfe28dbc7eaf352304 (boost::asio::ip::tcp::endpoint &tcp_endpoint) boost::system::error_code connect classpion_1_1tcp_1_1connection.html afd4930565752d4cfc1ea789ca3e87597 (const boost::asio::ip::address &remote_addr, const unsigned int remote_port) boost::system::error_code connect classpion_1_1tcp_1_1connection.html ac80e46e81863a02840a25a3e2ef71b3b (const std::string &remote_server, const unsigned int remote_port) void async_handshake_client classpion_1_1tcp_1_1connection.html a0a68b0891f8af799b624243b3b228832 (SSLHandshakeHandler handler) void async_handshake_server classpion_1_1tcp_1_1connection.html a92e21ae8c6c3203277ca5a8a04a33aac (SSLHandshakeHandler handler) boost::system::error_code handshake_client classpion_1_1tcp_1_1connection.html a09709b4bbd1a43d5902a8df0b4137f2f (void) boost::system::error_code handshake_server classpion_1_1tcp_1_1connection.html ad9306a425d685f91f6465ec8d5617931 (void) void async_read_some classpion_1_1tcp_1_1connection.html a80ba1a628d11e23f923e9f305139c4d2 (ReadHandler handler) void async_read_some classpion_1_1tcp_1_1connection.html a4409f423c5e8864de2fc39183e0d4e6c (ReadBufferType read_buffer, ReadHandler handler) std::size_t read_some classpion_1_1tcp_1_1connection.html af3c5c14c87e99bd40b605b0fb0b4a84e (boost::system::error_code &ec) std::size_t read_some classpion_1_1tcp_1_1connection.html ac65530562f6184e2f61d0c087ab88312 (ReadBufferType read_buffer, boost::system::error_code &ec) void async_read classpion_1_1tcp_1_1connection.html a8ffd85231f17d205e28ed64c222e2d94 (CompletionCondition completion_condition, ReadHandler handler) void async_read classpion_1_1tcp_1_1connection.html a31da6781ff23c07693c3ceff06c4ad83 (const MutableBufferSequence &buffers, CompletionCondition completion_condition, ReadHandler handler) std::size_t read classpion_1_1tcp_1_1connection.html a43fcd89dd89c11590d39eb71837455f3 (CompletionCondition completion_condition, boost::system::error_code &ec) std::size_t read classpion_1_1tcp_1_1connection.html ae333c1f75595e129bb263a9b671c5932 (const MutableBufferSequence &buffers, CompletionCondition completion_condition, boost::system::error_code &ec) void async_write classpion_1_1tcp_1_1connection.html a548cb7fe7ddd1b2961ab90e560a48429 (const ConstBufferSequence &buffers, write_handler_t handler) std::size_t write classpion_1_1tcp_1_1connection.html a7ba752cbf79d2824dcf423a2ed77184a (const ConstBufferSequence &buffers, boost::system::error_code &ec) void finish classpion_1_1tcp_1_1connection.html aa7ff7a6d8325c9cbfb026c1a441523fe (void) bool get_ssl_flag classpion_1_1tcp_1_1connection.html acf7f446c7113617abcff448fbd4ba441 (void) const void set_lifecycle classpion_1_1tcp_1_1connection.html a440cc929ced689cfe4fe4bec0620162c (lifecycle_type t) lifecycle_type get_lifecycle classpion_1_1tcp_1_1connection.html af9000c0fa1af445375f877347de3529a (void) const bool get_keep_alive classpion_1_1tcp_1_1connection.html a35394d8c3f144ab8a264824410bb7088 (void) const bool get_pipelined classpion_1_1tcp_1_1connection.html aa54a75a48eae812955f7ce6b2b4c3d51 (void) const read_buffer_type & get_read_buffer classpion_1_1tcp_1_1connection.html a9ffefe15c4ae6acf85e13b315fbfc72b (void) void save_read_pos classpion_1_1tcp_1_1connection.html a7951ebfca8e6834faa78417c5e87a748 (const char *read_ptr, const char *read_end_ptr) void load_read_pos classpion_1_1tcp_1_1connection.html a4cc9d7185adda632de1f3482552ed5f6 (const char *&read_ptr, const char *&read_end_ptr) const boost::asio::ip::tcp::endpoint get_remote_endpoint classpion_1_1tcp_1_1connection.html a63bb4969a3816db01b1e85301ca1af91 (void) const boost::asio::ip::address get_remote_ip classpion_1_1tcp_1_1connection.html a4863b8d10797ef101c95c660007a8c62 (void) const unsigned short get_remote_port classpion_1_1tcp_1_1connection.html a735bcb8b1e2a9d04ad6d12e4f0c6f5a2 (void) const boost::asio::io_service & get_io_service classpion_1_1tcp_1_1connection.html a6bbd6e925e3389cbee18915c9d63a47f (void) socket_type & get_socket classpion_1_1tcp_1_1connection.html a4a237acacf373637c95d2cbd24e42e74 (void) ssl_socket_type & get_ssl_socket classpion_1_1tcp_1_1connection.html a0f3ba6ecd1f402e1e379db5440ecda94 (void) const socket_type & get_socket classpion_1_1tcp_1_1connection.html a16cef7660bcf80131d007351defe10a5 (void) const const ssl_socket_type & get_ssl_socket classpion_1_1tcp_1_1connection.html a8d3d2ec0d67d53b0a5d23ba3ca00dae8 (void) const static boost::shared_ptr< connection > create classpion_1_1tcp_1_1connection.html a5e9118f2f2f31b834f04d22a058fd1eb (boost::asio::io_service &io_service, ssl_context_type &ssl_context, const bool ssl_flag, connection_handler finished_handler) connection classpion_1_1tcp_1_1connection.html a7e1f15340d3c9e593fdd15764c50dd15 (boost::asio::io_service &io_service, ssl_context_type &ssl_context, const bool ssl_flag, connection_handler finished_handler) pion::tcp::server classpion_1_1tcp_1_1server.html virtual ~server classpion_1_1tcp_1_1server.html a728020c37ae9ec06197d01b195a24f9e () void start classpion_1_1tcp_1_1server.html ad01034396caf2a31566c547d85478ea5 (void) void stop classpion_1_1tcp_1_1server.html a855d4cd90004c47b924eab1fe0ffaa14 (bool wait_until_finished=false) void join classpion_1_1tcp_1_1server.html a50495c432f7a3441654b2d41a6f942a7 (void) void set_ssl_key_file classpion_1_1tcp_1_1server.html a0d74cb19ac80dfc81cd92272f9f82905 (const std::string &pem_key_file) std::size_t get_connections classpion_1_1tcp_1_1server.html aa56c4aebede625c3c70617552d0f08af (void) const unsigned int get_port classpion_1_1tcp_1_1server.html a46c1027475b8748e2a3047c7b738ef0b (void) const void set_port classpion_1_1tcp_1_1server.html a392e9ede66cf2f96af52655363951e96 (unsigned int p) boost::asio::ip::address get_address classpion_1_1tcp_1_1server.html a4ed7743219642eb5969e3599403ad99f (void) const void set_address classpion_1_1tcp_1_1server.html aa711c8de12d16c2806dc5fe57bed512e (const boost::asio::ip::address &addr) const boost::asio::ip::tcp::endpoint & get_endpoint classpion_1_1tcp_1_1server.html adb38f532cf2c4f798c10a9273e7af436 (void) const void set_endpoint classpion_1_1tcp_1_1server.html a2f460aa6795aa6169c1b1fca5c4daa21 (const boost::asio::ip::tcp::endpoint &ep) bool get_ssl_flag classpion_1_1tcp_1_1server.html a90c7fd50d43652de3f283988380968bb (void) const void set_ssl_flag classpion_1_1tcp_1_1server.html ac6bb13e1f833a39b28bff7fa71029476 (bool b=true) connection::ssl_context_type & get_ssl_context_type classpion_1_1tcp_1_1server.html a11201c6b34424ff5ec11c963629281ed (void) bool is_listening classpion_1_1tcp_1_1server.html acf9efd8fcf78fc352744489e388b0f7c (void) const void set_logger classpion_1_1tcp_1_1server.html abe68393818a75e45d49757532802361e (logger log_ptr) logger get_logger classpion_1_1tcp_1_1server.html af038c70801875d3d6a3826eb7a80b1c3 (void) boost::asio::ip::tcp::acceptor & get_acceptor classpion_1_1tcp_1_1server.html a41d5b598e52f70db5ae4302bb02370b8 (void) const boost::asio::ip::tcp::acceptor & get_acceptor classpion_1_1tcp_1_1server.html a98de565795e8a1e978d21e7232990efe (void) const server classpion_1_1tcp_1_1server.html a2129bce03fd902c051e2a4b96d6bdf49 (const unsigned int tcp_port) server classpion_1_1tcp_1_1server.html a0e08d42a00d597952109e6a739942e94 (const boost::asio::ip::tcp::endpoint &endpoint) server classpion_1_1tcp_1_1server.html a1ddc1887495e6bf0b236cd424929a1eb (scheduler &sched, const unsigned int tcp_port=0) server classpion_1_1tcp_1_1server.html a1c66625024db0e229eab6d825d8fee2e (scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint) virtual void handle_connection classpion_1_1tcp_1_1server.html a4ec9c99b1125d0190ceb7850edb77f66 (tcp::connection_ptr &tcp_conn) virtual void before_starting classpion_1_1tcp_1_1server.html a814a44fc3d677071b9e2407898765316 (void) virtual void after_stopping classpion_1_1tcp_1_1server.html a23766baf23b7b5be2e43da55547c3a31 (void) boost::asio::io_service & get_io_service classpion_1_1tcp_1_1server.html a436e6dbcc3b128b2f9a9be6fd99421b6 (void) logger m_logger classpion_1_1tcp_1_1server.html a0fd391b946961fca8604b902ddb06f7d pion::tcp::stream_buffer classpion_1_1tcp_1_1stream__buffer.html char char_type classpion_1_1tcp_1_1stream__buffer.html a1fa60cd7dbf11eebb2983fe2a115a2e4 std::char_traits< char >::int_type int_type classpion_1_1tcp_1_1stream__buffer.html a7dcf4943671520d4018b4468c336e86e std::char_traits< char >::off_type off_type classpion_1_1tcp_1_1stream__buffer.html ac9b79dc64ad2b3e76c121b00ffc6e951 std::char_traits< char >::pos_type pos_type classpion_1_1tcp_1_1stream__buffer.html a3d24ccbacf44098151258b4219f3730c std::char_traits< char > traits_type classpion_1_1tcp_1_1stream__buffer.html a965a21f484cb7a926f7fb80f364c8373 stream_buffer classpion_1_1tcp_1_1stream__buffer.html ad40bca63d47c49ffecacbe3e7c64bbdd (tcp::connection_ptr &conn_ptr) stream_buffer classpion_1_1tcp_1_1stream__buffer.html a0c9993aa8a0c8d85f6808e354c4892b1 (boost::asio::io_service &io_service, const bool ssl_flag=false) stream_buffer classpion_1_1tcp_1_1stream__buffer.html a6ba1babc9c1277e773f4ec5d3087a284 (boost::asio::io_service &io_service, connection::ssl_context_type &ssl_context) virtual ~stream_buffer classpion_1_1tcp_1_1stream__buffer.html af72833c05fa921aba4404d3a72edd7cb () connection & get_connection classpion_1_1tcp_1_1stream__buffer.html a9ecf83066d0e3fc5cf9922f4c2f1e24d (void) const connection & get_connection classpion_1_1tcp_1_1stream__buffer.html a4a2d945145898de7c7b0919a97db49bb (void) const void setup_buffers classpion_1_1tcp_1_1stream__buffer.html a02de69010776b51162faa62f3188faa1 (void) int_type flush_output classpion_1_1tcp_1_1stream__buffer.html a3fb6c729f62844f052043c472f92b59f (void) virtual int_type underflow classpion_1_1tcp_1_1stream__buffer.html a94d2c63cb6994188b2628fc09480eb85 (void) virtual int_type overflow classpion_1_1tcp_1_1stream__buffer.html ae36650cd6ed06cee158907766f4e10e7 (int_type c) virtual std::streamsize xsputn classpion_1_1tcp_1_1stream__buffer.html ac61f64d668dd49e4f57d518f500eac61 (const char_type *s, std::streamsize n) virtual std::streamsize xsgetn classpion_1_1tcp_1_1stream__buffer.html a96821e24e504729ff2a48579c208b21a (char_type *s, std::streamsize n) virtual int_type sync classpion_1_1tcp_1_1stream__buffer.html afd7b30acfb1a4c9897ae61e4a6731a58 (void) pion::tcp::stream classpion_1_1tcp_1_1stream.html char char_type classpion_1_1tcp_1_1stream.html a7a1f84f71957c4d181b3956544bed706 std::char_traits< char >::int_type int_type classpion_1_1tcp_1_1stream.html a226831f2baafb1ad65259fc6c9bb511a std::char_traits< char >::off_type off_type classpion_1_1tcp_1_1stream.html a035e53a0425f0f05a3c3fd6c9c8be55d std::char_traits< char >::pos_type pos_type classpion_1_1tcp_1_1stream.html a9a325595e421119b0e6e6b5972863d98 std::char_traits< char > traits_type classpion_1_1tcp_1_1stream.html a6150c81c258841c753e9246b952193bb stream classpion_1_1tcp_1_1stream.html a22c9f4e4071bee3fe41dffd2c2d5e3b3 (tcp::connection_ptr &conn_ptr) stream classpion_1_1tcp_1_1stream.html aee8bf2f4b4af54b0e946552bb3c42cb2 (boost::asio::io_service &io_service, const bool ssl_flag=false) stream classpion_1_1tcp_1_1stream.html a00241ca354c2f8ee48cc2f443c001464 (boost::asio::io_service &io_service, connection::ssl_context_type &ssl_context) boost::system::error_code accept classpion_1_1tcp_1_1stream.html aa9a0601a3f0d969c795b363e9aa932a6 (boost::asio::ip::tcp::acceptor &tcp_acceptor) boost::system::error_code connect classpion_1_1tcp_1_1stream.html a6f420f12a9f3586dba9d9b14632e42b8 (boost::asio::ip::tcp::endpoint &tcp_endpoint) boost::system::error_code connect classpion_1_1tcp_1_1stream.html a81cbfbba0a2849ec2476eee75f1ff9df (const boost::asio::ip::address &remote_addr, const unsigned int remote_port) void close classpion_1_1tcp_1_1stream.html a5d77399767f11fe4ebd7e8ee9e41bf4c (void) bool is_open classpion_1_1tcp_1_1stream.html a4e27277109a8a65e4d8824955a70f495 (void) const bool get_ssl_flag classpion_1_1tcp_1_1stream.html acdd826b93ef7eb171f86f26226f293eb (void) const boost::asio::ip::address get_remote_ip classpion_1_1tcp_1_1stream.html a56bb8792fd97a8cd522a6ba2802730db (void) const stream_buffer * rdbuf classpion_1_1tcp_1_1stream.html a73604ddf5106fd3df9922774a05f4930 (void) pion::tcp::timer classpion_1_1tcp_1_1timer.html timer classpion_1_1tcp_1_1timer.html a8b132dfd2c9dd58a3845f74e292f8848 (tcp::connection_ptr &conn_ptr) void start classpion_1_1tcp_1_1timer.html a010cc63b390056d13a9924d026ae6213 (const boost::uint32_t seconds) void cancel classpion_1_1tcp_1_1timer.html aedd7c27267aecc30be218727c38135bc (void) pion::test::safe_xml_log_formatter classpion_1_1test_1_1safe__xml__log__formatter.html safe_xml_log_formatter classpion_1_1test_1_1safe__xml__log__formatter.html a239efc65e6d0c1f14aae16edc8867664 () virtual ~safe_xml_log_formatter classpion_1_1test_1_1safe__xml__log__formatter.html a33953784f10be2a896f44ea81a083a7d () virtual void log_start classpion_1_1test_1_1safe__xml__log__formatter.html aa075ccbb2c9b5d65e181823b51e37af5 (std::ostream &ostr, boost::unit_test::counter_t test_cases_amount) virtual void log_finish classpion_1_1test_1_1safe__xml__log__formatter.html ab84589991d45d0301487dde76c748cb2 (std::ostream &ostr) virtual void log_build_info classpion_1_1test_1_1safe__xml__log__formatter.html ac97db50c4d84d7c94145fe18a6ba9223 (std::ostream &ostr) virtual void test_unit_start classpion_1_1test_1_1safe__xml__log__formatter.html ab7896861850e8f45508dc4872d860554 (std::ostream &ostr, boost::unit_test::test_unit const &tu) virtual void test_unit_finish classpion_1_1test_1_1safe__xml__log__formatter.html aef89506940d8bd7886f659c158e5c862 (std::ostream &ostr, boost::unit_test::test_unit const &tu, unsigned long elapsed) virtual void test_unit_skipped classpion_1_1test_1_1safe__xml__log__formatter.html aa838459335f68434f0ef4ee01a491caa (std::ostream &ostr, boost::unit_test::test_unit const &tu) virtual void log_exception classpion_1_1test_1_1safe__xml__log__formatter.html a8d87cb10851f0ed9b30ddbdd5d2d7650 (std::ostream &ostr, boost::unit_test::log_checkpoint_data const &checkpoint_data, boost::execution_exception const &ex) virtual void log_entry_start classpion_1_1test_1_1safe__xml__log__formatter.html a50eff755ff4bc8ee87d3bdda2370faf6 (std::ostream &ostr, boost::unit_test::log_entry_data const &entry_data, log_entry_types let) virtual void log_entry_value classpion_1_1test_1_1safe__xml__log__formatter.html a812c1c1b93592d1ab11c5273ef4eef97 (std::ostream &ostr, boost::unit_test::const_string value) virtual void log_entry_finish classpion_1_1test_1_1safe__xml__log__formatter.html a9ec475531b42223043b52919ed7c440e (std::ostream &ostr) pion::test::config structpion_1_1test_1_1config.html static std::ofstream m_test_log_file structpion_1_1test_1_1config.html ae238691f6adbe6da8166008f70f4640a pion-5.0.4+dfsg.orig/doc/README0000644000372000001440000000034612215647065015375 0ustar robertousersThis directory is for reserved for documentation specific to the Pion Network Library. For general Pion documentation, please see the documentation directory for the Pion Common Library, located in: /common/doc/. pion-5.0.4+dfsg.orig/doc/README.ubuntu0000644000372000001440000000556112215647065016722 0ustar robertousersUbuntu Linux Build Instructions =============================== Note that these instructions are based on Ubuntu 9.04 (Jaunty), and may differ for other versions of Ubuntu. Installing dependencies: ------------------------ You can install the development tools required by Pion using apt-get: # apt-get install autoconf libtool make gcc g++ ruby cmake doxygen pkg-config You can install most of the third-party libraries required by Pion using apt-get: # apt-get install zlib1g-dev libssl-dev libxml2-dev libbz2-dev libpcap-dev python-lxml To install the Boost development libraries, use this on Ubuntu 9.04: # apt-get install libboost1.37-dev Use this instead on Ubuntu 9.10: # apt-get install libboost1.40-all-dev Installing log4cplus: --------------------- Note that the use of a logging framework is entirely optional, so you may skip this step if you like. We recommend that you use log4cplus for logging. Please visit the "Third Party Libraries" page on our website to obtain the source code tarball for log4cplus. Then, just run: # tar xvfj log4cplus-.tar.bz2 # cd log4cplus- # ./configure --enable-threads=yes # make all # make install Installing Python: ------------------ Pion's PythonReactor requires Python version 2.4 or greater. You may skip this step if you do not want to build support for Python. Python 2.4 (or greater) is already pre-installed and should work out of the box on most Linux systems. If you do not have it already, you should be able to grab the latest version using your favorite package manager: # apt-get install python python-dev Installing YAJL: ---------------- YAJL ("Yet Another JSON Library") is required to build support for the JSONCodec plugin. You may skip this step if you do not want to build support for JSON. On Ubuntu 10.04 and later, you can install this easily with: # sudo apt-get install libyajl-dev You can download the source code tarball for YAJL from the "Third Party Libraries" page on our website. After downloading it, just run: # tar xvfz yajl-.tgz # cd yajl- # ./configure # make One of the unit tests seems to fail on Ubuntu, but you can just ignore it. To install YAJL, we recommend that you just move the build files in the "build/yajl-" subdirectory into /usr/local: # sudo mv build/yajl-/lib/* /usr/local/lib # sudo mv build/yajl-/include/yajl /usr/local/include Building and installing Pion: ----------------------------- Now you should be able to build and install Pion: # tar xvfz pion--.tar.gz # cd pion-- # ./configure # make all # make install To build and run Pion's unit tests, run "make check" Known Problems -------------- The Pion executables may complain about loading shared libraries if the Boost and/or other libraries are not in your search path. Try this: export LD_LIBRARY_PATH=/usr/local/lib pion-5.0.4+dfsg.orig/doc/README.solaris0000644000372000001440000001536212215647065017054 0ustar robertousersSolaris Build Instructions ========================== Preparing the Build Environment: -------------------------------- Pion currently only supports the GCC (g++) compiler when building under Solaris. We plan to add support for the Sun Studio C++ compiler in the near future, after support for it is added to the ASIO library. The easiest way to setup a build environment in Solaris is to download and install the following packages from http://www.sunfreeware.com/: cmake, gcc, zlib, bzip2 and openssl. Make sure that the "make" and "ar" utilities are in your PATH. Normally, these are installed in the /usr/ccs/bin directory, which for some reason is not included in the default PATH. Also, make sure that /usr/local/bin is included in your PATH. Building Boost with ASIO: ------------------------- Please see the README.boost file for instructions. Boost 1.35.0 on Solaris seems to incorrectly detect the presense of the ICU library (for Unicode support), and enables support for it even though the development libraries are not actually installed and available, and contrary to Boost's documentation (which claims incorrectly that it is always disabled by default). Therefore, you will need to explicity disable ICU support when configuring Boost. If you are using the configure script, add the parameter "--without-icu". If you are using bjam, add the parameter "-sHAVE_ICU=0". Boost's build system is currently (as of 1.35.0) unable to detect the linker you are using, and therefore may pass incorrect arguments causing libraries to not be built correctly. This is especially a problem under Solaris if you are using the GCC distribution from SunFreeware.com because it uses the linker bundled with Solaris while Boost assumes the GCC toolset always uses the GCC linker. Luckily, the build system lets you tell it explicitly what linker you are using by modifying your "user-config.jam" file. If you are building Boost using the "configure" script, first run the "configure" command and then modify the "user-config.jam" file that it generates in Boost's root directory (change the existing "using gcc" line). If you are using Boost::Build (bjam), you need to instead modify the "user-config.jam" file in the "tools/build/v2" subdirectory (add the following line within the "GCC configuration" section): using gcc : : g++ : sun ; Installing zlib, bzlib & openssl: --------------------------------- Pion requires zlib, bzlib and openssl for compression and SSL/TLS encryption support, respectively. On Solaris, we recommend that you download and install the packages available on SunFreeware.com. However, you may instead choose to download and install the latest versions from the "Third Party Libraries" page on our website, or from the following sites: http://www.zlib.net http://www.bzip.org http://www.openssl.org Logging frameworks: ------------------- Note that the use of a logging framework is entirely optional, so you may skip this step if you like. We recommend that you use log4cxx for logging. Log4cxx requires that you have the Apache Portable Runtime (APR) installed, which is not normally included with Solaris. You can download the latest source code tarballs from the "Third Party Libraries" page on our website, or from the following site: http://apr.apache.org You will need to install both the "apr" and the "apr-util" packages. For each, just download the source and run: # bzip2 -dc apr-.tar.bz2 | tar xvf - # cd apr- # ./configure --prefix=/usr/local --enable-threads --with-apr=/usr/local # make all # make install Next, please visit the "Third Party Libraries" page on our website to obtain the source code tarball for log4cxx. Then, just run: # bzip2 -dc log4cxx-.tar.bz2 | tar xvf - # cd log4cxx- # ./configure # make all # make install Installing libxml2: ------------------- The Pion Platform requires the libxml2 development library for manipulating configuration files, and other things. This library is not used by the Pion Network Library, so you may skip this step if you are only building the Network Library. The libxml2 library is normally pre-installed with the Solaris development tools. If you do not have it already, you should be able to grab the latest source code tarball from the "Third Party Libraries" page on our website, or from the following site: http://www.xmlsoft.org Installing OSSP uuid: --------------------- The Pion Platform requires the OSSP uuid library to generate universally unique identifiers for most platforms, including Solaris. This library is not used by the Pion Network Library, so you may skip this step if you are only building the Network Library. You can download the source code tarball for the uuid library from the "Third Party Libraries" page on our website. After downloading it, just run: # gzip -dc uuid-.tar.gz | tar xvf - # cd uuid- # ./configure # make all # make install Installing YAJL: ---------------- YAJL ("Yet Another JSON Library") is required to build support for the JSONCodec plugin. You may skip this step if you do not want to build support for JSON. You can download the source code tarball for YAJL from the "Third Party Libraries" page on our website. After downloading it, just run: # tar xvfz yajl-.tgz # cd yajl- # cmake . # make To install YAJL, we recommend that you just move the build files in the "build/yajl-" subdirectory into /usr/local: # sudo mv build/yajl-/lib/* /usr/local/lib # sudo mv build/yajl-/include/yajl /usr/local/include Building and installing Pion: ----------------------------- Now you should be able to build and install Pion: # gzip -dc pion--.tar.gz | tar xvf - # cd pion-- # ./configure [--with-openssl=/usr/local/ssl] [--with-log4cxx] [--with-yajl] # make all # make install To build and run Pion's unit tests, run "make check" Known problems: --------------- If you're using the gcc compiler distributed at http://www.sunfreeware.com, you may encountered errors about not being able to find the libstdc++ shared library (and others). If this happens, try setting the LD_LIBRARY_PATH variable to include /usr/local/lib/. You should also include the Boost libraries and the logging library (if used) in this path: export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/ssl/lib Solaris includes some libraries, such as bzlib (bzip2) in shared object format located in the /usr/lib directory. Static versions of these are not provided. If you encounter problems while linking static versions of Pion's libraries, it may be because none of the required libraries are available in static format. Try using the "--disable-static" configure script flag to only build Pion's shared object libraries (the static libraries are not required). pion-5.0.4+dfsg.orig/doc/README.boost0000644000372000001440000000703712215647065016526 0ustar robertousersPion requires Boost 1.35.0 (or later). Since this is still a fairly recent release, few of our supported platforms currently have pre-built versions available of these libraries. Therefore, you will likely need to download, compile and install Boost using the source code tarballs. Obtaining Boost: ---------------- First, download the latest tarball from SourceForge.net: # wget http://downloads.sourceforge.net/boost/boost_1_42_0.tar.bz2 Next, uncompress the tarball into a new directory: # bzip2 -dc boost_1_42_0.tar.bz2 | tar xvf - Building and Installing Boost: ------------------------------ bjam (http://www.boost.org/tools/build/v2/index.html) is a tool you can use to build Boost that allows you to configure many different options for your build. For a description of options available when building Boost with bjam, please see the Getting Started Guide at http://www.boost.org/more/getting_started/. You can build bjam by running the included "bootstrap.bat" on Windows or "bootstrap.sh" on Unix. You can also download bjam executables from: http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=72941 NOTE: We strongly recommend using the version of bjam distributed with the Boost source code you are using. In some cases, using an older bjam than the version of source that you have will cause the build to fail without any warning or explanation. You only need to build eight of the Boost libraries for Pion: thread, system, filesystem, regex, date_time, signals, iostreams and unit_test_framework. If you wish to only build these eight libraries (this will save you a lot of time), include the following options when running bjam: "--with-thread --with-system --with-filesystem --with-regex --with-date_time --with-signals --with-iostreams --with-test" We recommend that you build Boost with Unicode and ICU support. If the ICU library is included with your operating system, this is auto-enabled for you in versions 1.44 and later, and can be usually be accomplished for earlier versions by adding "-sHAVE_ICU=1" to your bjam options. If you do not have ICU, you can download the ICU source code from: http://site.icu-project.org/ You can use "-sICU_PATH=" to specify altnerative paths for ICU. More information on building Boost with Unicode support can be found at (for older versions): http://www.boost.org/doc/libs/1_42_0/libs/regex/doc/html/boost_regex/install.html#boost_regex.install.building_with_unicode_and_icu_support (for newer versions): http://www.boost.org/doc/libs/1_46_0/libs/regex/doc/html/boost_regex/install.html#boost_regex.install.building_with_unicode_and_icu_support For example (when using Microsoft Visual C++ with Boost 1.43 or earlier): # bjam --toolset=msvc -sHAVE_ICU=1 \ --with-thread --with-system --with-filesystem --with-regex \ --with-date_time --with-signals --with-iostreams --with-test \ release threading=multi stage For example (when using gcc with Boost 1.44 or later and 4 processes): # bjam --toolset=gcc -j4 release threading=multi stage For example (when using gcc on OSX with Boost 1.44 and later) for OSX is: # bjam -sICU_PATH=/usr/local --toolset=darwin release threading=multi stage This will build the libraries required by Pion and place the files within the stage/ subdirectory of your build directory. To install, you can now just copy the files in stage/lib into your library include path, and copy the boost/ directory into your header include path. Some platforms may require additional steps for building Boost. Please see the appropriate README.platform file for more information. pion-5.0.4+dfsg.orig/doc/README.osx0000644000372000001440000001517612215647065016214 0ustar robertousersMac OS X Build Instructions =========================== The Easy Way: ------------- Atomic Labs has a tarball available from the "Third Party Libraries" page on our website that contains all of the required libraries to build Pion, with support for both 32-bit and 64-bit Intel and PowerPC architectures. To get started quickly, just download and uncompress this into your /usr/local/ directory, and you should be able to skip down to one of the last two steps! Installing ICU on OSX: ---------------------- Boost requires the ICU library for i18n support. You can download the source code for ICU from: http://site.icu-project.org/ After downloading it, just run: # tar xvfz icu4c--src.tgz # cd icu/source # ./runConfigureICU MacOSX --enable-static # make all # make install As of version 4.2.1, it doesn't seem to be possible to build universal libraries of ICU (or at least we haven't figured it out yet), however you can build 64-bit binaries on OSX using an included patch file: # tar xvfz icu4c--src.tgz # cd icu # patch -p1 < /path/to/pion-source/common/build/icu-4.2.1-osx.patch # cd source # ./runConfigureICU MacOSX --enable-static # make all # make install Note that 64-bit builds of Boost on OSX seem to be extremely buggy, so this is not recommended. Installing Boost on OSX: ------------------------ Please see the README.boost file for general instructions. The bjam command to build all Boost libraries (1.43 and earlier) for OSX is: # bjam -sHAVE_ICU=1 --toolset=darwin release threading=multi stage The bjam command to build all Boost libraries (1.44 and later) for OSX is: # bjam -sICU_PATH=/usr/local --toolset=darwin release threading=multi stage Installing zlib, bzlib & openssl: --------------------------------- Pion requires zlib, bzlib and openssl for compression and SSL/TLS encryption support, respectively. These libraries are normally pre-installed on OS X. If you do not have them already, you should be able to grab the latest source code tarballs from the "Third Party Libraries" page on our website, or from the following sites: http://www.zlib.net http://www.bzip.org http://www.openssl.org Installing log4cplus: --------------------- Note that the use of a logging framework is entirely optional, so you may skip this step if you like. We recommend that you use log4cplus for logging. Please visit the "Third Party Libraries" page on our website to obtain the source code tarball for log4cplus. Then, just run: # tar xvfj log4cplus-.tar.bz2 # cd log4cplus- # ./configure --enable-threads=yes # make all # make install For Universal binaries, use: # CXXFLAGS="-arch i386 -arch x86_64 -arch ppc -arch ppc64" ./configure \ --disable-dependency-tracking Installing libxml2: ------------------- The Pion Platform requires the libxml2 development library for manipulating configuration files, and other things. This library is not used by the Pion Network Library, so you may skip this step if you are only building the Network Library. The libxml2 library is normally pre-installed on OS X. If you do not have it already, you should be able to grab the latest source code tarball from the "Third Party Libraries" page on our website, or from the following site: http://www.xmlsoft.org Installing lxml: ---------------- Pion's pupgrade.py script requires that you have the lxml library installed. This can be installed with one easy step: # sudo easy_install lxml If you get an error about an architecture not being installed, try using this command instead: # sudo env ARCHFLAGS="-arch x86_64" easy_install lxml Installing YAJL: ---------------- YAJL ("Yet Another JSON Library") is required to build support for the JSONCodec plugin. You may skip this step if you do not want to build support for JSON. To build YAJL, you must first have CMake installed on your system. You can download the source tarball for CMake from the "Third Party Libraries" page on our website, or from the following site: http://cmake.org You can download the source code tarball for YAJL from the "Third Party Libraries" page on our website. After downloading it, just run: # tar xvfz yajl-.tgz # cd yajl- # ./configure # make Note: to build universal libraries, edit the CMakeLists.txt file before running "./configure" and change this line: SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -ansi") to this: SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -ansi -arch i386 -arch x86_64 -arch ppc -arch ppc64") To install YAJL, we recommend that you just move the build files in the "build/yajl-" subdirectory into /usr/local: # sudo mv build/yajl-/lib/* /usr/local/lib # sudo mv build/yajl-/include/yajl /usr/local/include Building and installing Pion: ----------------------------- Now you should be able to build and install Pion: # tar xvfz pion--.tar.gz # cd pion-- # ./configure [--with-arch=ppc64,x86_64] [--with-cpu=nocona] # make all # make install To build and run Pion's unit tests, run "make check" Building with XCode: -------------------- There is an XCode project included in the root directory of each project called "pion-.xcodeproj". The XCode project assumes that you have the following optional libraries installed: openssl, zlib and log4cxx. It also is configured to build a Universal binary with support for the i386 and ppc architectures. You must have built all the dependency libraries with support for both architectures for this to work properly. A tarball containing all of these built for both the 32-bit and 64-bit Intel and PowerPC architectures is available on the "Third Party Libraries" on our website. Alternatively, you can just modify the XCode project config to build only for your native architecture. To run the Pion server from within XCode, you first need to configure the executable's command arguments by right-clicking on "pion" under the "Executables" group in the left menu, and selecting "Get Info." Under the "Arguments" tab, add the following argument: "-c ../../platform/server/platform.xml" Next, set "pion" as the "Active Target" and click on the "Build and Go" button. Building "pion" will also build all of the service, codec, database and reactor plug-ins. To run PionWebServer from within XCode, you first need to configure the executable's command arguments by right-clicking on PionWebServer under the "Executables" group in the left menu, and selecting "Get Info." Under the "Arguments" tab, add the following argument: "-c ../../net/utils/services.conf" Next, set PionWebServer as the "Active Target" and click on the "Build and Go" button. Building PionWebServer will also build all of the service plug-ins. pion-5.0.4+dfsg.orig/NEWS0000644000372000001440000000007312215647065014444 0ustar robertousersFor recent updates, see https://github.com/cloudmeter/pion pion-5.0.4+dfsg.orig/include/0000755000372000001440000000000012215647143015365 5ustar robertouserspion-5.0.4+dfsg.orig/include/Makefile.am0000644000372000001440000000017112215647065017423 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- SUBDIRS = pion pion-5.0.4+dfsg.orig/include/Makefile.in0000644000372000001440000004461312215647101017434 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = pion all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.4+dfsg.orig/include/pion/0000755000372000001440000000000012215647146016335 5ustar robertouserspion-5.0.4+dfsg.orig/include/pion/process.hpp0000644000372000001440000000451712215647065020533 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PROCESS_HEADER__ #define __PION_PROCESS_HEADER__ #include #include #include #include #include #include namespace pion { // begin namespace pion /// /// process: class for managing process/service related functions /// class PION_API process : private boost::noncopyable { public: // default destructor ~process() {} /// default constructor process(void) {} /// signals the shutdown condition static void shutdown(void); /// blocks until the shutdown condition has been signaled static void wait_for_shutdown(void); /// sets up basic signal handling for the process static void initialize(void); /// fork process and run as a background daemon static void daemonize(void); protected: /// data type for static/global process configuration information struct config_type { /// constructor just initializes native types config_type() : shutdown_now(false) {} /// true if we should shutdown now bool shutdown_now; /// triggered when it is time to shutdown boost::condition shutdown_cond; /// used to protect the shutdown condition boost::mutex shutdown_mutex; }; /// returns a singleton instance of config_type static inline config_type& get_config(void) { boost::call_once(process::create_config, m_instance_flag); return *m_config_ptr; } private: /// creates the config_type singleton static void create_config(void); /// used to ensure thread safety of the config_type singleton static boost::once_flag m_instance_flag; /// pointer to the config_type singleton static config_type * m_config_ptr; }; } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/algorithm.hpp0000644000372000001440000004100412215647065021033 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_ALGORITHM_HEADER__ #define __PION_ALGORITHM_HEADER__ #include #include #include namespace pion { // begin namespace pion struct PION_API algorithm { /** base64 decoding * * @param input - base64 encoded string * @param output - decoded string ( may include non-text chars) * @return true if successful, false if input string contains non-base64 symbols */ static bool base64_decode(std::string const &input, std::string & output); /** base64 encoding * * @param input - arbitrary string ( may include non-text chars) * @param output - base64 encoded string * @return true if successful, */ static bool base64_encode(std::string const &input, std::string & output); /// escapes URL-encoded strings (a%20value+with%20spaces) static std::string url_decode(const std::string& str); /// encodes strings so that they are safe for URLs (with%20spaces) static std::string url_encode(const std::string& str); /// TODO: escapes XML/HTML-encoded strings (1 < 2) //static std::string xml_decode(const std::string& str); /// encodes strings so that they are safe for XML/HTML (2 > 1) static std::string xml_encode(const std::string& str); /// convert sequence of bytes in IEEE 754 format into a native floating point data type /// reference: http://en.wikipedia.org/wiki/Single_precision_floating-point_format static void float_from_bytes(long double& value, const unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits); /// convert native floating point type into a sequence of bytes in IEEE 754 format /// reference: http://en.wikipedia.org/wiki/Single_precision_floating-point_format static void float_to_bytes(long double value, unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits); /// convert sequence of one byte to 8-bit unsigned integer static inline boost::uint8_t to_uint8(unsigned char byte) { return boost::uint8_t(byte); } /// convert sequence of one byte to 8-bit signed integer static inline boost::int8_t to_int8(unsigned char byte) { return boost::int8_t(byte); } /// convert sequence of one byte to 8-bit unsigned integer static inline boost::uint8_t to_uint8(char byte) { return boost::uint8_t(byte); } /// convert sequence of one byte to 8-bit signed integer static inline boost::int8_t to_int8(char byte) { return boost::int8_t(byte); } /// convert sequence of two bytes to 16-bit unsigned integer static inline boost::uint16_t to_uint16(unsigned char high, unsigned char low) { return (((boost::uint16_t)high) << 8) | ((boost::uint16_t)low); } /// convert sequence of two bytes to 16-bit signed integer static inline boost::int16_t to_int16(unsigned char high, unsigned char low) { return (((boost::int16_t)high) << 8) | ((boost::int16_t)low); } /// convert sequence of three bytes to 24-bit unsigned integer static inline boost::uint32_t to_uint24(unsigned char high, unsigned char mid, unsigned char low) { return (((boost::uint32_t)high) << 16) | (((boost::uint32_t)mid) << 8) | ((boost::uint32_t)low); } /// convert sequence of three bytes to 24-bit signed integer static inline boost::int32_t to_int24(unsigned char high, unsigned char mid, unsigned char low) { return (((boost::int32_t)high) << 16) | (((boost::int32_t)mid) << 8) | ((boost::int32_t)low); } /// convert sequence of four bytes to 32-bit unsigned integer static inline boost::uint32_t to_uint32(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low) { return (((boost::uint32_t)high) << 24) | (((boost::uint32_t)mid1) << 16) | (((boost::uint32_t)mid2) << 8) | ((boost::uint32_t)low); } /// convert sequence of four bytes to 32-bit signed integer static inline boost::int32_t to_int32(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low) { return (((boost::int32_t)high) << 24) | (((boost::int32_t)mid1) << 16) | (((boost::int32_t)mid2) << 8) | ((boost::int32_t)low); } /// convert sequence of eight bytes to 64-bit unsigned integer static inline boost::uint64_t to_uint64(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low) { return (((boost::uint64_t)high) << 56) | (((boost::uint64_t)mid1) << 48) | (((boost::uint64_t)mid2) << 40) | (((boost::uint64_t)mid3) << 32) | (((boost::uint64_t)mid4) << 24) | (((boost::uint64_t)mid5) << 16) | (((boost::uint64_t)mid6) << 8) | ((boost::uint64_t)low); } /// convert sequence of eight bytes to 64-bit signed integer static inline boost::int64_t to_int64(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low) { return (((boost::int64_t)high) << 56) | (((boost::int64_t)mid1) << 48) | (((boost::int64_t)mid2) << 40) | (((boost::int64_t)mid3) << 32) | (((boost::int64_t)mid4) << 24) | (((boost::int64_t)mid5) << 16) | (((boost::int64_t)mid6) << 8) | ((boost::int64_t)low); } /// convert sequence of two bytes to 16-bit unsigned integer template static inline boost::uint16_t to_uint16(T1 high, T2 low) { return to_uint16(static_cast(high), static_cast(low)); } /// convert sequence of two bytes to 16-bit signed integer template static inline boost::int16_t to_int16(T1 high, T2 low) { return to_int16(static_cast(high), static_cast(low)); } /// convert sequence of three bytes to 24-bit unsigned integer template static inline boost::uint32_t to_uint24(T1 high, T2 mid, T3 low) { return to_uint24(static_cast(high), static_cast(mid), static_cast(low)); } /// convert sequence of three bytes to 24-bit signed integer template static inline boost::int32_t to_int24(T1 high, T2 mid, T3 low) { return to_int24(static_cast(high), static_cast(mid), static_cast(low)); } /// convert sequence of four bytes to 32-bit unsigned integer template static inline boost::uint32_t to_uint32(T1 high, T2 mid1, T3 mid2, T4 low) { return to_uint32(static_cast(high), static_cast(mid1), static_cast(mid2), static_cast(low)); } /// convert sequence of four bytes to 32-bit signed integer template static inline boost::int32_t to_int32(T1 high, T2 mid1, T3 mid2, T4 low) { return to_int32(static_cast(high), static_cast(mid1), static_cast(mid2), static_cast(low)); } /// convert sequence of eight bytes to 64-bit unsigned integer template static inline boost::uint64_t to_uint64(T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low) { return to_uint64(static_cast(high), static_cast(mid1), static_cast(mid2), static_cast(mid3), static_cast(mid4), static_cast(mid5), static_cast(mid6), static_cast(low)); } /// convert sequence of eight bytes to 64-bit signed integer template static inline boost::int64_t to_int64(T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low) { return to_int64(static_cast(high), static_cast(mid1), static_cast(mid2), static_cast(mid3), static_cast(mid4), static_cast(mid5), static_cast(mid6), static_cast(low)); } /// convert byte pointer into an 8-bit unsigned integer template static inline boost::uint8_t to_uint8(const Byte *buf) { return to_uint8(buf[0]); } /// convert byte pointer into an 8-bit signed integer template static inline boost::int8_t to_int8(const Byte *buf) { return to_int8(buf[0]); } /// convert sequence of two bytes to 16-bit unsigned integer template static inline boost::uint16_t to_uint16(const Byte *buf) { return to_uint16(buf[0], buf[1]); } /// convert sequence of two bytes to 16-bit signed integer template static inline boost::int16_t to_int16(const Byte *buf) { return to_int16(buf[0], buf[1]); } /// convert sequence of three bytes to 24-bit unsigned integer template static inline boost::uint32_t to_uint24(const Byte *buf) { return to_uint24(buf[0], buf[1], buf[2]); } /// convert sequence of three bytes to 24-bit signed integer template static inline boost::int32_t to_int24(const Byte *buf) { return to_int24(buf[0], buf[1], buf[2]); } /// convert sequence of four bytes to 32-bit unsigned integer template static inline boost::uint32_t to_uint32(const Byte *buf) { return to_uint32(buf[0], buf[1], buf[2], buf[3]); } /// convert sequence of four bytes to 32-bit signed integer template static inline boost::int32_t to_int32(const Byte *buf) { return to_int32(buf[0], buf[1], buf[2], buf[3]); } /// convert sequence of eight bytes to 64-bit unsigned integer template static inline boost::uint64_t to_uint64(const Byte *buf) { return to_uint64(buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]); } /// convert sequence of eight bytes to 64-bit signed integer template static inline boost::int64_t to_int64(const Byte *buf) { return to_int64(buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]); } /// convert 8-bit unsigned integer into sequence of one byte template static inline void from_uint8(Byte *buf, const boost::uint8_t n) { buf[0] = n & 0xFF; } /// convert 8-bit signed integer into sequence of one byte template static inline void from_int8(Byte *buf, const boost::int8_t n) { buf[0] = n & 0xFF; } /// convert 16-bit unsigned integer into sequence of two bytes template static inline void from_uint16(Byte *buf, const boost::uint16_t n) { buf[0] = (n >> 8) & 0xFF; buf[1] = n & 0xFF; } /// convert 16-bit signed integer into sequence of two bytes template static inline void from_int16(Byte *buf, const boost::int16_t n) { buf[0] = (n >> 8) & 0xFF; buf[1] = n & 0xFF; } /// convert 24-bit unsigned integer into sequence of three bytes template static inline void from_uint24(Byte *buf, const boost::uint32_t n) { buf[0] = (n >> 16) & 0xFF; buf[1] = (n >> 8) & 0xFF; buf[2] = n & 0xFF; } /// convert 24-bit signed integer into sequence of three bytes template static inline void from_int24(Byte *buf, const boost::int32_t n) { buf[0] = (n >> 16) & 0xFF; buf[1] = (n >> 8) & 0xFF; buf[2] = n & 0xFF; } /// convert 32-bit unsigned integer into sequence of four bytes template static inline void from_uint32(Byte *buf, const boost::uint32_t n) { buf[0] = (n >> 24) & 0xFF; buf[1] = (n >> 16) & 0xFF; buf[2] = (n >> 8) & 0xFF; buf[3] = n & 0xFF; } /// convert 32-bit signed integer into sequence of four bytes template static inline void from_int32(Byte *buf, const boost::int32_t n) { buf[0] = (n >> 24) & 0xFF; buf[1] = (n >> 16) & 0xFF; buf[2] = (n >> 8) & 0xFF; buf[3] = n & 0xFF; } /// convert 64-bit unsigned integer into sequence of eight bytes template static inline void from_uint64(Byte *buf, const boost::uint64_t n) { buf[0] = (n >> 56) & 0xFF; buf[1] = (n >> 48) & 0xFF; buf[2] = (n >> 40) & 0xFF; buf[3] = (n >> 32) & 0xFF; buf[4] = (n >> 24) & 0xFF; buf[5] = (n >> 16) & 0xFF; buf[6] = (n >> 8) & 0xFF; buf[7] = n & 0xFF; } /// convert 64-bit signed integer into sequence of eight bytes template static inline void from_int64(Byte *buf, const boost::int64_t n) { buf[0] = (n >> 56) & 0xFF; buf[1] = (n >> 48) & 0xFF; buf[2] = (n >> 40) & 0xFF; buf[3] = (n >> 32) & 0xFF; buf[4] = (n >> 24) & 0xFF; buf[5] = (n >> 16) & 0xFF; buf[6] = (n >> 8) & 0xFF; buf[7] = n & 0xFF; } /// convert sequence of four bytes in 32-bit "single precision" binary32 format into a float /// http://en.wikipedia.org/wiki/Single_precision_floating-point_format template static inline float to_float(const Byte *ptr) { long double value; float_from_bytes(value, (unsigned char *)ptr, 8U, 23U); return value; } /// convert sequence of eight bytes in 64-bit "double precision" binary64 format into a double /// http://en.wikipedia.org/wiki/Double_precision_floating-point_format template static inline double to_double(const Byte *ptr) { long double value; float_from_bytes(value, (unsigned char *)ptr, 11U, 52U); return value; } /// convert sequence of sixteen bytes in 128-bit "quadruple precision" format into a long double /// http://en.wikipedia.org/wiki/Quadruple_precision_floating-point_format template static inline long double to_long_double(const Byte *ptr) { long double value; float_from_bytes(value, (unsigned char *)ptr, 15U, 112U); return value; } /// convert float into sequence of four bytes in "single precision" binary32 format /// http://en.wikipedia.org/wiki/Single_precision_floating-point_format template static inline void from_float(Byte *ptr, const float n) { float_to_bytes(n, (unsigned char*)ptr, 8U, 23U); } /// convert double into sequence of eight bytes in "double precision" binary64 format /// http://en.wikipedia.org/wiki/Double_precision_floating-point_format template static inline void from_double(Byte *ptr, const double n) { float_to_bytes(n, (unsigned char*)ptr, 11U, 52U); } /// convert long double into sequence of sixteen bytes in 128-bit "quadruple precision" format /// http://en.wikipedia.org/wiki/Quadruple_precision_floating-point_format template static inline void from_long_double(Byte *ptr, const long double n) { float_to_bytes(n, (unsigned char*)ptr, 15U, 112U); } }; } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/logger.hpp0000644000372000001440000002671412215647065020337 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_LOGGER_HEADER__ #define __PION_LOGGER_HEADER__ #include #if defined(PION_USE_LOG4CXX) // unfortunately, the current version of log4cxx has many problems that // produce very annoying warnings // log4cxx headers #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4231) // nonstandard extension used : 'extern' before template explicit instantiation #endif #include #include #ifdef _MSC_VER #pragma warning(pop) #endif #if defined _MSC_VER #if defined _DEBUG #pragma comment(lib, "log4cxxd") #else #pragma comment(lib, "log4cxx") #endif #pragma comment(lib, "odbc32") #endif namespace pion { typedef log4cxx::LoggerPtr logger; typedef log4cxx::AppenderSkeleton log_appender; typedef log_appender * log_appender_ptr; } #define PION_HAS_LOG_APPENDER 1 #define PION_LOG_CONFIG_BASIC log4cxx::BasicConfigurator::configure(); #define PION_LOG_CONFIG(FILE) log4cxx::PropertyConfigurator::configure(FILE); #define PION_GET_LOGGER(NAME) log4cxx::Logger::get_logger(NAME) #define PION_LOG_SETLEVEL_DEBUG(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::DEBUG_INT)); #define PION_LOG_SETLEVEL_INFO(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::INFO_INT)); #define PION_LOG_SETLEVEL_WARN(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::WARN_INT)); #define PION_LOG_SETLEVEL_ERROR(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::ERROR_INT)); #define PION_LOG_SETLEVEL_FATAL(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::FATAL_INT)); #define PION_LOG_SETLEVEL_UP(LOG) LOG->setLevel(LOG->getLevel()->toInt()+1); #define PION_LOG_SETLEVEL_DOWN(LOG) LOG->setLevel(LOG->getLevel()->toInt()-1); #define PION_LOG_DEBUG LOG4CXX_DEBUG #define PION_LOG_INFO LOG4CXX_INFO #define PION_LOG_WARN LOG4CXX_WARN #define PION_LOG_ERROR LOG4CXX_ERROR #define PION_LOG_FATAL LOG4CXX_FATAL #elif defined(PION_USE_LOG4CPLUS) // log4cplus headers #include #include #include #include #include #include #include #if defined _MSC_VER #if defined _DEBUG #if defined PION_STATIC_LINKING #pragma comment(lib, "log4cplusSD") #else #pragma comment(lib, "log4cplusD") #endif #else #if defined PION_STATIC_LINKING #pragma comment(lib, "log4cplusS") #else #pragma comment(lib, "log4cplus") #endif #endif #endif namespace pion { typedef log4cplus::Logger logger; typedef log4cplus::Appender log_appender; typedef log4cplus::SharedAppenderPtr log_appender_ptr; /// /// circular_buffer_appender: caches log events in a circular buffer /// class circular_buffer_appender : public log4cplus::Appender { public: typedef boost::circular_buffer LogEventBuffer; // default constructor and destructor circular_buffer_appender(void) : m_log_events(1000) {}; virtual ~circular_buffer_appender() {} /// returns an iterator to the log events in the buffer const LogEventBuffer& getLogIterator() const { return m_log_events; } public: // member functions inherited from the Appender interface class virtual void close() {} protected: virtual void append(const log4cplus::spi::InternalLoggingEvent& event) { boost::mutex::scoped_lock log_lock(m_log_mutex); m_log_events.push_back(*event.clone()); } private: /// circular buffer for log events LogEventBuffer m_log_events; /// mutex to make class thread-safe boost::mutex m_log_mutex; }; } #define PION_HAS_LOG_APPENDER 1 #define PION_LOG_CONFIG_BASIC log4cplus::BasicConfigurator::doConfigure(); #define PION_LOG_CONFIG(FILE) log4cplus::PropertyConfigurator::doConfigure(FILE); #define PION_GET_LOGGER(NAME) log4cplus::Logger::getInstance(NAME) #define PION_LOG_SETLEVEL_DEBUG(LOG) LOG.setLogLevel(log4cplus::DEBUG_LOG_LEVEL); #define PION_LOG_SETLEVEL_INFO(LOG) LOG.setLogLevel(log4cplus::INFO_LOG_LEVEL); #define PION_LOG_SETLEVEL_WARN(LOG) LOG.setLogLevel(log4cplus::WARN_LOG_LEVEL); #define PION_LOG_SETLEVEL_ERROR(LOG) LOG.setLogLevel(log4cplus::ERROR_LOG_LEVEL); #define PION_LOG_SETLEVEL_FATAL(LOG) LOG.setLogLevel(log4cplus::FATAL_LOG_LEVEL); #define PION_LOG_SETLEVEL_UP(LOG) LOG.setLogLevel(LOG.getLogLevel()+1); #define PION_LOG_SETLEVEL_DOWN(LOG) LOG.setLogLevel(LOG.getLogLevel()-1); #define PION_LOG_DEBUG LOG4CPLUS_DEBUG #define PION_LOG_INFO LOG4CPLUS_INFO #define PION_LOG_WARN LOG4CPLUS_WARN #define PION_LOG_ERROR LOG4CPLUS_ERROR #define PION_LOG_FATAL LOG4CPLUS_FATAL #elif defined(PION_USE_LOG4CPP) // log4cpp headers #include #include #include #include namespace pion { typedef log4cpp::Category* logger; typedef log4cpp::AppenderSkeleton log_appender; typedef log_appender * log_appender_ptr; } #define PION_HAS_LOG_APPENDER 1 #define PION_LOG_CONFIG_BASIC { log4cpp::OstreamAppender *app = new log4cpp::OstreamAppender("cout", &std::cout); app->setLayout(new log4cpp::BasicLayout()); log4cpp::Category::getRoot().setAppender(app); } #define PION_LOG_CONFIG(FILE) { log4cpp::PropertyConfigurator::configure(FILE); } #define PION_GET_LOGGER(NAME) (&log4cpp::Category::getInstance(NAME)) #define PION_LOG_SETLEVEL_DEBUG(LOG) { LOG->setPriority(log4cpp::Priority::DEBUG); } #define PION_LOG_SETLEVEL_INFO(LOG) { LOG->setPriority(log4cpp::Priority::INFO); } #define PION_LOG_SETLEVEL_WARN(LOG) { LOG->setPriority(log4cpp::Priority::WARN); } #define PION_LOG_SETLEVEL_ERROR(LOG) { LOG->setPriority(log4cpp::Priority::ERROR); } #define PION_LOG_SETLEVEL_FATAL(LOG) { LOG->setPriority(log4cpp::Priority::FATAL); } #define PION_LOG_SETLEVEL_UP(LOG) { LOG->setPriority(LOG.getPriority()+1); } #define PION_LOG_SETLEVEL_DOWN(LOG) { LOG->setPriority(LOG.getPriority()-1); } #define PION_LOG_DEBUG(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::DEBUG) { LOG->debugStream() << MSG; } #define PION_LOG_INFO(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::INFO) { LOG->infoStream() << MSG; } #define PION_LOG_WARN(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::WARN) { LOG->warnStream() << MSG; } #define PION_LOG_ERROR(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::ERROR) { LOG->errorStream() << MSG; } #define PION_LOG_FATAL(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::FATAL) { LOG->fatalStream() << MSG; } #elif defined(PION_DISABLE_LOGGING) // Logging is disabled -> add do-nothing stubs for logging namespace pion { typedef int logger; typedef int log_appender; typedef log_appender * log_appender_ptr; } #undef PION_HAS_LOG_APPENDER #define PION_LOG_CONFIG_BASIC {} #define PION_LOG_CONFIG(FILE) {} #define PION_GET_LOGGER(NAME) 0 // use "++LOG" to avoid warnings about LOG not being used #define PION_LOG_SETLEVEL_DEBUG(LOG) { if (false) ++LOG; } #define PION_LOG_SETLEVEL_INFO(LOG) { if (false) ++LOG; } #define PION_LOG_SETLEVEL_WARN(LOG) { if (false) ++LOG; } #define PION_LOG_SETLEVEL_ERROR(LOG) { if (false) ++LOG; } #define PION_LOG_SETLEVEL_FATAL(LOG) { if (false) ++LOG; } #define PION_LOG_SETLEVEL_UP(LOG) { if (false) ++LOG; } #define PION_LOG_SETLEVEL_DOWN(LOG) { if (false) ++LOG; } // use "++LOG" to avoid warnings about LOG not being used #define PION_LOG_DEBUG(LOG, MSG) { if (false) ++LOG; } #define PION_LOG_INFO(LOG, MSG) { if (false) ++LOG; } #define PION_LOG_WARN(LOG, MSG) { if (false) ++LOG; } #define PION_LOG_ERROR(LOG, MSG) { if (false) ++LOG; } #define PION_LOG_FATAL(LOG, MSG) { if (false) ++LOG; } #else #define PION_USE_OSTREAM_LOGGING // Logging uses std::cout and std::cerr #include #include #include namespace pion { struct PION_API logger { enum log_priority_type { LOG_LEVEL_DEBUG, LOG_LEVEL_INFO, LOG_LEVEL_WARN, LOG_LEVEL_ERROR, LOG_LEVEL_FATAL }; ~logger() {} logger(void) : m_name("pion") {} logger(const std::string& name) : m_name(name) {} logger(const logger& p) : m_name(p.m_name) {} std::string m_name; static log_priority_type m_priority; }; typedef int log_appender; typedef log_appender * log_appender_ptr; } #undef PION_HAS_LOG_APPENDER #define PION_LOG_CONFIG_BASIC {} #define PION_LOG_CONFIG(FILE) {} #define PION_GET_LOGGER(NAME) pion::logger(NAME) #define PION_LOG_SETLEVEL_DEBUG(LOG) { LOG.m_priority = pion::logger::LOG_LEVEL_DEBUG; } #define PION_LOG_SETLEVEL_INFO(LOG) { LOG.m_priority = pion::logger::LOG_LEVEL_INFO; } #define PION_LOG_SETLEVEL_WARN(LOG) { LOG.m_priority = pion::logger::LOG_LEVEL_WARN; } #define PION_LOG_SETLEVEL_ERROR(LOG) { LOG.m_priority = pion::logger::LOG_LEVEL_ERROR; } #define PION_LOG_SETLEVEL_FATAL(LOG) { LOG.m_priority = pion::logger::LOG_LEVEL_FATAL; } #define PION_LOG_SETLEVEL_UP(LOG) { ++LOG.m_priority; } #define PION_LOG_SETLEVEL_DOWN(LOG) { --LOG.m_priority; } #define PION_LOG_DEBUG(LOG, MSG) if (LOG.m_priority <= pion::logger::LOG_LEVEL_DEBUG) { std::cout << time(NULL) << " DEBUG " << LOG.m_name << ' ' << MSG << std::endl; } #define PION_LOG_INFO(LOG, MSG) if (LOG.m_priority <= pion::logger::LOG_LEVEL_INFO) { std::cout << time(NULL) << " INFO " << LOG.m_name << ' ' << MSG << std::endl; } #define PION_LOG_WARN(LOG, MSG) if (LOG.m_priority <= pion::logger::LOG_LEVEL_WARN) { std::cerr << time(NULL) << " WARN " << LOG.m_name << ' ' << MSG << std::endl; } #define PION_LOG_ERROR(LOG, MSG) if (LOG.m_priority <= pion::logger::LOG_LEVEL_ERROR) { std::cerr << time(NULL) << " ERROR " << LOG.m_name << ' ' << MSG << std::endl; } #define PION_LOG_FATAL(LOG, MSG) if (LOG.m_priority <= pion::logger::LOG_LEVEL_FATAL) { std::cerr << time(NULL) << " FATAL " << LOG.m_name << ' ' << MSG << std::endl; } #endif #endif pion-5.0.4+dfsg.orig/include/pion/Makefile.am0000644000372000001440000000062312215647065020372 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- pion_includedir = $(includedir)/pion pion_include_HEADERS = \ admin_rights.hpp algorithm.hpp config.hpp error.hpp hash_map.hpp logger.hpp \ plugin.hpp plugin_manager.hpp process.hpp scheduler.hpp user.hpp EXTRA_DIST = config.hpp.win config.hpp.xcode config.hpp.in SUBDIRS = http spdy test tcp pion-5.0.4+dfsg.orig/include/pion/admin_rights.hpp0000644000372000001440000000517412215647065021525 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_ADMIN_RIGHTS_HEADER__ #define __PION_ADMIN_RIGHTS_HEADER__ #include #include #include #include namespace pion { // begin namespace pion /// /// admin_rights: obtains administrative rights for the process /// class PION_API admin_rights { public: /** * constructs object, obtaining administrative rights; will block * if another thread has already obtained rights * * @param use_log if false, then no logging will be performed */ admin_rights(bool use_log = true); /// destructor releases administrative rights virtual ~admin_rights() { release(); } /// releases administrative rights void release(void); /// calculates the user id based upon the user configuration parameter static long run_as_user(const std::string& user_name); /// calculates the group id based upon the group configuration parameter static long run_as_group(const std::string& group_name); private: /** * finds an identifier within a system credentials file (users or groups) * * @param name descriptive name to lookup (user or group name, may be id) * @param file system credentials file to look within * * @return boost::int32_t identifier found, or -1 if none found */ static long find_system_id(const std::string& name, const std::string& file); /// adminisitrator or root user identifier static const boost::int16_t ADMIN_USER_ID; /// mutex used to prevent multiple threads from corrupting user id static boost::mutex m_mutex; /// primary logging interface used by this class logger m_logger; /// lock used to prevent multiple threads from corrupting user id boost::unique_lock m_lock; /// saved user identifier before upgrading to administrator boost::int16_t m_user_id; /// true if the class currently holds administrative rights bool m_has_rights; /// if false, then no logging will be performed bool m_use_log; }; } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/config.hpp.xcode0000644000372000001440000000470112215647065021416 0ustar robertousers/* common/include/pion/PionConfig.hpp. Generated from PionConfig.hpp.in by configure. */ // --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PIONCONFIG_HEADER__ #define __PION_PIONCONFIG_HEADER__ // DO NOT USE autoheader ; this file is not automanaged!!! /* Define to the version number of pion. */ #define PION_VERSION "5.0.4" /* Define to the directory where Pion plug-ins are installed. */ #define PION_PLUGINS_DIRECTORY "/usr/local/lib/pion/plugins" /* Define to the directory where cygwin is installed. */ #define PION_CYGWIN_DIRECTORY "" /* Define to 1 if C library supports malloc_trim() */ #undef PION_HAVE_MALLOC_TRIM // ----------------------------------------------------------------------- // hash_map support // // At least one of the following options should be defined. /* Define to 1 if you have the header file. */ #define PION_HAVE_EXT_HASH_MAP 1 /* Define to 1 if you have the header file. */ /* #undef PION_HAVE_HASH_MAP */ /* Define to 1 if you have the header file. */ /* #undef PION_HAVE_UNORDERED_MAP */ // ----------------------------------------------------------------------- // Logging Options // // At most one of the logging options below should be defined. If none of // them are defined, std::cout and std::cerr will be used for logging. /* Define to 1 to use the `log4cplus' library (-llog4cplus) for logging. */ #define PION_USE_LOG4CPLUS 1 /* Define to 1 to use the `log4cxx' library (-llog4cxx) for logging. */ /* #undef PION_USE_LOG4CXX */ /* Define to 1 to use the `log4cpp' library (-llog4cpp) for logging. */ /* #undef PION_USE_LOG4CPP */ /* Define to 1 to disable logging. */ /* #undef PION_DISABLE_LOGGING */ // ----------------------------------------------------------------------- /* Define to 1 if you have the `zlib' library. */ #define PION_HAVE_ZLIB 1 /* Define to 1 if you have the `bzlib' library. */ #define PION_HAVE_BZLIB 1 /* Define to 1 if you have the `OpenSSL' library. */ #define PION_HAVE_SSL 1 /* This is used by Windows projects to flag exported symbols */ #define PION_API #define PION_PLUGIN #endif pion-5.0.4+dfsg.orig/include/pion/user.hpp0000644000372000001440000002074512215647065020034 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_USER_HEADER__ #define __PION_USER_HEADER__ #include #include #include #include #include #include #include #include #include #include #ifdef PION_HAVE_SSL #if defined(__APPLE__) // suppress warnings about OpenSSL being deprecated in OSX #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif #include #endif namespace pion { // begin namespace pion /// /// user: base class to store user credentials /// class user : private boost::noncopyable { public: /// construct a new user object user(std::string const &username) : m_username(username) {} /// construct a new user object user(std::string const &username, std::string const &password) : m_username(username) { set_password(password); } /// virtual destructor virtual ~user() {} /// returns user name as a string std::string const & get_username() const { return m_username; } /// returns password for the user (encrypted if SSL is enabled) std::string const & get_password() const { return m_password; } /** * matches password credential for given user * * @param password password credentials */ virtual bool match_password(const std::string& password) const { #ifdef PION_HAVE_SSL unsigned char sha1_hash[SHA_DIGEST_LENGTH]; SHA1(reinterpret_cast(password.data()), password.size(), sha1_hash); return (memcmp(sha1_hash, m_password_hash, SHA_DIGEST_LENGTH) == 0); #else return m_password == password; #endif } /// sets password credentials for given user virtual void set_password(const std::string& password) { #ifdef PION_HAVE_SSL // store encrypted hash value SHA1((const unsigned char *)password.data(), password.size(), m_password_hash); // update password string (convert binary to hex) m_password.clear(); char buf[3]; for (unsigned int n = 0; n < SHA_DIGEST_LENGTH; ++n) { sprintf(buf, "%.2x", static_cast(m_password_hash[n])); m_password += buf; } #else m_password = password; #endif } #ifdef PION_HAVE_SSL /// sets encrypted password credentials for given user virtual void set_password_hash(const std::string& password_hash) { // update password string representation if (password_hash.size() != SHA_DIGEST_LENGTH*2) BOOST_THROW_EXCEPTION( error::bad_password_hash() ); m_password = password_hash; // convert string from hex to binary value char buf[3]; buf[2] = '\0'; unsigned int hash_pos = 0; std::string::iterator str_it = m_password.begin(); while (str_it != m_password.end()) { buf[0] = *str_it; ++str_it; buf[1] = *str_it; ++str_it; m_password_hash[hash_pos++] = boost::numeric_cast(strtoul(buf, 0, 16)); } } #endif protected: /// username string const std::string m_username; /// password string (actual contents depends on implementation) std::string m_password; #ifdef PION_HAVE_SSL /// SHA1 hash of the password unsigned char m_password_hash[SHA_DIGEST_LENGTH]; #endif }; /// data type for a user pointer typedef boost::shared_ptr user_ptr; /// /// user_manager base class for user container/manager /// class user_manager : private boost::noncopyable { public: /// construct a new user_manager object user_manager(void) {} /// virtual destructor virtual ~user_manager() {} /// returns true if no users are defined inline bool empty(void) const { boost::mutex::scoped_lock lock(m_mutex); return m_users.empty(); } /** * used to add a new user with plaintext password * * @param username name or identifier of the user to add * @param password plaintext password of the user to add * * @return false if user with such a name already exists */ virtual bool add_user(const std::string &username, const std::string &password) { boost::mutex::scoped_lock lock(m_mutex); user_map_t::iterator i = m_users.find(username); if (i!=m_users.end()) return false; user_ptr user_ptr(new user(username, password)); m_users.insert(std::make_pair(username, user_ptr)); return true; } /** * update password for given user * * @param username name or identifier of the user to update * @param password plaintext password of the user to update * * @return false if user with such a name doesn't exist */ virtual bool update_user(const std::string &username, const std::string &password) { boost::mutex::scoped_lock lock(m_mutex); user_map_t::iterator i = m_users.find(username); if (i==m_users.end()) return false; i->second->set_password(password); return true; } #ifdef PION_HAVE_SSL /** * used to add a new user with encrypted password * * @param username name or identifier of the user to add * @param password_hash encrypted password of the user to add * * @return false if user with such a name already exists */ virtual bool add_user_hash(const std::string &username, const std::string &password_hash) { boost::mutex::scoped_lock lock(m_mutex); user_map_t::iterator i = m_users.find(username); if (i!=m_users.end()) return false; user_ptr user_ptr(new user(username)); user_ptr->set_password_hash(password_hash); m_users.insert(std::make_pair(username, user_ptr)); return true; } /** * update password for given user with encrypted password * * @param username name or identifier of the user to update * @param password_hash encrypted password of the user to update * * @return false if user with such a name doesn't exist */ virtual bool update_user_hash(const std::string &username, const std::string &password_hash) { boost::mutex::scoped_lock lock(m_mutex); user_map_t::iterator i = m_users.find(username); if (i==m_users.end()) return false; i->second->set_password_hash(password_hash); return true; } #endif /** * used to remove given user * * @return false if no user with such username */ virtual bool remove_user(const std::string &username) { boost::mutex::scoped_lock lock(m_mutex); user_map_t::iterator i = m_users.find(username); if (i==m_users.end()) return false; m_users.erase(i); return true; } /** * Used to locate user object by username */ virtual user_ptr get_user(const std::string &username) { boost::mutex::scoped_lock lock(m_mutex); user_map_t::const_iterator i = m_users.find(username); if (i==m_users.end()) return user_ptr(); else return i->second; } /** * Used to locate user object by username and password */ virtual user_ptr get_user(const std::string& username, const std::string& password) { boost::mutex::scoped_lock lock(m_mutex); user_map_t::const_iterator i = m_users.find(username); if (i==m_users.end() || !i->second->match_password(password)) return user_ptr(); else return i->second; } protected: /// data type for a map of usernames to user objects typedef std::map user_map_t; /// mutex used to protect access to the user list mutable boost::mutex m_mutex; /// user records container user_map_t m_users; }; /// data type for a user_manager pointer typedef boost::shared_ptr user_manager_ptr; } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/hash_map.hpp0000644000372000001440000001101712215647065020626 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HASH_MAP_HEADER__ #define __PION_HASH_MAP_HEADER__ #include #include #include #include #include #if defined(PION_HAVE_UNORDERED_MAP) #include #elif defined(PION_HAVE_EXT_HASH_MAP) #include #elif defined(PION_HAVE_HASH_MAP) #include #endif namespace pion { // begin namespace pion #if defined(PION_HAVE_UNORDERED_MAP) #define PION_HASH_MAP std::tr1::unordered_map #define PION_HASH_MULTIMAP std::tr1::unordered_multimap #define PION_HASH_STRING boost::hash #define PION_HASH(TYPE) boost::hash #elif defined(PION_HAVE_EXT_HASH_MAP) #if __GNUC__ >= 3 #define PION_HASH_MAP __gnu_cxx::hash_map #define PION_HASH_MULTIMAP __gnu_cxx::hash_multimap #else #define PION_HASH_MAP hash_map #define PION_HASH_MULTIMAP hash_multimap #endif #define PION_HASH_STRING boost::hash #define PION_HASH(TYPE) boost::hash #elif defined(PION_HAVE_HASH_MAP) #ifdef _MSC_VER #define PION_HASH_MAP stdext::hash_map #define PION_HASH_MULTIMAP stdext::hash_multimap #define PION_HASH_STRING stdext::hash_compare > #define PION_HASH(TYPE) stdext::hash_compare > #else #define PION_HASH_MAP hash_map #define PION_HASH_MULTIMAP hash_multimap #define PION_HASH_STRING boost::hash #define PION_HASH(TYPE) boost::hash #endif #endif /// case insensitive string equality predicate /// copied from boost.unordered hash_equality documentation /// http://www.boost.org/doc/libs/1_50_0/doc/html/unordered/hash_equality.html struct iequal_to : std::binary_function { bool operator()(std::string const& x, std::string const& y) const { return boost::algorithm::iequals(x, y, std::locale()); } }; /// case insensitive hash generic function /// copied from boost.unordered hash_equality documentation /// http://www.boost.org/doc/libs/1_50_0/doc/html/unordered/hash_equality.html struct ihash : std::unary_function { std::size_t operator()(std::string const& x) const { std::size_t seed = 0; std::locale locale; for(std::string::const_iterator it = x.begin(); it != x.end(); ++it) { boost::hash_combine(seed, std::toupper(*it, locale)); } return seed; } }; #ifdef _MSC_VER /// Case-insensitive "less than" predicate template struct is_iless : public std::binary_function<_Ty, _Ty, bool> { /// Constructor is_iless( const std::locale& Loc=std::locale() ) : m_Loc( Loc ) {} /// returns true if Arg1 is less than Arg2 bool operator()( const _Ty& Arg1, const _Ty& Arg2 ) const { return _Ty(boost::algorithm::to_upper_copy(Arg1, m_Loc)) < _Ty(boost::algorithm::to_upper_copy(Arg2, m_Loc)); } private: std::locale m_Loc; }; /// case insensitive extension of stdext::hash_compare for std::string struct ihash_windows : public stdext::hash_compare > { // makes operator() with two arguments visible, otherwise it would be hidden by the operator() defined here using stdext::hash_compare >::operator(); inline size_t operator()(const std::string& str) const { return ihash()(str); } }; /// data type for case-insensitive dictionary of strings typedef PION_HASH_MULTIMAP ihash_multimap; #else /// data type for case-insensitive dictionary of strings typedef PION_HASH_MULTIMAP ihash_multimap; #endif } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/Makefile.in0000644000372000001440000005254412215647101020403 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include/pion DIST_COMMON = $(pion_include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.hpp.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pion_includedir)" HEADERS = $(pion_include_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pion_includedir = $(includedir)/pion pion_include_HEADERS = \ admin_rights.hpp algorithm.hpp config.hpp error.hpp hash_map.hpp logger.hpp \ plugin.hpp plugin_manager.hpp process.hpp scheduler.hpp user.hpp EXTRA_DIST = config.hpp.win config.hpp.xcode config.hpp.in SUBDIRS = http spdy test tcp all: config.hpp $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/pion/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/pion/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): config.hpp: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.hpp.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status include/pion/config.hpp $(srcdir)/config.hpp.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.hpp stamp-h1 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pion_includeHEADERS: $(pion_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(pion_includedir)" || $(MKDIR_P) "$(DESTDIR)$(pion_includedir)" @list='$(pion_include_HEADERS)'; test -n "$(pion_includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pion_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pion_includedir)" || exit $$?; \ done uninstall-pion_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pion_include_HEADERS)'; test -n "$(pion_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pion_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pion_includedir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.hpp.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.hpp.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.hpp.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.hpp.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) config.hpp installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pion_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pion_includeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pion_includeHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-hdr distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pion_includeHEADERS install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-pion_includeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.4+dfsg.orig/include/pion/tcp/0000755000372000001440000000000012215647144017121 5ustar robertouserspion-5.0.4+dfsg.orig/include/pion/tcp/connection.hpp0000644000372000001440000006563612215647065022013 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_TCP_CONNECTION_HEADER__ #define __PION_TCP_CONNECTION_HEADER__ #ifdef PION_HAVE_SSL #ifdef PION_XCODE // ignore openssl warnings if building with XCode #pragma GCC system_header #endif #include #endif #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace tcp { // begin namespace tcp /// /// connection: represents a single tcp connection /// class connection : public boost::enable_shared_from_this, private boost::noncopyable { public: /// data type for the connection's lifecycle state enum lifecycle_type { LIFECYCLE_CLOSE, LIFECYCLE_KEEPALIVE, LIFECYCLE_PIPELINED }; /// size of the read buffer enum { READ_BUFFER_SIZE = 8192 }; /// data type for a function that handles TCP connection objects typedef boost::function1 > connection_handler; /// data type for an I/O read buffer typedef boost::array read_buffer_type; /// data type for a socket connection typedef boost::asio::ip::tcp::socket socket_type; #ifdef PION_HAVE_SSL /// data type for an SSL socket connection typedef boost::asio::ssl::stream ssl_socket_type; /// data type for SSL configuration context typedef boost::asio::ssl::context ssl_context_type; #else class ssl_socket_type { public: ssl_socket_type(boost::asio::io_service& io_service) : m_socket(io_service) {} inline socket_type& next_layer(void) { return m_socket; } inline const socket_type& next_layer(void) const { return m_socket; } inline socket_type::lowest_layer_type& lowest_layer(void) { return m_socket.lowest_layer(); } inline const socket_type::lowest_layer_type& lowest_layer(void) const { return m_socket.lowest_layer(); } inline void shutdown(void) {} private: socket_type m_socket; }; typedef int ssl_context_type; #endif /** * creates new shared connection objects * * @param io_service asio service associated with the connection * @param ssl_context asio ssl context associated with the connection * @param ssl_flag if true then the connection will be encrypted using SSL * @param finished_handler function called when a server has finished * handling the connection */ static inline boost::shared_ptr create(boost::asio::io_service& io_service, ssl_context_type& ssl_context, const bool ssl_flag, connection_handler finished_handler) { return boost::shared_ptr(new connection(io_service, ssl_context, ssl_flag, finished_handler)); } /** * creates a new connection object * * @param io_service asio service associated with the connection * @param ssl_flag if true then the connection will be encrypted using SSL */ explicit connection(boost::asio::io_service& io_service, const bool ssl_flag = false) : #ifdef PION_HAVE_SSL m_ssl_context(io_service, boost::asio::ssl::context::sslv23), m_ssl_socket(io_service, m_ssl_context), m_ssl_flag(ssl_flag), #else m_ssl_context(0), m_ssl_socket(io_service), m_ssl_flag(false), #endif m_lifecycle(LIFECYCLE_CLOSE) { save_read_pos(NULL, NULL); } /** * creates a new connection object for SSL * * @param io_service asio service associated with the connection * @param ssl_context asio ssl context associated with the connection */ connection(boost::asio::io_service& io_service, ssl_context_type& ssl_context) : #ifdef PION_HAVE_SSL m_ssl_context(io_service, boost::asio::ssl::context::sslv23), m_ssl_socket(io_service, ssl_context), m_ssl_flag(true), #else m_ssl_context(0), m_ssl_socket(io_service), m_ssl_flag(false), #endif m_lifecycle(LIFECYCLE_CLOSE) { save_read_pos(NULL, NULL); } /// returns true if the connection is currently open inline bool is_open(void) const { return const_cast(m_ssl_socket).lowest_layer().is_open(); } /// closes the tcp socket and cancels any pending asynchronous operations inline void close(void) { if (is_open()) { try { // shutting down SSL will wait forever for a response from the remote end, // which causes it to hang indefinitely if the other end died unexpectedly // if (get_ssl_flag()) m_ssl_socket.shutdown(); // windows seems to require this otherwise it doesn't // recognize that connections have been closed m_ssl_socket.next_layer().shutdown(boost::asio::ip::tcp::socket::shutdown_both); } catch (...) {} // ignore exceptions // close the underlying socket (ignore errors) boost::system::error_code ec; m_ssl_socket.next_layer().close(ec); } } /// cancels any asynchronous operations pending on the socket. /// there is no good way to do this on windows until vista or later (0x0600) /// see http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/reference/basic_stream_socket/cancel/overload2.html /// note that the asio docs are misleading because close() is not thread-safe, /// and the suggested #define statements cause WAY too much trouble and heartache inline void cancel(void) { #if !defined(_MSC_VER) || (_WIN32_WINNT >= 0x0600) boost::system::error_code ec; m_ssl_socket.next_layer().cancel(ec); #endif } /// virtual destructor virtual ~connection() { close(); } /** * asynchronously accepts a new tcp connection * * @param tcp_acceptor object used to accept new connections * @param handler called after a new connection has been accepted * * @see boost::asio::basic_socket_acceptor::async_accept() */ template inline void async_accept(boost::asio::ip::tcp::acceptor& tcp_acceptor, AcceptHandler handler) { tcp_acceptor.async_accept(m_ssl_socket.lowest_layer(), handler); } /** * accepts a new tcp connection (blocks until established) * * @param tcp_acceptor object used to accept new connections * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::basic_socket_acceptor::accept() */ inline boost::system::error_code accept(boost::asio::ip::tcp::acceptor& tcp_acceptor) { boost::system::error_code ec; tcp_acceptor.accept(m_ssl_socket.lowest_layer(), ec); return ec; } /** * asynchronously connects to a remote endpoint * * @param tcp_endpoint remote endpoint to connect to * @param handler called after a new connection has been established * * @see boost::asio::basic_socket_acceptor::async_connect() */ template inline void async_connect(boost::asio::ip::tcp::endpoint& tcp_endpoint, ConnectHandler handler) { m_ssl_socket.lowest_layer().async_connect(tcp_endpoint, handler); } /** * asynchronously connects to a (IPv4) remote endpoint * * @param remote_addr remote IP address (v4) to connect to * @param remote_port remote port number to connect to * @param handler called after a new connection has been established * * @see boost::asio::basic_socket_acceptor::async_connect() */ template inline void async_connect(const boost::asio::ip::address& remote_addr, const unsigned int remote_port, ConnectHandler handler) { boost::asio::ip::tcp::endpoint tcp_endpoint(remote_addr, remote_port); async_connect(tcp_endpoint, handler); } /** * connects to a remote endpoint (blocks until established) * * @param tcp_endpoint remote endpoint to connect to * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::basic_socket_acceptor::connect() */ inline boost::system::error_code connect(boost::asio::ip::tcp::endpoint& tcp_endpoint) { boost::system::error_code ec; m_ssl_socket.lowest_layer().connect(tcp_endpoint, ec); return ec; } /** * connects to a (IPv4) remote endpoint (blocks until established) * * @param remote_addr remote IP address (v4) to connect to * @param remote_port remote port number to connect to * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::basic_socket_acceptor::connect() */ inline boost::system::error_code connect(const boost::asio::ip::address& remote_addr, const unsigned int remote_port) { boost::asio::ip::tcp::endpoint tcp_endpoint(remote_addr, remote_port); return connect(tcp_endpoint); } /** * connects to a remote endpoint with hostname lookup * * @param remote_server hostname of the remote server to connect to * @param remote_port remote port number to connect to * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::basic_socket_acceptor::connect() */ inline boost::system::error_code connect(const std::string& remote_server, const unsigned int remote_port) { // query a list of matching endpoints boost::system::error_code ec; boost::asio::ip::tcp::resolver resolver(m_ssl_socket.lowest_layer().get_io_service()); boost::asio::ip::tcp::resolver::query query(remote_server, boost::lexical_cast(remote_port), boost::asio::ip::tcp::resolver::query::numeric_service); boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query, ec); if (ec) return ec; // try each one until we are successful ec = boost::asio::error::host_not_found; boost::asio::ip::tcp::resolver::iterator end; while (ec && endpoint_iterator != end) { boost::asio::ip::tcp::endpoint ep(endpoint_iterator->endpoint()); ++endpoint_iterator; ec = connect(ep); if (ec) close(); } return ec; } /** * asynchronously performs client-side SSL handshake for a new connection * * @param handler called after the ssl handshake has completed * * @see boost::asio::ssl::stream::async_handshake() */ template inline void async_handshake_client(SSLHandshakeHandler handler) { #ifdef PION_HAVE_SSL m_ssl_socket.async_handshake(boost::asio::ssl::stream_base::client, handler); m_ssl_flag = true; #endif } /** * asynchronously performs server-side SSL handshake for a new connection * * @param handler called after the ssl handshake has completed * * @see boost::asio::ssl::stream::async_handshake() */ template inline void async_handshake_server(SSLHandshakeHandler handler) { #ifdef PION_HAVE_SSL m_ssl_socket.async_handshake(boost::asio::ssl::stream_base::server, handler); m_ssl_flag = true; #endif } /** * performs client-side SSL handshake for a new connection (blocks until finished) * * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::ssl::stream::handshake() */ inline boost::system::error_code handshake_client(void) { boost::system::error_code ec; #ifdef PION_HAVE_SSL m_ssl_socket.handshake(boost::asio::ssl::stream_base::client, ec); m_ssl_flag = true; #endif return ec; } /** * performs server-side SSL handshake for a new connection (blocks until finished) * * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::ssl::stream::handshake() */ inline boost::system::error_code handshake_server(void) { boost::system::error_code ec; #ifdef PION_HAVE_SSL m_ssl_socket.handshake(boost::asio::ssl::stream_base::server, ec); m_ssl_flag = true; #endif return ec; } /** * asynchronously reads some data into the connection's read buffer * * @param handler called after the read operation has completed * * @see boost::asio::basic_stream_socket::async_read_some() */ template inline void async_read_some(ReadHandler handler) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) m_ssl_socket.async_read_some(boost::asio::buffer(m_read_buffer), handler); else #endif m_ssl_socket.next_layer().async_read_some(boost::asio::buffer(m_read_buffer), handler); } /** * asynchronously reads some data into the connection's read buffer * * @param read_buffer the buffer to read data into * @param handler called after the read operation has completed * * @see boost::asio::basic_stream_socket::async_read_some() */ template inline void async_read_some(ReadBufferType read_buffer, ReadHandler handler) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) m_ssl_socket.async_read_some(read_buffer, handler); else #endif m_ssl_socket.next_layer().async_read_some(read_buffer, handler); } /** * reads some data into the connection's read buffer (blocks until finished) * * @param ec contains error code if the read fails * @return std::size_t number of bytes read * * @see boost::asio::basic_stream_socket::read_some() */ inline std::size_t read_some(boost::system::error_code& ec) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) return m_ssl_socket.read_some(boost::asio::buffer(m_read_buffer), ec); else #endif return m_ssl_socket.next_layer().read_some(boost::asio::buffer(m_read_buffer), ec); } /** * reads some data into the connection's read buffer (blocks until finished) * * @param read_buffer the buffer to read data into * @param ec contains error code if the read fails * @return std::size_t number of bytes read * * @see boost::asio::basic_stream_socket::read_some() */ template inline std::size_t read_some(ReadBufferType read_buffer, boost::system::error_code& ec) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) return m_ssl_socket.read_some(read_buffer, ec); else #endif return m_ssl_socket.next_layer().read_some(read_buffer, ec); } /** * asynchronously reads data into the connection's read buffer until * completion_condition is met * * @param completion_condition determines if the read operation is complete * @param handler called after the read operation has completed * * @see boost::asio::async_read() */ template inline void async_read(CompletionCondition completion_condition, ReadHandler handler) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) boost::asio::async_read(m_ssl_socket, boost::asio::buffer(m_read_buffer), completion_condition, handler); else #endif boost::asio::async_read(m_ssl_socket.next_layer(), boost::asio::buffer(m_read_buffer), completion_condition, handler); } /** * asynchronously reads data from the connection until completion_condition * is met * * @param buffers one or more buffers into which the data will be read * @param completion_condition determines if the read operation is complete * @param handler called after the read operation has completed * * @see boost::asio::async_read() */ template inline void async_read(const MutableBufferSequence& buffers, CompletionCondition completion_condition, ReadHandler handler) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) boost::asio::async_read(m_ssl_socket, buffers, completion_condition, handler); else #endif boost::asio::async_read(m_ssl_socket.next_layer(), buffers, completion_condition, handler); } /** * reads data into the connection's read buffer until completion_condition * is met (blocks until finished) * * @param completion_condition determines if the read operation is complete * @param ec contains error code if the read fails * @return std::size_t number of bytes read * * @see boost::asio::read() */ template inline std::size_t read(CompletionCondition completion_condition, boost::system::error_code& ec) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) return boost::asio::async_read(m_ssl_socket, boost::asio::buffer(m_read_buffer), completion_condition, ec); else #endif return boost::asio::async_read(m_ssl_socket.next_layer(), boost::asio::buffer(m_read_buffer), completion_condition, ec); } /** * reads data from the connection until completion_condition is met * (blocks until finished) * * @param buffers one or more buffers into which the data will be read * @param completion_condition determines if the read operation is complete * @param ec contains error code if the read fails * @return std::size_t number of bytes read * * @see boost::asio::read() */ template inline std::size_t read(const MutableBufferSequence& buffers, CompletionCondition completion_condition, boost::system::error_code& ec) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) return boost::asio::read(m_ssl_socket, buffers, completion_condition, ec); else #endif return boost::asio::read(m_ssl_socket.next_layer(), buffers, completion_condition, ec); } /** * asynchronously writes data to the connection * * @param buffers one or more buffers containing the data to be written * @param handler called after the data has been written * * @see boost::asio::async_write() */ template inline void async_write(const ConstBufferSequence& buffers, write_handler_t handler) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) boost::asio::async_write(m_ssl_socket, buffers, handler); else #endif boost::asio::async_write(m_ssl_socket.next_layer(), buffers, handler); } /** * writes data to the connection (blocks until finished) * * @param buffers one or more buffers containing the data to be written * @param ec contains error code if the write fails * @return std::size_t number of bytes written * * @see boost::asio::write() */ template inline std::size_t write(const ConstBufferSequence& buffers, boost::system::error_code& ec) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) return boost::asio::write(m_ssl_socket, buffers, boost::asio::transfer_all(), ec); else #endif return boost::asio::write(m_ssl_socket.next_layer(), buffers, boost::asio::transfer_all(), ec); } /// This function should be called when a server has finished handling /// the connection inline void finish(void) { if (m_finished_handler) m_finished_handler(shared_from_this()); } /// returns true if the connection is encrypted using SSL inline bool get_ssl_flag(void) const { return m_ssl_flag; } /// sets the lifecycle type for the connection inline void set_lifecycle(lifecycle_type t) { m_lifecycle = t; } /// returns the lifecycle type for the connection inline lifecycle_type get_lifecycle(void) const { return m_lifecycle; } /// returns true if the connection should be kept alive inline bool get_keep_alive(void) const { return m_lifecycle != LIFECYCLE_CLOSE; } /// returns true if the HTTP requests are pipelined inline bool get_pipelined(void) const { return m_lifecycle == LIFECYCLE_PIPELINED; } /// returns the buffer used for reading data from the TCP connection inline read_buffer_type& get_read_buffer(void) { return m_read_buffer; } /** * saves a read position bookmark * * @param read_ptr points to the next character to be consumed in the read_buffer * @param read_end_ptr points to the end of the read_buffer (last byte + 1) */ inline void save_read_pos(const char *read_ptr, const char *read_end_ptr) { m_read_position.first = read_ptr; m_read_position.second = read_end_ptr; } /** * loads a read position bookmark * * @param read_ptr points to the next character to be consumed in the read_buffer * @param read_end_ptr points to the end of the read_buffer (last byte + 1) */ inline void load_read_pos(const char *&read_ptr, const char *&read_end_ptr) const { read_ptr = m_read_position.first; read_end_ptr = m_read_position.second; } /// returns an ASIO endpoint for the client connection inline boost::asio::ip::tcp::endpoint get_remote_endpoint(void) const { boost::asio::ip::tcp::endpoint remote_endpoint; try { // const_cast is required since lowest_layer() is only defined non-const in asio remote_endpoint = const_cast(m_ssl_socket).lowest_layer().remote_endpoint(); } catch (boost::system::system_error& /* e */) { // do nothing } return remote_endpoint; } /// returns the client's IP address inline boost::asio::ip::address get_remote_ip(void) const { return get_remote_endpoint().address(); } /// returns the client's port number inline unsigned short get_remote_port(void) const { return get_remote_endpoint().port(); } /// returns reference to the io_service used for async operations inline boost::asio::io_service& get_io_service(void) { return m_ssl_socket.lowest_layer().get_io_service(); } /// returns non-const reference to underlying TCP socket object inline socket_type& get_socket(void) { return m_ssl_socket.next_layer(); } /// returns non-const reference to underlying SSL socket object inline ssl_socket_type& get_ssl_socket(void) { return m_ssl_socket; } /// returns const reference to underlying TCP socket object inline const socket_type& get_socket(void) const { return const_cast(m_ssl_socket).next_layer(); } /// returns const reference to underlying SSL socket object inline const ssl_socket_type& get_ssl_socket(void) const { return m_ssl_socket; } protected: /** * protected constructor restricts creation of objects (use create()) * * @param io_service asio service associated with the connection * @param ssl_context asio ssl context associated with the connection * @param ssl_flag if true then the connection will be encrypted using SSL * @param finished_handler function called when a server has finished * handling the connection */ connection(boost::asio::io_service& io_service, ssl_context_type& ssl_context, const bool ssl_flag, connection_handler finished_handler) : #ifdef PION_HAVE_SSL m_ssl_context(io_service, boost::asio::ssl::context::sslv23), m_ssl_socket(io_service, ssl_context), m_ssl_flag(ssl_flag), #else m_ssl_context(0), m_ssl_socket(io_service), m_ssl_flag(false), #endif m_lifecycle(LIFECYCLE_CLOSE), m_finished_handler(finished_handler) { save_read_pos(NULL, NULL); } private: /// data type for a read position bookmark typedef std::pair read_pos_type; /// context object for the SSL connection socket ssl_context_type m_ssl_context; /// SSL connection socket ssl_socket_type m_ssl_socket; /// true if the connection is encrypted using SSL bool m_ssl_flag; /// buffer used for reading data from the TCP connection read_buffer_type m_read_buffer; /// saved read position bookmark read_pos_type m_read_position; /// lifecycle state for the connection lifecycle_type m_lifecycle; /// function called when a server has finished handling the connection connection_handler m_finished_handler; }; /// data type for a connection pointer typedef boost::shared_ptr connection_ptr; } // end namespace tcp } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/tcp/timer.hpp0000644000372000001440000000435112215647065020757 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_TCP_TIMER_HEADER__ #define __PION_TCP_TIMER_HEADER__ #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace tcp { // begin namespace tcp /// /// timer: helper class used to time-out TCP connections /// class timer : public boost::enable_shared_from_this { public: /** * creates a new TCP connection timer * * @param conn_ptr pointer to TCP connection to monitor */ timer(tcp::connection_ptr& conn_ptr); /** * starts a timer for closing a TCP connection * * @param seconds number of seconds before the timeout triggers */ void start(const boost::uint32_t seconds); /// cancel the timer (operation completed) void cancel(void); private: /** * Callback handler for the deadline timer * * @param ec deadline timer error status code */ void timer_callback(const boost::system::error_code& ec); /// pointer to the TCP connection that is being monitored tcp::connection_ptr m_conn_ptr; /// deadline timer used to timeout TCP operations boost::asio::deadline_timer m_timer; /// mutex used to synchronize the TCP connection timer boost::mutex m_mutex; /// true if the deadline timer is active bool m_timer_active; /// true if the timer was cancelled (operation completed) bool m_was_cancelled; }; /// shared pointer to a timer object typedef boost::shared_ptr timer_ptr; } // end namespace tcp } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/tcp/Makefile.am0000644000372000001440000000034112215647065021155 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- pion_tcp_includedir = $(includedir)/pion/tcp pion_tcp_include_HEADERS = connection.hpp server.hpp stream.hpp timer.hpp pion-5.0.4+dfsg.orig/include/pion/tcp/server.hpp0000644000372000001440000002155212215647065021147 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_TCP_SERVER_HEADER__ #define __PION_TCP_SERVER_HEADER__ #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace tcp { // begin namespace tcp /// /// tcp::server: a multi-threaded, asynchronous TCP server /// class PION_API server : private boost::noncopyable { public: /// default destructor virtual ~server() { if (m_is_listening) stop(false); } /// starts listening for new connections void start(void); /** * stops listening for new connections * * @param wait_until_finished if true, blocks until all pending connections have closed */ void stop(bool wait_until_finished = false); /// the calling thread will sleep until the server has stopped listening for connections void join(void); /** * configures server for SSL using a PEM-encoded RSA private key file * * @param pem_key_file name of the file containing a PEM-encoded private key */ void set_ssl_key_file(const std::string& pem_key_file); /// returns the number of active tcp connections std::size_t get_connections(void) const; /// returns tcp port number that the server listens for connections on inline unsigned int get_port(void) const { return m_endpoint.port(); } /// sets tcp port number that the server listens for connections on inline void set_port(unsigned int p) { m_endpoint.port(p); } /// returns IP address that the server listens for connections on inline boost::asio::ip::address get_address(void) const { return m_endpoint.address(); } /// sets IP address that the server listens for connections on inline void set_address(const boost::asio::ip::address& addr) { m_endpoint.address(addr); } /// returns tcp endpoint that the server listens for connections on inline const boost::asio::ip::tcp::endpoint& get_endpoint(void) const { return m_endpoint; } /// sets tcp endpoint that the server listens for connections on inline void set_endpoint(const boost::asio::ip::tcp::endpoint& ep) { m_endpoint = ep; } /// returns true if the server uses SSL to encrypt connections inline bool get_ssl_flag(void) const { return m_ssl_flag; } /// sets value of SSL flag (true if the server uses SSL to encrypt connections) inline void set_ssl_flag(bool b = true) { m_ssl_flag = b; } /// returns the SSL context for configuration inline connection::ssl_context_type& get_ssl_context_type(void) { return m_ssl_context; } /// returns true if the server is listening for connections inline bool is_listening(void) const { return m_is_listening; } /// sets the logger to be used inline void set_logger(logger log_ptr) { m_logger = log_ptr; } /// returns the logger currently in use inline logger get_logger(void) { return m_logger; } /// returns mutable reference to the TCP connection acceptor inline boost::asio::ip::tcp::acceptor& get_acceptor(void) { return m_tcp_acceptor; } /// returns const reference to the TCP connection acceptor inline const boost::asio::ip::tcp::acceptor& get_acceptor(void) const { return m_tcp_acceptor; } protected: /** * protected constructor so that only derived objects may be created * * @param tcp_port port number used to listen for new connections (IPv4) */ explicit server(const unsigned int tcp_port); /** * protected constructor so that only derived objects may be created * * @param endpoint TCP endpoint used to listen for new connections (see ASIO docs) */ explicit server(const boost::asio::ip::tcp::endpoint& endpoint); /** * protected constructor so that only derived objects may be created * * @param sched the scheduler that will be used to manage worker threads * @param tcp_port port number used to listen for new connections (IPv4) */ explicit server(scheduler& sched, const unsigned int tcp_port = 0); /** * protected constructor so that only derived objects may be created * * @param sched the scheduler that will be used to manage worker threads * @param endpoint TCP endpoint used to listen for new connections (see ASIO docs) */ server(scheduler& sched, const boost::asio::ip::tcp::endpoint& endpoint); /** * handles a new TCP connection; derived classes SHOULD override this * since the default behavior does nothing * * @param tcp_conn the new TCP connection to handle */ virtual void handle_connection(tcp::connection_ptr& tcp_conn) { tcp_conn->set_lifecycle(connection::LIFECYCLE_CLOSE); // make sure it will get closed tcp_conn->finish(); } /// called before the TCP server starts listening for new connections virtual void before_starting(void) {} /// called after the TCP server has stopped listing for new connections virtual void after_stopping(void) {} /// returns an async I/O service used to schedule work inline boost::asio::io_service& get_io_service(void) { return m_active_scheduler.get_io_service(); } /// primary logging interface used by this class logger m_logger; private: /// handles a request to stop the server void handle_stop_request(void); /// listens for a new connection void listen(void); /** * handles new connections (checks if there was an accept error) * * @param tcp_conn the new TCP connection (if no error occurred) * @param accept_error true if an error occurred while accepting connections */ void handle_accept(tcp::connection_ptr& tcp_conn, const boost::system::error_code& accept_error); /** * handles new connections following an SSL handshake (checks for errors) * * @param tcp_conn the new TCP connection (if no error occurred) * @param handshake_error true if an error occurred during the SSL handshake */ void handle_ssl_handshake(tcp::connection_ptr& tcp_conn, const boost::system::error_code& handshake_error); /// This will be called by connection::finish() after a server has /// finished handling a connection. If the keep_alive flag is true, /// it will call handle_connection(); otherwise, it will close the /// connection and remove it from the server's management pool void finish_connection(tcp::connection_ptr& tcp_conn); /// prunes orphaned connections that did not close cleanly /// and returns the remaining number of connections in the pool std::size_t prune_connections(void); /// data type for a pool of TCP connections typedef std::set ConnectionPool; /// the default scheduler object used to manage worker threads single_service_scheduler m_default_scheduler; /// reference to the active scheduler object used to manage worker threads scheduler & m_active_scheduler; /// manages async TCP connections boost::asio::ip::tcp::acceptor m_tcp_acceptor; /// context used for SSL configuration connection::ssl_context_type m_ssl_context; /// condition triggered when the server has stopped listening for connections boost::condition m_server_has_stopped; /// condition triggered when the connection pool is empty boost::condition m_no_more_connections; /// pool of active connections associated with this server ConnectionPool m_conn_pool; /// tcp endpoint used to listen for new connections boost::asio::ip::tcp::endpoint m_endpoint; /// true if the server uses SSL to encrypt connections bool m_ssl_flag; /// set to true when the server is listening for new connections bool m_is_listening; /// mutex to make class thread-safe mutable boost::mutex m_mutex; }; /// data type for a server pointer typedef boost::shared_ptr server_ptr; } // end namespace tcp } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/tcp/stream.hpp0000644000372000001440000004430412215647065021134 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_TCP_STREAM_HEADER__ #define __PION_TCP_STREAM_HEADER__ #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace tcp { // begin namespace tcp /// /// stream_buffer: std::basic_streambuf wrapper for TCP network connections. /// Based in part on section 13.13.3 of "The Standard C++ Library" /// by Nicolai M. Josuttis, published in 1999 by Addison-Wesley /// class stream_buffer : public std::basic_streambuf > { public: // data type definitions required for iostream compatability typedef char char_type; typedef std::char_traits::int_type int_type; typedef std::char_traits::off_type off_type; typedef std::char_traits::pos_type pos_type; typedef std::char_traits traits_type; // some integer constants used within stream_buffer enum { PUT_BACK_MAX = 10, //< number of bytes that can be put back into the read buffer WRITE_BUFFER_SIZE = 8192 //< size of the write buffer }; /** * constructs a TCP stream buffer object for an existing TCP connection * * @param conn_ptr pointer to the TCP connection to use for reading & writing */ explicit stream_buffer(tcp::connection_ptr& conn_ptr) : m_conn_ptr(conn_ptr), m_read_buf(m_conn_ptr->get_read_buffer().c_array()) { setup_buffers(); } /** * constructs a TCP stream buffer object for a new TCP connection * * @param io_service asio service associated with the connection * @param ssl_flag if true then the connection will be encrypted using SSL */ explicit stream_buffer(boost::asio::io_service& io_service, const bool ssl_flag = false) : m_conn_ptr(new connection(io_service, ssl_flag)), m_read_buf(m_conn_ptr->get_read_buffer().c_array()) { setup_buffers(); } /** * constructs a TCP stream buffer object for a new SSL/TCP connection * * @param io_service asio service associated with the connection * @param ssl_context asio ssl context associated with the connection */ stream_buffer(boost::asio::io_service& io_service, connection::ssl_context_type& ssl_context) : m_conn_ptr(new connection(io_service, ssl_context)), m_read_buf(m_conn_ptr->get_read_buffer().c_array()) { setup_buffers(); } /// virtual destructor flushes the write buffer virtual ~stream_buffer() { sync(); } /// returns a reference to the current TCP connection connection& get_connection(void) { return *m_conn_ptr; } /// returns a const reference to the current TCP connection const connection& get_connection(void) const { return *m_conn_ptr; } protected: /// sets up the read and write buffers for input and output inline void setup_buffers(void) { // use the TCP connection's read buffer and allow for bytes to be put back setg(m_read_buf+PUT_BACK_MAX, m_read_buf+PUT_BACK_MAX, m_read_buf+PUT_BACK_MAX); // set write buffer size-1 so that we have an extra char avail for overflow setp(m_write_buf, m_write_buf+(WRITE_BUFFER_SIZE-1)); } /** * writes data in the output buffer to the TCP connection * * @return int_type the number of bytes sent, or eof() if there was an error */ inline int_type flush_output(void) { const std::streamsize bytes_to_send = std::streamsize(pptr() - pbase()); int_type bytes_sent = 0; if (bytes_to_send > 0) { boost::mutex::scoped_lock async_lock(m_async_mutex); m_bytes_transferred = 0; m_conn_ptr->async_write(boost::asio::buffer(pbase(), bytes_to_send), boost::bind(&stream_buffer::operation_finished, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); m_async_done.wait(async_lock); bytes_sent = m_bytes_transferred; pbump(-bytes_sent); if (m_async_error) bytes_sent = traits_type::eof(); } return bytes_sent; } /** * this function is called when the read buffer has no more characters available * * @return int_type the next character available for reading, or eof() if there was an error */ virtual int_type underflow(void) { // first check if we still have bytes available in the read buffer if (gptr() < egptr()) return traits_type::to_int_type(*gptr()); // calculate the number of bytes we will allow to be put back std::streamsize put_back_num = std::streamsize(gptr() - eback()); if (put_back_num > PUT_BACK_MAX) put_back_num = PUT_BACK_MAX; // copy the last bytes read to the beginning of the buffer (for put back) if (put_back_num > 0) memmove(m_read_buf+(PUT_BACK_MAX-put_back_num), gptr()-put_back_num, put_back_num); // read data from the TCP connection // note that this has to be an ansynchronous call; otherwise, it cannot // be cancelled by other threads and will block forever (such as during shutdown) boost::mutex::scoped_lock async_lock(m_async_mutex); m_bytes_transferred = 0; m_conn_ptr->async_read_some(boost::asio::buffer(m_read_buf+PUT_BACK_MAX, connection::READ_BUFFER_SIZE-PUT_BACK_MAX), boost::bind(&stream_buffer::operation_finished, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); m_async_done.wait(async_lock); if (m_async_error) return traits_type::eof(); // reset buffer pointers now that data is available setg(m_read_buf+(PUT_BACK_MAX-put_back_num), //< beginning of putback bytes m_read_buf+PUT_BACK_MAX, //< read position m_read_buf+PUT_BACK_MAX+m_bytes_transferred); //< end of buffer // return next character available return traits_type::to_int_type(*gptr()); } /** * this function is called when the write buffer for the stream is full * * @param c character that has not been written yet, or eof() if we are flushing * @return int_type the last character written, or eof() if there was an error */ virtual int_type overflow(int_type c) { if (! traits_type::eq_int_type(c, traits_type::eof())) { // character is not eof -> add it to the end of the write buffer // we can push this to the back of the write buffer because we set // the size of the write buffer to 1 less than the actual size using setp() *pptr() = c; pbump(1); } // flush data in the write buffer by sending it to the TCP connection return ((flush_output() == traits_type::eof()) ? traits_type::eof() : traits_type::not_eof(c)); } /** * writes a sequence of characters * * @param s pointer to a sequence of characters * @param n number of characters in the sequence to write * * @return std::streamsize number of character written */ virtual std::streamsize xsputn(const char_type *s, std::streamsize n) { const std::streamsize bytes_available = std::streamsize(epptr() - pptr()); std::streamsize bytes_sent = 0; if (bytes_available >= n) { // there is enough room in the buffer -> just put it in there memcpy(pptr(), s, n); pbump(n); bytes_sent = n; } else { // there is not enough room left in the buffer if (bytes_available > 0) { // fill up the buffer memcpy(pptr(), s, bytes_available); pbump(bytes_available); } // flush data in the write buffer by sending it to the TCP connection if (flush_output() == traits_type::eof()) return 0; if ((n-bytes_available) >= (WRITE_BUFFER_SIZE-1)) { // the remaining data to send is larger than the buffer available // send it all now rather than buffering boost::mutex::scoped_lock async_lock(m_async_mutex); m_bytes_transferred = 0; m_conn_ptr->async_write(boost::asio::buffer(s+bytes_available, n-bytes_available), boost::bind(&stream_buffer::operation_finished, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); m_async_done.wait(async_lock); bytes_sent = bytes_available + m_bytes_transferred; } else { // the buffer is larger than the remaining data // put remaining data to the beginning of the output buffer memcpy(pbase(), s+bytes_available, n-bytes_available); pbump(n-bytes_available); bytes_sent = n; } } return bytes_sent; } /** * reads a sequence of characters * * @param s pointer to where the sequence of characters will be stored * @param n number of characters in the sequence to read * * @return std::streamsize number of character read */ virtual std::streamsize xsgetn(char_type *s, std::streamsize n) { std::streamsize bytes_remaining = n; while (bytes_remaining > 0) { const std::streamsize bytes_available = std::streamsize(egptr() - gptr()); const std::streamsize bytes_next_read = ((bytes_available >= bytes_remaining) ? bytes_remaining : bytes_available); // copy available input data from buffer if (bytes_next_read > 0) { memcpy(s, gptr(), bytes_next_read); gbump(bytes_next_read); bytes_remaining -= bytes_next_read; s += bytes_next_read; } if (bytes_remaining > 0) { // call underflow() to read more data if (traits_type::eq_int_type(underflow(), traits_type::eof())) break; } } return(n-bytes_remaining); } /** * synchronize buffers with the TCP connection * * @return 0 if successful, -1 if there was an error */ virtual int_type sync(void) { return ((flush_output() == traits_type::eof()) ? -1 : 0); } private: /// function called after an asynchronous operation has completed inline void operation_finished(const boost::system::error_code& error_code, std::size_t bytes_transferred) { boost::mutex::scoped_lock async_lock(m_async_mutex); m_async_error = error_code; m_bytes_transferred = bytes_transferred; m_async_done.notify_one(); } /// pointer to the underlying TCP connection used for reading & writing tcp::connection_ptr m_conn_ptr; /// condition signaled whenever an asynchronous operation has completed boost::mutex m_async_mutex; /// condition signaled whenever an asynchronous operation has completed boost::condition m_async_done; /// used to keep track of the result from the last asynchronous operation boost::system::error_code m_async_error; /// the number of bytes transferred by the last asynchronous operation std::size_t m_bytes_transferred; /// pointer to the start of the TCP connection's read buffer char_type * m_read_buf; /// buffer used to write output char_type m_write_buf[WRITE_BUFFER_SIZE]; }; /// /// stream: std::basic_iostream wrapper for TCP network connections /// class stream : public std::basic_iostream > { public: // data type definitions required for iostream compatability typedef char char_type; typedef std::char_traits::int_type int_type; typedef std::char_traits::off_type off_type; typedef std::char_traits::pos_type pos_type; typedef std::char_traits traits_type; /** * constructs a TCP stream object for an existing TCP connection * * @param conn_ptr pointer to the TCP connection to use for reading & writing */ explicit stream(tcp::connection_ptr& conn_ptr) : m_tcp_buf(conn_ptr) #ifdef _MSC_VER , std::basic_iostream >(NULL) #endif { // initialize basic_iostream with pointer to the stream buffer std::basic_ios >::init(&m_tcp_buf); } /** * constructs a TCP stream object for a new TCP connection * * @param io_service asio service associated with the connection * @param ssl_flag if true then the connection will be encrypted using SSL */ explicit stream(boost::asio::io_service& io_service, const bool ssl_flag = false) : m_tcp_buf(io_service, ssl_flag) #ifdef _MSC_VER , std::basic_iostream >(NULL) #endif { // initialize basic_iostream with pointer to the stream buffer std::basic_ios >::init(&m_tcp_buf); } /** * constructs a TCP stream object for a new SSL/TCP connection * * @param io_service asio service associated with the connection * @param ssl_context asio ssl context associated with the connection */ stream(boost::asio::io_service& io_service, connection::ssl_context_type& ssl_context) : m_tcp_buf(io_service, ssl_context) #ifdef _MSC_VER , std::basic_iostream >(NULL) #endif { // initialize basic_iostream with pointer to the stream buffer std::basic_ios >::init(&m_tcp_buf); } /** * accepts a new tcp connection and performs SSL handshake if necessary * * @param tcp_acceptor object used to accept new connections * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::basic_socket_acceptor::accept() */ inline boost::system::error_code accept(boost::asio::ip::tcp::acceptor& tcp_acceptor) { boost::system::error_code ec = m_tcp_buf.get_connection().accept(tcp_acceptor); if (! ec && get_ssl_flag()) ec = m_tcp_buf.get_connection().handshake_server(); return ec; } /** * connects to a remote endpoint and performs SSL handshake if necessary * * @param tcp_endpoint remote endpoint to connect to * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::basic_socket_acceptor::connect() */ inline boost::system::error_code connect(boost::asio::ip::tcp::endpoint& tcp_endpoint) { boost::system::error_code ec = m_tcp_buf.get_connection().connect(tcp_endpoint); if (! ec && get_ssl_flag()) ec = m_tcp_buf.get_connection().handshake_client(); return ec; } /** * connects to a (IPv4) remote endpoint and performs SSL handshake if necessary * * @param remote_addr remote IP address (v4) to connect to * @param remote_port remote port number to connect to * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::basic_socket_acceptor::connect() */ inline boost::system::error_code connect(const boost::asio::ip::address& remote_addr, const unsigned int remote_port) { boost::asio::ip::tcp::endpoint tcp_endpoint(remote_addr, remote_port); boost::system::error_code ec = m_tcp_buf.get_connection().connect(tcp_endpoint); if (! ec && get_ssl_flag()) ec = m_tcp_buf.get_connection().handshake_client(); return ec; } /// closes the tcp connection inline void close(void) { m_tcp_buf.get_connection().close(); } /* Use close instead; basic_socket::cancel is deprecated for Windows XP. /// cancels any asynchronous operations pending on the tcp connection inline void cancel(void) { m_tcp_buf.get_connection().cancel(); } */ /// returns true if the connection is currently open inline bool is_open(void) const { return m_tcp_buf.get_connection().is_open(); } /// returns true if the connection is encrypted using SSL inline bool get_ssl_flag(void) const { return m_tcp_buf.get_connection().get_ssl_flag(); } /// returns the client's IP address inline boost::asio::ip::address get_remote_ip(void) const { return m_tcp_buf.get_connection().get_remote_ip(); } /// returns a pointer to the stream buffer in use stream_buffer *rdbuf(void) { return &m_tcp_buf; } private: /// the underlying TCP stream buffer used for reading & writing stream_buffer m_tcp_buf; }; } // end namespace tcp } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/tcp/Makefile.in0000644000372000001440000003661212215647101021167 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include/pion/tcp DIST_COMMON = $(pion_tcp_include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pion_tcp_includedir)" HEADERS = $(pion_tcp_include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pion_tcp_includedir = $(includedir)/pion/tcp pion_tcp_include_HEADERS = connection.hpp server.hpp stream.hpp timer.hpp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/pion/tcp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/pion/tcp/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pion_tcp_includeHEADERS: $(pion_tcp_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(pion_tcp_includedir)" || $(MKDIR_P) "$(DESTDIR)$(pion_tcp_includedir)" @list='$(pion_tcp_include_HEADERS)'; test -n "$(pion_tcp_includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pion_tcp_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pion_tcp_includedir)" || exit $$?; \ done uninstall-pion_tcp_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pion_tcp_include_HEADERS)'; test -n "$(pion_tcp_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pion_tcp_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pion_tcp_includedir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pion_tcp_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pion_tcp_includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pion_tcp_includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pion_tcp_includeHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-pion_tcp_includeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.4+dfsg.orig/include/pion/test/0000755000372000001440000000000012215647144017312 5ustar robertouserspion-5.0.4+dfsg.orig/include/pion/test/Makefile.am0000644000372000001440000000030312215647065021344 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- pion_test_includedir = $(includedir)/pion/test pion_test_include_HEADERS = unit_test.hpp pion-5.0.4+dfsg.orig/include/pion/test/unit_test.hpp0000644000372000001440000004235012215647065022047 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_TEST_UNIT_TEST_HEADER__ #define __PION_TEST_UNIT_TEST_HEADER__ #include #include #include #include #include #include #include #include #include #include #include #ifdef _MSC_VER #include #define CHANGE_DIRECTORY _chdir #define GET_DIRECTORY(a,b) _getcwd(a,b) #else #include #define CHANGE_DIRECTORY chdir #define GET_DIRECTORY(a,b) getcwd(a,b) #endif #define DIRECTORY_MAX_SIZE 1000 namespace pion { // begin namespace pion namespace test { // begin namespace test /// thread-safe version of Boost.Test's xml_log_formatter class class safe_xml_log_formatter : public boost::unit_test::unit_test_log_formatter { public: /// default constructor safe_xml_log_formatter() : m_entry_in_progress(false) {} /// virtual destructor virtual ~safe_xml_log_formatter() {} /// wrapper to flush output for xml_log_formatter::log_start virtual void log_start(std::ostream& ostr, boost::unit_test::counter_t test_cases_amount ) { ostr << "" << std::endl; } /// wrapper to flush output for xml_log_formatter::log_finish virtual void log_finish(std::ostream& ostr) { ostr << "" << std::endl; } /// wrapper to flush output for xml_log_formatter::log_build_info virtual void log_build_info(std::ostream& ostr) { ostr << "" << std::endl; } /// wrapper to flush output for xml_log_formatter::test_unit_start virtual void test_unit_start(std::ostream& ostr, boost::unit_test::test_unit const& tu ) { ostr << "<" << tu_type_name( tu ) << " name" << attr_value() << tu.p_name.get() << ">" << std::endl; } /// wrapper to flush output for xml_log_formatter::test_unit_finish virtual void test_unit_finish(std::ostream& ostr, boost::unit_test::test_unit const& tu, unsigned long elapsed ) { if ( tu.p_type == boost::unit_test::tut_case ) ostr << "" << elapsed << ""; ostr << "" << std::endl; } /// wrapper to flush output for xml_log_formatter::test_unit_skipped virtual void test_unit_skipped(std::ostream& ostr, boost::unit_test::test_unit const& tu ) { ostr << "<" << tu_type_name( tu ) << " name" << attr_value() << tu.p_name.get() << " skipped" << attr_value() << "yes" << "/>" << std::endl; } /// wrapper to flush output for xml_log_formatter::log_exception virtual void log_exception(std::ostream& ostr, boost::unit_test::log_checkpoint_data const& checkpoint_data, boost::execution_exception const& ex ) { boost::execution_exception::location const& loc = ex.where(); ostr << "" << boost::unit_test::cdata() << ex.what(); if( !checkpoint_data.m_file_name.is_empty() ) { ostr << "" << boost::unit_test::cdata() << checkpoint_data.m_message << ""; } ostr << "" << std::endl; } /// thread-safe wrapper for xml_log_formatter::log_entry_start virtual void log_entry_start( std::ostream& ostr, boost::unit_test::log_entry_data const& entry_data, log_entry_types let ) { boost::mutex::scoped_lock entry_lock(m_mutex); while (m_entry_in_progress) { m_entry_complete.wait(entry_lock); } m_entry_in_progress = true; static boost::unit_test::literal_string xml_tags[] = { "Info", "Message", "Warning", "Error", "FatalError" }; m_curr_tag = xml_tags[let]; ostr << '<' << m_curr_tag << BOOST_TEST_L( " file" ) << attr_value() << entry_data.m_file_name << BOOST_TEST_L( " line" ) << attr_value() << entry_data.m_line_num << BOOST_TEST_L( ">" ) << std::endl; m_curr_tag.clear(); m_entry_in_progress = false; m_entry_complete.notify_one(); } } private: /// output appropriate xml element name static boost::unit_test::const_string tu_type_name( boost::unit_test::test_unit const& tu ) { return tu.p_type == boost::unit_test::tut_case ? "TestCase" : "TestSuite"; } /// re-use attr_value data type from xml_printer.hpp typedef boost::unit_test::attr_value attr_value; /// true if a log entry is in progress volatile bool m_entry_in_progress; /// condition used to signal the completion of a log entry boost::condition m_entry_complete; /// mutex used to prevent multiple threads from interleaving entries boost::mutex m_mutex; /// current xml tag boost::unit_test::const_string m_curr_tag; }; /// config is intended for use as a global fixture. By including the /// following line in one source code file of a unit test project, the constructor will /// run once before the first test and the destructor will run once after the last test: /// /// BOOST_GLOBAL_FIXTURE(pion::test::config); struct config { config() { std::cout << "global setup for all pion unit tests\n"; // argc and argv do not include parameters handled by the boost unit test framework, such as --log_level. int argc = boost::unit_test::framework::master_test_suite().argc; char** argv = boost::unit_test::framework::master_test_suite().argv; bool verbose = false; if (argc > 1) { if (argv[1][0] == '-' && argv[1][1] == 'v') { verbose = true; } else if (strlen(argv[1]) > 13 && strncmp(argv[1], "--log_output=", 13) == 0) { const char * const test_log_filename = argv[1] + 13; m_test_log_file.open(test_log_filename); if (m_test_log_file.is_open()) { boost::unit_test::unit_test_log.set_stream(m_test_log_file); boost::unit_test::unit_test_log.set_formatter(new safe_xml_log_formatter); } else { std::cerr << "unable to open " << test_log_filename << std::endl; } } } if (verbose) { PION_LOG_CONFIG_BASIC; } else { std::cout << "Use '-v' to enable logging of errors and warnings from pion.\n"; } pion::logger log_ptr = PION_GET_LOGGER("pion"); PION_LOG_SETLEVEL_WARN(log_ptr); } virtual ~config() { std::cout << "global teardown for all pion unit tests\n"; } /// xml log results output stream (needs to be global) static std::ofstream m_test_log_file; }; // removes line endings from a c-style string static inline char* trim(char* str) { for (long len = strlen(str) - 1; len >= 0; len--) { if (str[len] == '\n' || str[len] == '\r') str[len] = '\0'; else break; } return str; } // reads lines from a file, stripping line endings and ignoring blank lines // and comment lines (starting with a '#') static inline bool read_lines_from_file(const std::string& filename, std::list& lines) { // open file std::ifstream a_file(filename.c_str(), std::ios::in | std::ios::binary); if (! a_file.is_open()) return false; // read data from file static const unsigned int BUF_SIZE = 4096; char *ptr, buf[BUF_SIZE+1]; buf[BUF_SIZE] = '\0'; lines.clear(); while (a_file.getline(buf, BUF_SIZE)) { ptr = trim(buf); if (*ptr != '\0' && *ptr != '#') lines.push_back(ptr); } // close file a_file.close(); return true; } // Check for file match, use std::list for sorting the files, which will allow // random order matching... static inline bool check_files_match(const std::string& fileA, const std::string& fileB) { // open and read data from files std::list a_lines, b_lines; BOOST_REQUIRE(read_lines_from_file(fileA, a_lines)); BOOST_REQUIRE(read_lines_from_file(fileB, b_lines)); // sort lines read a_lines.sort(); b_lines.sort(); // files match if lines match return (a_lines == b_lines); } static inline bool check_files_exact_match(const std::string& fileA, const std::string& fileB, bool ignore_line_endings = false) { // open files std::ifstream a_file(fileA.c_str(), std::ios::in | std::ios::binary); BOOST_REQUIRE(a_file.is_open()); std::ifstream b_file(fileB.c_str(), std::ios::in | std::ios::binary); BOOST_REQUIRE(b_file.is_open()); // read and compare data in files static const unsigned int BUF_SIZE = 4096; char a_buf[BUF_SIZE]; char b_buf[BUF_SIZE]; if (ignore_line_endings) { while (a_file.getline(a_buf, BUF_SIZE)) { if (! b_file.getline(b_buf, BUF_SIZE)) return false; trim(a_buf); trim(b_buf); if (strlen(a_buf) != strlen(b_buf)) return false; if (memcmp(a_buf, b_buf, strlen(a_buf)) != 0) return false; } if (b_file.getline(b_buf, BUF_SIZE)) return false; } else { while (a_file.read(a_buf, BUF_SIZE)) { if (! b_file.read(b_buf, BUF_SIZE)) return false; if (memcmp(a_buf, b_buf, BUF_SIZE) != 0) return false; } if (b_file.read(b_buf, BUF_SIZE)) return false; } if (a_file.gcount() != b_file.gcount()) return false; if (memcmp(a_buf, b_buf, a_file.gcount()) != 0) return false; a_file.close(); b_file.close(); // files match return true; } } // end namespace test } // end namespace pion /* Using BOOST_AUTO_TEST_SUITE_FIXTURE_TEMPLATE and BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE has two additional benefits relative to using BOOST_FIXTURE_TEST_SUITE and BOOST_AUTO_TEST_CASE: 1) it allows a test to be run with more than one fixture, and 2) it makes the current fixture part of the test name, e.g. checkPropertyX For an example of 1), see http_message_tests.cpp. There are probably simpler ways to achieve 2), but since it comes for free, it makes sense to use it. The benefit of this is that the test names don't have to include redundant information about the fixture, e.g. checkMyFixtureHasPropertyX. (In this example, checkPropertyX is not obviously better than checkMyFixtureHasPropertyX, but in many cases the test names become too long and/or hard to parse, or the fixture just isn't part of the name, making some error reports ambiguous.) (BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE is based on BOOST_AUTO_TEST_CASE_TEMPLATE, in unit_test_suite.hpp.) Minimal example demonstrating usage of BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE: class ObjectToTest_F { // suffix _F is used for fixtures public: ObjectToTest_F() { m_value = 2; } int m_value; int get_value() { return m_value; } }; // This illustrates the most common case, where just one fixture will be used, // so the list only has one fixture in it. // ObjectToTest_S is the name of the test suite. BOOST_AUTO_TEST_SUITE_FIXTURE_TEMPLATE(ObjectToTest_S, boost::mpl::list) // One method for testing the fixture... BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkValueEqualsTwo) { BOOST_CHECK_EQUAL(F::m_value, 2); BOOST_CHECK_EQUAL(F::get_value(), 2); } // Another method for testing the fixture... BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkValueEqualsTwoAgain) { BOOST_CHECK_EQUAL(this->m_value, 2); BOOST_CHECK_EQUAL(this->get_value(), 2); } // The simplest, but, alas, non conformant to the C++ standard, method for testing the fixture. // This will compile with MSVC (unless language extensions are disabled (/Za)). // It won't compile with gcc unless -fpermissive is used. // See http://gcc.gnu.org/onlinedocs/gcc/Name-lookup.html. BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkValueEqualsTwoNonConformant) { BOOST_CHECK_EQUAL(m_value, 2); BOOST_CHECK_EQUAL(get_value(), 2); } BOOST_AUTO_TEST_SUITE_END() */ #define BOOST_AUTO_TEST_SUITE_FIXTURE_TEMPLATE(suite_name, fixture_types) \ BOOST_AUTO_TEST_SUITE(suite_name) \ typedef fixture_types BOOST_AUTO_TEST_CASE_FIXTURE_TYPES; \ /**/ #define BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(test_name) \ template \ struct test_name : public F \ { void test_method(); }; \ \ struct BOOST_AUTO_TC_INVOKER( test_name ) { \ template \ static void run( boost::type* = 0 ) \ { \ test_name t; \ t.test_method(); \ } \ }; \ \ BOOST_AUTO_TU_REGISTRAR( test_name )( \ boost::unit_test::ut_detail::template_test_case_gen< \ BOOST_AUTO_TC_INVOKER( test_name ), \ BOOST_AUTO_TEST_CASE_FIXTURE_TYPES >( \ BOOST_STRINGIZE( test_name ) ) ); \ \ template \ void test_name::test_method() \ /**/ #endif pion-5.0.4+dfsg.orig/include/pion/test/Makefile.in0000644000372000001440000003660412215647101021361 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include/pion/test DIST_COMMON = $(pion_test_include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pion_test_includedir)" HEADERS = $(pion_test_include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pion_test_includedir = $(includedir)/pion/test pion_test_include_HEADERS = unit_test.hpp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/pion/test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/pion/test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pion_test_includeHEADERS: $(pion_test_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(pion_test_includedir)" || $(MKDIR_P) "$(DESTDIR)$(pion_test_includedir)" @list='$(pion_test_include_HEADERS)'; test -n "$(pion_test_includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pion_test_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pion_test_includedir)" || exit $$?; \ done uninstall-pion_test_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pion_test_include_HEADERS)'; test -n "$(pion_test_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pion_test_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pion_test_includedir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pion_test_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pion_test_includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pion_test_includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pion_test_includeHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-pion_test_includeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.4+dfsg.orig/include/pion/config.hpp.win0000644000372000001440000001072312215647065021112 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PIONCONFIG_HEADER__ #define __PION_PIONCONFIG_HEADER__ // DO NOT USE autoheader ; this file is not automanaged!!! // Other libraries should be added here as they become part of the configuration // used for binary releases. #ifdef PION_FULL #define PION_USE_LOG4CPLUS #define PION_HAVE_SSL #define PION_HAVE_JSON #define PION_HAVE_PYTHON #endif /* Define to the version number of pion. */ #define PION_VERSION "5.0.4" /* Define to the directory where Pion plug-ins are installed. */ //#undef PION_PLUGINS_DIRECTORY #define PION_PLUGINS_DIRECTORY "." /* Define to the directory where cygwin is installed. */ #undef PION_CYGWIN_DIRECTORY /* Define to 1 if C library supports malloc_trim() */ #undef PION_HAVE_MALLOC_TRIM // ----------------------------------------------------------------------- // hash_map support // // At least one of the following options should be defined. /* Define to 1 if you have the header file. */ #undef PION_HAVE_EXT_HASH_MAP /* Define to 1 if you have the header file. */ //#undef PION_HAVE_HASH_MAP #define PION_HAVE_HASH_MAP 1 /* Define to 1 if you have the header file. */ #undef PION_HAVE_UNORDERED_MAP // ----------------------------------------------------------------------- // Logging Options // // At most one of the logging options below should be defined. If none of // them are defined, std::cout and std::cerr will be used for logging. /* To use the `log4cplus' library for logging, include PION_USE_LOG4CPLUS or PION_FULL in Preprocessor Definitions, or uncomment the following line. */ //#define PION_USE_LOG4CPLUS /* To use the `log4cxx' library for logging, include PION_USE_LOG4CXX in Preprocessor Definitions, or uncomment the following line. */ //#define PION_USE_LOG4CXX /* To use the `log4cpp' library for logging, include PION_USE_LOG4CPP in Preprocessor Definitions, or uncomment the following line. */ //#define PION_USE_LOG4CPP /* To disable logging, include PION_DISABLE_LOGGING in Preprocessor Definitions, or uncomment the following line. */ //#define PION_DISABLE_LOGGING // ----------------------------------------------------------------------- /* Define to 1 if you have the `zlib' library. */ #undef PION_HAVE_ZLIB /* Define to 1 if you have the `bzlib' library. */ #undef PION_HAVE_BZLIB /* If you have the `OpenSSL' library installed, include PION_HAVE_SSL or PION_FULL in Preprocessor Definitions, or uncomment the following line, to use SSL. */ //#define PION_HAVE_SSL #ifdef PION_HAVE_SSL #if defined _DEBUG #pragma comment(lib, "ssleay32d") #pragma comment(lib, "libeay32d") #else #pragma comment(lib, "ssleay32") #pragma comment(lib, "libeay32") #endif #endif /* If you have the `yajl' library installed, include PION_HAVE_JSON or PION_FULL in Preprocessor Definitions, or uncomment the following line, to use yajl. */ //#define PION_HAVE_JSON /* If you have the `python' library installed, include PION_HAVE_PYTHON or PION_FULL in Preprocessor Definitions, or uncomment the following line, to use python. */ //#define PION_HAVE_PYTHON #ifdef _WIN32 #define PION_WIN32 1 #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0501 #endif #else #error PionConfig.hpp.win is for Win32 only. #endif // _WIN32 #include #ifdef _MSC_VER #ifdef PION_EXPORTS #define PION_API __declspec(dllexport) #elif defined PION_STATIC_LINKING #define PION_API #else #define PION_API __declspec(dllimport) #endif #ifdef PION_STATIC_LINKING #define PION_PLUGIN #else #define PION_PLUGIN __declspec(dllexport) #endif /* Verify correctness of the PION_STATIC_LINKING setup */ #ifdef PION_STATIC_LINKING #ifdef _USRDLL #error Need to be compiled as a static library for PION_STATIC_LINKING #endif #endif #endif // _MSC_VER #endif //__PION_PIONCONFIG_HEADER__ pion-5.0.4+dfsg.orig/include/pion/error.hpp0000644000372000001440000002015112215647065020176 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_ERROR_HEADER__ #define __PION_ERROR_HEADER__ #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion // // exception: simple exception class for pion errors that generates what() // strings with more descriptive messages and optionally arguments as well // class exception : public virtual std::exception, public virtual boost::exception { public: exception() {} exception(const std::string& msg) : m_what_msg(msg) {} exception(const char * const msg) : m_what_msg(msg) {} virtual ~exception() throw () {} virtual const char* what() const throw() { if (m_what_msg.empty()) update_what_msg(); return m_what_msg.c_str(); } protected: inline void set_what_msg(const char * const msg = NULL, const std::string * const arg1 = NULL, const std::string * const arg2 = NULL, const std::string * const arg3 = NULL) const { std::ostringstream tmp; #if BOOST_VERSION >= 104700 tmp << ( msg ? msg : boost::units::detail::demangle(BOOST_EXCEPTION_DYNAMIC_TYPEID(*this).type_->name()) ); #else tmp << ( msg ? msg : boost::units::detail::demangle(BOOST_EXCEPTION_DYNAMIC_TYPEID(*this).type_.name()) ); #endif if (arg1 || arg2 || arg3) tmp << ':'; if (arg1) tmp << ' ' << *arg1; if (arg2) tmp << ' ' << *arg2; if (arg3) tmp << ' ' << *arg3; m_what_msg = tmp.str(); } virtual void update_what_msg() const { set_what_msg(); } mutable std::string m_what_msg; }; /** * static method that generates a meaningful diagnostic message from exceptions * * @param e reference to an exception object * @return std::string descriptive error message */ template static inline std::string diagnostic_information( T const & e ) { boost::exception const * const be = dynamic_cast(&e); std::exception const * const se = dynamic_cast(&e); std::ostringstream tmp; if (se) { tmp << se->what(); } else { #if BOOST_VERSION >= 104700 tmp << boost::units::detail::demangle(BOOST_EXCEPTION_DYNAMIC_TYPEID(e).type_->name()); #else tmp << boost::units::detail::demangle(BOOST_EXCEPTION_DYNAMIC_TYPEID(e).type_.name()); #endif } if (be) { //char const * const * fn=boost::get_error_info(*be); //if (fn) tmp << " at " << *fn; char const * const * f=boost::get_error_info(*be); if (f) { tmp << " [" << *f; if (int const * l=boost::get_error_info(*be)) tmp << ':' << *l; tmp << "]"; } } return tmp.str(); } namespace error { // begin namespace error // // pion error info types // /// generic error message typedef boost::error_info errinfo_message; /// name of an unrecognized configuration argument or option typedef boost::error_info errinfo_arg_name; /// file name/path typedef boost::error_info errinfo_file_name; /// directory name/path typedef boost::error_info errinfo_dir_name; /// plugin identifier typedef boost::error_info errinfo_plugin_name; /// plugin symbol name typedef boost::error_info errinfo_symbol_name; // // pion exception types // /// exception thrown for an invalid configuration argument or option class bad_arg : public pion::exception { virtual void update_what_msg() const { set_what_msg("bad argument", boost::get_error_info(*this)); } }; /// exception thrown if there is an error parsing a configuration file class bad_config : public pion::exception { virtual void update_what_msg() const { set_what_msg("config parser error", boost::get_error_info(*this)); } }; /// exception thrown if we failed to open a file class open_file : public pion::exception { virtual void update_what_msg() const { set_what_msg("unable to open file", boost::get_error_info(*this)); } }; /// exception thrown if we are unable to open a plugin class open_plugin : public pion::exception { virtual void update_what_msg() const { set_what_msg("unable to open plugin", boost::get_error_info(*this)); } }; /// exception thrown if we failed to read data from a file class read_file : public pion::exception { virtual void update_what_msg() const { set_what_msg("unable to read file", boost::get_error_info(*this)); } }; /// exception thrown if a file is not found class file_not_found : public pion::exception { virtual void update_what_msg() const { set_what_msg("file not found", boost::get_error_info(*this)); } }; /// exception thrown if a required directory is not found class directory_not_found : public pion::exception { virtual void update_what_msg() const { set_what_msg("directory not found", boost::get_error_info(*this)); } }; /// exception thrown if a plugin cannot be found class plugin_not_found : public pion::exception { virtual void update_what_msg() const { set_what_msg("plugin not found", boost::get_error_info(*this)); } }; /// exception thrown if we try to add or load a duplicate plugin class duplicate_plugin : public pion::exception { virtual void update_what_msg() const { set_what_msg("duplicate plugin", boost::get_error_info(*this)); } }; /// exception thrown if a plugin is missing a required symbol class plugin_missing_symbol : public pion::exception { virtual void update_what_msg() const { set_what_msg("missing plugin symbol", boost::get_error_info(*this)); } }; /// exception thrown if a plugin has an undefined state class plugin_undefined : public pion::exception { virtual void update_what_msg() const { set_what_msg("plugin has undefined state"); } }; /// exception thrown if a bad password hash is provided class bad_password_hash : public pion::exception { virtual void update_what_msg() const { set_what_msg("bad password hash"); } }; } // end namespace error } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/plugin_manager.hpp0000644000372000001440000003546312215647065022051 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PLUGIN_MANAGER_HEADER__ #define __PION_PLUGIN_MANAGER_HEADER__ #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion /// /// plugin_manager: used to manage a collection of plug-in objects /// template class plugin_manager { public: /// data type for a function that may be called by the run() method typedef boost::function1 PluginRunFunction; /// data type for a function that may be called by the getStat() method typedef boost::function1 PluginStatFunction; /// default constructor plugin_manager(void) {} /// default destructor virtual ~plugin_manager() {} /// clears all the plug-in objects being managed inline void clear(void) { boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); m_plugin_map.clear(); } /// returns true if there are no plug-in objects being managed inline bool empty(void) const { boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); return m_plugin_map.empty(); } /** * adds a new plug-in object * * @param plugin_id unique identifier associated with the plug-in * @param plugin_object_ptr pointer to the plug-in object to add */ inline void add(const std::string& plugin_id, PluginType *plugin_object_ptr); /** * removes a plug-in object * * @param plugin_id unique identifier associated with the plug-in */ inline void remove(const std::string& plugin_id); /** * replaces an existing plug-in object with a new one * * @param plugin_id unique identifier associated with the plug-in * @param plugin_ptr pointer to the new plug-in object which will replace the old one */ inline void replace(const std::string& plugin_id, PluginType *plugin_ptr); /** * clones an existing plug-in object (creates a new one of the same type) * * @param plugin_id unique identifier associated with the plug-in * @return PluginType* pointer to the new plug-in object */ inline PluginType *clone(const std::string& plugin_id); /** * loads a new plug-in object * * @param plugin_id unique identifier associated with the plug-in * @param plugin_type the name or type of the plug-in to load (searches * plug-in directories and appends extensions) * @return PluginType* pointer to the new plug-in object */ inline PluginType *load(const std::string& plugin_id, const std::string& plugin_type); /** * gets the plug-in object associated with a particular plugin_id (exact match) * * @param plugin_id unique identifier associated with the plug-in * @return PluginType* pointer to the matching plug-in object or NULL if not found */ inline PluginType *get(const std::string& plugin_id); /** * gets the plug-in object associated with a particular plugin_id (exact match) * * @param plugin_id unique identifier associated with the plug-in * @return PluginType* pointer to the matching plug-in object or NULL if not found */ inline const PluginType *get(const std::string& plugin_id) const; /** * gets a smart pointer to the plugin shared library for a particular plugin_id (exact match) * * @param plugin_id unique identifier associated with the plug-in * @return plugin_ptr pointer to the plugin shared library if found */ inline plugin_ptr get_lib_ptr(const std::string& plugin_id) const; /** * finds the plug-in object associated with a particular resource (fuzzy match) * * @param resource resource identifier (uri-stem) to search for * @return PluginType* pointer to the matching plug-in object or NULL if not found */ inline PluginType *find(const std::string& resource); /** * runs a method for every plug-in being managed * * @param run_func the function to execute for each plug-in object */ inline void run(PluginRunFunction run_func); /** * runs a method for a particular plug-in * * @param plugin_id unique identifier associated with the plug-in * @param run_func the function to execute */ inline void run(const std::string& plugin_id, PluginRunFunction run_func); /** * returns a total statistic value summed for every plug-in being managed * * @param stat_func the statistic function to execute for each plug-in object */ inline boost::uint64_t get_statistic(PluginStatFunction stat_func) const; /** * returns a statistic value for a particular plug-in * * @param plugin_id unique identifier associated with the plug-in * @param stat_func the statistic function to execute */ inline boost::uint64_t get_statistic(const std::string& plugin_id, PluginStatFunction stat_func) const; protected: /// data type that maps identifiers to plug-in objects class map_type : public std::map > > { public: inline void clear(void); virtual ~map_type() { map_type::clear(); } map_type(void) {} }; /// collection of plug-in objects being managed map_type m_plugin_map; /// mutex to make class thread-safe mutable boost::mutex m_plugin_mutex; }; // plugin_manager member functions template inline void plugin_manager::add(const std::string& plugin_id, PluginType *plugin_object_ptr) { plugin_ptr plugin_ptr; boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); m_plugin_map.insert(std::make_pair(plugin_id, std::make_pair(plugin_object_ptr, plugin_ptr))); } template inline void plugin_manager::remove(const std::string& plugin_id) { boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); typename pion::plugin_manager::map_type::iterator i = m_plugin_map.find(plugin_id); if (i == m_plugin_map.end()) BOOST_THROW_EXCEPTION( error::plugin_not_found() << error::errinfo_plugin_name(plugin_id) ); if (i->second.second.is_open()) { i->second.second.destroy(i->second.first); } else { delete i->second.first; } m_plugin_map.erase(i); } template inline void plugin_manager::replace(const std::string& plugin_id, PluginType *plugin_ptr) { BOOST_ASSERT(plugin_ptr); boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); typename pion::plugin_manager::map_type::iterator i = m_plugin_map.find(plugin_id); if (i == m_plugin_map.end()) BOOST_THROW_EXCEPTION( error::plugin_not_found() << error::errinfo_plugin_name(plugin_id) ); if (i->second.second.is_open()) { i->second.second.destroy(i->second.first); } else { delete i->second.first; } i->second.first = plugin_ptr; } template inline PluginType *plugin_manager::clone(const std::string& plugin_id) { boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); typename pion::plugin_manager::map_type::iterator i = m_plugin_map.find(plugin_id); if (i == m_plugin_map.end()) BOOST_THROW_EXCEPTION( error::plugin_not_found() << error::errinfo_plugin_name(plugin_id) ); return i->second.second.create(); } template inline PluginType *plugin_manager::load(const std::string& plugin_id, const std::string& plugin_type) { // search for the plug-in file using the configured paths if (m_plugin_map.find(plugin_id) != m_plugin_map.end()) BOOST_THROW_EXCEPTION( error::duplicate_plugin() << error::errinfo_plugin_name(plugin_id) ); // open up the plug-in's shared object library plugin_ptr plugin_ptr; plugin_ptr.open(plugin_type); // may throw // create a new object using the plug-in library PluginType *plugin_object_ptr(plugin_ptr.create()); // add the new plug-in object to our map boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); m_plugin_map.insert(std::make_pair(plugin_id, std::make_pair(plugin_object_ptr, plugin_ptr))); return plugin_object_ptr; } template inline PluginType *plugin_manager::get(const std::string& plugin_id) { PluginType *plugin_object_ptr = NULL; boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); typename pion::plugin_manager::map_type::iterator i = m_plugin_map.find(plugin_id); if (i != m_plugin_map.end()) plugin_object_ptr = i->second.first; return plugin_object_ptr; } template inline const PluginType *plugin_manager::get(const std::string& plugin_id) const { const PluginType *plugin_object_ptr = NULL; boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); typename pion::plugin_manager::map_type::const_iterator i = m_plugin_map.find(plugin_id); if (i != m_plugin_map.end()) plugin_object_ptr = i->second.first; return plugin_object_ptr; } template inline plugin_ptr plugin_manager::get_lib_ptr(const std::string& plugin_id) const { plugin_ptr plugin_ptr; boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); typename pion::plugin_manager::map_type::const_iterator i = m_plugin_map.find(plugin_id); if (i != m_plugin_map.end()) plugin_ptr = i->second.second; return plugin_ptr; } template inline PluginType *plugin_manager::find(const std::string& resource) { // will point to the matching plug-in object, if found PluginType *plugin_object_ptr = NULL; // lock mutex for thread safety (this should probably use ref counters) boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); // check if no plug-ins are being managed if (m_plugin_map.empty()) return plugin_object_ptr; // iterate through each plug-in whose identifier may match the resource typename pion::plugin_manager::map_type::iterator i = m_plugin_map.upper_bound(resource); while (i != m_plugin_map.begin()) { --i; // keep checking while the first part of the strings match if (resource.compare(0, i->first.size(), i->first) != 0) { // the first part no longer matches if (i != m_plugin_map.begin()) { // continue to next plug-in in list if its size is < this one typename pion::plugin_manager::map_type::iterator j=i; --j; if (j->first.size() < i->first.size()) continue; } // otherwise we've reached the end; stop looking for a match break; } // only if the resource matches the plug-in's identifier // or if resource is followed first with a '/' character if (resource.size() == i->first.size() || resource[i->first.size()]=='/') { plugin_object_ptr = i->second.first; break; } } return plugin_object_ptr; } template inline void plugin_manager::run(PluginRunFunction run_func) { boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); for (typename pion::plugin_manager::map_type::iterator i = m_plugin_map.begin(); i != m_plugin_map.end(); ++i) { run_func(i->second.first); } } template inline void plugin_manager::run(const std::string& plugin_id, PluginRunFunction run_func) { // no need to lock (handled by plugin_manager::get()) PluginType *plugin_object_ptr = get(plugin_id); if (plugin_object_ptr == NULL) BOOST_THROW_EXCEPTION( error::plugin_not_found() << error::errinfo_plugin_name(plugin_id) ); run_func(plugin_object_ptr); } template inline boost::uint64_t plugin_manager::get_statistic(PluginStatFunction stat_func) const { boost::uint64_t stat_value = 0; boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); for (typename pion::plugin_manager::map_type::const_iterator i = m_plugin_map.begin(); i != m_plugin_map.end(); ++i) { stat_value += stat_func(i->second.first); } return stat_value; } template inline boost::uint64_t plugin_manager::get_statistic(const std::string& plugin_id, PluginStatFunction stat_func) const { // no need to lock (handled by plugin_manager::get()) const PluginType *plugin_object_ptr = const_cast*>(this)->get(plugin_id); if (plugin_object_ptr == NULL) BOOST_THROW_EXCEPTION( error::plugin_not_found() << error::errinfo_plugin_name(plugin_id) ); return stat_func(plugin_object_ptr); } // plugin_manager::map_type member functions template inline void plugin_manager::map_type::clear(void) { if (! std::map > >::empty()) { for (typename pion::plugin_manager::map_type::iterator i = std::map > >::begin(); i != std::map > >::end(); ++i) { if (i->second.second.is_open()) { i->second.second.destroy(i->second.first); } else { delete i->second.first; } } this->erase(std::map > >::begin(), std::map > >::end()); } } } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/0000755000372000001440000000000012215647144017312 5ustar robertouserspion-5.0.4+dfsg.orig/include/pion/http/message.hpp0000644000372000001440000006447612215647065021472 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_MESSAGE_HEADER__ #define __PION_HTTP_MESSAGE_HEADER__ #include #include #include #include #include #include #include #include #include #include #include #ifndef BOOST_SYSTEM_NOEXCEPT #define BOOST_SYSTEM_NOEXCEPT BOOST_NOEXCEPT #endif namespace pion { // begin namespace pion namespace tcp { // forward declaration for class used by send() and receive() class connection; } namespace http { // begin namespace http // forward declaration of parser class class parser; /// /// message: base container for HTTP messages /// class PION_API message : public http::types { public: /// data type for I/O write buffers (these wrap existing data to be sent) typedef std::vector write_buffers_t; /// used to cache chunked data typedef std::vector chunk_cache_t; /// data type for library errors returned during receive() operations struct receive_error_t : public boost::system::error_category { virtual ~receive_error_t() {} virtual inline const char *name() const BOOST_SYSTEM_NOEXCEPT { return "receive_error_t"; } virtual inline std::string message(int ev) const { std::string result; switch(ev) { case 1: result = "HTTP message parsing error"; break; default: result = "Unknown receive error"; break; } return result; } }; /// defines message data integrity status codes enum data_status_t { STATUS_NONE, // no data received (i.e. all lost) STATUS_TRUNCATED, // one or more missing packets at the end STATUS_PARTIAL, // one or more missing packets but NOT at the end STATUS_OK // no missing packets }; /// constructs a new HTTP message object message(void) : m_is_valid(false), m_is_chunked(false), m_chunks_supported(false), m_do_not_send_content_length(false), m_version_major(1), m_version_minor(1), m_content_length(0), m_content_buf(), m_status(STATUS_NONE), m_has_missing_packets(false), m_has_data_after_missing(false) {} /// copy constructor message(const message& http_msg) : m_first_line(http_msg.m_first_line), m_is_valid(http_msg.m_is_valid), m_is_chunked(http_msg.m_is_chunked), m_chunks_supported(http_msg.m_chunks_supported), m_do_not_send_content_length(http_msg.m_do_not_send_content_length), m_remote_ip(http_msg.m_remote_ip), m_version_major(http_msg.m_version_major), m_version_minor(http_msg.m_version_minor), m_content_length(http_msg.m_content_length), m_content_buf(http_msg.m_content_buf), m_chunk_cache(http_msg.m_chunk_cache), m_headers(http_msg.m_headers), m_status(http_msg.m_status), m_has_missing_packets(http_msg.m_has_missing_packets), m_has_data_after_missing(http_msg.m_has_data_after_missing) {} /// assignment operator inline message& operator=(const message& http_msg) { m_first_line = http_msg.m_first_line; m_is_valid = http_msg.m_is_valid; m_is_chunked = http_msg.m_is_chunked; m_chunks_supported = http_msg.m_chunks_supported; m_do_not_send_content_length = http_msg.m_do_not_send_content_length; m_remote_ip = http_msg.m_remote_ip; m_version_major = http_msg.m_version_major; m_version_minor = http_msg.m_version_minor; m_content_length = http_msg.m_content_length; m_content_buf = http_msg.m_content_buf; m_chunk_cache = http_msg.m_chunk_cache; m_headers = http_msg.m_headers; m_status = http_msg.m_status; m_has_missing_packets = http_msg.m_has_missing_packets; m_has_data_after_missing = http_msg.m_has_data_after_missing; return *this; } /// virtual destructor virtual ~message() {} /// clears all message data virtual void clear(void) { clear_first_line(); m_is_valid = m_is_chunked = m_chunks_supported = m_do_not_send_content_length = false; m_remote_ip = boost::asio::ip::address_v4(0); m_version_major = m_version_minor = 1; m_content_length = 0; m_content_buf.clear(); m_chunk_cache.clear(); m_headers.clear(); m_cookie_params.clear(); m_status = STATUS_NONE; m_has_missing_packets = false; m_has_data_after_missing = false; } /// should return true if the content length can be implied without headers virtual bool is_content_length_implied(void) const = 0; /// returns true if the message is valid inline bool is_valid(void) const { return m_is_valid; } /// returns true if chunked transfer encodings are supported inline bool get_chunks_supported(void) const { return m_chunks_supported; } /// returns IP address of the remote endpoint inline boost::asio::ip::address& get_remote_ip(void) { return m_remote_ip; } /// returns the major HTTP version number inline boost::uint16_t get_version_major(void) const { return m_version_major; } /// returns the minor HTTP version number inline boost::uint16_t get_version_minor(void) const { return m_version_minor; } /// returns a string representation of the HTTP version (i.e. "HTTP/1.1") inline std::string get_version_string(void) const { std::string http_version(STRING_HTTP_VERSION); http_version += boost::lexical_cast(get_version_major()); http_version += '.'; http_version += boost::lexical_cast(get_version_minor()); return http_version; } /// returns the length of the payload content (in bytes) inline boost::uint64_t get_content_length(void) const { return m_content_length; } /// returns true if the message content is chunked inline bool is_chunked(void) const { return m_is_chunked; } /// returns true if buffer for content is allocated bool is_content_buffer_allocated() const { return !m_content_buf.is_empty(); } /// returns size of allocated buffer inline std::size_t get_content_buffer_size() const { return m_content_buf.size(); } /// returns a pointer to the payload content, or empty string if there is none inline char *get_content(void) { return m_content_buf.get(); } /// returns a const pointer to the payload content, or empty string if there is none inline const char *get_content(void) const { return m_content_buf.get(); } /// returns a reference to the chunk cache inline chunk_cache_t& get_chunk_cache(void) { return m_chunk_cache; } /// returns a value for the header if any are defined; otherwise, an empty string inline const std::string& get_header(const std::string& key) const { return get_value(m_headers, key); } /// returns a reference to the HTTP headers inline ihash_multimap& get_headers(void) { return m_headers; } /// returns true if at least one value for the header is defined inline bool has_header(const std::string& key) const { return(m_headers.find(key) != m_headers.end()); } /// returns a value for the cookie if any are defined; otherwise, an empty string /// since cookie names are insensitive, key should use lowercase alpha chars inline const std::string& get_cookie(const std::string& key) const { return get_value(m_cookie_params, key); } /// returns the cookie parameters inline ihash_multimap& get_cookies(void) { return m_cookie_params; } /// returns true if at least one value for the cookie is defined /// since cookie names are insensitive, key should use lowercase alpha chars inline bool has_cookie(const std::string& key) const { return(m_cookie_params.find(key) != m_cookie_params.end()); } /// adds a value for the cookie /// since cookie names are insensitive, key should use lowercase alpha chars inline void add_cookie(const std::string& key, const std::string& value) { m_cookie_params.insert(std::make_pair(key, value)); } /// changes the value of a cookie /// since cookie names are insensitive, key should use lowercase alpha chars inline void change_cookie(const std::string& key, const std::string& value) { change_value(m_cookie_params, key, value); } /// removes all values for a cookie /// since cookie names are insensitive, key should use lowercase alpha chars inline void delete_cookie(const std::string& key) { delete_value(m_cookie_params, key); } /// returns a string containing the first line for the HTTP message inline const std::string& get_first_line(void) const { if (m_first_line.empty()) update_first_line(); return m_first_line; } /// true if there were missing packets inline bool has_missing_packets() const { return m_has_missing_packets; } /// set to true when missing packets detected inline void set_missing_packets(bool newVal) { m_has_missing_packets = newVal; } /// true if more data seen after the missing packets inline bool has_data_after_missing_packets() const { return m_has_data_after_missing; } inline void set_data_after_missing_packet(bool newVal) { m_has_data_after_missing = newVal; } /// sets whether or not the message is valid inline void set_is_valid(bool b = true) { m_is_valid = b; } /// set to true if chunked transfer encodings are supported inline void set_chunks_supported(bool b) { m_chunks_supported = b; } /// sets IP address of the remote endpoint inline void set_remote_ip(const boost::asio::ip::address& ip) { m_remote_ip = ip; } /// sets the major HTTP version number inline void set_version_major(const boost::uint16_t n) { m_version_major = n; clear_first_line(); } /// sets the minor HTTP version number inline void set_version_minor(const boost::uint16_t n) { m_version_minor = n; clear_first_line(); } /// sets the length of the payload content (in bytes) inline void set_content_length(const boost::uint64_t n) { m_content_length = n; } /// if called, the content-length will not be sent in the HTTP headers inline void set_do_not_send_content_length(void) { m_do_not_send_content_length = true; } /// return the data receival status inline data_status_t get_status() const { return m_status; } /// inline void set_status(data_status_t newVal) { m_status = newVal; } /// sets the length of the payload content using the Content-Length header inline void update_content_length_using_header(void) { ihash_multimap::const_iterator i = m_headers.find(HEADER_CONTENT_LENGTH); if (i == m_headers.end()) { m_content_length = 0; } else { std::string trimmed_length(i->second); boost::algorithm::trim(trimmed_length); m_content_length = boost::lexical_cast(trimmed_length); } } /// sets the transfer coding using the Transfer-Encoding header inline void update_transfer_encoding_using_header(void) { m_is_chunked = false; ihash_multimap::const_iterator i = m_headers.find(HEADER_TRANSFER_ENCODING); if (i != m_headers.end()) { // From RFC 2616, sec 3.6: All transfer-coding values are case-insensitive. m_is_chunked = boost::regex_match(i->second, REGEX_ICASE_CHUNKED); // ignoring other possible values for now } } ///creates a payload content buffer of size m_content_length and returns /// a pointer to the new buffer (memory is managed by message class) inline char *create_content_buffer(void) { m_content_buf.resize(m_content_length); return m_content_buf.get(); } /// resets payload content to match the value of a string inline void set_content(const std::string& content) { set_content_length(content.size()); create_content_buffer(); memcpy(m_content_buf.get(), content.c_str(), content.size()); } /// clears payload content buffer inline void clear_content(void) { set_content_length(0); create_content_buffer(); delete_value(m_headers, HEADER_CONTENT_TYPE); } /// sets the content type for the message payload inline void set_content_type(const std::string& type) { change_value(m_headers, HEADER_CONTENT_TYPE, type); } /// adds a value for the HTTP header named key inline void add_header(const std::string& key, const std::string& value) { m_headers.insert(std::make_pair(key, value)); } /// changes the value for the HTTP header named key inline void change_header(const std::string& key, const std::string& value) { change_value(m_headers, key, value); } /// removes all values for the HTTP header named key inline void delete_header(const std::string& key) { delete_value(m_headers, key); } /// returns true if the HTTP connection may be kept alive inline bool check_keep_alive(void) const { return (get_header(HEADER_CONNECTION) != "close" && (get_version_major() > 1 || (get_version_major() >= 1 && get_version_minor() >= 1)) ); } /** * initializes a vector of write buffers with the HTTP message information * * @param write_buffers vector of write buffers to initialize * @param keep_alive true if the connection should be kept alive * @param using_chunks true if the payload content will be sent in chunks */ inline void prepare_buffers_for_send(write_buffers_t& write_buffers, const bool keep_alive, const bool using_chunks) { // update message headers prepare_headers_for_send(keep_alive, using_chunks); // add first message line write_buffers.push_back(boost::asio::buffer(get_first_line())); write_buffers.push_back(boost::asio::buffer(STRING_CRLF)); // append cookie headers (if any) append_cookie_headers(); // append HTTP headers append_headers(write_buffers); } /** * sends the message over a TCP connection (blocks until finished) * * @param tcp_conn TCP connection to use * @param ec contains error code if the send fails * @param headers_only if true then only HTTP headers are sent * * @return std::size_t number of bytes written to the connection */ std::size_t send(tcp::connection& tcp_conn, boost::system::error_code& ec, bool headers_only = false); /** * receives a new message from a TCP connection (blocks until finished) * * @param tcp_conn TCP connection to use * @param ec contains error code if the receive fails * @param http_parser http parser object to use * * @return std::size_t number of bytes read from the connection */ std::size_t receive(tcp::connection& tcp_conn, boost::system::error_code& ec, parser& http_parser); /** * receives a new message from a TCP connection (blocks until finished) * * @param tcp_conn TCP connection to use * @param ec contains error code if the receive fails * @param headers_only if true then only HTTP headers are received * @param max_content_length maximum number of content bytes received * * @return std::size_t number of bytes read from the connection */ std::size_t receive(tcp::connection& tcp_conn, boost::system::error_code& ec, bool headers_only = false, std::size_t max_content_length = static_cast(-1)); /** * writes the message to a std::ostream (blocks until finished) * * @param out std::ostream to use * @param ec contains error code if the write fails * @param headers_only if true then only HTTP headers are written * * @return std::size_t number of bytes written to the connection */ std::size_t write(std::ostream& out, boost::system::error_code& ec, bool headers_only = false); /** * reads a new message from a std::istream (blocks until finished) * * @param in std::istream to use * @param ec contains error code if the read fails * @param http_parser http parser object to use * * @return std::size_t number of bytes read from the connection */ std::size_t read(std::istream& in, boost::system::error_code& ec, parser& http_parser); /** * reads a new message from a std::istream (blocks until finished) * * @param in std::istream to use * @param ec contains error code if the read fails * @param headers_only if true then only HTTP headers are read * @param max_content_length maximum number of content bytes received * * @return std::size_t number of bytes read from the connection */ std::size_t read(std::istream& in, boost::system::error_code& ec, bool headers_only = false, std::size_t max_content_length = static_cast(-1)); /** * pieces together all the received chunks */ void concatenate_chunks(void); protected: /// a simple helper class used to manage a fixed-size payload content buffer class content_buffer_t { public: /// simple destructor ~content_buffer_t() {} /// default constructor content_buffer_t() : m_buf(), m_len(0), m_empty(0), m_ptr(&m_empty) {} /// copy constructor content_buffer_t(const content_buffer_t& buf) : m_buf(), m_len(0), m_empty(0), m_ptr(&m_empty) { if (buf.size()) { resize(buf.size()); memcpy(get(), buf.get(), buf.size()); } } /// assignment operator content_buffer_t& operator=(const content_buffer_t& buf) { if (buf.size()) { resize(buf.size()); memcpy(get(), buf.get(), buf.size()); } else { clear(); } return *this; } /// returns true if buffer is empty inline bool is_empty() const { return m_len == 0; } /// returns size in bytes inline std::size_t size() const { return m_len; } /// returns const pointer to data inline const char *get() const { return m_ptr; } /// returns mutable pointer to data inline char *get() { return m_ptr; } /// changes the size of the content buffer inline void resize(std::size_t len) { m_len = len; if (len == 0) { m_buf.reset(); m_ptr = &m_empty; } else { m_buf.reset(new char[len+1]); m_buf[len] = '\0'; m_ptr = m_buf.get(); } } /// clears the content buffer inline void clear() { resize(0); } private: boost::scoped_array m_buf; std::size_t m_len; char m_empty; char *m_ptr; }; /** * prepares HTTP headers for a send operation * * @param keep_alive true if the connection should be kept alive * @param using_chunks true if the payload content will be sent in chunks */ inline void prepare_headers_for_send(const bool keep_alive, const bool using_chunks) { change_header(HEADER_CONNECTION, (keep_alive ? "Keep-Alive" : "close") ); if (using_chunks) { if (get_chunks_supported()) change_header(HEADER_TRANSFER_ENCODING, "chunked"); } else if (! m_do_not_send_content_length) { change_header(HEADER_CONTENT_LENGTH, boost::lexical_cast(get_content_length())); } } /** * appends the message's HTTP headers to a vector of write buffers * * @param write_buffers the buffers to append HTTP headers into */ inline void append_headers(write_buffers_t& write_buffers) { // add HTTP headers for (ihash_multimap::const_iterator i = m_headers.begin(); i != m_headers.end(); ++i) { write_buffers.push_back(boost::asio::buffer(i->first)); write_buffers.push_back(boost::asio::buffer(HEADER_NAME_VALUE_DELIMITER)); write_buffers.push_back(boost::asio::buffer(i->second)); write_buffers.push_back(boost::asio::buffer(STRING_CRLF)); } // add an extra CRLF to end HTTP headers write_buffers.push_back(boost::asio::buffer(STRING_CRLF)); } /// appends HTTP headers for any cookies defined by the http::message virtual void append_cookie_headers(void) {} /** * Returns the first value in a dictionary if key is found; or an empty * string if no values are found * * @param dict the dictionary to search for key * @param key the key to search for * @return value if found; empty string if not */ template inline static const std::string& get_value(const DictionaryType& dict, const std::string& key) { typename DictionaryType::const_iterator i = dict.find(key); return ( (i==dict.end()) ? STRING_EMPTY : i->second ); } /** * Changes the value for a dictionary key. Adds the key if it does not * already exist. If multiple values exist for the key, they will be * removed and only the new value will remain. * * @param dict the dictionary object to update * @param key the key to change the value for * @param value the value to assign to the key */ template inline static void change_value(DictionaryType& dict, const std::string& key, const std::string& value) { // retrieve all current values for key std::pair result_pair = dict.equal_range(key); if (result_pair.first == dict.end()) { // no values exist -> add a new key dict.insert(std::make_pair(key, value)); } else { // set the first value found for the key to the new one result_pair.first->second = value; // remove any remaining values typename DictionaryType::iterator i; ++(result_pair.first); while (result_pair.first != result_pair.second) { i = result_pair.first; ++(result_pair.first); dict.erase(i); } } } /** * Deletes all values for a key * * @param dict the dictionary object to update * @param key the key to delete */ template inline static void delete_value(DictionaryType& dict, const std::string& key) { std::pair result_pair = dict.equal_range(key); if (result_pair.first != dict.end()) dict.erase(result_pair.first, result_pair.second); } /// erases the string containing the first line for the HTTP message /// (it will be updated the next time get_first_line() is called) inline void clear_first_line(void) const { if (! m_first_line.empty()) m_first_line.clear(); } /// updates the string containing the first line for the HTTP message virtual void update_first_line(void) const = 0; /// first line sent in an HTTP message /// (i.e. "GET / HTTP/1.1" for request, or "HTTP/1.1 200 OK" for response) mutable std::string m_first_line; private: /// Regex used to check for the "chunked" transfer encoding header static const boost::regex REGEX_ICASE_CHUNKED; /// True if the HTTP message is valid bool m_is_valid; /// whether the message body is chunked bool m_is_chunked; /// true if chunked transfer encodings are supported bool m_chunks_supported; /// if true, the content length will not be sent in the HTTP headers bool m_do_not_send_content_length; /// IP address of the remote endpoint boost::asio::ip::address m_remote_ip; /// HTTP major version number boost::uint16_t m_version_major; /// HTTP major version number boost::uint16_t m_version_minor; /// the length of the payload content (in bytes) boost::uint64_t m_content_length; /// the payload content, if any was sent with the message content_buffer_t m_content_buf; /// buffers for holding chunked data chunk_cache_t m_chunk_cache; /// HTTP message headers ihash_multimap m_headers; /// HTTP cookie parameters parsed from the headers ihash_multimap m_cookie_params; /// message data integrity status data_status_t m_status; /// missing packet indicator bool m_has_missing_packets; /// indicates missing packets in the middle of the data stream bool m_has_data_after_missing; }; } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/types.hpp0000644000372000001440000001261012215647065021171 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_TYPES_HEADER__ #define __PION_HTTP_TYPES_HEADER__ #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// types: common data types used by HTTP /// struct PION_API types { /// virtual destructor virtual ~types() {} // generic strings used by HTTP static const std::string STRING_EMPTY; static const std::string STRING_CRLF; static const std::string STRING_HTTP_VERSION; static const std::string HEADER_NAME_VALUE_DELIMITER; static const std::string COOKIE_NAME_VALUE_DELIMITER; // common HTTP header names static const std::string HEADER_HOST; static const std::string HEADER_COOKIE; static const std::string HEADER_SET_COOKIE; static const std::string HEADER_CONNECTION; static const std::string HEADER_CONTENT_TYPE; static const std::string HEADER_CONTENT_LENGTH; static const std::string HEADER_CONTENT_LOCATION; static const std::string HEADER_CONTENT_ENCODING; static const std::string HEADER_CONTENT_DISPOSITION; static const std::string HEADER_LAST_MODIFIED; static const std::string HEADER_IF_MODIFIED_SINCE; static const std::string HEADER_TRANSFER_ENCODING; static const std::string HEADER_LOCATION; static const std::string HEADER_AUTHORIZATION; static const std::string HEADER_REFERER; static const std::string HEADER_USER_AGENT; static const std::string HEADER_X_FORWARDED_FOR; static const std::string HEADER_CLIENT_IP; // common HTTP content types static const std::string CONTENT_TYPE_HTML; static const std::string CONTENT_TYPE_TEXT; static const std::string CONTENT_TYPE_XML; static const std::string CONTENT_TYPE_URLENCODED; static const std::string CONTENT_TYPE_MULTIPART_FORM_DATA; // common HTTP request methods static const std::string REQUEST_METHOD_HEAD; static const std::string REQUEST_METHOD_GET; static const std::string REQUEST_METHOD_PUT; static const std::string REQUEST_METHOD_POST; static const std::string REQUEST_METHOD_DELETE; // common HTTP response messages static const std::string RESPONSE_MESSAGE_OK; static const std::string RESPONSE_MESSAGE_CREATED; static const std::string RESPONSE_MESSAGE_ACCEPTED; static const std::string RESPONSE_MESSAGE_NO_CONTENT; static const std::string RESPONSE_MESSAGE_FOUND; static const std::string RESPONSE_MESSAGE_UNAUTHORIZED; static const std::string RESPONSE_MESSAGE_FORBIDDEN; static const std::string RESPONSE_MESSAGE_NOT_FOUND; static const std::string RESPONSE_MESSAGE_METHOD_NOT_ALLOWED; static const std::string RESPONSE_MESSAGE_NOT_MODIFIED; static const std::string RESPONSE_MESSAGE_BAD_REQUEST; static const std::string RESPONSE_MESSAGE_SERVER_ERROR; static const std::string RESPONSE_MESSAGE_NOT_IMPLEMENTED; static const std::string RESPONSE_MESSAGE_CONTINUE; // common HTTP response codes static const unsigned int RESPONSE_CODE_OK; static const unsigned int RESPONSE_CODE_CREATED; static const unsigned int RESPONSE_CODE_ACCEPTED; static const unsigned int RESPONSE_CODE_NO_CONTENT; static const unsigned int RESPONSE_CODE_FOUND; static const unsigned int RESPONSE_CODE_UNAUTHORIZED; static const unsigned int RESPONSE_CODE_FORBIDDEN; static const unsigned int RESPONSE_CODE_NOT_FOUND; static const unsigned int RESPONSE_CODE_METHOD_NOT_ALLOWED; static const unsigned int RESPONSE_CODE_NOT_MODIFIED; static const unsigned int RESPONSE_CODE_BAD_REQUEST; static const unsigned int RESPONSE_CODE_SERVER_ERROR; static const unsigned int RESPONSE_CODE_NOT_IMPLEMENTED; static const unsigned int RESPONSE_CODE_CONTINUE; /// converts time_t format into an HTTP-date string static std::string get_date_string(const time_t t); /// builds an HTTP query string from a collection of query parameters static std::string make_query_string(const ihash_multimap& query_params); /** * creates a "Set-Cookie" header * * @param name the name of the cookie * @param value the value of the cookie * @param path the path of the cookie * @param has_max_age true if the max_age value should be set * @param max_age the life of the cookie, in seconds (0 = discard) * * @return the new "Set-Cookie" header */ static std::string make_set_cookie_header(const std::string& name, const std::string& value, const std::string& path, const bool has_max_age = false, const unsigned long max_age = 0); }; } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/reader.hpp0000644000372000001440000000667312215647065021303 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_READER_HEADER__ #define __PION_HTTP_READER_HEADER__ #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// reader: asynchronously reads and parses HTTP messages /// class PION_API reader : public http::parser { public: // default destructor virtual ~reader() {} /// Incrementally reads & parses the HTTP message void receive(void); /// returns a shared pointer to the TCP connection inline tcp::connection_ptr& get_connection(void) { return m_tcp_conn; } /// sets the maximum number of seconds for read operations inline void set_timeout(boost::uint32_t seconds) { m_read_timeout = seconds; } protected: /** * protected constructor: only derived classes may create objects * * @param is_request if true, the message is parsed as an HTTP request; * if false, the message is parsed as an HTTP response * @param tcp_conn TCP connection containing a new message to parse */ reader(const bool is_request, tcp::connection_ptr& tcp_conn) : http::parser(is_request), m_tcp_conn(tcp_conn), m_read_timeout(DEFAULT_READ_TIMEOUT) {} /** * Consumes bytes that have been read using an HTTP parser * * @param read_error error status from the last read operation * @param bytes_read number of bytes consumed by the last read operation */ void consume_bytes(const boost::system::error_code& read_error, std::size_t bytes_read); /// Consumes bytes that have been read using an HTTP parser void consume_bytes(void); /// Reads more bytes from the TCP connection virtual void read_bytes(void) = 0; /// Called after we have finished reading/parsing the HTTP message virtual void finished_reading(const boost::system::error_code& ec) = 0; /// Returns a reference to the HTTP message being parsed virtual http::message& get_message(void) = 0; private: /// reads more bytes for parsing, with timeout support void read_bytes_with_timeout(void); /** * Handles errors that occur during read operations * * @param read_error error status from the last read operation */ void handle_read_error(const boost::system::error_code& read_error); /// default maximum number of seconds for read operations static const boost::uint32_t DEFAULT_READ_TIMEOUT; /// The HTTP connection that has a new HTTP message to parse tcp::connection_ptr m_tcp_conn; /// pointer to a tcp::timer object if read timeouts are enabled tcp::timer_ptr m_timer_ptr; /// maximum number of seconds for read operations boost::uint32_t m_read_timeout; }; } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/cookie_auth.hpp0000644000372000001440000001454612215647065022331 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_COOKIE_AUTH_HEADER__ #define __PION_HTTP_COOKIE_AUTH_HEADER__ #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// cookie_auth: handles HTTP authentication and session management in /// accordance with RFC 2617 (http://tools.ietf.org/html/rfc2617 ) using cookies. /// class PION_API cookie_auth : public http::auth { public: /** * default constructor * * @param userManager * @param login - URL resource for login request. Typical login request has format: * http://website/login?user="username"&pass="password"&url="redirection_url" * @param logout - URL resource for logout request. Typical logout request has format: * http://website/logout?url="redirection_url" * @param redirect - if not empty, URL for redirection in case of authentication failure * if empty - send code 401 on authentication failure */ cookie_auth(user_manager_ptr userManager, const std::string& login="/login", const std::string& logout="/logout", const std::string& redirect=""); /// virtual destructor virtual ~cookie_auth() {} /** * attempts to validate authentication of a new HTTP request. * If request valid, pointer to user identity object (if any) will be preserved in * the request and return "true". * If request not authenticated, appropriate response is sent over tcp_conn * and return "false"; * * Note: if request matches "login" resource, then login sequences attempted. * If "name" and "pass" attributes match user definition, a random cookie is created * and associated with given user session. If request contains "url" attribute, * then page redirection response returned. Otherwise - empty 204 response. * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request * * @return true if request valid and user identity inserted into request */ virtual bool handle_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); /** * sets a configuration option * Valid options: * - "login" - URL resource for login request. Typical login request has format: * http://website/login?user="username"&pass="password"&url="redirection_url" * - "logout" - URL resource for logout request. Typical logout request has format: * http://website/logout?url="redirection_url" * - "redirect" - if not empty, URL for redirection in case of authentication failure * if empty - send code 401 on authentication failure * * @param name the name of the option to change * @param value the value of the option */ virtual void set_option(const std::string& name, const std::string& value); protected: /** * check if given request is a login/logout and process it * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request * * @return true if it was a login/logout request and no future processing required. */ bool process_login(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); /** * used to send responses when access to resource is not authorized * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request */ void handle_unauthorized(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); /** * used to send redirection responses * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request */ void handle_redirection(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string &redirection_url, const std::string &new_cookie="", bool delete_cookie=false); /** * used to send OK responses with new cookie * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request */ void handle_ok(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string &new_cookie="", bool delete_cookie=false); /** * Cache expiration cleanup. (Call it periodically) */ void expire_cache(const boost::posix_time::ptime &time_now); private: /// number of seconds after which entries in the user cache will be expired static const unsigned int CACHE_EXPIRATION; /// number of random bytes to use for cookie generation static const unsigned int RANDOM_COOKIE_BYTES; /// name of cookie used for authentication static const std::string AUTH_COOKIE_NAME; /// value of "login" resource std::string m_login; /// value of "logout" resource std::string m_logout; /// value of "redirection" resource std::string m_redirect; /// random number generator used for cookie generation boost::mt19937 m_random_gen; /// random number range used for cookie generation boost::uniform_int<> m_random_range; /// random dice that uses m_random_gen to produce ints within m_random_range boost::variate_generator > m_random_die; /// time of the last cache clean up boost::posix_time::ptime m_cache_cleanup_time; /// cache of users that are currently active user_cache_type m_user_cache; /// mutex used to protect access to the user cache mutable boost::mutex m_cache_mutex; }; } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/response.hpp0000644000372000001440000002030512215647065021663 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_RESPONSE_HEADER__ #define __PION_HTTP_RESPONSE_HEADER__ #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// response: container for HTTP response information /// class response : public http::message { public: /** * constructs a new response object for a particular request * * @param http_request_ptr the request that this is responding to */ response(const http::request& http_request_ptr) : m_status_code(RESPONSE_CODE_OK), m_status_message(RESPONSE_MESSAGE_OK) { update_request_info(http_request_ptr); } /** * constructs a new response object for a particular request method * * @param request_method the method used by the HTTP request we are responding to */ response(const std::string& request_method) : m_status_code(RESPONSE_CODE_OK), m_status_message(RESPONSE_MESSAGE_OK), m_request_method(request_method) {} /// copy constructor response(const response& http_response) : message(http_response), m_status_code(http_response.m_status_code), m_status_message(http_response.m_status_message), m_request_method(http_response.m_request_method) {} /// default constructor: you are strongly encouraged to use one of the other /// constructors, since response parsing is influenced by the request method response(void) : m_status_code(RESPONSE_CODE_OK), m_status_message(RESPONSE_MESSAGE_OK) {} /// virtual destructor virtual ~response() {} /// clears all response data virtual void clear(void) { http::message::clear(); m_status_code = RESPONSE_CODE_OK; m_status_message = RESPONSE_MESSAGE_OK; m_request_method.clear(); } /// the content length may be implied for certain types of responses virtual bool is_content_length_implied(void) const { return (m_request_method == REQUEST_METHOD_HEAD // HEAD responses have no content || (m_status_code >= 100 && m_status_code <= 199) // 1xx responses have no content || m_status_code == 204 || m_status_code == 205 // no content & reset content responses || m_status_code == 304 // not modified responses have no content ); } /** * Updates HTTP request information for the response object (use * this if the response cannot be constructed using the request) * * @param http_request the request that this is responding to */ inline void update_request_info(const http::request& http_request) { m_request_method = http_request.get_method(); if (http_request.get_version_major() == 1 && http_request.get_version_minor() >= 1) set_chunks_supported(true); } /// sets the HTTP response status code inline void set_status_code(unsigned int n) { m_status_code = n; clear_first_line(); } /// sets the HTTP response status message inline void set_status_message(const std::string& msg) { m_status_message = msg; clear_first_line(); } /// returns the HTTP response status code inline unsigned int get_status_code(void) const { return m_status_code; } /// returns the HTTP response status message inline const std::string& get_status_message(void) const { return m_status_message; } /** * sets a cookie by adding a Set-Cookie header (see RFC 2109) * the cookie will be discarded by the user-agent when it closes * * @param name the name of the cookie * @param value the value of the cookie */ inline void set_cookie(const std::string& name, const std::string& value) { std::string set_cookie_header(make_set_cookie_header(name, value, "/")); add_header(HEADER_SET_COOKIE, set_cookie_header); } /** * sets a cookie by adding a Set-Cookie header (see RFC 2109) * the cookie will be discarded by the user-agent when it closes * * @param name the name of the cookie * @param value the value of the cookie * @param path the path of the cookie */ inline void set_cookie(const std::string& name, const std::string& value, const std::string& path) { std::string set_cookie_header(make_set_cookie_header(name, value, path)); add_header(HEADER_SET_COOKIE, set_cookie_header); } /** * sets a cookie by adding a Set-Cookie header (see RFC 2109) * * @param name the name of the cookie * @param value the value of the cookie * @param path the path of the cookie * @param max_age the life of the cookie, in seconds (0 = discard) */ inline void set_cookie(const std::string& name, const std::string& value, const std::string& path, const unsigned long max_age) { std::string set_cookie_header(make_set_cookie_header(name, value, path, true, max_age)); add_header(HEADER_SET_COOKIE, set_cookie_header); } /** * sets a cookie by adding a Set-Cookie header (see RFC 2109) * * @param name the name of the cookie * @param value the value of the cookie * @param max_age the life of the cookie, in seconds (0 = discard) */ inline void set_cookie(const std::string& name, const std::string& value, const unsigned long max_age) { std::string set_cookie_header(make_set_cookie_header(name, value, "/", true, max_age)); add_header(HEADER_SET_COOKIE, set_cookie_header); } /// deletes cookie called name by adding a Set-Cookie header (cookie has no path) inline void delete_cookie(const std::string& name) { std::string set_cookie_header(make_set_cookie_header(name, "", "/", true, 0)); add_header(HEADER_SET_COOKIE, set_cookie_header); } /// deletes cookie called name by adding a Set-Cookie header (cookie has a path) inline void delete_cookie(const std::string& name, const std::string& path) { std::string set_cookie_header(make_set_cookie_header(name, "", path, true, 0)); add_header(HEADER_SET_COOKIE, set_cookie_header); } /// sets the time that the response was last modified (Last-Modified) inline void set_last_modified(const unsigned long t) { change_header(HEADER_LAST_MODIFIED, get_date_string(t)); } protected: /// updates the string containing the first line for the HTTP message virtual void update_first_line(void) const { // start out with the HTTP version m_first_line = get_version_string(); m_first_line += ' '; // append the response status code m_first_line += boost::lexical_cast(m_status_code); m_first_line += ' '; // append the response status message m_first_line += m_status_message; } /// appends HTTP headers for any cookies defined by the http::message virtual void append_cookie_headers(void) { for (ihash_multimap::const_iterator i = get_cookies().begin(); i != get_cookies().end(); ++i) { set_cookie(i->first, i->second); } } private: /// The HTTP response status code unsigned int m_status_code; /// The HTTP response status message std::string m_status_message; /// HTTP method used by the request std::string m_request_method; }; /// data type for a HTTP response pointer typedef boost::shared_ptr response_ptr; } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/request_reader.hpp0000644000372000001440000001022512215647065023037 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_REQUEST_READER_HEADER__ #define __PION_HTTP_REQUEST_READER_HEADER__ #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// request_reader: asynchronously reads and parses HTTP requests /// class request_reader : public http::reader, public boost::enable_shared_from_this { public: /// function called after the HTTP message has been parsed typedef boost::function3 finished_handler_t; // default destructor virtual ~request_reader() {} /** * creates new request_reader objects * * @param tcp_conn TCP connection containing a new message to parse * @param handler function called after the message has been parsed */ static inline boost::shared_ptr create(tcp::connection_ptr& tcp_conn, finished_handler_t handler) { return boost::shared_ptr (new request_reader(tcp_conn, handler)); } /// sets a function to be called after HTTP headers have been parsed inline void set_headers_parsed_callback(finished_handler_t& h) { m_parsed_headers = h; } protected: /** * protected constructor restricts creation of objects (use create()) * * @param tcp_conn TCP connection containing a new message to parse * @param handler function called after the message has been parsed */ request_reader(tcp::connection_ptr& tcp_conn, finished_handler_t handler) : http::reader(true, tcp_conn), m_http_msg(new http::request), m_finished(handler) { m_http_msg->set_remote_ip(tcp_conn->get_remote_ip()); set_logger(PION_GET_LOGGER("pion.http.request_reader")); } /// Reads more bytes from the TCP connection virtual void read_bytes(void) { get_connection()->async_read_some(boost::bind(&request_reader::consume_bytes, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } /// Called after we have finished parsing the HTTP message headers virtual void finished_parsing_headers(const boost::system::error_code& ec) { // call the finished headers handler with the HTTP message if (m_parsed_headers) m_parsed_headers(m_http_msg, get_connection(), ec); } /// Called after we have finished reading/parsing the HTTP message virtual void finished_reading(const boost::system::error_code& ec) { // call the finished handler with the finished HTTP message if (m_finished) m_finished(m_http_msg, get_connection(), ec); } /// Returns a reference to the HTTP message being parsed virtual http::message& get_message(void) { return *m_http_msg; } /// The new HTTP message container being created http::request_ptr m_http_msg; /// function called after the HTTP message has been parsed finished_handler_t m_finished; /// function called after the HTTP message headers have been parsed finished_handler_t m_parsed_headers; }; /// data type for a request_reader pointer typedef boost::shared_ptr request_reader_ptr; } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/Makefile.am0000644000372000001440000000066712215647065021361 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- pion_http_includedir = $(includedir)/pion/http pion_http_include_HEADERS = \ auth.hpp basic_auth.hpp cookie_auth.hpp message.hpp parser.hpp \ plugin_server.hpp plugin_service.hpp reader.hpp request.hpp \ request_reader.hpp request_writer.hpp response.hpp response_reader.hpp \ response_writer.hpp server.hpp types.hpp writer.hpp pion-5.0.4+dfsg.orig/include/pion/http/response_writer.hpp0000644000372000001440000001644512215647065023271 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_RESPONSE_WRITER_HEADER__ #define __PION_HTTP_RESPONSE_WRITER_HEADER__ #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// response_writer: used to asynchronously send HTTP responses /// class PION_API response_writer : public http::writer, public boost::enable_shared_from_this { public: /// default destructor virtual ~response_writer() {} /** * creates new response_writer objects * * @param tcp_conn TCP connection used to send the response * @param http_response pointer to the response that will be sent * @param handler function called after the response has been sent * * @return boost::shared_ptr shared pointer to * the new writer object that was created */ static inline boost::shared_ptr create(tcp::connection_ptr& tcp_conn, http::response_ptr& http_response_ptr, finished_handler_t handler = finished_handler_t()) { return boost::shared_ptr(new response_writer(tcp_conn, http_response_ptr, handler)); } /** * creates new response_writer objects * * @param tcp_conn TCP connection used to send the response * @param http_request the request we are responding to * @param handler function called after the request has been sent * * @return boost::shared_ptr shared pointer to * the new writer object that was created */ static inline boost::shared_ptr create(tcp::connection_ptr& tcp_conn, const http::request& http_request, finished_handler_t handler = finished_handler_t()) { return boost::shared_ptr(new response_writer(tcp_conn, http_request, handler)); } /// returns a non-const reference to the response that will be sent inline http::response& get_response(void) { return *m_http_response; } protected: /** * protected constructor restricts creation of objects (use create()) * * @param tcp_conn TCP connection used to send the response * @param http_response pointer to the response that will be sent * @param handler function called after the request has been sent */ response_writer(tcp::connection_ptr& tcp_conn, http::response_ptr& http_response_ptr, finished_handler_t handler) : http::writer(tcp_conn, handler), m_http_response(http_response_ptr) { set_logger(PION_GET_LOGGER("pion.http.response_writer")); // tell the http::writer base class whether or not the client supports chunks supports_chunked_messages(m_http_response->get_chunks_supported()); // check if we should initialize the payload content using // the response's content buffer if (m_http_response->get_content_length() > 0 && m_http_response->get_content() != NULL && m_http_response->get_content()[0] != '\0') { write_no_copy(m_http_response->get_content(), m_http_response->get_content_length()); } } /** * protected constructor restricts creation of objects (use create()) * * @param tcp_conn TCP connection used to send the response * @param http_request the request we are responding to * @param handler function called after the request has been sent */ response_writer(tcp::connection_ptr& tcp_conn, const http::request& http_request, finished_handler_t handler) : http::writer(tcp_conn, handler), m_http_response(new http::response(http_request)) { set_logger(PION_GET_LOGGER("pion.http.response_writer")); // tell the http::writer base class whether or not the client supports chunks supports_chunked_messages(m_http_response->get_chunks_supported()); } /** * initializes a vector of write buffers with the HTTP message information * * @param write_buffers vector of write buffers to initialize */ virtual void prepare_buffers_for_send(http::message::write_buffers_t& write_buffers) { if (get_content_length() > 0) m_http_response->set_content_length(get_content_length()); m_http_response->prepare_buffers_for_send(write_buffers, get_connection()->get_keep_alive(), sending_chunked_message()); } /// returns a function bound to http::writer::handle_write() virtual write_handler_t bind_to_write_handler(void) { return boost::bind(&response_writer::handle_write, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred); } /** * called after the response is sent * * @param write_error error status from the last write operation * @param bytes_written number of bytes sent by the last write operation */ virtual void handle_write(const boost::system::error_code& write_error, std::size_t bytes_written) { logger log_ptr(get_logger()); if (!write_error) { // response sent OK if (sending_chunked_message()) { PION_LOG_DEBUG(log_ptr, "Sent HTTP response chunk of " << bytes_written << " bytes"); } else { PION_LOG_DEBUG(log_ptr, "Sent HTTP response of " << bytes_written << " bytes (" << (get_connection()->get_keep_alive() ? "keeping alive)" : "closing)")); } } finished_writing(write_error); } private: /// the response that will be sent http::response_ptr m_http_response; /// the initial HTTP response header line std::string m_response_line; }; /// data type for a response_writer pointer typedef boost::shared_ptr response_writer_ptr; /// override operator<< for convenience template const response_writer_ptr& operator<<(const response_writer_ptr& writer, const T& data) { writer->write(data); return writer; } inline response_writer_ptr& operator<<(response_writer_ptr& writer, std::ostream& (*iomanip)(std::ostream&)) { writer->write(iomanip); return writer; } } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/server.hpp0000644000372000001440000002533212215647065021340 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_SERVER_HEADER__ #define __PION_HTTP_SERVER_HEADER__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// server: a server that handles HTTP connections /// class PION_API server : public tcp::server { public: /// type of function that is used to handle requests typedef boost::function2 request_handler_t; /// handler for requests that result in "500 Server Error" typedef boost::function3 error_handler_t; /// default destructor virtual ~server() { if (is_listening()) stop(); } /** * creates a new server object * * @param tcp_port port number used to listen for new connections (IPv4) */ explicit server(const unsigned int tcp_port = 0) : tcp::server(tcp_port), m_bad_request_handler(server::handle_bad_request), m_not_found_handler(server::handle_not_found_request), m_server_error_handler(server::handle_server_error), m_max_content_length(http::parser::DEFAULT_CONTENT_MAX) { set_logger(PION_GET_LOGGER("pion.http.server")); } /** * creates a new server object * * @param endpoint TCP endpoint used to listen for new connections (see ASIO docs) */ explicit server(const boost::asio::ip::tcp::endpoint& endpoint) : tcp::server(endpoint), m_bad_request_handler(server::handle_bad_request), m_not_found_handler(server::handle_not_found_request), m_server_error_handler(server::handle_server_error), m_max_content_length(http::parser::DEFAULT_CONTENT_MAX) { set_logger(PION_GET_LOGGER("pion.http.server")); } /** * creates a new server object * * @param sched the scheduler that will be used to manage worker threads * @param tcp_port port number used to listen for new connections (IPv4) */ explicit server(scheduler& sched, const unsigned int tcp_port = 0) : tcp::server(sched, tcp_port), m_bad_request_handler(server::handle_bad_request), m_not_found_handler(server::handle_not_found_request), m_server_error_handler(server::handle_server_error), m_max_content_length(http::parser::DEFAULT_CONTENT_MAX) { set_logger(PION_GET_LOGGER("pion.http.server")); } /** * creates a new server object * * @param sched the scheduler that will be used to manage worker threads * @param endpoint TCP endpoint used to listen for new connections (see ASIO docs) */ server(scheduler& sched, const boost::asio::ip::tcp::endpoint& endpoint) : tcp::server(sched, endpoint), m_bad_request_handler(server::handle_bad_request), m_not_found_handler(server::handle_not_found_request), m_server_error_handler(server::handle_server_error), m_max_content_length(http::parser::DEFAULT_CONTENT_MAX) { set_logger(PION_GET_LOGGER("pion.http.server")); } /** * adds a new web service to the HTTP server * * @param resource the resource name or uri-stem to bind to the handler * @param request_handler function used to handle requests to the resource */ void add_resource(const std::string& resource, request_handler_t request_handler); /** * removes a web service from the HTTP server * * @param resource the resource name or uri-stem to remove */ void remove_resource(const std::string& resource); /** * adds a new resource redirection to the HTTP server * * @param requested_resource the resource name or uri-stem that will be redirected * @param new_resource the resource that requested_resource will be redirected to */ void add_redirect(const std::string& requested_resource, const std::string& new_resource); /// sets the function that handles bad HTTP requests inline void set_bad_request_handler(request_handler_t h) { m_bad_request_handler = h; } /// sets the function that handles requests which match no other web services inline void set_not_found_handler(request_handler_t h) { m_not_found_handler = h; } /// sets the function that handles requests which match no other web services inline void set_error_handler(error_handler_t h) { m_server_error_handler = h; } /// clears the collection of resources recognized by the HTTP server virtual void clear(void) { if (is_listening()) stop(); boost::mutex::scoped_lock resource_lock(m_resource_mutex); m_resources.clear(); } /** * strips trailing slash from a string, if one exists * * @param str the original string * @return the resulting string, after any trailing slash is removed */ static inline std::string strip_trailing_slash(const std::string& str) { std::string result(str); if (!result.empty() && result[result.size()-1]=='/') result.resize(result.size() - 1); return result; } /** * used to send responses when a bad HTTP request is made * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request */ static void handle_bad_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); /** * used to send responses when no web services can handle the request * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request */ static void handle_not_found_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); /** * used to send responses when a server error occurs * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request * @param error_msg message that explains what went wrong */ static void handle_server_error(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string& error_msg); /** * used to send responses when a request is forbidden * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request * @param error_msg message that explains what went wrong */ static void handle_forbidden_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string& error_msg); /** * used to send responses when a method is not allowed * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request * @param allowed_methods optional comma separated list of allowed methods */ static void handle_method_not_allowed(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string& allowed_methods = ""); /** * sets the handler object for authentication verification processing */ inline void set_authentication(http::auth_ptr auth) { m_auth_ptr = auth; } /// sets the maximum length for HTTP request payload content inline void set_max_content_length(std::size_t n) { m_max_content_length = n; } protected: /** * handles a new TCP connection * * @param tcp_conn the new TCP connection to handle */ virtual void handle_connection(tcp::connection_ptr& tcp_conn); /** * handles a new HTTP request * * @param http_request_ptr the HTTP request to handle * @param tcp_conn TCP connection containing a new request * @param ec error_code contains additional information for parsing errors */ virtual void handle_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const boost::system::error_code& ec); /** * searches for the appropriate request handler to use for a given resource * * @param resource the name of the resource to search for * @param request_handler function that can handle requests for this resource */ virtual bool find_request_handler(const std::string& resource, request_handler_t& request_handler) const; private: /// maximum number of redirections static const unsigned int MAX_REDIRECTS; /// data type for a map of resources to request handlers typedef std::map resource_map_t; /// data type for a map of requested resources to other resources typedef std::map redirect_map_t; /// collection of resources that are recognized by this HTTP server resource_map_t m_resources; /// collection of redirections from a requested resource to another resource redirect_map_t m_redirects; /// points to a function that handles bad HTTP requests request_handler_t m_bad_request_handler; /// points to a function that handles requests which match no web services request_handler_t m_not_found_handler; /// points to the function that handles server errors error_handler_t m_server_error_handler; /// mutex used to protect access to the resources mutable boost::mutex m_resource_mutex; /// pointer to authentication handler object http::auth_ptr m_auth_ptr; /// maximum length for HTTP request payload content std::size_t m_max_content_length; }; /// data type for a HTTP server pointer typedef boost::shared_ptr server_ptr; } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/plugin_server.hpp0000644000372000001440000001254312215647065022716 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PLUGIN_SERVER_HEADER__ #define __PION_PLUGIN_SERVER_HEADER__ #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// plugin_server: a server that handles HTTP connections using http::plugin_service plug-ins /// class PION_API plugin_server : public http::server { public: /// default destructor virtual ~plugin_server() { clear(); } /** * creates a new plugin_server object * * @param tcp_port port number used to listen for new connections (IPv4) */ explicit plugin_server(const unsigned int tcp_port = 0) : http::server(tcp_port) { set_logger(PION_GET_LOGGER("pion.http.plugin_server")); } /** * creates a new plugin_server object * * @param endpoint TCP endpoint used to listen for new connections (see ASIO docs) */ explicit plugin_server(const boost::asio::ip::tcp::endpoint& endpoint) : http::server(endpoint) { set_logger(PION_GET_LOGGER("pion.http.plugin_server")); } /** * creates a new plugin_server object * * @param sched the scheduler that will be used to manage worker threads * @param tcp_port port number used to listen for new connections (IPv4) */ explicit plugin_server(scheduler& sched, const unsigned int tcp_port = 0) : http::server(sched, tcp_port) { set_logger(PION_GET_LOGGER("pion.http.plugin_server")); } /** * creates a new plugin_server object * * @param sched the scheduler that will be used to manage worker threads * @param endpoint TCP endpoint used to listen for new connections (see ASIO docs) */ plugin_server(scheduler& sched, const boost::asio::ip::tcp::endpoint& endpoint) : http::server(sched, endpoint) { set_logger(PION_GET_LOGGER("pion.http.plugin_server")); } /** * adds a new web service to the web server * * @param resource the resource name or uri-stem to bind to the web service * @param service_ptr a pointer to the web service */ void add_service(const std::string& resource, http::plugin_service *service_ptr); /** * loads a web service from a shared object file * * @param resource the resource name or uri-stem to bind to the web service * @param service_name the name of the web service to load (searches plug-in * directories and appends extensions) */ void load_service(const std::string& resource, const std::string& service_name); /** * sets a configuration option for the web service associated with resource * * @param resource the resource name or uri-stem that identifies the web service * @param name the name of the configuration option * @param value the value to set the option to */ void set_service_option(const std::string& resource, const std::string& name, const std::string& value); /** * Parses a simple web service configuration file. Each line in the file * starts with one of the following commands: * * path VALUE : adds a directory to the web service search path * service RESOURCE FILE : loads web service bound to RESOURCE from FILE * option RESOURCE NAME=VALUE : sets web service option NAME to VALUE * * Blank lines or lines that begin with # are ignored as comments. * * @param config_name the name of the config file to parse */ void load_service_config(const std::string& config_name); /// clears all the web services that are currently configured virtual void clear(void) { if (is_listening()) stop(); m_services.clear(); http::server::clear(); } protected: /// called before the TCP server starts listening for new connections virtual void before_starting(void) { // call the start() method for each web service associated with this server m_services.run(boost::bind(&http::plugin_service::start, _1)); } /// called after the TCP server has stopped listening for new connections virtual void after_stopping(void) { // call the stop() method for each web service associated with this server m_services.run(boost::bind(&http::plugin_service::stop, _1)); } private: /// data type for a collection of web services typedef plugin_manager service_manager_t; /// Web services associated with this server service_manager_t m_services; }; /// data type for a web server pointer typedef boost::shared_ptr plugin_server_ptr; } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/parser.hpp0000644000372000001440000006665712215647065021345 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_PARSER_HEADER__ #define __PION_HTTP_PARSER_HEADER__ #include #include #include #include #include #include #include #include #include #ifndef BOOST_SYSTEM_NOEXCEPT #define BOOST_SYSTEM_NOEXCEPT BOOST_NOEXCEPT #endif namespace pion { // begin namespace pion namespace http { // begin namespace http // forward declarations used for finishing HTTP messages class request; class response; /// /// parser: parses HTTP messages /// class PION_API parser : private boost::noncopyable { public: /// maximum length for HTTP payload content static const std::size_t DEFAULT_CONTENT_MAX; /// callback type used to consume payload content typedef boost::function2 payload_handler_t; /// class-specific error code values enum error_value_t { ERROR_METHOD_CHAR = 1, ERROR_METHOD_SIZE, ERROR_URI_CHAR, ERROR_URI_SIZE, ERROR_QUERY_CHAR, ERROR_QUERY_SIZE, ERROR_VERSION_EMPTY, ERROR_VERSION_CHAR, ERROR_STATUS_EMPTY, ERROR_STATUS_CHAR, ERROR_HEADER_CHAR, ERROR_HEADER_NAME_SIZE, ERROR_HEADER_VALUE_SIZE, ERROR_INVALID_CONTENT_LENGTH, ERROR_CHUNK_CHAR, ERROR_MISSING_CHUNK_DATA, ERROR_MISSING_HEADER_DATA, ERROR_MISSING_TOO_MUCH_CONTENT, }; /// class-specific error category class error_category_t : public boost::system::error_category { public: const char *name() const BOOST_SYSTEM_NOEXCEPT { return "parser"; } std::string message(int ev) const { switch (ev) { case ERROR_METHOD_CHAR: return "invalid method character"; case ERROR_METHOD_SIZE: return "method exceeds maximum size"; case ERROR_URI_CHAR: return "invalid URI character"; case ERROR_URI_SIZE: return "method exceeds maximum size"; case ERROR_QUERY_CHAR: return "invalid query string character"; case ERROR_QUERY_SIZE: return "query string exceeds maximum size"; case ERROR_VERSION_EMPTY: return "HTTP version undefined"; case ERROR_VERSION_CHAR: return "invalid version character"; case ERROR_STATUS_EMPTY: return "HTTP status undefined"; case ERROR_STATUS_CHAR: return "invalid status character"; case ERROR_HEADER_CHAR: return "invalid header character"; case ERROR_HEADER_NAME_SIZE: return "header name exceeds maximum size"; case ERROR_HEADER_VALUE_SIZE: return "header value exceeds maximum size"; case ERROR_INVALID_CONTENT_LENGTH: return "invalid Content-Length header"; case ERROR_CHUNK_CHAR: return "invalid chunk character"; case ERROR_MISSING_HEADER_DATA: return "missing header data"; case ERROR_MISSING_CHUNK_DATA: return "missing chunk data"; case ERROR_MISSING_TOO_MUCH_CONTENT: return "missing too much content"; } return "parser error"; } }; /** * creates new parser objects * * @param is_request if true, the message is parsed as an HTTP request; * if false, the message is parsed as an HTTP response * @param max_content_length maximum length for HTTP payload content */ parser(const bool is_request, std::size_t max_content_length = DEFAULT_CONTENT_MAX) : m_logger(PION_GET_LOGGER("pion.http.parser")), m_is_request(is_request), m_read_ptr(NULL), m_read_end_ptr(NULL), m_message_parse_state(PARSE_START), m_headers_parse_state(is_request ? PARSE_METHOD_START : PARSE_HTTP_VERSION_H), m_chunked_content_parse_state(PARSE_CHUNK_SIZE_START), m_status_code(0), m_bytes_content_remaining(0), m_bytes_content_read(0), m_bytes_last_read(0), m_bytes_total_read(0), m_max_content_length(max_content_length), m_parse_headers_only(false), m_save_raw_headers(false) {} /// default destructor virtual ~parser() {} /** * parses an HTTP message including all payload content it might contain * * @param http_msg the HTTP message object to populate from parsing * @param ec error_code contains additional information for parsing errors * * @return boost::tribool result of parsing: * false = message has an error, * true = finished parsing HTTP message, * indeterminate = not yet finished parsing HTTP message */ boost::tribool parse(http::message& http_msg, boost::system::error_code& ec); /** * attempts to continue parsing despite having missed data (length is known but content is not) * * @param http_msg the HTTP message object to populate from parsing * @param len the length in bytes of the missing data * @param ec error_code contains additional information for parsing errors * * @return boost::tribool result of parsing: * false = message has an error, * true = finished parsing HTTP message, * indeterminate = not yet finished parsing HTTP message */ boost::tribool parse_missing_data(http::message& http_msg, std::size_t len, boost::system::error_code& ec); /** * finishes parsing an HTTP response message * * @param http_msg the HTTP message object to finish */ void finish(http::message& http_msg) const; /** * resets the location and size of the read buffer * * @param ptr pointer to the first bytes available to be read * @param len number of bytes available to be read */ inline void set_read_buffer(const char *ptr, size_t len) { m_read_ptr = ptr; m_read_end_ptr = ptr + len; } /** * loads a read position bookmark * * @param read_ptr points to the next character to be consumed in the read_buffer * @param read_end_ptr points to the end of the read_buffer (last byte + 1) */ inline void load_read_pos(const char *&read_ptr, const char *&read_end_ptr) const { read_ptr = m_read_ptr; read_end_ptr = m_read_end_ptr; } /** * checks to see if a premature EOF was encountered while parsing. This * should be called if there is no more data to parse, and if the last * call to the parse() function returned boost::indeterminate * * @param http_msg the HTTP message object being parsed * @return true if premature EOF, false if message is OK & finished parsing */ inline bool check_premature_eof(http::message& http_msg) { if (m_message_parse_state != PARSE_CONTENT_NO_LENGTH) return true; m_message_parse_state = PARSE_END; http_msg.concatenate_chunks(); finish(http_msg); return false; } /** * controls headers-only parsing (default is disabled; content parsed also) * * @param b if true, then the parse() function returns true after headers */ inline void parse_headers_only(bool b = true) { m_parse_headers_only = b; } /** * skip parsing all headers and parse payload content only * * @param http_msg the HTTP message object being parsed */ inline void skip_header_parsing(http::message& http_msg) { boost::system::error_code ec; finish_header_parsing(http_msg, ec); } /// resets the parser to its initial state inline void reset(void) { m_message_parse_state = PARSE_START; m_headers_parse_state = (m_is_request ? PARSE_METHOD_START : PARSE_HTTP_VERSION_H); m_chunked_content_parse_state = PARSE_CHUNK_SIZE_START; m_status_code = 0; m_status_message.erase(); m_method.erase(); m_resource.erase(); m_query_string.erase(); m_raw_headers.erase(); m_bytes_content_read = m_bytes_last_read = m_bytes_total_read = 0; } /// returns true if there are no more bytes available in the read buffer inline bool eof(void) const { return m_read_ptr == NULL || m_read_ptr >= m_read_end_ptr; } /// returns the number of bytes available in the read buffer inline std::size_t bytes_available(void) const { return (eof() ? 0 : (std::size_t)(m_read_end_ptr - m_read_ptr)); } /// returns the number of bytes read during the last parse operation inline std::size_t gcount(void) const { return m_bytes_last_read; } /// returns the total number of bytes read while parsing the HTTP message inline std::size_t get_total_bytes_read(void) const { return m_bytes_total_read; } /// returns the total number of bytes read while parsing the payload content inline std::size_t get_content_bytes_read(void) const { return m_bytes_content_read; } /// returns the maximum length for HTTP payload content inline std::size_t get_max_content_length(void) const { return m_max_content_length; } /// returns the raw HTTP headers saved by the parser inline const std::string& get_raw_headers(void) const { return m_raw_headers; } /// returns true if the parser is saving raw HTTP header contents inline bool get_save_raw_headers(void) const { return m_save_raw_headers; } /// returns true if parsing headers only inline bool get_parse_headers_only(void) { return m_parse_headers_only; } /// returns true if the parser is being used to parse an HTTP request inline bool is_parsing_request(void) const { return m_is_request; } /// returns true if the parser is being used to parse an HTTP response inline bool is_parsing_response(void) const { return ! m_is_request; } /// defines a callback function to be used for consuming payload content inline void set_payload_handler(payload_handler_t& h) { m_payload_handler = h; } /// sets the maximum length for HTTP payload content inline void set_max_content_length(std::size_t n) { m_max_content_length = n; } /// resets the maximum length for HTTP payload content to the default value inline void reset_max_content_length(void) { m_max_content_length = DEFAULT_CONTENT_MAX; } /// sets parameter for saving raw HTTP header content inline void set_save_raw_headers(bool b) { m_save_raw_headers = b; } /// sets the logger to be used inline void set_logger(logger log_ptr) { m_logger = log_ptr; } /// returns the logger currently in use inline logger get_logger(void) { return m_logger; } /** * parses a URI string * * @param uri the string to parse * @param proto will be set to the protocol (i.e. "http") * @param host will be set to the hostname (i.e. "www.cloudmeter.com") * @param port host port number to use for connection (i.e. 80) * @param path uri stem or file path * @param query uri query string * * @return true if the URI was successfully parsed, false if there was an error */ static bool parse_uri(const std::string& uri, std::string& proto, std::string& host, boost::uint16_t& port, std::string& path, std::string& query); /** * parse key-value pairs out of a url-encoded string * (i.e. this=that&a=value) * * @param dict dictionary for key-values pairs * @param ptr points to the start of the encoded string * @param len length of the encoded string, in bytes * * @return bool true if successful */ static bool parse_url_encoded(ihash_multimap& dict, const char *ptr, const std::size_t len); /** * parse key-value pairs out of a multipart/form-data payload content * (http://www.ietf.org/rfc/rfc2388.txt) * * @param dict dictionary for key-values pairs * @param content_type value of the content-type HTTP header * @param ptr points to the start of the encoded data * @param len length of the encoded data, in bytes * * @return bool true if successful */ static bool parse_multipart_form_data(ihash_multimap& dict, const std::string& content_type, const char *ptr, const std::size_t len); /** * parse key-value pairs out of a "Cookie" request header * (i.e. this=that; a=value) * * @param dict dictionary for key-values pairs * @param ptr points to the start of the header string to be parsed * @param len length of the encoded string, in bytes * @param set_cookie_header set true if parsing Set-Cookie response header * * @return bool true if successful */ static bool parse_cookie_header(ihash_multimap& dict, const char *ptr, const std::size_t len, bool set_cookie_header); /** * parse key-value pairs out of a "Cookie" request header * (i.e. this=that; a=value) * * @param dict dictionary for key-values pairs * @param cookie_header header string to be parsed * @param set_cookie_header set true if parsing Set-Cookie response header * * @return bool true if successful */ static inline bool parse_cookie_header(ihash_multimap& dict, const std::string& cookie_header, bool set_cookie_header) { return parse_cookie_header(dict, cookie_header.c_str(), cookie_header.size(), set_cookie_header); } /** * parse key-value pairs out of a url-encoded string * (i.e. this=that&a=value) * * @param dict dictionary for key-values pairs * @param query the encoded query string to be parsed * * @return bool true if successful */ static inline bool parse_url_encoded(ihash_multimap& dict, const std::string& query) { return parse_url_encoded(dict, query.c_str(), query.size()); } /** * parse key-value pairs out of a multipart/form-data payload content * (http://www.ietf.org/rfc/rfc2388.txt) * * @param dict dictionary for key-values pairs * @param content_type value of the content-type HTTP header * @param form_data the encoded form data * * @return bool true if successful */ static inline bool parse_multipart_form_data(ihash_multimap& dict, const std::string& content_type, const std::string& form_data) { return parse_multipart_form_data(dict, content_type, form_data.c_str(), form_data.size()); } /** * should be called after parsing HTTP headers, to prepare for payload content parsing * available in the read buffer * * @param http_msg the HTTP message object to populate from parsing * @param ec error_code contains additional information for parsing errors * * @return boost::tribool result of parsing: * false = message has an error, * true = finished parsing HTTP message (no content), * indeterminate = payload content is available to be parsed */ boost::tribool finish_header_parsing(http::message& http_msg, boost::system::error_code& ec); /** * parses an X-Forwarded-For HTTP header, and extracts from it an IP * address that best matches the client's public IP address (if any are found) * * @param header the X-Forwarded-For HTTP header to parse * @param public_ip the extract IP address, if found * * @return bool true if a public IP address was found and extracted */ static bool parse_forwarded_for(const std::string& header, std::string& public_ip); /// returns an instance of parser::error_category_t static inline error_category_t& get_error_category(void) { boost::call_once(parser::create_error_category, m_instance_flag); return *m_error_category_ptr; } protected: /// Called after we have finished parsing the HTTP message headers virtual void finished_parsing_headers(const boost::system::error_code& ec) {} /** * parses an HTTP message up to the end of the headers using bytes * available in the read buffer * * @param http_msg the HTTP message object to populate from parsing * @param ec error_code contains additional information for parsing errors * * @return boost::tribool result of parsing: * false = message has an error, * true = finished parsing HTTP headers, * indeterminate = not yet finished parsing HTTP headers */ boost::tribool parse_headers(http::message& http_msg, boost::system::error_code& ec); /** * updates an http::message object with data obtained from parsing headers * * @param http_msg the HTTP message object to populate from parsing */ void update_message_with_header_data(http::message& http_msg) const; /** * parses a chunked HTTP message-body using bytes available in the read buffer * * @param chunk_buffers buffers to be populated from parsing chunked content * @param ec error_code contains additional information for parsing errors * * @return boost::tribool result of parsing: * false = message has an error, * true = finished parsing message, * indeterminate = message is not yet finished */ boost::tribool parse_chunks(http::message::chunk_cache_t& chunk_buffers, boost::system::error_code& ec); /** * consumes payload content in the parser's read buffer * * @param http_msg the HTTP message object to consume content for * @param ec error_code contains additional information for parsing errors * * @return boost::tribool result of parsing: * false = message has an error, * true = finished parsing message, * indeterminate = message is not yet finished */ boost::tribool consume_content(http::message& http_msg, boost::system::error_code& ec); /** * consume the bytes available in the read buffer, converting them into * the next chunk for the HTTP message * * @param chunk_buffers buffers to be populated from parsing chunked content * @return std::size_t number of content bytes consumed, if any */ std::size_t consume_content_as_next_chunk(http::message::chunk_cache_t& chunk_buffers); /** * compute and sets a HTTP Message data integrity status * @param http_msg target HTTP message * @param msg_parsed_ok message parsing result */ static void compute_msg_status(http::message& http_msg, bool msg_parsed_ok); /** * sets an error code * * @param ec error code variable to define * @param ev error value to raise */ static inline void set_error(boost::system::error_code& ec, error_value_t ev) { ec = boost::system::error_code(static_cast(ev), get_error_category()); } /// creates the unique parser error_category_t static void create_error_category(void); // misc functions used by the parsing functions inline static bool is_char(int c); inline static bool is_control(int c); inline static bool is_special(int c); inline static bool is_digit(int c); inline static bool is_hex_digit(int c); inline static bool is_cookie_attribute(const std::string& name, bool set_cookie_header); /// maximum length for response status message static const boost::uint32_t STATUS_MESSAGE_MAX; /// maximum length for the request method static const boost::uint32_t METHOD_MAX; /// maximum length for the resource requested static const boost::uint32_t RESOURCE_MAX; /// maximum length for the query string static const boost::uint32_t QUERY_STRING_MAX; /// maximum length for an HTTP header name static const boost::uint32_t HEADER_NAME_MAX; /// maximum length for an HTTP header value static const boost::uint32_t HEADER_VALUE_MAX; /// maximum length for the name of a query string variable static const boost::uint32_t QUERY_NAME_MAX; /// maximum length for the value of a query string variable static const boost::uint32_t QUERY_VALUE_MAX; /// maximum length for the name of a cookie name static const boost::uint32_t COOKIE_NAME_MAX; /// maximum length for the value of a cookie; also used for path and domain static const boost::uint32_t COOKIE_VALUE_MAX; /// primary logging interface used by this class mutable logger m_logger; /// true if the message is an HTTP request; false if it is an HTTP response const bool m_is_request; /// points to the next character to be consumed in the read_buffer const char * m_read_ptr; /// points to the end of the read_buffer (last byte + 1) const char * m_read_end_ptr; private: /// state used to keep track of where we are in parsing the HTTP message enum message_parse_state_t { PARSE_START, PARSE_HEADERS, PARSE_FOOTERS, PARSE_CONTENT, PARSE_CONTENT_NO_LENGTH, PARSE_CHUNKS, PARSE_END }; /// state used to keep track of where we are in parsing the HTTP headers /// (only used if message_parse_state_t == PARSE_HEADERS) enum header_parse_state_t { PARSE_METHOD_START, PARSE_METHOD, PARSE_URI_STEM, PARSE_URI_QUERY, PARSE_HTTP_VERSION_H, PARSE_HTTP_VERSION_T_1, PARSE_HTTP_VERSION_T_2, PARSE_HTTP_VERSION_P, PARSE_HTTP_VERSION_SLASH, PARSE_HTTP_VERSION_MAJOR_START, PARSE_HTTP_VERSION_MAJOR, PARSE_HTTP_VERSION_MINOR_START, PARSE_HTTP_VERSION_MINOR, PARSE_STATUS_CODE_START, PARSE_STATUS_CODE, PARSE_STATUS_MESSAGE, PARSE_EXPECTING_NEWLINE, PARSE_EXPECTING_CR, PARSE_HEADER_WHITESPACE, PARSE_HEADER_START, PARSE_HEADER_NAME, PARSE_SPACE_BEFORE_HEADER_VALUE, PARSE_HEADER_VALUE, PARSE_EXPECTING_FINAL_NEWLINE, PARSE_EXPECTING_FINAL_CR }; /// state used to keep track of where we are in parsing chunked content /// (only used if message_parse_state_t == PARSE_CHUNKS) enum chunk_parse_state_t { PARSE_CHUNK_SIZE_START, PARSE_CHUNK_SIZE, PARSE_EXPECTING_IGNORED_TEXT_AFTER_CHUNK_SIZE, PARSE_EXPECTING_CR_AFTER_CHUNK_SIZE, PARSE_EXPECTING_LF_AFTER_CHUNK_SIZE, PARSE_CHUNK, PARSE_EXPECTING_CR_AFTER_CHUNK, PARSE_EXPECTING_LF_AFTER_CHUNK, PARSE_EXPECTING_FINAL_CR_OR_FOOTERS_AFTER_LAST_CHUNK, PARSE_EXPECTING_FINAL_LF_AFTER_LAST_CHUNK }; /// the current state of parsing HTTP headers message_parse_state_t m_message_parse_state; /// the current state of parsing HTTP headers header_parse_state_t m_headers_parse_state; /// the current state of parsing chunked content chunk_parse_state_t m_chunked_content_parse_state; /// if defined, this function is used to consume payload content payload_handler_t m_payload_handler; /// Used for parsing the HTTP response status code boost::uint16_t m_status_code; /// Used for parsing the HTTP response status message std::string m_status_message; /// Used for parsing the request method std::string m_method; /// Used for parsing the name of resource requested std::string m_resource; /// Used for parsing the query string portion of a URI std::string m_query_string; /// Used to store the raw contents of HTTP headers when m_save_raw_headers is true std::string m_raw_headers; /// Used for parsing the name of HTTP headers std::string m_header_name; /// Used for parsing the value of HTTP headers std::string m_header_value; /// Used for parsing the chunk size std::string m_chunk_size_str; /// number of bytes in the chunk currently being parsed std::size_t m_size_of_current_chunk; /// number of bytes read so far in the chunk currently being parsed std::size_t m_bytes_read_in_current_chunk; /// number of payload content bytes that have not yet been read std::size_t m_bytes_content_remaining; /// number of bytes read so far into the message's payload content std::size_t m_bytes_content_read; /// number of bytes read during last parse operation std::size_t m_bytes_last_read; /// total number of bytes read while parsing the HTTP message std::size_t m_bytes_total_read; /// maximum length for HTTP payload content std::size_t m_max_content_length; /// if true, then only HTTP headers will be parsed (no content parsing) bool m_parse_headers_only; /// if true, the raw contents of HTTP headers are stored into m_raw_headers bool m_save_raw_headers; /// points to a single and unique instance of the parser error_category_t static error_category_t * m_error_category_ptr; /// used to ensure thread safety of the parser error_category_t static boost::once_flag m_instance_flag; }; // inline functions for parser inline bool parser::is_char(int c) { return(c >= 0 && c <= 127); } inline bool parser::is_control(int c) { return( (c >= 0 && c <= 31) || c == 127); } inline bool parser::is_special(int c) { switch (c) { case '(': case ')': case '<': case '>': case '@': case ',': case ';': case ':': case '\\': case '"': case '/': case '[': case ']': case '?': case '=': case '{': case '}': case ' ': case '\t': return true; default: return false; } } inline bool parser::is_digit(int c) { return(c >= '0' && c <= '9'); } inline bool parser::is_hex_digit(int c) { return((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); } inline bool parser::is_cookie_attribute(const std::string& name, bool set_cookie_header) { return (name.empty() || name[0] == '$' || (set_cookie_header && (name=="Comment" || name=="Domain" || name=="Max-Age" || name=="Path" || name=="Secure" || name=="Version" || name=="Expires") ) ); } } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/Makefile.in0000644000372000001440000003717112215647101021361 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include/pion/http DIST_COMMON = $(pion_http_include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pion_http_includedir)" HEADERS = $(pion_http_include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pion_http_includedir = $(includedir)/pion/http pion_http_include_HEADERS = \ auth.hpp basic_auth.hpp cookie_auth.hpp message.hpp parser.hpp \ plugin_server.hpp plugin_service.hpp reader.hpp request.hpp \ request_reader.hpp request_writer.hpp response.hpp response_reader.hpp \ response_writer.hpp server.hpp types.hpp writer.hpp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/pion/http/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/pion/http/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pion_http_includeHEADERS: $(pion_http_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(pion_http_includedir)" || $(MKDIR_P) "$(DESTDIR)$(pion_http_includedir)" @list='$(pion_http_include_HEADERS)'; test -n "$(pion_http_includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pion_http_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pion_http_includedir)" || exit $$?; \ done uninstall-pion_http_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pion_http_include_HEADERS)'; test -n "$(pion_http_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pion_http_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pion_http_includedir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pion_http_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pion_http_includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pion_http_includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pion_http_includeHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-pion_http_includeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.4+dfsg.orig/include/pion/http/plugin_service.hpp0000644000372000001440000000755412215647065023056 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PLUGIN_SERVICE_HEADER__ #define __PION_PLUGIN_SERVICE_HEADER__ #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// plugin_service: interface class for web services /// class plugin_service : private boost::noncopyable { public: /// default constructor plugin_service(void) {} /// virtual destructor virtual ~plugin_service() {} /** * attempts to handle a new HTTP request * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request */ virtual void operator()(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) = 0; /** * sets a configuration option * * @param name the name of the option to change * @param value the value of the option */ virtual void set_option(const std::string& name, const std::string& value) { BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } /// called when the web service's server is starting virtual void start(void) {} /// called when the web service's server is stopping virtual void stop(void) {} /// sets the URI stem or resource that is bound to the web service inline void set_resource(const std::string& str) { m_resource = str; } /// returns the URI stem or resource that is bound to the web service inline const std::string& get_resource(void) const { return m_resource; } /// returns the path to the resource requested, relative to the web service's location inline std::string get_relative_resource(const std::string& resource_requested) const { if (resource_requested.size() <= get_resource().size()) { // either the request matches the web service's resource path (a directory) // or the request does not match (should never happen) return std::string(); } // strip the web service's resource path plus the slash after it return algorithm::url_decode(resource_requested.substr(get_resource().size() + 1)); } private: /// the URI stem or resource that is bound to the web service std::string m_resource; }; // // The following symbols must be defined for any web service that you would // like to be able to load dynamically using the http::server::load_service() // function. These are not required for any services that you only want to link // directly into your programs. // // Make sure that you replace "MyPluginName" with the name of your derived class. // This name must also match the name of the object file (excluding the // extension). These symbols must be linked into your service's object file, // not included in any headers that it may use (declarations are OK in headers // but not the definitions). // // The "pion_create" function is used to create new instances of your service. // The "pion_destroy" function is used to destroy instances of your service. // // extern "C" MyPluginName *pion_create_MyPluginName(void) { // return new MyPluginName; // } // // extern "C" void pion_destroy_MyPluginName(MyPluginName *service_ptr) { // delete service_ptr; // } // } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/auth.hpp0000644000372000001440000001243712215647065020775 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_AUTH_HEADER__ #define __PION_HTTP_AUTH_HEADER__ #include #include #include #include #include #include #include #include #include #include #include #include // order important, otherwise compiling error under win32 namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// auth: a base class for handling HTTP Authentication and session management /// class PION_API auth : private boost::noncopyable { public: /// default constructor auth(user_manager_ptr userManager) : m_logger(PION_GET_LOGGER("pion.http.auth")), m_user_manager(userManager) {} /// virtual destructor virtual ~auth() {} /** * attempts to validate authentication of a new HTTP request. * If request valid, pointer to user identity object (if any) will be preserved in * the request and return "true". * If request not authenticated, appropriate response is sent over tcp_conn * and return "false"; * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request * * @return true if request valid and user identity inserted into request */ virtual bool handle_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) = 0; /** * sets a configuration option * * @param name the name of the option to change * @param value the value of the option */ virtual void set_option(const std::string& name, const std::string& value) { BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } /** * adds a resource that requires authentication * * @param resource the resource name or uri-stem that requires authentication */ void add_restrict(const std::string& resource); /** * adds a resource that does NOT require authentication * * @param resource the resource name or uri-stem that does not require authentication */ void add_permit(const std::string& resource); /** * used to add a new user * * @ return false if user with such name already exists */ virtual bool add_user(std::string const &username, std::string const &password) { return m_user_manager->add_user(username, password); } /** * update password for given user * * @return false if user with such a name doesn't exist */ virtual bool update_user(std::string const &username, std::string const &password) { return m_user_manager->update_user(username, password); } /** * used to remove given user * * @return false if no user with such username */ virtual bool remove_user(std::string const &username) { return m_user_manager->remove_user(username); }; /** * Used to locate user object by username */ virtual user_ptr get_user(std::string const &username) { return m_user_manager->get_user(username); } protected: /// data type for a set of resources to be authenticated typedef std::set resource_set_type; /// data type used to map authentication credentials to user objects typedef std::map > user_cache_type; /** * check if given HTTP request requires authentication * * @param http_request_ptr the HTTP request to check */ bool need_authentication(http::request_ptr const& http_request_ptr) const; /** * tries to find a resource in a given collection * * @param resource_set the collection of resource to look in * @param resource the resource to look for * * @return true if the resource was found */ bool find_resource(const resource_set_type& resource_set, const std::string& resource) const; /// sets the logger to be used inline void set_logger(logger log_ptr) { m_logger = log_ptr; } /// primary logging interface used by this class mutable logger m_logger; /// container used to manager user objects user_manager_ptr m_user_manager; /// collection of resources that require authentication resource_set_type m_restrict_list; /// collection of resources that do NOT require authentication resource_set_type m_white_list; /// mutex used to protect access to the resources mutable boost::mutex m_resource_mutex; }; /// data type for a auth pointer typedef boost::shared_ptr auth_ptr; } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/response_reader.hpp0000644000372000001440000001064612215647065023214 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_RESPONSE_READER_HEADER__ #define __PION_HTTP_RESPONSE_READER_HEADER__ #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// response_reader: asynchronously reads and parses HTTP responses /// class response_reader : public http::reader, public boost::enable_shared_from_this { public: /// function called after the HTTP message has been parsed typedef boost::function3 finished_handler_t; // default destructor virtual ~response_reader() {} /** * creates new response_reader objects * * @param tcp_conn TCP connection containing a new message to parse * @param http_request the request we are responding to * @param handler function called after the message has been parsed */ static inline boost::shared_ptr create(tcp::connection_ptr& tcp_conn, const http::request& http_request, finished_handler_t handler) { return boost::shared_ptr (new response_reader(tcp_conn, http_request, handler)); } /// sets a function to be called after HTTP headers have been parsed inline void set_headers_parsed_callback(finished_handler_t& h) { m_parsed_headers = h; } protected: /** * protected constructor restricts creation of objects (use create()) * * @param tcp_conn TCP connection containing a new message to parse * @param http_request the request we are responding to * @param handler function called after the message has been parsed */ response_reader(tcp::connection_ptr& tcp_conn, const http::request& http_request, finished_handler_t handler) : http::reader(false, tcp_conn), m_http_msg(new http::response(http_request)), m_finished(handler) { m_http_msg->set_remote_ip(tcp_conn->get_remote_ip()); set_logger(PION_GET_LOGGER("pion.http.response_reader")); } /// Reads more bytes from the TCP connection virtual void read_bytes(void) { get_connection()->async_read_some(boost::bind(&response_reader::consume_bytes, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } /// Called after we have finished parsing the HTTP message headers virtual void finished_parsing_headers(const boost::system::error_code& ec) { // call the finished headers handler with the HTTP message if (m_parsed_headers) m_parsed_headers(m_http_msg, get_connection(), ec); } /// Called after we have finished reading/parsing the HTTP message virtual void finished_reading(const boost::system::error_code& ec) { // call the finished handler with the finished HTTP message if (m_finished) m_finished(m_http_msg, get_connection(), ec); } /// Returns a reference to the HTTP message being parsed virtual http::message& get_message(void) { return *m_http_msg; } /// The new HTTP message container being created http::response_ptr m_http_msg; /// function called after the HTTP message has been parsed finished_handler_t m_finished; /// function called after the HTTP message headers have been parsed finished_handler_t m_parsed_headers; }; /// data type for a response_reader pointer typedef boost::shared_ptr response_reader_ptr; } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/writer.hpp0000644000372000001440000003346312215647065021352 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_WRITER_HEADER__ #define __PION_HTTP_WRITER_HEADER__ #include #include #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// writer: used to asynchronously send HTTP messages /// class PION_API writer : private boost::noncopyable { protected: /// function called after the HTTP message has been sent typedef boost::function1 finished_handler_t; /// data type for a function that handles write operations typedef boost::function2 write_handler_t; /** * protected constructor: only derived classes may create objects * * @param tcp_conn TCP connection used to send the message * @param handler function called after the request has been sent */ writer(tcp::connection_ptr& tcp_conn, finished_handler_t handler) : m_logger(PION_GET_LOGGER("pion.http.writer")), m_tcp_conn(tcp_conn), m_content_length(0), m_stream_is_empty(true), m_client_supports_chunks(true), m_sending_chunks(false), m_sent_headers(false), m_finished(handler) {} /** * called after the message is sent * * @param write_error error status from the last write operation * @param bytes_written number of bytes sent by the last write operation */ virtual void handle_write(const boost::system::error_code& write_error, std::size_t bytes_written) = 0; /** * initializes a vector of write buffers with the HTTP message information * * @param write_buffers vector of write buffers to initialize */ virtual void prepare_buffers_for_send(http::message::write_buffers_t& write_buffers) = 0; /// returns a function bound to writer::handle_write() virtual write_handler_t bind_to_write_handler(void) = 0; /// called after we have finished sending the HTTP message inline void finished_writing(const boost::system::error_code& ec) { if (m_finished) m_finished(ec); } public: /// default destructor virtual ~writer() {} /// clears out all of the memory buffers used to cache payload content data inline void clear(void) { m_content_buffers.clear(); m_binary_cache.clear(); m_text_cache.clear(); m_content_stream.str(""); m_stream_is_empty = true; m_content_length = 0; } /** * write text (non-binary) payload content * * @param data the data to append to the payload content */ template inline void write(const T& data) { m_content_stream << data; if (m_stream_is_empty) m_stream_is_empty = false; } inline void write(std::ostream& (*iomanip)(std::ostream&)) { m_content_stream << iomanip; if (m_stream_is_empty) m_stream_is_empty = false; } /** * write binary payload content * * @param data points to the binary data to append to the payload content * @param length the length, in bytes, of the binary data */ inline void write(const void *data, size_t length) { if (length != 0) { flushContentStream(); m_content_buffers.push_back(m_binary_cache.add(data, length)); m_content_length += length; } } /** * write text (non-binary) payload content; the data written is not * copied, and therefore must persist until the message has finished * sending * * @param data the data to append to the payload content */ inline void write_no_copy(const std::string& data) { if (! data.empty()) { flushContentStream(); m_content_buffers.push_back(boost::asio::buffer(data)); m_content_length += data.size(); } } /** * write binary payload content; the data written is not copied, and * therefore must persist until the message has finished sending * * @param data points to the binary data to append to the payload content * @param length the length, in bytes, of the binary data */ inline void write_no_copy(void *data, size_t length) { if (length > 0) { flushContentStream(); m_content_buffers.push_back(boost::asio::buffer(data, length)); m_content_length += length; } } /** * Sends all data buffered as a single HTTP message (without chunking). * Following a call to this function, it is not thread safe to use your * reference to the writer object. */ inline void send(void) { send_more_data(false, bind_to_write_handler()); } /** * Sends all data buffered as a single HTTP message (without chunking). * Following a call to this function, it is not thread safe to use your * reference to the writer object until the send_handler has been called. * * @param send_handler function that is called after the message has been * sent to the client. Your callback function must end * the connection by calling connection::finish(). */ template inline void send(SendHandler send_handler) { send_more_data(false, send_handler); } /** * Sends all data buffered as a single HTTP chunk. Following a call to this * function, it is not thread safe to use your reference to the writer * object until the send_handler has been called. * * @param send_handler function that is called after the chunk has been sent * to the client. Your callback function must end by * calling one of send_chunk() or send_final_chunk(). Also, * be sure to clear() the writer before writing data to it. */ template inline void send_chunk(SendHandler send_handler) { m_sending_chunks = true; if (!supports_chunked_messages()) { // sending data in chunks, but the client does not support chunking; // make sure that the connection will be closed when we are all done m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); } // send more data send_more_data(false, send_handler); } /** * Sends all data buffered (if any) and also sends the final HTTP chunk. * This function (either overloaded version) must be called following any * calls to send_chunk(). * Following a call to this function, it is not thread safe to use your * reference to the writer object until the send_handler has been called. * * @param send_handler function that is called after the message has been * sent to the client. Your callback function must end * the connection by calling connection::finish(). */ template inline void send_final_chunk(SendHandler send_handler) { m_sending_chunks = true; send_more_data(true, send_handler); } /** * Sends all data buffered (if any) and also sends the final HTTP chunk. * This function (either overloaded version) must be called following any * calls to send_chunk(). * Following a call to this function, it is not thread safe to use your * reference to the writer object. */ inline void send_final_chunk(void) { m_sending_chunks = true; send_more_data(true, bind_to_write_handler()); } /// returns a shared pointer to the TCP connection inline tcp::connection_ptr& get_connection(void) { return m_tcp_conn; } /// returns the length of the payload content (in bytes) inline size_t get_content_length(void) const { return m_content_length; } /// sets whether or not the client supports chunked messages inline void supports_chunked_messages(bool b) { m_client_supports_chunks = b; } /// returns true if the client supports chunked messages inline bool supports_chunked_messages() const { return m_client_supports_chunks; } /// returns true if we are sending a chunked message to the client inline bool sending_chunked_message() const { return m_sending_chunks; } /// sets the logger to be used inline void set_logger(logger log_ptr) { m_logger = log_ptr; } /// returns the logger currently in use inline logger get_logger(void) { return m_logger; } private: /** * sends all of the buffered data to the client * * @param send_final_chunk true if the final 0-byte chunk should be included * @param send_handler function called after the data has been sent */ template inline void send_more_data(const bool send_final_chunk, SendHandler send_handler) { // make sure that we did not lose the TCP connection if (! m_tcp_conn->is_open()) finished_writing(boost::asio::error::connection_reset); // make sure that the content-length is up-to-date flushContentStream(); // prepare the write buffers to be sent http::message::write_buffers_t write_buffers; prepare_write_buffers(write_buffers, send_final_chunk); // send data in the write buffers m_tcp_conn->async_write(write_buffers, send_handler); } /** * prepares write_buffers for next send operation * * @param write_buffers buffers to which data will be appended * @param send_final_chunk true if the final 0-byte chunk should be included */ void prepare_write_buffers(http::message::write_buffers_t &write_buffers, const bool send_final_chunk); /// flushes any text data in the content stream after caching it in the text_cache_t inline void flushContentStream(void) { if (! m_stream_is_empty) { std::string string_to_add(m_content_stream.str()); if (! string_to_add.empty()) { m_content_stream.str(""); m_content_length += string_to_add.size(); m_text_cache.push_back(string_to_add); m_content_buffers.push_back(boost::asio::buffer(m_text_cache.back())); } m_stream_is_empty = true; } } /// used to cache binary data included within the payload content class binary_cache_t : public std::vector > { public: ~binary_cache_t() { for (iterator i=begin(); i!=end(); ++i) { delete[] i->first; } } inline boost::asio::const_buffer add(const void *ptr, const size_t size) { char *data_ptr = new char[size]; memcpy(data_ptr, ptr, size); push_back( std::make_pair(data_ptr, size) ); return boost::asio::buffer(data_ptr, size); } }; /// used to cache text (non-binary) data included within the payload content typedef std::list text_cache_t; /// primary logging interface used by this class logger m_logger; /// The HTTP connection that we are writing the message to tcp::connection_ptr m_tcp_conn; /// I/O write buffers that wrap the payload content to be written http::message::write_buffers_t m_content_buffers; /// caches binary data included within the payload content binary_cache_t m_binary_cache; /// caches text (non-binary) data included within the payload content text_cache_t m_text_cache; /// incrementally creates strings of text data for the text_cache_t std::ostringstream m_content_stream; /// The length (in bytes) of the response content to be sent (Content-Length) size_t m_content_length; /// true if the content_stream is empty (avoids unnecessary string copies) bool m_stream_is_empty; /// true if the HTTP client supports chunked transfer encodings bool m_client_supports_chunks; /// true if data is being sent to the client using multiple chunks bool m_sending_chunks; /// true if the HTTP message headers have already been sent bool m_sent_headers; /// function called after the HTTP message has been sent finished_handler_t m_finished; }; /// data type for a writer pointer typedef boost::shared_ptr writer_ptr; /// override operator<< for convenience template inline const writer_ptr& operator<<(const writer_ptr& writer, const T& data) { writer->write(data); return writer; } inline const writer_ptr& operator<<(const writer_ptr& writer, std::ostream& (*iomanip)(std::ostream&)) { writer->write(iomanip); return writer; } } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/request_writer.hpp0000644000372000001440000001454512215647065023122 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_REQUEST_WRITER_HEADER__ #define __PION_HTTP_REQUEST_WRITER_HEADER__ #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// request_writer: used to asynchronously send HTTP requests /// class request_writer : public http::writer, public boost::enable_shared_from_this { public: /// default destructor virtual ~request_writer() {} /** * creates new request_writer objects * * @param tcp_conn TCP connection used to send the request * @param handler function called after the request has been sent * * @return boost::shared_ptr shared pointer to * the new writer object that was created */ static inline boost::shared_ptr create(tcp::connection_ptr& tcp_conn, finished_handler_t handler = finished_handler_t()) { return boost::shared_ptr(new request_writer(tcp_conn, handler)); } /** * creates new request_writer objects * * @param tcp_conn TCP connection used to send the request * @param http_request_ptr pointer to the request that will be sent * @param handler function called after the request has been sent * * @return boost::shared_ptr shared pointer to * the new writer object that was created */ static inline boost::shared_ptr create(tcp::connection_ptr& tcp_conn, http::request_ptr& http_request_ptr, finished_handler_t handler = finished_handler_t()) { return boost::shared_ptr(new request_writer(tcp_conn, http_request_ptr, handler)); } /// returns a non-const reference to the request that will be sent inline http::request& get_request(void) { return *m_http_request; } protected: /** * protected constructor restricts creation of objects (use create()) * * @param tcp_conn TCP connection used to send the request * @param handler function called after the request has been sent */ request_writer(tcp::connection_ptr& tcp_conn, finished_handler_t handler) : http::writer(tcp_conn, handler), m_http_request(new http::request) { set_logger(PION_GET_LOGGER("pion.http.request_writer")); } /** * protected constructor restricts creation of objects (use create()) * * @param tcp_conn TCP connection used to send the request * @param http_request_ptr pointer to the request that will be sent * @param handler function called after the request has been sent */ request_writer(tcp::connection_ptr& tcp_conn, http::request_ptr& http_request_ptr, finished_handler_t handler) : http::writer(tcp_conn, handler), m_http_request(http_request_ptr) { set_logger(PION_GET_LOGGER("pion.http.request_writer")); // check if we should initialize the payload content using // the request's content buffer if (m_http_request->get_content_length() > 0 && m_http_request->get_content() != NULL && m_http_request->get_content()[0] != '\0') { write_no_copy(m_http_request->get_content(), m_http_request->get_content_length()); } } /** * initializes a vector of write buffers with the HTTP message information * * @param write_buffers vector of write buffers to initialize */ virtual void prepare_buffers_for_send(http::message::write_buffers_t& write_buffers) { if (get_content_length() > 0) m_http_request->set_content_length(get_content_length()); m_http_request->prepare_buffers_for_send(write_buffers, get_connection()->get_keep_alive(), sending_chunked_message()); } /// returns a function bound to http::writer::handle_write() virtual write_handler_t bind_to_write_handler(void) { return boost::bind(&request_writer::handle_write, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred); } /** * called after the request is sent * * @param write_error error status from the last write operation * @param bytes_written number of bytes sent by the last write operation */ virtual void handle_write(const boost::system::error_code& write_error, std::size_t bytes_written) { logger log_ptr(get_logger()); if (! write_error) { // request sent OK if (sending_chunked_message()) { PION_LOG_DEBUG(log_ptr, "Sent HTTP request chunk of " << bytes_written << " bytes"); clear(); } else { PION_LOG_DEBUG(log_ptr, "Sent HTTP request of " << bytes_written << " bytes"); } } finished_writing(write_error); } private: /// the request that will be sent http::request_ptr m_http_request; /// the initial HTTP request header line std::string m_request_line; }; /// data type for a request_writer pointer typedef boost::shared_ptr request_writer_ptr; /// override operator<< for convenience template const request_writer_ptr& operator<<(const request_writer_ptr& writer, const T& data) { writer->write(data); return writer; } } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/basic_auth.hpp0000644000372000001440000000654312215647065022137 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_BASIC_AUTH_HEADER__ #define __PION_HTTP_BASIC_AUTH_HEADER__ #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// basic_auth: a base class for handling HTTP Authentication and session management /// in accordance with RFC 2617 http://tools.ietf.org/html/rfc2617 /// class PION_API basic_auth : public http::auth { public: /// default constructor basic_auth(user_manager_ptr userManager, const std::string& realm="PION"); /// virtual destructor virtual ~basic_auth() {} /** * attempts to validate authentication of a new HTTP request. * If request valid, pointer to user identity object (if any) will be preserved in * the request and return "true". * If request not authenticated, appropriate response is sent over tcp_conn * and return "false"; * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request * * @return true if request valid and user identity inserted into request */ virtual bool handle_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); /** * sets a configuration option * Valid options: * - "domain" - name of authentication domain * * @param name the name of the option to change * @param value the value of the option */ virtual void set_option(const std::string& name, const std::string& value); protected: /** * used to send responses when access to resource is not authorized * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request */ void handle_unauthorized(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); /** * extracts base64 user credentials from authorization string * * @param authorization value of the HEADER_AUTHORIZATION */ static bool parse_authorization(std::string const &authorization, std::string &credentials); /** * parse base64 credentials and extract username/password */ static bool parse_credentials(std::string const &credentials, std::string &username, std::string &password); private: /// number of seconds after which entires in the user cache will be expired static const unsigned int CACHE_EXPIRATION; /// authentication realm ( "PION" by default) std::string m_realm; /// time of the last cache clean up boost::posix_time::ptime m_cache_cleanup_time; /// cache of users that are currently active user_cache_type m_user_cache; /// mutex used to protect access to the user cache mutable boost::mutex m_cache_mutex; }; } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/http/request.hpp0000644000372000001440000001672312215647065021526 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_REQUEST_HEADER__ #define __PION_HTTP_REQUEST_HEADER__ #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// request: container for HTTP request information /// class request : public http::message { public: /** * constructs a new request object * * @param resource the HTTP resource to request */ request(const std::string& resource) : m_method(REQUEST_METHOD_GET), m_resource(resource) {} /// constructs a new request object (default constructor) request(void) : m_method(REQUEST_METHOD_GET) {} /// virtual destructor virtual ~request() {} /// clears all request data virtual void clear(void) { http::message::clear(); m_method.erase(); m_resource.erase(); m_original_resource.erase(); m_query_string.erase(); m_query_params.clear(); m_user_record.reset(); } /// the content length of the message can never be implied for requests virtual bool is_content_length_implied(void) const { return false; } /// returns the request method (i.e. GET, POST, PUT) inline const std::string& get_method(void) const { return m_method; } /// returns the resource uri-stem to be delivered (possibly the result of a redirect) inline const std::string& get_resource(void) const { return m_resource; } /// returns the resource uri-stem originally requested inline const std::string& get_original_resource(void) const { return m_original_resource; } /// returns the uri-query or query string requested inline const std::string& get_query_string(void) const { return m_query_string; } /// returns a value for the query key if any are defined; otherwise, an empty string inline const std::string& get_query(const std::string& key) const { return get_value(m_query_params, key); } /// returns the query parameters inline ihash_multimap& get_queries(void) { return m_query_params; } /// returns true if at least one value for the query key is defined inline bool has_query(const std::string& key) const { return(m_query_params.find(key) != m_query_params.end()); } /// sets the HTTP request method (i.e. GET, POST, PUT) inline void set_method(const std::string& str) { m_method = str; clear_first_line(); } /// sets the resource or uri-stem originally requested inline void set_resource(const std::string& str) { m_resource = m_original_resource = str; clear_first_line(); } /// changes the resource or uri-stem to be delivered (called as the result of a redirect) inline void change_resource(const std::string& str) { m_resource = str; } /// sets the uri-query or query string requested inline void set_query_string(const std::string& str) { m_query_string = str; clear_first_line(); } /// adds a value for the query key inline void add_query(const std::string& key, const std::string& value) { m_query_params.insert(std::make_pair(key, value)); } /// changes the value of a query key inline void change_query(const std::string& key, const std::string& value) { change_value(m_query_params, key, value); } /// removes all values for a query key inline void delete_query(const std::string& key) { delete_value(m_query_params, key); } /// use the query parameters to build a query string for the request inline void use_query_params_for_query_string(void) { set_query_string(make_query_string(m_query_params)); } /// use the query parameters to build POST content for the request inline void use_query_params_for_post_content(void) { std::string post_content(make_query_string(m_query_params)); set_content_length(post_content.size()); char *ptr = create_content_buffer(); // null-terminates buffer if (! post_content.empty()) memcpy(ptr, post_content.c_str(), post_content.size()); set_method(REQUEST_METHOD_POST); set_content_type(CONTENT_TYPE_URLENCODED); } /// add content (for POST) from string inline void set_content(const std::string &value) { set_content_length(value.size()); char *ptr = create_content_buffer(); if (! value.empty()) memcpy(ptr, value.c_str(), value.size()); } /// add content (for POST) from buffer of given size /// does nothing if the buffer is invalid or the buffer size is zero inline void set_content(const char* value, const boost::uint64_t& size) { if ( NULL == value || 0 == size ) return; set_content_length(size); char *ptr = create_content_buffer(); memcpy(ptr, value, size); } /// sets the user record for HTTP request after authentication inline void set_user(user_ptr user) { m_user_record = user; } /// get the user record for HTTP request after authentication inline user_ptr get_user() const { return m_user_record; } protected: /// updates the string containing the first line for the HTTP message virtual void update_first_line(void) const { // start out with the request method m_first_line = m_method; m_first_line += ' '; // append the resource requested m_first_line += m_resource; if (! m_query_string.empty()) { // append query string if not empty m_first_line += '?'; m_first_line += m_query_string; } m_first_line += ' '; // append HTTP version m_first_line += get_version_string(); } /// appends HTTP headers for any cookies defined by the http::message virtual void append_cookie_headers(void) { for (ihash_multimap::const_iterator i = get_cookies().begin(); i != get_cookies().end(); ++i) { std::string cookie_header; cookie_header = i->first; cookie_header += COOKIE_NAME_VALUE_DELIMITER; cookie_header += i->second; add_header(HEADER_COOKIE, cookie_header); } } private: /// request method (GET, POST, PUT, etc.) std::string m_method; /// name of the resource or uri-stem to be delivered std::string m_resource; /// name of the resource or uri-stem originally requested std::string m_original_resource; /// query string portion of the URI std::string m_query_string; /// HTTP query parameters parsed from the request line and post content ihash_multimap m_query_params; /// pointer to user record if this request had been authenticated user_ptr m_user_record; }; /// data type for a HTTP request pointer typedef boost::shared_ptr request_ptr; } // end namespace http } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/scheduler.hpp0000644000372000001440000002724412215647065021035 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_SCHEDULER_HEADER__ #define __PION_SCHEDULER_HEADER__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion /// /// scheduler: combines Boost.ASIO with a managed thread pool for scheduling /// class PION_API scheduler : private boost::noncopyable { public: /// constructs a new scheduler scheduler(void) : m_logger(PION_GET_LOGGER("pion.scheduler")), m_num_threads(DEFAULT_NUM_THREADS), m_active_users(0), m_is_running(false) {} /// virtual destructor virtual ~scheduler() {} /// Starts the thread scheduler (this is called automatically when necessary) virtual void startup(void) {} /// Stops the thread scheduler (this is called automatically when the program exits) virtual void shutdown(void); /// the calling thread will sleep until the scheduler has stopped void join(void); /// registers an active user with the thread scheduler. Shutdown of the /// scheduler is deferred until there are no more active users. This /// ensures that any work queued will not reference destructed objects void add_active_user(void); /// unregisters an active user with the thread scheduler void remove_active_user(void); /// returns true if the scheduler is running inline bool is_running(void) const { return m_is_running; } /// sets the number of threads to be used (these are shared by all servers) inline void set_num_threads(const boost::uint32_t n) { m_num_threads = n; } /// returns the number of threads currently in use inline boost::uint32_t get_num_threads(void) const { return m_num_threads; } /// sets the logger to be used inline void set_logger(logger log_ptr) { m_logger = log_ptr; } /// returns the logger currently in use inline logger get_logger(void) { return m_logger; } /// returns an async I/O service used to schedule work virtual boost::asio::io_service& get_io_service(void) = 0; /** * schedules work to be performed by one of the pooled threads * * @param work_func work function to be executed */ virtual void post(boost::function0 work_func) { get_io_service().post(work_func); } /** * thread function used to keep the io_service running * * @param my_service IO service used to re-schedule keep_running() * @param my_timer deadline timer used to keep the IO service active while running */ void keep_running(boost::asio::io_service& my_service, boost::asio::deadline_timer& my_timer); /** * puts the current thread to sleep for a specific period of time * * @param sleep_sec number of entire seconds to sleep for * @param sleep_nsec number of nanoseconds to sleep for (10^-9 in 1 second) */ inline static void sleep(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec) { boost::system_time wakeup_time(get_wakeup_time(sleep_sec, sleep_nsec)); boost::thread::sleep(wakeup_time); } /** * puts the current thread to sleep for a specific period of time, or until * a wakeup condition is signaled * * @param wakeup_condition if signaled, the condition will wakeup the thread early * @param wakeup_lock scoped lock protecting the wakeup condition * @param sleep_sec number of entire seconds to sleep for * @param sleep_nsec number of nanoseconds to sleep for (10^-9 in 1 second) */ template inline static void sleep(ConditionType& wakeup_condition, LockType& wakeup_lock, boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec) { boost::system_time wakeup_time(get_wakeup_time(sleep_sec, sleep_nsec)); wakeup_condition.timed_wait(wakeup_lock, wakeup_time); } /// processes work passed to the asio service & handles uncaught exceptions void process_service_work(boost::asio::io_service& service); protected: /** * calculates a wakeup time in boost::system_time format * * @param sleep_sec number of seconds to sleep for * @param sleep_nsec number of nanoseconds to sleep for * * @return boost::system_time time to wake up from sleep */ static boost::system_time get_wakeup_time(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec); /// stops all services used to schedule work virtual void stop_services(void) {} /// stops all threads used to perform work virtual void stop_threads(void) {} /// finishes all services used to schedule work virtual void finish_services(void) {} /// finishes all threads used to perform work virtual void finish_threads(void) {} /// default number of worker threads in the thread pool static const boost::uint32_t DEFAULT_NUM_THREADS; /// number of nanoseconds in one full second (10 ^ 9) static const boost::uint32_t NSEC_IN_SECOND; /// number of microseconds in one full second (10 ^ 6) static const boost::uint32_t MICROSEC_IN_SECOND; /// number of seconds a timer should wait for to keep the IO services running static const boost::uint32_t KEEP_RUNNING_TIMER_SECONDS; /// mutex to make class thread-safe boost::mutex m_mutex; /// primary logging interface used by this class logger m_logger; /// condition triggered when there are no more active users boost::condition m_no_more_active_users; /// condition triggered when the scheduler has stopped boost::condition m_scheduler_has_stopped; /// total number of worker threads in the pool boost::uint32_t m_num_threads; /// the scheduler will not shutdown until there are no more active users boost::uint32_t m_active_users; /// true if the thread scheduler is running bool m_is_running; }; /// /// multi_thread_scheduler: uses a pool of threads to perform work /// class PION_API multi_thread_scheduler : public scheduler { public: /// constructs a new single_service_scheduler multi_thread_scheduler(void) {} /// virtual destructor virtual ~multi_thread_scheduler() {} protected: /// stops all threads used to perform work virtual void stop_threads(void) { if (! m_thread_pool.empty()) { PION_LOG_DEBUG(m_logger, "Waiting for threads to shutdown"); // wait until all threads in the pool have stopped boost::thread current_thread; for (ThreadPool::iterator i = m_thread_pool.begin(); i != m_thread_pool.end(); ++i) { // make sure we do not call join() for the current thread, // since this may yield "undefined behavior" if (**i != current_thread) (*i)->join(); } } } /// finishes all threads used to perform work virtual void finish_threads(void) { m_thread_pool.clear(); } /// typedef for a pool of worker threads typedef std::vector > ThreadPool; /// pool of threads used to perform work ThreadPool m_thread_pool; }; /// /// single_service_scheduler: uses a single IO service to schedule work /// class PION_API single_service_scheduler : public multi_thread_scheduler { public: /// constructs a new single_service_scheduler single_service_scheduler(void) : m_service(), m_timer(m_service) {} /// virtual destructor virtual ~single_service_scheduler() { shutdown(); } /// returns an async I/O service used to schedule work virtual boost::asio::io_service& get_io_service(void) { return m_service; } /// Starts the thread scheduler (this is called automatically when necessary) virtual void startup(void); protected: /// stops all services used to schedule work virtual void stop_services(void) { m_service.stop(); } /// finishes all services used to schedule work virtual void finish_services(void) { m_service.reset(); } /// service used to manage async I/O events boost::asio::io_service m_service; /// timer used to periodically check for shutdown boost::asio::deadline_timer m_timer; }; /// /// one_to_one_scheduler: uses a single IO service for each thread /// class PION_API one_to_one_scheduler : public multi_thread_scheduler { public: /// constructs a new one_to_one_scheduler one_to_one_scheduler(void) : m_service_pool(), m_next_service(0) {} /// virtual destructor virtual ~one_to_one_scheduler() { shutdown(); } /// returns an async I/O service used to schedule work virtual boost::asio::io_service& get_io_service(void) { boost::mutex::scoped_lock scheduler_lock(m_mutex); while (m_service_pool.size() < m_num_threads) { boost::shared_ptr service_ptr(new service_pair_type()); m_service_pool.push_back(service_ptr); } if (++m_next_service >= m_num_threads) m_next_service = 0; BOOST_ASSERT(m_next_service < m_num_threads); return m_service_pool[m_next_service]->first; } /** * returns an async I/O service used to schedule work (provides direct * access to avoid locking when possible) * * @param n integer number representing the service object */ virtual boost::asio::io_service& get_io_service(boost::uint32_t n) { BOOST_ASSERT(n < m_num_threads); BOOST_ASSERT(n < m_service_pool.size()); return m_service_pool[n]->first; } /// Starts the thread scheduler (this is called automatically when necessary) virtual void startup(void); protected: /// stops all services used to schedule work virtual void stop_services(void) { for (service_pool_type::iterator i = m_service_pool.begin(); i != m_service_pool.end(); ++i) { (*i)->first.stop(); } } /// finishes all services used to schedule work virtual void finish_services(void) { m_service_pool.clear(); } /// typedef for a pair object where first is an IO service and second is a deadline timer struct service_pair_type { service_pair_type(void) : first(), second(first) {} boost::asio::io_service first; boost::asio::deadline_timer second; }; /// typedef for a pool of IO services typedef std::vector > service_pool_type; /// pool of IO services used to schedule work service_pool_type m_service_pool; /// the next service to use for scheduling work boost::uint32_t m_next_service; }; } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/spdy/0000755000372000001440000000000012215647144017312 5ustar robertouserspion-5.0.4+dfsg.orig/include/pion/spdy/types.hpp0000644000372000001440000000652412215647065021200 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_SPDYTYPES_HEADER__ #define __PION_SPDYTYPES_HEADER__ #include #include namespace pion { // begin namespace pion namespace spdy { // begin namespace spdy #define MIN_SPDY_VERSION 3 // The types of SPDY frames #define SPDY_DATA 0 #define SPDY_SYN_STREAM 1 #define SPDY_SYN_REPLY 2 #define SPDY_RST_STREAM 3 #define SPDY_SETTINGS 4 #define SPDY_PING 6 #define SPDY_GOAWAY 7 #define SPDY_HEADERS 8 #define SPDY_WINDOW_UPDATE 9 #define SPDY_CREDENTIAL 10 #define SPDY_INVALID 11 #define SPDY_FLAG_FIN 0x01 #define SPDY_FLAG_UNIDIRECTIONAL 0x02 #define SIZE_OF_BYTE 8 #define NON_SPDY 0 #define HTTP_REQUEST 1 #define HTTP_RESPONSE 2 #define HTTP_DATA 3 #define SPDY_CONTROL 4 /// SPDY value string data type typedef struct _value_string { boost::uint32_t value; std::string str; } value_string; /// Int-String value pairs of the status code for the RST Stream static const value_string rst_stream_status_names[] = { { 1, "PROTOCOL_ERROR" }, { 2, "INVALID_STREAM" }, { 3, "REFUSED_STREAM" }, { 4, "UNSUPPORTED_VERSION" }, { 5, "CANCEL" }, { 6, "INTERNAL_ERROR" }, { 7, "FLOW_CONTROL_ERROR" }, { 8, "STREAM_IN_USE" }, { 9, "STREAM_ALREADY_CLOSED" }, { 10, "INVALID_CREDENTIALS" }, { 11, "FRAME_TOO_LARGE" }, { 12, "INVALID" }, }; /// This structure will be tied to each SPDY frame typedef struct spdy_control_frame_info{ bool control_bit; boost::uint16_t version; boost::uint16_t type; boost::uint8_t flags; boost::uint32_t length; // Actually only 24 bits. } spdy_control_frame_info; /// This structure will be tied to each SPDY header frame. /// Only applies to frames containing headers: SYN_STREAM, SYN_REPLY, HEADERS /// Note that there may be multiple SPDY frames in one packet. typedef struct _spdy_header_info{ boost::uint32_t stream_id; boost::uint8_t *header_block; boost::uint8_t header_block_len; boost::uint16_t frame_type; } spdy_header_info; /// This structure contains the HTTP Protocol information typedef struct _http_protocol_info_t{ std::map http_headers; boost::uint32_t http_type; boost::uint32_t stream_id; boost::uint32_t data_offset; boost::uint32_t data_size; bool last_chunk; _http_protocol_info_t() : http_type(NON_SPDY), stream_id(0), data_offset(0), data_size(0), last_chunk(false){} } http_protocol_info; enum spdy_frame_type{ spdy_data_frame = 1, spdy_control_frame = 2, spdy_invalid_frame = 3 }; } // end namespace spdy } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/spdy/Makefile.am0000644000372000001440000000033612215647065021352 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- pion_spdy_includedir = $(includedir)/pion/spdy pion_spdy_include_HEADERS = \ decompressor.hpp parser.hpp types.hpp pion-5.0.4+dfsg.orig/include/pion/spdy/parser.hpp0000644000372000001440000002032612215647065021324 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_SPDYPARSER_HEADER__ #define __PION_SPDYPARSER_HEADER__ #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace spdy { // begin namespace spdy /// /// parser : parsers and reads the SPDY frames /// class PION_API parser { public: /// class-specific error code values enum error_value_t { ERROR_INVALID_SPDY_FRAME = 1, ERROR_INVALID_SPDY_VERSION, ERROR_DECOMPRESSION, ERROR_PROTOCOL_ERROR, ERROR_INTERNAL_SPDY_ERROR, ERROR_MISSING_HEADER_DATA }; /// class-specific error category class error_category_t : public boost::system::error_category { public: const char *name() const { return "SPDYParser"; } std::string message(int ev) const { switch (ev) { case ERROR_INVALID_SPDY_FRAME: return "invalid spdy frame"; case ERROR_INVALID_SPDY_VERSION: return "invalid spdy version"; case ERROR_DECOMPRESSION: return "error in decompression"; case ERROR_MISSING_HEADER_DATA: return "missing header data"; } return "SPDYParser error"; } }; /// constructs a new parser object (default constructor) parser(); /// destructor ~parser() {} /** * parse a SPDY packet * * @return boost::tribool result of parsing: * false = SPDY frame has an error, * true = finished parsing SPDY frame, * indeterminate = not yet finished parsing SPDY frame */ boost::tribool parse(http_protocol_info& http_headers, boost::system::error_code& ec, decompressor_ptr& decompressor, const char *packet_ptr, boost::uint32_t& length_packet, boost::uint32_t current_stream_count); /// Get the pointer to the first character to the spdy data contect const char * get_spdy_data_content( ) { return m_last_data_chunk_ptr; } /// Get the pointer to the first character to the spdy data contect const char * get_spdy_read_pointer( ) { return m_read_ptr; } /** * checks if the frame is spdy frame or not * * @return true if it is a frame else returns false */ static spdy_frame_type get_spdy_frame_type(const char *ptr); /** * checks if the frame is spdy control frame or not * * @return true if it is a control frame else returns false */ static bool is_spdy_control_frame(const char *ptr); /** * get the stream id for the spdy control frame * * @return true if it is a control frame else returns false */ static boost::uint32_t get_control_frame_stream_id(const char *ptr); protected: /// resets the read pointer inline void set_read_ptr(const char *ptr) { m_read_ptr = m_current_data_chunk_ptr = ptr; } /// populates the frame for every spdy packet /// Returns false if there was an error else returns true bool populate_frame(boost::system::error_code& ec, spdy_control_frame_info& frame, boost::uint32_t& length_packet, boost::uint32_t& stream_id, http_protocol_info& http_headers); /// creates the unique parser error_category_t static void create_error_category(void); /// returns an instance of parser::error_category_t static inline error_category_t& get_error_category(void) { boost::call_once(parser::create_error_category, m_instance_flag); return *m_error_category_ptr; } /** * sets an error code * * @param ec error code variable to define * @param ev error value to raise */ static inline void set_error(boost::system::error_code& ec, error_value_t ev) { ec = boost::system::error_code(static_cast(ev), get_error_category()); } /** * parses an the header payload for SPDY * */ void parse_header_payload(boost::system::error_code& ec, decompressor_ptr& decompressor, const spdy_control_frame_info& frame, http_protocol_info& http_headers, boost::uint32_t current_stream_count); /** * parses the data for SPDY * */ void parse_spdy_data(boost::system::error_code& ec, const spdy_control_frame_info& frame, boost::uint32_t stream_id, http_protocol_info& http_info); /** * parses an the Settings Frame for SPDY * */ void parse_spdy_settings_frame(boost::system::error_code& ec, const spdy_control_frame_info& frame); /** * parses an the RST stream for SPDY * */ void parse_spdy_rst_stream(boost::system::error_code& ec, const spdy_control_frame_info& frame); /** * parses an the Ping Frame for SPDY * */ void parse_spdy_ping_frame(boost::system::error_code& ec, const spdy_control_frame_info& frame); /** * parses an the GoAway Frame for SPDY * */ void parse_spdy_goaway_frame(boost::system::error_code& ec, const spdy_control_frame_info& frame); /** * parses an the WindowUpdate Frame for SPDY * */ void parse_spdy_window_update_frame(boost::system::error_code& ec, const spdy_control_frame_info& frame); /** * parse a SPDY frame (protected implementation) * * @return boost::tribool result of parsing: * false = SPDY frame has an error, * true = finished parsing SPDY frame, * indeterminate = not yet finished parsing SPDY frame */ boost::tribool parse_spdy_frame(boost::system::error_code& ec, decompressor_ptr& decompressor, http_protocol_info& http_headers, boost::uint32_t& length_packet, boost::uint32_t current_stream_count); private: /// generic read pointer which parses the spdy data const char * m_read_ptr; /// points to the first character of the uncompressed http headers const char * m_uncompressed_ptr; /// SPDY has interleaved frames and this will point to start of the current chunk data const char * m_current_data_chunk_ptr; /// SPDY has interleaved frames and this will point to start of the the last chunk data const char * m_last_data_chunk_ptr; /// primary logging interface used by this class mutable logger m_logger; /// points to a single and unique instance of the HTTPParser ErrorCategory static error_category_t * m_error_category_ptr; /// used to ensure thread safety of the HTTPParser ErrorCategory static boost::once_flag m_instance_flag; }; /// data type for a spdy reader pointer typedef boost::shared_ptr parser_ptr; } // end namespace spdy } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/spdy/Makefile.in0000644000372000001440000003664012215647101021361 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include/pion/spdy DIST_COMMON = $(pion_spdy_include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pion_spdy_includedir)" HEADERS = $(pion_spdy_include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pion_spdy_includedir = $(includedir)/pion/spdy pion_spdy_include_HEADERS = \ decompressor.hpp parser.hpp types.hpp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/pion/spdy/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/pion/spdy/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pion_spdy_includeHEADERS: $(pion_spdy_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(pion_spdy_includedir)" || $(MKDIR_P) "$(DESTDIR)$(pion_spdy_includedir)" @list='$(pion_spdy_include_HEADERS)'; test -n "$(pion_spdy_includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pion_spdy_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pion_spdy_includedir)" || exit $$?; \ done uninstall-pion_spdy_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pion_spdy_include_HEADERS)'; test -n "$(pion_spdy_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pion_spdy_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pion_spdy_includedir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pion_spdy_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pion_spdy_includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pion_spdy_includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pion_spdy_includeHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-pion_spdy_includeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.4+dfsg.orig/include/pion/spdy/decompressor.hpp0000644000372000001440000000502612215647065022535 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_SPDYDECOMPRESSOR_HEADER__ #define __PION_SPDYDECOMPRESSOR_HEADER__ #include #include #include #include #include namespace pion { // begin namespace pion namespace spdy { // begin namespace spdy /// /// SPDYDecompressor : Decompresses SPDY frames /// class PION_API decompressor { public: /// data size constants enum data_size_t { /// maximum size of an uncompressed spdy header MAX_UNCOMPRESSED_DATA_BUF_SIZE = 16384 }; /// constructs a new decompressor object (default constructor) decompressor(); /// destructor ~decompressor(); /** * decompresses the http content * * @return the uncompressed string, or null on failure */ char* decompress(const char *compressed_data_ptr, boost::uint32_t stream_id, const spdy_control_frame_info& frame, boost::uint32_t header_block_length); protected: /** * decompresses the spdy header * * @return true if successful */ bool spdy_decompress_header(const char *compressed_data_ptr, z_streamp decomp, boost::uint32_t length, boost::uint32_t& uncomp_length); private: /// zlib stream for decompression request packets z_streamp m_request_zstream; /// zlib stream for decompression response packets z_streamp m_response_zstream; /// dictionary identifier boost::uint32_t m_dictionary_id; /// Used for decompressing spdy headers boost::uint8_t m_uncompressed_header[MAX_UNCOMPRESSED_DATA_BUF_SIZE]; // SPDY Dictionary used for zlib decompression static const char SPDY_ZLIB_DICTIONARY[]; }; /// data type for a spdy reader pointer typedef boost::shared_ptr decompressor_ptr; } // end namespace spdy } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/plugin.hpp0000644000372000001440000003660712215647065020360 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PLUGIN_HEADER__ #define __PION_PLUGIN_HEADER__ #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion /// /// plugin: base class for plug-in management /// class PION_API plugin { public: /** * searches directories for a valid plug-in file * * @param path_to_file the path to the plug-in file, if found * @param the name name of the plug-in to search for * @return true if the plug-in file was found */ static inline bool find_plugin_file(std::string& path_to_file, const std::string& name) { return find_file(path_to_file, name, PION_PLUGIN_EXTENSION); } /** * searches directories for a valid plug-in configuration file * * @param path_to_file if found, is set to the complete path to the file * @param name the name of the configuration file to search for * @return true if the configuration file was found */ static inline bool find_config_file(std::string& path_to_file, const std::string& name) { return find_file(path_to_file, name, PION_CONFIG_EXTENSION); } /** * adds an entry point for a plugin that is statically linked * NOTE: USE PION_DECLARE_PLUGIN() macro instead!!! * * @param plugin_name the name of the plugin to add * @param create_func - pointer to the function to be used in to create plugin object * @param destroy_func - pointer to the function to be used to release plugin object */ static void add_static_entry_point(const std::string& plugin_name, void *create_func, void *destroy_func); /** * updates path for cygwin oddities, if necessary * * @param final_path path object for the file, will be modified if necessary * @param start_path original path to the file. if final_path is not valid, * this will be appended to PION_CYGWIN_DIRECTORY to attempt * attempt correction of final_path for cygwin */ static void check_cygwin_path(boost::filesystem::path& final_path, const std::string& path_string); /// appends a directory to the plug-in search path static void add_plugin_directory(const std::string& dir); /// clears all directories from the plug-in search path static void reset_plugin_directories(void); // default destructor virtual ~plugin() { release_data(); } /// returns true if a shared library is loaded/open inline bool is_open(void) const { return (m_plugin_data != NULL); } /// returns the name of the plugin that is currently open inline std::string get_plugin_name(void) const { return (is_open() ? m_plugin_data->m_plugin_name : std::string()); } /// returns a list of all Plugins found in all Plugin directories static void get_all_plugin_names(std::vector& plugin_names); /** * opens plug-in library within a shared object file. If the library is * already being used by another plugin object, then the existing * code will be re-used and the reference count will be increased. Beware * that this does NOT check the plug-in's base class (InterfaceClassType), * so you must be careful to ensure that the namespace is unique between * plug-ins that have different base classes. If the plug-in's name matches * an existing plug-in of a different base class, the resulting behavior is * undefined (it will probably crash your program). * * @param plugin_name name of the plug-in library to open (without extension, etc.) */ void open(const std::string& plugin_name); /** * opens plug-in library within a shared object file. If the library is * already being used by another plugin object, then the existing * code will be re-used and the reference count will be increased. Beware * that this does NOT check the plug-in's base class (InterfaceClassType), * so you must be careful to ensure that the namespace is unique between * plug-ins that have different base classes. If the plug-in's name matches * an existing plug-in of a different base class, the resulting behavior is * undefined (it will probably crash your program). * * @param plugin_file shared object file containing the plugin code */ void open_file(const std::string& plugin_file); /// closes plug-in library inline void close(void) { release_data(); } protected: /// /// data_type: object to hold shared library symbols /// struct data_type { /// default constructors for convenience data_type(void) : m_lib_handle(NULL), m_create_func(NULL), m_destroy_func(NULL), m_references(0) {} data_type(const std::string& plugin_name) : m_lib_handle(NULL), m_create_func(NULL), m_destroy_func(NULL), m_plugin_name(plugin_name), m_references(0) {} data_type(const data_type& p) : m_lib_handle(p.m_lib_handle), m_create_func(p.m_create_func), m_destroy_func(p.m_destroy_func), m_plugin_name(p.m_plugin_name), m_references(p.m_references) {} /// symbol library loaded from a shared object file void * m_lib_handle; /// function used to create instances of the plug-in object void * m_create_func; /// function used to destroy instances of the plug-in object void * m_destroy_func; /// the name of the plugin (must be unique per process) std::string m_plugin_name; /// number of references to this class unsigned long m_references; }; /// default constructor is private (use plugin_ptr class to create objects) plugin(void) : m_plugin_data(NULL) {} /// copy constructor plugin(const plugin& p) : m_plugin_data(NULL) { grab_data(p); } /// assignment operator plugin& operator=(const plugin& p) { grab_data(p); return *this; } /// returns a pointer to the plug-in's "create object" function inline void *get_create_function(void) { return (is_open() ? m_plugin_data->m_create_func : NULL); } /// returns a pointer to the plug-in's "destroy object" function inline void *get_destroy_function(void) { return (is_open() ? m_plugin_data->m_destroy_func : NULL); } /// releases the plug-in's shared library symbols void release_data(void); /// grabs a reference to another plug-in's shared library symbols void grab_data(const plugin& p); private: /// data type that maps plug-in names to their shared library data typedef std::map map_type; /// data type for static/global plugin configuration information struct config_type { /// directories containing plugin files std::vector m_plugin_dirs; /// maps plug-in names to shared library data map_type m_plugin_map; /// mutex to make class thread-safe boost::mutex m_plugin_mutex; }; /// returns a singleton instance of config_type static inline config_type& get_plugin_config(void) { boost::call_once(plugin::create_plugin_config, m_instance_flag); return *m_config_ptr; } /// creates the plugin_config singleton static void create_plugin_config(void); /** * searches directories for a valid plug-in file * * @param path_to_file if found, is set to the complete path to the file * @param name the name of the file to search for * @param extension will be appended to name if name is not found * * @return true if the file was found */ static bool find_file(std::string& path_to_file, const std::string& name, const std::string& extension); /** * normalizes complete and final path to a file while looking for it * * @param final_path if found, is set to the complete, normalized path to the file * @param start_path the original starting path to the file * @param name the name of the file to search for * @param extension will be appended to name if name is not found * * @return true if the file was found */ static bool check_for_file(std::string& final_path, const std::string& start_path, const std::string& name, const std::string& extension); /** * opens plug-in library within a shared object file * * @param plugin_file shared object file containing the plugin code * @param plugin_data data object to load the library into */ static void open_plugin(const std::string& plugin_file, data_type& plugin_data); /// returns the name of the plugin object (based on the plugin_file name) static std::string get_plugin_name(const std::string& plugin_file); /// load a dynamic library from plugin_file and return its handle static void *load_dynamic_library(const std::string& plugin_file); /// close the dynamic library corresponding with lib_handle static void close_dynamic_library(void *lib_handle); /// returns the address of a library symbal static void *get_library_symbol(void *lib_handle, const std::string& symbol); /// name of function defined in object code to create a new plug-in instance static const std::string PION_PLUGIN_CREATE; /// name of function defined in object code to destroy a plug-in instance static const std::string PION_PLUGIN_DESTROY; /// file extension used for Pion plug-in files (platform specific) static const std::string PION_PLUGIN_EXTENSION; /// file extension used for Pion configuration files static const std::string PION_CONFIG_EXTENSION; /// used to ensure thread safety of the plugin_config singleton static boost::once_flag m_instance_flag; /// pointer to the plugin_config singleton static config_type * m_config_ptr; /// points to the shared library and functions used by the plug-in data_type * m_plugin_data; }; /// /// plugin_ptr: smart pointer that manages plug-in code loaded from shared /// object libraries /// template class plugin_ptr : public plugin { protected: /// data type for a function that is used to create object instances typedef InterfaceClassType* CreateObjectFunction(void); /// data type for a function that is used to destroy object instances typedef void DestroyObjectFunction(InterfaceClassType*); public: /// default constructor & destructor plugin_ptr(void) : plugin() {} virtual ~plugin_ptr() {} /// copy constructor plugin_ptr(const plugin_ptr& p) : plugin(p) {} /// assignment operator plugin_ptr& operator=(const plugin_ptr& p) { grab_data(p); return *this; } /// creates a new instance of the plug-in object inline InterfaceClassType *create(void) { CreateObjectFunction *create_func = (CreateObjectFunction*)(get_create_function()); if (create_func == NULL) BOOST_THROW_EXCEPTION( error::plugin_undefined() ); return create_func(); } /// destroys an instance of the plug-in object inline void destroy(InterfaceClassType *object_ptr) { // fix warning ISO C++ forbids casting from pointer-to-object // to pointer to function union { void* v_; DestroyObjectFunction* f_; } Cast; Cast.v_ = get_destroy_function(); DestroyObjectFunction *destroy_func = Cast.f_; if (destroy_func == NULL) BOOST_THROW_EXCEPTION( error::plugin_undefined() ); destroy_func(object_ptr); } }; /// /// plugin_instance_ptr: smart pointer that manages a plug-in instance /// template class plugin_instance_ptr : private boost::noncopyable { public: /// default constructor & destructor plugin_instance_ptr(void) : m_instance_ptr(NULL) {} /// virtual destructor / may be extended virtual ~plugin_instance_ptr() { reset(); } /// reset the instance pointer inline void reset(void) { if (m_instance_ptr) { m_plugin_ptr.destroy(m_instance_ptr); } } /// create a new instance of the given plugin_type inline void create(const std::string& plugin_type) { reset(); m_plugin_ptr.open(plugin_type); m_instance_ptr = m_plugin_ptr.create(); } /// returns true if pointer is empty inline bool empty(void) const { return m_instance_ptr==NULL; } /// return a raw pointer to the instance inline InterfaceClassType *get(void) { return m_instance_ptr; } /// return a reference to the instance inline InterfaceClassType& operator*(void) { return *m_instance_ptr; } /// return a const reference to the instance inline const InterfaceClassType& operator*(void) const { return *m_instance_ptr; } /// return a reference to the instance inline InterfaceClassType* operator->(void) { return m_instance_ptr; } /// return a const reference to the instance inline const InterfaceClassType* operator->(void) const { return m_instance_ptr; } protected: /// smart pointer that manages the plugin's dynamic object code plugin_ptr m_plugin_ptr; /// raw pointer to the plugin instance InterfaceClassType * m_instance_ptr; }; /** * Macros to declare entry points for statically linked plugins in accordance * with the general naming convention. * * Typical use: * @code * PION_DECLARE_PLUGIN(EchoService) * .... * PION_DECLARE_PLUGIN(FileService) * * @endcode * */ #ifdef PION_STATIC_LINKING #define PION_DECLARE_PLUGIN(plugin_name) \ class plugin_name; \ extern "C" plugin_name *pion_create_##plugin_name(void); \ extern "C" void pion_destroy_##plugin_name(plugin_name *plugin_ptr); \ static pion::static_entry_point_helper helper_##plugin_name(#plugin_name, (void*) pion_create_##plugin_name, (void*) pion_destroy_##plugin_name); /// used by PION_DECLARE_PLUGIN to add an entry point for static-linked plugins class static_entry_point_helper { public: static_entry_point_helper(const std::string& name, void *create, void *destroy) { pion::plugin::add_static_entry_point(name, create, destroy); } }; #else #define PION_DECLARE_PLUGIN(plugin_name) #endif } // end namespace pion #endif pion-5.0.4+dfsg.orig/include/pion/config.hpp.in0000644000372000001440000000441512215647143020721 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2012 Cloudmeter, Inc. (http://www.cloudmeter.com) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PIONCONFIG_HEADER__ #define __PION_PIONCONFIG_HEADER__ // DO NOT USE autoheader ; this file is not automanaged!!! /* Define to the version number of pion. */ #undef PION_VERSION /* Define to the directory where Pion plug-ins are installed. */ #undef PION_PLUGINS_DIRECTORY /* Define to the directory where cygwin is installed. */ #undef PION_CYGWIN_DIRECTORY /* Define to 1 if C library supports malloc_trim() */ #undef PION_HAVE_MALLOC_TRIM // ----------------------------------------------------------------------- // hash_map support // // At least one of the following options should be defined. /* Define to 1 if you have the header file. */ #undef PION_HAVE_EXT_HASH_MAP /* Define to 1 if you have the header file. */ #undef PION_HAVE_HASH_MAP /* Define to 1 if you have the header file. */ #undef PION_HAVE_UNORDERED_MAP // ----------------------------------------------------------------------- // Logging Options // // At most one of the logging options below should be defined. If none of // them are defined, std::cout and std::cerr will be used for logging. /* Define to 1 to use the `log4cplus' library (-llog4cplus) for logging. */ #undef PION_USE_LOG4CPLUS /* Define to 1 to use the `log4cxx' library (-llog4cxx) for logging. */ #undef PION_USE_LOG4CXX /* Define to 1 to use the `log4cpp' library (-llog4cpp) for logging. */ #undef PION_USE_LOG4CPP /* Define to 1 to disable logging. */ #undef PION_DISABLE_LOGGING // ----------------------------------------------------------------------- /* Define to 1 if you have the `zlib' library. */ #undef PION_HAVE_ZLIB /* Define to 1 if you have the `bzlib' library. */ #undef PION_HAVE_BZLIB /* Define to 1 if you have the `OpenSSL' library. */ #undef PION_HAVE_SSL /* This is used by Windows projects to flag exported symbols */ #define PION_API #define PION_PLUGIN #endif pion-5.0.4+dfsg.orig/ChangeLog0000644000372000001440000003357512215647065015534 0ustar robertousersVersion 5.0.4 (2013-09-16) ========================== * Attributes in Set-Cookie headers should not be quoted (thanks sba) * Use BOOST_SYSTEM_NOEXCEPT for compatibility with Boost 1.54 (thanks rogerim) * Added http::request function to set content given a buffer pointer and size Version 5.0.3 (2013-07-26) ========================== * Uninitialized memory error in http::parser with headers-only parsing * Infinite loop in http::parser when using a payload handler callback * Added algorithm::xml_encode() method; now using it to prevent XSS attacks * Improved handling of uncaught exceptions in http::server Version 5.0.2 (2013-06-02) ========================== * parse_multipart_form_data() corrupts binary files (Alexandre Parenteau) Version 5.0.1 (2013-04-15) ========================== * Lots of renaming, refactoring, bug fixes, etc. Version 4.0.3 (2011-04-14) ========================== * Added support for new libraries and build environments (1105, 1106, 1107) Version 4.0.1 (2011-03-08) ========================== * Added read() and write() methods to HTTPMessage for serialization (1086) * Improved error handling in HTTP(Request/Response)(Reader/Writer) (1083) Version 3.0.21 (2011-01-25) =========================== * HTTP Parser - fixed various chunked content parsing errors (991) * HTTP Parser - now recovers gracefully if status line is missing comment (994) * HTTP Parser - handle "deflate" encoded content with zlib headers (1008) * HTTP Parser - ignore tab characters in query string content (1014) * HTTP Parser - allow for empty cookie names (1015) * HTTP Parser - don't remove unquoted spaces from cookie values (1016) * HTTP Parser - allow for responses with no HTTP headers (1017) * HTTP Parser - improve recovery from truncated requests (1033) * HTTP Parser - recover from empty query parameter names (1006) * HTTP Parser - raw headers strings were sometimes truncated (1031) * TCPTimer.cpp was missing boost/bind.hpp include file (1005) * TCPConnection - now allows for SSL state change (1024) * HTTPMessage - added headers_only options for send() and receive() (1025) Version 3.0.9 (2010-04-30) ========================== * HTTPReader - add support for timeouts (900) Version 3.0.5 (2010-04-02) ========================== * TCPConnection - add accessors for ssl socket object (901) Version 3.0.3 (2010-03-12) ========================== * HTTPTypes::url_encode() crashes when input string has negative char (877) * TCPConnection::write() was not passing error_code by reference (878) Version 3.0.1 (2010-03-01) ========================== * Added ability to dynamically remove resources from HTTPServers (834) * Added support to HTTPParser for saving the raw HTTP headers (842) * HTTPParser now uses a default status code of 0 instead of 200 (817) * Removed build numbers from Unix library names (861) Version 2.2.12 (2010-02-16) =========================== * Made HTTP query parameter map case-insensitive (836) Version 2.2.10 (2010-01-20) =========================== * HTTPParser will now ignore attributes from Set-Cookie HTTP headers (808) * Disabled default building of static libraries in Unix autoconf scripts (825) Version 2.2.8 (2009-12-04) ========================== * HTTP client library not sending payload content that started with NULL (777) * Added support for newer Boost releases (through 1.41) and for gcc 4.4 (780) Version 2.2.2 (2009-10-09) ========================== * HTTPParser query parameter parsing failed on LF & CR characters (681) * Improved autoconf detection for support of Boost.Lockfree library (692) * Improved error handling in PluginManager when loading fails (736) * Fixed "make install" on Unix platforms using autoconf (378) * Pion's unit tests now use random port numbers (690) Version 2.1.4 (2009-07-31) ========================== * Switched default logging to use log4cplus 1.0.3 instead of log4cxx (274, 514) * Updated and merged in the latest version of the boost.lockfree library (647) * Added PionId class to replace dependency on the OSSP UUID library (515) * The Unix build scripts now auto-detect everything correctly (591) * Fixed copy methods for HTTPMessage, HTTPRequest & HTTPResponse (590) * Added setMaxContentLength() method to HTTPServer (589) Version 2.0.8 (2009-06-05) ========================== * Fixed bug with "./configure --with-debug" failing on boost thread tests (598) Version 2.0.6 (2009-05-26) ========================== * HTTPParser exception thrown when Content-Length had leading whitespace (585) * Miscellaneous improvements to Windows MSVC build projects (564) Version 1.2.4 (2009-03-27) ========================== * Removed dependencies on sqlite since it is now embedded into platform (475) * HTTPParser dropping requests when TCP connection contained 304 responses (481) * Updated PionLockedQueue so that it now always keeps track of the size (469) Version 1.1.4 (2009-02-16) ========================== * Build updated to Boost 1.36 & 1.37 (314, 270) * Updates to support and use the latest Boost.Lockfree library (408, 409) * Unit test cleanup and refactoring (416) Version 1.0.10 (2009-01-22) =========================== * Added support and unit tests for maximum HTTP payload content sizes (399) * Updated HTTPParser to recover from missing packets and other errors (407) * TCPServer can now bind to privileged ports when running as setuid (522) * Fixed occasional crashes in pion-net unit tests on multi-core systems (528) Version 1.0.8 (2008-12-17) ========================== * Various improvements to how docs are built/cleaned (379) Version 1.0.6 (2008-11-20) ========================== * Pruning orphaned connections (346) * Fixing auto generated INSTALL file (347) * Autoconf fixes (347) Version 1.0.4 (2008-10-16) ========================== * Cookie collection now case sensitive (500) * Added unit test and fixed bug when parsing query strings with "&&" (333) * Added HEADER_X_FORWARDED_FOR to HTTPTypes (318) * Added TCPConnection::connect() function that performs dns lookups (318) Version 1.0.0 (2008-09-12) ========================== * QueryService added, then removed, and placed into pion::platform * Update clear() function to clear all members() * Added test to see if base64 routines handle binary data in strings properly Version 0.6.0 (2008-08-29) ========================== * Fixed bug with the --disable-logging configure option breaking build (254) * Updated HTTPParser::parseCookieHeader() to be usable for char[] as well * Only HTML documentation is now build with Doxygen when using "make docs" Version 0.5.8 (2008-07-18) ========================== * Simplified HTTPParser class and eliminated some redundant code (240) * HTTPTypes::url_encoded() was not properly encoding space characters (239) * HTTPParser was not extracting POST query when charset is specified (243) * Unable to compile HTTPAuth code with log4cplus support (249) * TCPStream unit tests were occasionally failing (206) * Added --with-boost-extension option to Unix configure script (217) * Misc updates to get things building on gcc 4.2 and gcc 4.3 (241) Version 0.5.6 (2008-05-02) ========================== * Added support for user authentication using cookies and HTTP Basic-Auth * Added support to HTTPServer to redirect/rewrite HTTP requests internally * Updated HTTPRequest to track the original resource requested when redirected * Refactored PionScheduler so that two scheduling policies are now provided * Added PionLockedQueue and PionLockFreeQueue based on Michael & Scott's work * Added "make docs" Unix build option that uses Doxygen to build all the docs * Unix build scripts now support dynamic versions of the Boost.UnitTest libs * Boost 1.35.0 or later is now REQUIRED (it includes ASIO); see README.boost Version 0.5.4 (2008-03-07) ========================== * HTTPMessage header names now use case-insensitive comparisons (#79) * Fixed parsing errors when chunked content included extra whitespace (#73) * Fixed HTTP parsing errors when there was no "Content-Length" header (#78) * Fixed a bug that caused HTTPServer to not find resources correctly (#85) * HTTPServer now lets you bind any function object to resources (#69) * Moved plugins functionality from HTTPServer into a new WebServer class (#69) * PionScheduler is no longer a singleton; now is a member of TCPServer (#86) * PionScheduler can now be extended to provide alternative algorithms (#86) * Added TCPStream: a std::basic_iostream wrapper around TCPConnection * Added getRemotePort() and getRemoteEndpoint() members to TCPConnection * Web service plugins are now functions objects; no more handleRequest() * Moved web service plugins into the pion::plugins namespace Version 0.5.2 (2007-12-17) ========================== * Added support for parsing chunked HTTP requests and responses (#37) * Refactored PluginManager out of HTTPServer service management code (#62) Version 0.4.2 (2007-12-14) ========================== * OpenSSL functionality is now enabled for MSVC * PionCounter is now a thread-safe 64-bit integer counter * PionScheduler now uses boost::detail::atomic_count instead of PionCounter * Added unit tests and fixed some bugs related to sending chunked responses * Boost 1.34.1 and ASIO 0.3.9 are now REQUIRED; see README.boost Version 0.4.0 (2007-11-08) ========================== * Added support to send HTTP requests and parse responses; lots of refactoring * Added unit tests! Integrated into MSVC, or use "make check" for Unixes * The log4cxx library can now be used to build with MSVC (see README.msvc) * PionNetEngine singleton was removed; servers are now used independently * Added "writable" FileService option that lets you add, change & delete files * Servers can now be bound to any endpoints that are supported by ASIO * Added new PionCounter and PionScheduler classes to the Common Library * The WebService::handleRequest() function now returns void instead of bool * Renamed PionServerTest to PionHelloServer & PionServiceTest to PionWebServer * Improved performance and flexibility of Boost library detection in autoconf * Logging via std::ostream is now the default (see --disable-logging) * Logging via std::ostream now uses a globally-shared priority level * MSVC projects were failing to build if there were spaces in the path * Fixed various crashes that mainly occurred during shutdown in Windows * Boost 1.34.1 and ASIO 0.3.8 are now REQUIRED; see README.boost Version 0.3.4 (2007-10-12) ========================== * Renamed "libpion" to "Pion Network Library" (or "pion-net" for short) * Rearranged directories & files to separate out the "Pion Common Library" * Added support to HTTPResponse for sending chunked responses * Added new options to FileService: max_cache_size and max_chunk_size * Updated log4cxx support so that it works with both 0.9.7 and 0.10.x Version 0.3.2 (2007-09-14) ========================== * Added support for MSVC compiler (see builds/VC/libpion.vcproj file) * Added support for HTTP/1.1 pipelining (multiple requests in single packet) * Added support for linking static HTTP module libraries into programs * Added accessor functions for client IP address in HTTPRequest/TCPConnection * Moved more I/O logic into TCPConnection to cleanup SSL checks * Changed start() to startup() and stop() to shutdown() in PionEngine Version 0.2.4 (2007-09-05) ========================== * Fixed a bug in HTTPServer that caused it to not find some modules correctly * Removed writeNoCopy(const T& data) function since only strings make sense * Updated cookie parser to ignore garbage after quoted values * Updated build scripts so that they find Boost libs build with GCC 4.1 * Updated cygwin patches for Boost 1.34.1 Version 0.2.2 (2007-06-26) ========================== * Accept errors caused servers to stop listening for new connections Version 0.2.0 (2007-06-19) ========================== * Boost 1.34.0 and ASIO 0.3.8 are now REQUIRED; see README.boost * Lots of platform testing and better platform-specific documentation * Added support to FileModule for the "cache" and "scan" options * Added Last-Modified HTTP header to FileModule and support for client cache * Changed HTTPServer error handlers to use functions rather than modules * Re-worked PionPlugin library so that it handles reference counting internally * Added start() and stop() virtual functions to HTTPModule * Added beforeStarting() and afterStopping() virtual functions to TCPServer * Added PionHashMap.hpp for setting-up unordered map types * Added work-around for bug that causes Windows to crash @ shutdown Version 0.1.6 (2007-06-01) ========================== * Added support for HTTP module configuration files (see testmodules.conf) * Added support for parsing & setting cookies (Version 1, RFC 2109) * Added a CookieModule that displays and lets you add/delete cookies * Added LogModule that displays events when an external log library is used * Added support to FileModule for cygwin paths and "file" option * Added support for SSL/TLS using OpenSSL (must use --with-openssl) * Plug-ins now use pion_create_PLUGINNAME and pion_destroy_PLUGINNAME * Fixed bugs related to the parsing of request (POST) content Version 0.1.4 (2007-05-25) ========================== * Fixed miscellaneous bugs with the HTTPResponse class * Added support for parsing POST content, and GET and POST query parameters * Added support for passing configuration options to HTTP modules * Added EchoModule and FileModule, and stubs for LogModule * Added support for HTTP modules to be dynamically-loadable libraries * Added support for pkg-config (http://pkg-config.freedesktop.org/wiki/) * Moved around some of the source directories & renamed test programs * Added build support & documentation for FreeBSD, Solaris and Windows * Added Xcode project file for Mac OS X (you must still use "configure") Version 0.1.2 (2007-05-01) ========================== * Added support for log4cplus, log4cpp and std::ostream logging * Added more detailed build information for Linux and Mac OS X Version 0.1.0 (2007-04-30) ========================== * First alpha release with very basic functionality pion-5.0.4+dfsg.orig/pion.pc.in0000644000372000001440000000060212215647065015641 0ustar robertousers# pion configuration file for pkg-config prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ datarootdir=@datarootdir@ datadir=@datarootdir@ Name: pion Description: a C++ framework for building lightweight HTTP interfaces Version: @VERSION@ #Requires: boost-1.35 Libs: @LDFLAGS@ @PION_EXTERNAL_LIBS@ -L${libdir} -lpion Cflags: @CPPFLAGS@ -I${includedir}