gss 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/.gitignore +22 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +2 -0
- data/gss.gemspec +25 -0
- data/lib/gss.rb +62 -0
- data/lib/gss/version.rb +3 -0
- data/vendor/bundle/ruby/1.9.1/bin/nokogiri +23 -0
- data/vendor/bundle/ruby/1.9.1/bin/nokogiri.bat +6 -0
- data/vendor/bundle/ruby/1.9.1/bin/rake +23 -0
- data/vendor/bundle/ruby/1.9.1/bin/rake.bat +6 -0
- data/vendor/bundle/ruby/1.9.1/build_info/certified-0.1.2.info +1 -0
- data/vendor/bundle/ruby/1.9.1/build_info/mini_portile-0.6.0.info +1 -0
- data/vendor/bundle/ruby/1.9.1/build_info/nokogiri-1.6.2.1-x86-mingw32.info +1 -0
- data/vendor/bundle/ruby/1.9.1/build_info/rake-0.9.2.2.info +1 -0
- data/vendor/bundle/ruby/1.9.1/gems/certified-0.1.2/README.md +5 -0
- data/vendor/bundle/ruby/1.9.1/gems/certified-0.1.2/certified.rb +20 -0
- data/vendor/bundle/ruby/1.9.1/gems/certified-0.1.2/certs/ca-bundle.crt +3376 -0
- data/vendor/bundle/ruby/1.9.1/gems/mini_portile-0.6.0/History.txt +86 -0
- data/vendor/bundle/ruby/1.9.1/gems/mini_portile-0.6.0/LICENSE.txt +20 -0
- data/vendor/bundle/ruby/1.9.1/gems/mini_portile-0.6.0/README.rdoc +169 -0
- data/vendor/bundle/ruby/1.9.1/gems/mini_portile-0.6.0/Rakefile +53 -0
- data/vendor/bundle/ruby/1.9.1/gems/mini_portile-0.6.0/examples/Rakefile +113 -0
- data/vendor/bundle/ruby/1.9.1/gems/mini_portile-0.6.0/lib/mini_portile.rb +437 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/.autotest +26 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/.editorconfig +17 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/.gemtest +0 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/.travis.yml +27 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/CHANGELOG.ja.rdoc +889 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/CHANGELOG.rdoc +898 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/C_CODING_STYLE.rdoc +33 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/Gemfile +21 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/Manifest.txt +377 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/README.ja.rdoc +111 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/README.rdoc +180 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ROADMAP.md +89 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/Rakefile +356 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/STANDARD_RESPONSES.md +47 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/Y_U_NO_GEMSPEC.md +155 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/bin/nokogiri +78 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/build_all +130 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/dependencies.yml +4 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/depend +358 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/extconf.rb +543 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/html_document.c +170 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/html_document.h +10 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/html_element_description.c +279 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/html_element_description.h +10 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/html_entity_lookup.c +32 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/html_entity_lookup.h +8 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/html_sax_parser_context.c +116 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/html_sax_parser_context.h +11 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/html_sax_push_parser.c +87 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/html_sax_push_parser.h +9 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/nokogiri.c +148 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/nokogiri.h +164 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_attr.c +94 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_attr.h +9 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_attribute_decl.c +70 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_attribute_decl.h +9 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_cdata.c +56 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_cdata.h +9 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_comment.c +54 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_comment.h +9 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_document.c +577 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_document.h +23 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_document_fragment.c +48 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_document_fragment.h +10 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_dtd.c +202 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_dtd.h +10 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_element_content.c +123 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_element_content.h +10 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_element_decl.c +69 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_element_decl.h +9 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_encoding_handler.c +79 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_encoding_handler.h +8 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_entity_decl.c +110 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_entity_decl.h +10 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_entity_reference.c +52 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_entity_reference.h +9 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_io.c +56 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_io.h +11 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_libxml2_hacks.c +112 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_libxml2_hacks.h +12 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_namespace.c +78 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_namespace.h +13 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_node.c +1603 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_node.h +13 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_node_set.c +467 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_node_set.h +14 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_processing_instruction.c +56 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_processing_instruction.h +9 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_reader.c +681 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_reader.h +10 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_relax_ng.c +161 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_relax_ng.h +9 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_sax_parser.c +312 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_sax_parser.h +39 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_sax_parser_context.c +262 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_sax_parser_context.h +10 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_sax_push_parser.c +115 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_sax_push_parser.h +9 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_schema.c +205 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_schema.h +9 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_syntax_error.c +63 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_syntax_error.h +13 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_text.c +52 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_text.h +9 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_xpath_context.c +307 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xml_xpath_context.h +10 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xslt_stylesheet.c +270 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/ext/nokogiri/xslt_stylesheet.h +14 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri.rb +137 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/css.rb +27 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/css/node.rb +52 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/css/parser.rb +715 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/css/parser.y +249 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/css/parser_extras.rb +91 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/css/syntax_error.rb +7 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/css/tokenizer.rb +152 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/css/tokenizer.rex +55 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/css/xpath_visitor.rb +219 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/decorators/slop.rb +35 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/html.rb +37 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/html/builder.rb +35 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/html/document.rb +333 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/html/document_fragment.rb +41 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/html/element_description.rb +23 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/html/element_description_defaults.rb +671 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/html/entity_lookup.rb +13 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/html/sax/parser.rb +52 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/html/sax/parser_context.rb +16 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/html/sax/push_parser.rb +16 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/syntax_error.rb +4 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/version.rb +106 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml.rb +73 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/attr.rb +14 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/attribute_decl.rb +18 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/builder.rb +443 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/cdata.rb +11 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/character_data.rb +7 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/document.rb +279 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/document_fragment.rb +112 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/dtd.rb +32 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/element_content.rb +36 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/element_decl.rb +13 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/entity_decl.rb +19 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/namespace.rb +13 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/node.rb +982 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/node/save_options.rb +61 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/node_set.rb +355 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/notation.rb +6 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/parse_options.rb +98 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/pp.rb +2 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/pp/character_data.rb +18 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/pp/node.rb +56 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/processing_instruction.rb +8 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/reader.rb +112 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/relax_ng.rb +32 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/sax.rb +4 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/sax/document.rb +171 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/sax/parser.rb +123 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/sax/parser_context.rb +16 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/sax/push_parser.rb +60 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/schema.rb +63 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/syntax_error.rb +47 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/text.rb +9 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/xpath.rb +10 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/xpath/syntax_error.rb +11 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xml/xpath_context.rb +16 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xslt.rb +56 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/nokogiri/xslt/stylesheet.rb +25 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/lib/xsd/xmlparser/nokogiri.rb +102 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/suppressions/README.txt +1 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/suppressions/nokogiri_ree-1.8.7.358.supp +61 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/suppressions/nokogiri_ruby-1.8.7.370.supp +0 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/suppressions/nokogiri_ruby-1.9.2.320.supp +28 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/suppressions/nokogiri_ruby-1.9.3.327.supp +28 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/tasks/nokogiri.org.rb +24 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/tasks/test.rb +95 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/css/test_nthiness.rb +222 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/css/test_parser.rb +358 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/css/test_tokenizer.rb +198 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/css/test_xpath_visitor.rb +96 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/decorators/test_slop.rb +16 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/2ch.html +108 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/address_book.rlx +12 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/address_book.xml +10 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/atom.xml +344 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/bar/bar.xsd +4 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/bogus.xml +0 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/dont_hurt_em_why.xml +422 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/encoding.html +82 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/encoding.xhtml +84 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/exslt.xml +8 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/exslt.xslt +35 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/foo/foo.xsd +4 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/metacharset.html +10 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/noencoding.html +47 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/po.xml +32 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/po.xsd +66 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/saml/saml20assertion_schema.xsd +283 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/saml/saml20protocol_schema.xsd +302 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/saml/xenc_schema.xsd +146 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/saml/xmldsig_schema.xsd +318 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/shift_jis.html +10 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/shift_jis.xml +5 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/shift_jis_no_charset.html +9 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/slow-xpath.xml +25509 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/snuggles.xml +3 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/staff.dtd +10 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/staff.xml +59 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/staff.xslt +32 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/test_document_url/bar.xml +2 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/test_document_url/document.dtd +4 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/test_document_url/document.xml +6 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/tlm.html +850 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/to_be_xincluded.xml +2 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/valid_bar.xml +2 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/files/xinclude.xml +4 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/helper.rb +164 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/html/sax/test_parser.rb +141 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/html/sax/test_parser_context.rb +46 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/html/test_builder.rb +164 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/html/test_document.rb +619 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/html/test_document_encoding.rb +148 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/html/test_document_fragment.rb +267 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/html/test_element_description.rb +105 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/html/test_named_characters.rb +14 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/html/test_node.rb +196 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/html/test_node_encoding.rb +27 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/namespaces/test_additional_namespaces_in_builder_doc.rb +14 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/namespaces/test_namespaces_aliased_default.rb +24 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/namespaces/test_namespaces_in_builder_doc.rb +75 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/namespaces/test_namespaces_in_cloned_doc.rb +31 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/namespaces/test_namespaces_in_created_doc.rb +75 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/namespaces/test_namespaces_in_parsed_doc.rb +66 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/namespaces/test_namespaces_preservation.rb +31 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/test_convert_xpath.rb +135 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/test_css_cache.rb +45 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/test_encoding_handler.rb +46 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/test_memory_leak.rb +156 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/test_nokogiri.rb +138 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/test_reader.rb +558 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/test_soap4r_sax.rb +52 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/test_xslt_transforms.rb +279 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/node/test_save_options.rb +28 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/node/test_subclass.rb +44 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/sax/test_parser.rb +382 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/sax/test_parser_context.rb +115 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/sax/test_push_parser.rb +157 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_attr.rb +64 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_attribute_decl.rb +86 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_builder.rb +315 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_c14n.rb +161 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_cdata.rb +48 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_comment.rb +29 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_document.rb +934 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_document_encoding.rb +28 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_document_fragment.rb +228 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_dtd.rb +187 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_dtd_encoding.rb +33 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_element_content.rb +56 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_element_decl.rb +73 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_entity_decl.rb +122 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_entity_reference.rb +245 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_namespace.rb +95 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_node.rb +1155 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_node_attributes.rb +113 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_node_encoding.rb +107 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_node_inheritance.rb +32 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_node_reparenting.rb +374 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_node_set.rb +755 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_parse_options.rb +64 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_processing_instruction.rb +30 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_reader_encoding.rb +142 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_relax_ng.rb +60 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_schema.rb +129 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_syntax_error.rb +12 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_text.rb +60 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_unparented_node.rb +422 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_xinclude.rb +83 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xml/test_xpath.rb +382 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xslt/test_custom_functions.rb +133 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test/xslt/test_exception_handling.rb +37 -0
- data/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.6.2.1-x86-mingw32/test_all +81 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/.gemtest +0 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/CHANGES +522 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/MIT-LICENSE +21 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/README.rdoc +197 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/Rakefile +369 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/TODO +20 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/bin/rake +33 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/install.rb +90 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake.rb +69 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/alt_system.rb +109 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb +595 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/classic_namespace.rb +11 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/clean.rb +32 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/cloneable.rb +25 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/contrib/compositepublisher.rb +21 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/contrib/ftptools.rb +150 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/contrib/publisher.rb +73 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/contrib/rubyforgepublisher.rb +16 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/contrib/sshpublisher.rb +50 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/contrib/sys.rb +191 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/default_loader.rb +10 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/dsl_definition.rb +176 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/early_time.rb +18 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/ext/core.rb +27 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/ext/module.rb +39 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/ext/string.rb +167 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/ext/time.rb +14 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/file_creation_task.rb +24 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/file_list.rb +403 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/file_task.rb +47 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/file_utils.rb +114 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/file_utils_ext.rb +145 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/gempackagetask.rb +15 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/invocation_chain.rb +51 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/invocation_exception_mixin.rb +16 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/loaders/makefile.rb +40 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/multi_task.rb +16 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/name_space.rb +25 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/packagetask.rb +185 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/pathmap.rb +1 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/pseudo_status.rb +24 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb +29 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_test_loader.rb +22 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/rdoctask.rb +234 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/ruby182_test_unit_fix.rb +25 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/runtest.rb +21 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb +327 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task_argument_error.rb +7 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task_arguments.rb +78 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task_manager.rb +307 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/tasklib.rb +22 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/testtask.rb +191 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/version.rb +8 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/win32.rb +55 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/file_creation.rb +34 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/helper.rb +492 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake.rb +40 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_application.rb +489 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_application_options.rb +335 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_clean.rb +14 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_definitions.rb +80 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_directory_task.rb +46 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_dsl.rb +77 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_early_time.rb +31 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_extension.rb +59 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_file_creation_task.rb +56 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_file_list.rb +628 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_file_list_path_map.rb +8 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_file_task.rb +102 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_file_utils.rb +305 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_ftp_file.rb +59 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_functional.rb +450 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_invocation_chain.rb +52 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_makefile_loader.rb +44 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_multi_task.rb +51 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_name_space.rb +43 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_package_task.rb +79 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_path_map.rb +157 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_path_map_explode.rb +34 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_path_map_partial.rb +18 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_pseudo_status.rb +21 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_rake_test_loader.rb +21 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_rdoc_task.rb +83 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_require.rb +40 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_rules.rb +327 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_task.rb +267 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_task_argument_parsing.rb +103 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_task_arguments.rb +88 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_task_lib.rb +9 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_task_manager.rb +157 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_task_manager_argument_resolution.rb +36 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_task_with_arguments.rb +173 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_test_task.rb +120 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_top_level_functions.rb +111 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_rake_win32.rb +72 -0
- data/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/test/test_sys.rb +20 -0
- data/vendor/bundle/ruby/1.9.1/specifications/certified-0.1.2.gemspec +20 -0
- data/vendor/bundle/ruby/1.9.1/specifications/mini_portile-0.6.0.gemspec +24 -0
- data/vendor/bundle/ruby/1.9.1/specifications/nokogiri-1.6.2.1-x86-mingw32.gemspec +73 -0
- data/vendor/bundle/ruby/1.9.1/specifications/rake-0.9.2.2.gemspec +37 -0
- metadata +489 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
=== 0.6.0 / 2014-04-18
|
|
2
|
+
|
|
3
|
+
* Enhancements:
|
|
4
|
+
* Add default cert store and custom certs from `SSL_CERT_FILE` if present.
|
|
5
|
+
This increases compatibility with Ruby 1.8.7.
|
|
6
|
+
|
|
7
|
+
* Bugfixes:
|
|
8
|
+
* Specify Accept-Encoding to make sure a raw file content is downloaded.
|
|
9
|
+
Pull #30. [knu]
|
|
10
|
+
|
|
11
|
+
* Internal:
|
|
12
|
+
* Improve examples and use them as test harness.
|
|
13
|
+
|
|
14
|
+
=== 0.5.3 / 2014-03-24
|
|
15
|
+
|
|
16
|
+
* Bugfixes:
|
|
17
|
+
* Shell escape paths in tar command. Pull #29. [quickshiftin]
|
|
18
|
+
* Support older versions of tar that cannot auto-detect
|
|
19
|
+
the compression type. Pull #27. Closes #21. [b-dean]
|
|
20
|
+
* Try RbConfig's CC before fall back to 'gcc'. Ref #28.
|
|
21
|
+
|
|
22
|
+
=== 0.5.2 / 2013-10-23
|
|
23
|
+
|
|
24
|
+
* Bugfixes:
|
|
25
|
+
* Change tar detection order to support NetBSD 'gtar'. Closes #24
|
|
26
|
+
* Trick 'git-apply' when applying patches on nested Git checkouts. [larskanis]
|
|
27
|
+
* Respect ENV's MAKE before fallback to 'make'. [larskanis]
|
|
28
|
+
* Respect ENV's CC variable before fallback to 'gcc'.
|
|
29
|
+
* Avoid non-ASCII output of GCC cause host detection issues. Closes #22
|
|
30
|
+
|
|
31
|
+
=== 0.5.1 / 2013-07-07
|
|
32
|
+
|
|
33
|
+
* Bugfixes:
|
|
34
|
+
* Detect tar executable without shelling out. [jtimberman]
|
|
35
|
+
|
|
36
|
+
=== 0.5.0 / 2012-11-17
|
|
37
|
+
|
|
38
|
+
* Enhancements:
|
|
39
|
+
* Allow patching extracted files using `git apply`. [metaskills]
|
|
40
|
+
|
|
41
|
+
=== 0.4.1 / 2012-10-24
|
|
42
|
+
|
|
43
|
+
* Bugfixes:
|
|
44
|
+
* Syntax to process FTp binary chunks differs between Ruby 1.8.7 and 1.9.x
|
|
45
|
+
|
|
46
|
+
=== 0.4.0 / 2012-10-24
|
|
47
|
+
|
|
48
|
+
* Enhancements:
|
|
49
|
+
* Allow fetching of FTP URLs along HTTP ones. [metaskills]
|
|
50
|
+
|
|
51
|
+
=== 0.3.0 / 2012-03-23
|
|
52
|
+
|
|
53
|
+
* Enhancements:
|
|
54
|
+
* Use `gcc -v` to determine original host (platform) instead of Ruby one.
|
|
55
|
+
|
|
56
|
+
* Deprecations:
|
|
57
|
+
* Dropped support for Rubies older than 1.8.7
|
|
58
|
+
|
|
59
|
+
=== 0.2.2 / 2011-04-11
|
|
60
|
+
|
|
61
|
+
* Minor enhancements:
|
|
62
|
+
* Use LDFLAGS when activating recipes for cross-compilation. Closes #6
|
|
63
|
+
|
|
64
|
+
* Bugfixes:
|
|
65
|
+
* Remove memoization of *_path helpers. Closes #7
|
|
66
|
+
|
|
67
|
+
=== 0.2.1 / 2011-04-06
|
|
68
|
+
|
|
69
|
+
* Minor enhancements:
|
|
70
|
+
* Provide MiniPortile#path to obtain full path to installation directory. Closes GH-5
|
|
71
|
+
|
|
72
|
+
=== 0.2.0 / 2011-04-05
|
|
73
|
+
|
|
74
|
+
* Enhancements:
|
|
75
|
+
* Improve tar detection
|
|
76
|
+
* Improve and refactor configure_options
|
|
77
|
+
* Detect configure_options changes. Closes GH-1
|
|
78
|
+
* Add recipe examples
|
|
79
|
+
|
|
80
|
+
* Bugfixes:
|
|
81
|
+
* MiniPortile#target can be changed now. Closes GH-2
|
|
82
|
+
* Always redirect tar output properly
|
|
83
|
+
|
|
84
|
+
=== 0.1.0 / 2011-03-08
|
|
85
|
+
|
|
86
|
+
* Initial release. Welcome to this world!
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2011 Luis Lavena.
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
= MiniPortile
|
|
2
|
+
|
|
3
|
+
* {Source Code}[https://github.com/luislavena/mini_portile]
|
|
4
|
+
* {Bug Reports}[https://github.com/luislavena/mini_portile/issues]
|
|
5
|
+
|
|
6
|
+
This project is a minimalistic, simplistic and stupid implementation of a port/recipe
|
|
7
|
+
system <b>for developers</b>.
|
|
8
|
+
|
|
9
|
+
== Another port system, srsly?
|
|
10
|
+
|
|
11
|
+
No, is not a general port system, is not aimed to take over apt, macports or
|
|
12
|
+
anything like that.
|
|
13
|
+
|
|
14
|
+
The rationale is simple.
|
|
15
|
+
|
|
16
|
+
You create a library A that uses B at runtime or compile time. Target audience
|
|
17
|
+
of your library might have different versions of B installed than yours.
|
|
18
|
+
|
|
19
|
+
You know, <em>Works on my machine</em> is not what you expect from one
|
|
20
|
+
developer to another.
|
|
21
|
+
|
|
22
|
+
Developers having problems report them back to you, and what you do then?
|
|
23
|
+
Compile B locally, replacing your existing installation of B or simply hacking
|
|
24
|
+
things around so nothing breaks.
|
|
25
|
+
|
|
26
|
+
All this, manually.
|
|
27
|
+
|
|
28
|
+
Computers are tools, are meant to help us, not the other way around.
|
|
29
|
+
|
|
30
|
+
What if I tell you the above scenario can be simplified with something like
|
|
31
|
+
this:
|
|
32
|
+
|
|
33
|
+
rake compile B_VERSION=1.2.3
|
|
34
|
+
|
|
35
|
+
And your library will use the version of B you specified. Done.
|
|
36
|
+
|
|
37
|
+
== You make it sound easy, where is the catch?
|
|
38
|
+
|
|
39
|
+
You got me, there is a catch. At this time (and highly likely will be always)
|
|
40
|
+
MiniPortile is only compatible with GCC compilers and autoconf/configure-based
|
|
41
|
+
projects.
|
|
42
|
+
|
|
43
|
+
It assumes the library you want to build contains a <tt>configure</tt> script,
|
|
44
|
+
which all the autoconf-based libraries do.
|
|
45
|
+
|
|
46
|
+
=== How to use
|
|
47
|
+
|
|
48
|
+
Now that you know the catch, and you're still reading this, let me show you a
|
|
49
|
+
quick example:
|
|
50
|
+
|
|
51
|
+
require "mini_portile"
|
|
52
|
+
recipe = MiniPortile.new("libiconv", "1.13.1")
|
|
53
|
+
recipe.files = ["http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz"]
|
|
54
|
+
recipe.cook
|
|
55
|
+
recipe.activate
|
|
56
|
+
|
|
57
|
+
That's all. <tt>cook</tt> will download, extract, patch, configure and compile
|
|
58
|
+
the library into a namespaced structure. <tt>activate</tt> ensures GCC find
|
|
59
|
+
this library and prefers it over a system-wide installation.
|
|
60
|
+
|
|
61
|
+
=== Structure
|
|
62
|
+
|
|
63
|
+
At this time, if you haven't digged into the code yet, are wondering <em>what
|
|
64
|
+
is all that structure talk about?</em>.
|
|
65
|
+
|
|
66
|
+
MiniPortile follows the principle of <b>convention over configuration</b> and
|
|
67
|
+
established a folder structure where is going to place files and perform work.
|
|
68
|
+
|
|
69
|
+
Take the above example, and let's draw some picture:
|
|
70
|
+
|
|
71
|
+
mylib
|
|
72
|
+
|-- ports
|
|
73
|
+
| |-- archives
|
|
74
|
+
| | `-- libiconv-1.13.1.tar.gz
|
|
75
|
+
| `-- <platform>
|
|
76
|
+
| `-- libiconv
|
|
77
|
+
| `-- 1.13.1
|
|
78
|
+
| |-- bin
|
|
79
|
+
| |-- include
|
|
80
|
+
| `-- lib
|
|
81
|
+
`-- tmp
|
|
82
|
+
`-- <platform>
|
|
83
|
+
`-- ports
|
|
84
|
+
|
|
85
|
+
In above structure, <tt>platform</tt> refers to the architecture that represents
|
|
86
|
+
the operating system you're using (e.g. i686-linux, i386-mingw32, etc).
|
|
87
|
+
|
|
88
|
+
Inside this folder, MiniPortile will store the artifacts that result from the
|
|
89
|
+
compilation process. As you cans see, it versions out the library so you can
|
|
90
|
+
run multiple version combination without compromising these overlap each other.
|
|
91
|
+
|
|
92
|
+
<tt>archives</tt> is where downloaded source files are stored. It is recommended
|
|
93
|
+
you avoid trashing that folder so no further downloads will be required (save
|
|
94
|
+
bandwidth, save the world).
|
|
95
|
+
|
|
96
|
+
The <tt>tmp</tt> is where compilation is performed and can be safely discarded.
|
|
97
|
+
|
|
98
|
+
Don't worry, you don't need to know the path structure by memory, just use recipe's
|
|
99
|
+
<tt>path</tt> to obtain the full path to the installation directory:
|
|
100
|
+
|
|
101
|
+
recipe.cook
|
|
102
|
+
recipe.path # => /home/luis/projects/myapp/ports/i686-linux/libiconv/1.13.1
|
|
103
|
+
|
|
104
|
+
=== How can I combine this with my compilation task?
|
|
105
|
+
|
|
106
|
+
In the simplified proposal, the idea is that using Rake, your <tt>compile</tt>
|
|
107
|
+
task depends on MiniPortile compilation and most important, activation.
|
|
108
|
+
|
|
109
|
+
Take the following as a simplification of how you can use MiniPortile with
|
|
110
|
+
Rake:
|
|
111
|
+
|
|
112
|
+
task :libiconv do
|
|
113
|
+
recipe = MiniPortile.new("libiconv", "1.13.1")
|
|
114
|
+
recipe.files = ["http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz"]
|
|
115
|
+
checkpoint = ".#{recipe.name}-#{recipe.version}.installed"
|
|
116
|
+
|
|
117
|
+
unless File.exist?(checkpoint)
|
|
118
|
+
recipe.cook
|
|
119
|
+
touch checkpoint
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
recipe.activate
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
task :compile => [:libiconv] do
|
|
126
|
+
# ...
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
This example will:
|
|
130
|
+
|
|
131
|
+
* Compile the library only once (using a timestamp file)
|
|
132
|
+
* Ensure compiled library gets activated every time
|
|
133
|
+
* Make compile task depend on compiled library activation
|
|
134
|
+
|
|
135
|
+
For your homework, you can make libiconv version be taken from <tt>ENV</tt>
|
|
136
|
+
variables.
|
|
137
|
+
|
|
138
|
+
=== Native or cross-compilation
|
|
139
|
+
|
|
140
|
+
Above examples cover the normal use case: compile support libraries natively.
|
|
141
|
+
|
|
142
|
+
MiniPortile also covers another use case, which is the cross-compilation of the
|
|
143
|
+
support libraries to be used as part of a binary gem compilation.
|
|
144
|
+
|
|
145
|
+
It is the perfect complementary tool for rake-compiler and it's <tt>cross</tt>
|
|
146
|
+
Rake task.
|
|
147
|
+
|
|
148
|
+
Depending on your usage of rake-compiler, you will need to use <tt>host</tt> to
|
|
149
|
+
match the installed cross-compiler toolchain.
|
|
150
|
+
|
|
151
|
+
Please refer to the examples directory for simplified and practical usage.
|
|
152
|
+
|
|
153
|
+
=== Supported scenarios
|
|
154
|
+
|
|
155
|
+
As mentioned before, MiniPortile requires a GCC compiler toolchain. This has
|
|
156
|
+
been tested against Ubuntu, OSX and even Windows (RubyInstaller with DevKit)
|
|
157
|
+
|
|
158
|
+
== Disclaimer
|
|
159
|
+
|
|
160
|
+
If you have any trouble, don't hesitate to contact the author. As always,
|
|
161
|
+
I'm not going to say <em>Use at your own risk</em> because I don't want this
|
|
162
|
+
library to be risky.
|
|
163
|
+
|
|
164
|
+
If you trip on something, I'll share the liability by repairing things
|
|
165
|
+
as quickly as I can. Your responsibility is to report the inadequacies.
|
|
166
|
+
|
|
167
|
+
== License
|
|
168
|
+
|
|
169
|
+
This library is licensed under MIT license. Please see LICENSE.txt for details.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require "rake/clean"
|
|
2
|
+
require "rubygems/package_task"
|
|
3
|
+
|
|
4
|
+
GEM_SPEC = Gem::Specification.new do |s|
|
|
5
|
+
# basic information
|
|
6
|
+
s.name = "mini_portile"
|
|
7
|
+
s.version = "0.6.0"
|
|
8
|
+
s.platform = Gem::Platform::RUBY
|
|
9
|
+
|
|
10
|
+
# description and details
|
|
11
|
+
s.summary = "Simplistic port-like solution for developers"
|
|
12
|
+
s.description = "Simplistic port-like solution for developers. It provides a standard and simplified way to compile against dependency libraries without messing up your system."
|
|
13
|
+
|
|
14
|
+
# requirements
|
|
15
|
+
s.required_ruby_version = ">= 1.8.7"
|
|
16
|
+
s.required_rubygems_version = ">= 1.3.5"
|
|
17
|
+
|
|
18
|
+
# dependencies (add_dependency)
|
|
19
|
+
# development dependencies (add_development_dependency)
|
|
20
|
+
|
|
21
|
+
# components, files and paths
|
|
22
|
+
s.files = FileList["examples/Rakefile", "lib/**/*.rb", "Rakefile", "*.{rdoc,txt}"]
|
|
23
|
+
|
|
24
|
+
s.require_path = 'lib'
|
|
25
|
+
|
|
26
|
+
# documentation
|
|
27
|
+
s.has_rdoc = true
|
|
28
|
+
s.rdoc_options << '--main' << 'README.rdoc' << '--title' << 'MiniPortile -- Documentation'
|
|
29
|
+
|
|
30
|
+
s.extra_rdoc_files = %w(README.rdoc History.txt LICENSE.txt)
|
|
31
|
+
|
|
32
|
+
# project information
|
|
33
|
+
s.homepage = 'http://github.com/luislavena/mini_portile'
|
|
34
|
+
s.licenses = ['MIT']
|
|
35
|
+
|
|
36
|
+
# author and contributors
|
|
37
|
+
s.author = 'Luis Lavena'
|
|
38
|
+
s.email = 'luislavena@gmail.com'
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
Gem::PackageTask.new(GEM_SPEC) do |pkg|
|
|
42
|
+
pkg.need_tar = false
|
|
43
|
+
pkg.need_zip = false
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
desc "Test MiniPortile by compiling examples"
|
|
47
|
+
task :test do
|
|
48
|
+
Dir.chdir("examples") do
|
|
49
|
+
sh "rake ports:all"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
task :default => [:test]
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
require File.expand_path("mini_portile", File.join(File.dirname(__FILE__), "../lib"))
|
|
2
|
+
|
|
3
|
+
recipes = []
|
|
4
|
+
|
|
5
|
+
# libiconv
|
|
6
|
+
libiconv = MiniPortile.new "libiconv", "1.14"
|
|
7
|
+
libiconv.files << "ftp://ftp.gnu.org/pub/gnu/#{libiconv.name}/#{libiconv.name}-#{libiconv.version}.tar.gz"
|
|
8
|
+
|
|
9
|
+
recipes.push libiconv
|
|
10
|
+
|
|
11
|
+
# sqlite3
|
|
12
|
+
sqlite3 = MiniPortile.new "sqlite3", "3.8.4.1"
|
|
13
|
+
sqlite3.files << "http://sqlite.org/2014/sqlite-autoconf-3080401.tar.gz"
|
|
14
|
+
|
|
15
|
+
recipes.push sqlite3
|
|
16
|
+
|
|
17
|
+
# c-ares
|
|
18
|
+
c_ares = MiniPortile.new "c-ares", "1.7.5"
|
|
19
|
+
c_ares.files << "https://s3.amazonaws.com/distfiles.openknapsack.org/#{c_ares.name}/#{c_ares.name}-#{c_ares.version}.tar.gz"
|
|
20
|
+
|
|
21
|
+
recipes.push c_ares
|
|
22
|
+
|
|
23
|
+
# zlib
|
|
24
|
+
class ZlibRecipe < MiniPortile
|
|
25
|
+
def windows?
|
|
26
|
+
!(host =~ /mswin|mingw/).nil?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def configure
|
|
30
|
+
return super unless windows?
|
|
31
|
+
|
|
32
|
+
Dir.chdir work_path do
|
|
33
|
+
mk = File.read 'win32/Makefile.gcc'
|
|
34
|
+
File.open 'win32/Makefile.gcc', 'wb' do |f|
|
|
35
|
+
f.puts "BINARY_PATH = #{path}/bin"
|
|
36
|
+
f.puts "LIBRARY_PATH = #{path}/lib"
|
|
37
|
+
f.puts "INCLUDE_PATH = #{path}/include"
|
|
38
|
+
|
|
39
|
+
cross_build? and
|
|
40
|
+
mk.sub!(/^PREFIX\s*=\s*$/, "PREFIX = #{host}-")
|
|
41
|
+
|
|
42
|
+
f.puts mk
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def configure_defaults
|
|
48
|
+
["--static"]
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def configured?
|
|
52
|
+
return super unless windows?
|
|
53
|
+
|
|
54
|
+
!!(File.read(File.join(work_path, 'win32/Makefile.gcc')) =~ /^BINARY_PATH/)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def compile
|
|
58
|
+
return super unless windows?
|
|
59
|
+
|
|
60
|
+
execute "compile", "make -f win32/Makefile.gcc"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def install
|
|
64
|
+
return if installed?
|
|
65
|
+
return super unless windows?
|
|
66
|
+
|
|
67
|
+
execute "install", %Q(#{make_cmd} -f win32/Makefile.gcc install)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def cross_build?
|
|
71
|
+
host != original_host
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
zlib = ZlibRecipe.new "zlib", "1.2.8"
|
|
76
|
+
zlib.files << "http://zlib.net/#{zlib.name}-#{zlib.version}.tar.gz"
|
|
77
|
+
|
|
78
|
+
recipes.push zlib
|
|
79
|
+
|
|
80
|
+
namespace :ports do
|
|
81
|
+
directory "ports"
|
|
82
|
+
|
|
83
|
+
recipes.each do |recipe|
|
|
84
|
+
desc "Install port #{recipe.name} #{recipe.version}"
|
|
85
|
+
task recipe.name => ["ports"] do |t|
|
|
86
|
+
checkpoint = "ports/.#{recipe.name}-#{recipe.version}-#{recipe.host}.installed"
|
|
87
|
+
|
|
88
|
+
unless File.exist?(checkpoint)
|
|
89
|
+
recipe.cook
|
|
90
|
+
touch checkpoint
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
recipe.activate
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
task :all => recipe.name
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
desc "Install all ports and display installation location"
|
|
100
|
+
task :all do
|
|
101
|
+
recipes.each do |recipe|
|
|
102
|
+
puts "Artifacts of '#{recipe.name}' in '#{recipe.path}'"
|
|
103
|
+
end
|
|
104
|
+
puts "LDFLAGS: " << ENV['LDFLAGS'].inspect
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
desc "Adjust all recipes host for cross-compilation"
|
|
109
|
+
task :cross do
|
|
110
|
+
recipes.each do |recipe|
|
|
111
|
+
recipe.host = "i686-w64-mingw32"
|
|
112
|
+
end
|
|
113
|
+
end
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
require 'rbconfig'
|
|
2
|
+
require 'net/http'
|
|
3
|
+
require 'net/https'
|
|
4
|
+
require 'net/ftp'
|
|
5
|
+
require 'fileutils'
|
|
6
|
+
require 'tempfile'
|
|
7
|
+
require 'digest/md5'
|
|
8
|
+
|
|
9
|
+
class MiniPortile
|
|
10
|
+
attr_reader :name, :version, :original_host
|
|
11
|
+
attr_writer :configure_options
|
|
12
|
+
attr_accessor :host, :files, :patch_files, :target, :logger
|
|
13
|
+
|
|
14
|
+
def initialize(name, version)
|
|
15
|
+
@name = name
|
|
16
|
+
@version = version
|
|
17
|
+
@target = 'ports'
|
|
18
|
+
@files = []
|
|
19
|
+
@patch_files = []
|
|
20
|
+
@logger = STDOUT
|
|
21
|
+
|
|
22
|
+
@original_host = @host = detect_host
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def download
|
|
26
|
+
@files.each do |url|
|
|
27
|
+
filename = File.basename(url)
|
|
28
|
+
download_file(url, File.join(archives_path, filename))
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def extract
|
|
33
|
+
@files.each do |url|
|
|
34
|
+
filename = File.basename(url)
|
|
35
|
+
extract_file(File.join(archives_path, filename), tmp_path)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def patch
|
|
40
|
+
# Set GIT_DIR while appying patches to work around
|
|
41
|
+
# git-apply doing nothing when started within another
|
|
42
|
+
# git directory.
|
|
43
|
+
ENV['GIT_DIR'], old_git = '.', ENV['GIT_DIR']
|
|
44
|
+
begin
|
|
45
|
+
@patch_files.each do |full_path|
|
|
46
|
+
next unless File.exists?(full_path)
|
|
47
|
+
output "Running git apply with #{full_path}..."
|
|
48
|
+
execute('patch', %Q(git apply #{full_path}))
|
|
49
|
+
end
|
|
50
|
+
ensure
|
|
51
|
+
ENV['GIT_DIR'] = old_git
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def configure_options
|
|
56
|
+
@configure_options ||= configure_defaults
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def configure
|
|
60
|
+
return if configured?
|
|
61
|
+
|
|
62
|
+
md5_file = File.join(tmp_path, 'configure.md5')
|
|
63
|
+
digest = Digest::MD5.hexdigest(computed_options)
|
|
64
|
+
File.open(md5_file, "w") { |f| f.write digest }
|
|
65
|
+
|
|
66
|
+
execute('configure', %Q(sh configure #{computed_options}))
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def compile
|
|
70
|
+
execute('compile', make_cmd)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def install
|
|
74
|
+
return if installed?
|
|
75
|
+
execute('install', %Q(#{make_cmd} install))
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def downloaded?
|
|
79
|
+
missing = @files.detect do |url|
|
|
80
|
+
filename = File.basename(url)
|
|
81
|
+
!File.exist?(File.join(archives_path, filename))
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
missing ? false : true
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def configured?
|
|
88
|
+
configure = File.join(work_path, 'configure')
|
|
89
|
+
makefile = File.join(work_path, 'Makefile')
|
|
90
|
+
md5_file = File.join(tmp_path, 'configure.md5')
|
|
91
|
+
|
|
92
|
+
stored_md5 = File.exist?(md5_file) ? File.read(md5_file) : ""
|
|
93
|
+
current_md5 = Digest::MD5.hexdigest(computed_options)
|
|
94
|
+
|
|
95
|
+
(current_md5 == stored_md5) && newer?(makefile, configure)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def installed?
|
|
99
|
+
makefile = File.join(work_path, 'Makefile')
|
|
100
|
+
target_dir = Dir.glob("#{port_path}/*").find { |d| File.directory?(d) }
|
|
101
|
+
|
|
102
|
+
newer?(target_dir, makefile)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def cook
|
|
106
|
+
download unless downloaded?
|
|
107
|
+
extract
|
|
108
|
+
patch
|
|
109
|
+
configure unless configured?
|
|
110
|
+
compile
|
|
111
|
+
install unless installed?
|
|
112
|
+
|
|
113
|
+
return true
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def activate
|
|
117
|
+
lib_path = File.join(port_path, "lib")
|
|
118
|
+
vars = {
|
|
119
|
+
'PATH' => File.join(port_path, 'bin'),
|
|
120
|
+
'CPATH' => File.join(port_path, 'include'),
|
|
121
|
+
'LIBRARY_PATH' => lib_path
|
|
122
|
+
}.reject { |env, path| !File.directory?(path) }
|
|
123
|
+
|
|
124
|
+
output "Activating #{@name} #{@version} (from #{port_path})..."
|
|
125
|
+
vars.each do |var, path|
|
|
126
|
+
full_path = File.expand_path(path)
|
|
127
|
+
|
|
128
|
+
# turn into a valid Windows path (if required)
|
|
129
|
+
full_path.gsub!(File::SEPARATOR, File::ALT_SEPARATOR) if File::ALT_SEPARATOR
|
|
130
|
+
|
|
131
|
+
# save current variable value
|
|
132
|
+
old_value = ENV[var] || ''
|
|
133
|
+
|
|
134
|
+
unless old_value.include?(full_path)
|
|
135
|
+
ENV[var] = "#{full_path}#{File::PATH_SEPARATOR}#{old_value}"
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# rely on LDFLAGS when cross-compiling
|
|
140
|
+
if File.exist?(lib_path) && (@host != @original_host)
|
|
141
|
+
full_path = File.expand_path(lib_path)
|
|
142
|
+
|
|
143
|
+
old_value = ENV.fetch("LDFLAGS", "")
|
|
144
|
+
|
|
145
|
+
unless old_value.include?(full_path)
|
|
146
|
+
ENV["LDFLAGS"] = "-L#{full_path} #{old_value}".strip
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def path
|
|
152
|
+
File.expand_path(port_path)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
private
|
|
156
|
+
|
|
157
|
+
def tmp_path
|
|
158
|
+
"tmp/#{@host}/ports/#{@name}/#{@version}"
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def port_path
|
|
162
|
+
"#{@target}/#{@host}/#{@name}/#{@version}"
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def archives_path
|
|
166
|
+
"#{@target}/archives"
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def work_path
|
|
170
|
+
Dir.glob("#{tmp_path}/*").find { |d| File.directory?(d) }
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def configure_defaults
|
|
174
|
+
[
|
|
175
|
+
"--host=#{@host}", # build for specific target (host)
|
|
176
|
+
"--enable-static", # build static library
|
|
177
|
+
"--disable-shared" # disable generation of shared object
|
|
178
|
+
]
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def configure_prefix
|
|
182
|
+
"--prefix=#{File.expand_path(port_path)}"
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def computed_options
|
|
186
|
+
[
|
|
187
|
+
configure_options, # customized or default options
|
|
188
|
+
configure_prefix, # installation target
|
|
189
|
+
].flatten.join(' ')
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def log_file(action)
|
|
193
|
+
File.join(tmp_path, "#{action}.log")
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def tar_exe
|
|
197
|
+
@@tar_exe ||= begin
|
|
198
|
+
%w[gtar bsdtar tar basic-bsdtar].find { |c|
|
|
199
|
+
which(c)
|
|
200
|
+
}
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def tar_compression_switch(filename)
|
|
205
|
+
case File.extname(filename)
|
|
206
|
+
when '.gz', '.tgz'
|
|
207
|
+
'z'
|
|
208
|
+
when '.bz2', '.tbz2'
|
|
209
|
+
'j'
|
|
210
|
+
when '.Z'
|
|
211
|
+
'Z'
|
|
212
|
+
else
|
|
213
|
+
''
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# From: http://stackoverflow.com/a/5471032/7672
|
|
218
|
+
# Thanks, Mislav!
|
|
219
|
+
#
|
|
220
|
+
# Cross-platform way of finding an executable in the $PATH.
|
|
221
|
+
#
|
|
222
|
+
# which('ruby') #=> /usr/bin/ruby
|
|
223
|
+
def which(cmd)
|
|
224
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
|
225
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
|
226
|
+
exts.each { |ext|
|
|
227
|
+
exe = File.join(path, "#{cmd}#{ext}")
|
|
228
|
+
return exe if File.executable? exe
|
|
229
|
+
}
|
|
230
|
+
end
|
|
231
|
+
return nil
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def detect_host
|
|
235
|
+
return @detect_host if defined?(@detect_host)
|
|
236
|
+
|
|
237
|
+
begin
|
|
238
|
+
ENV["LC_ALL"], old_lc_all = "C", ENV["LC_ALL"]
|
|
239
|
+
|
|
240
|
+
output = `#{gcc_cmd} -v 2>&1`
|
|
241
|
+
if m = output.match(/^Target\: (.*)$/)
|
|
242
|
+
@detect_host = m[1]
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
@detect_host
|
|
246
|
+
ensure
|
|
247
|
+
ENV["LC_ALL"] = old_lc_all
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
def extract_file(file, target)
|
|
252
|
+
filename = File.basename(file)
|
|
253
|
+
FileUtils.mkdir_p target
|
|
254
|
+
|
|
255
|
+
message "Extracting #{filename} into #{target}... "
|
|
256
|
+
result = `#{tar_exe} #{tar_compression_switch(filename)}xf "#{file}" -C "#{target}" 2>&1`
|
|
257
|
+
if $?.success?
|
|
258
|
+
output "OK"
|
|
259
|
+
else
|
|
260
|
+
output "ERROR"
|
|
261
|
+
output result
|
|
262
|
+
raise "Failed to complete extract task"
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
def execute(action, command)
|
|
267
|
+
log = log_file(action)
|
|
268
|
+
log_out = File.expand_path(log)
|
|
269
|
+
redirected = command << " >#{log_out} 2>&1"
|
|
270
|
+
|
|
271
|
+
Dir.chdir work_path do
|
|
272
|
+
message "Running '#{action}' for #{@name} #{@version}... "
|
|
273
|
+
system redirected
|
|
274
|
+
if $?.success?
|
|
275
|
+
output "OK"
|
|
276
|
+
return true
|
|
277
|
+
else
|
|
278
|
+
output "ERROR, review '#{log}' to see what happened."
|
|
279
|
+
raise "Failed to complete #{action} task"
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
def newer?(target, checkpoint)
|
|
285
|
+
if (target && File.exist?(target)) && (checkpoint && File.exist?(checkpoint))
|
|
286
|
+
File.mtime(target) > File.mtime(checkpoint)
|
|
287
|
+
else
|
|
288
|
+
false
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
# print out a message with the logger
|
|
293
|
+
def message(text)
|
|
294
|
+
@logger.print text
|
|
295
|
+
@logger.flush
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
# print out a message using the logger but return to a new line
|
|
299
|
+
def output(text = "")
|
|
300
|
+
@logger.puts text
|
|
301
|
+
@logger.flush
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
# Slighly modified from RubyInstaller uri_ext, Rubinius configure
|
|
305
|
+
# and adaptations of Wayne's RailsInstaller
|
|
306
|
+
def download_file(url, full_path, count = 3)
|
|
307
|
+
return if File.exist?(full_path)
|
|
308
|
+
uri = URI.parse(url)
|
|
309
|
+
begin
|
|
310
|
+
case uri.scheme.downcase
|
|
311
|
+
when /ftp/
|
|
312
|
+
download_file_ftp(uri, full_path)
|
|
313
|
+
when /http|https/
|
|
314
|
+
download_file_http(url, full_path, count)
|
|
315
|
+
end
|
|
316
|
+
rescue Exception => e
|
|
317
|
+
File.unlink full_path if File.exists?(full_path)
|
|
318
|
+
output "ERROR: #{e.message}"
|
|
319
|
+
raise "Failed to complete download task"
|
|
320
|
+
end
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
def download_file_http(url, full_path, count = 3)
|
|
324
|
+
filename = File.basename(full_path)
|
|
325
|
+
uri = URI.parse(url)
|
|
326
|
+
|
|
327
|
+
if ENV['http_proxy']
|
|
328
|
+
_, userinfo, p_host, p_port = URI.split(ENV['http_proxy'])
|
|
329
|
+
proxy_user, proxy_pass = userinfo.split(/:/) if userinfo
|
|
330
|
+
http = Net::HTTP.new(uri.host, uri.port, p_host, p_port, proxy_user, proxy_pass)
|
|
331
|
+
else
|
|
332
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
|
333
|
+
|
|
334
|
+
if URI::HTTPS === uri
|
|
335
|
+
http.use_ssl = true
|
|
336
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
|
337
|
+
|
|
338
|
+
store = OpenSSL::X509::Store.new
|
|
339
|
+
|
|
340
|
+
# Auto-include system-provided certificates
|
|
341
|
+
store.set_default_paths
|
|
342
|
+
|
|
343
|
+
if ENV.has_key?("SSL_CERT_FILE") && File.exist?(ENV["SSL_CERT_FILE"])
|
|
344
|
+
store.add_file ENV["SSL_CERT_FILE"]
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
http.cert_store = store
|
|
348
|
+
end
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
message "Downloading #{filename} "
|
|
352
|
+
http.start do |h|
|
|
353
|
+
h.request_get(uri.path, 'Accept-Encoding' => 'identity') do |response|
|
|
354
|
+
case response
|
|
355
|
+
when Net::HTTPNotFound
|
|
356
|
+
output "404 - Not Found"
|
|
357
|
+
return false
|
|
358
|
+
|
|
359
|
+
when Net::HTTPClientError
|
|
360
|
+
output "Error: Client Error: #{response.inspect}"
|
|
361
|
+
return false
|
|
362
|
+
|
|
363
|
+
when Net::HTTPRedirection
|
|
364
|
+
raise "Too many redirections for the original URL, halting." if count <= 0
|
|
365
|
+
url = response["location"]
|
|
366
|
+
return download_file(url, full_path, count - 1)
|
|
367
|
+
|
|
368
|
+
when Net::HTTPOK
|
|
369
|
+
return with_tempfile(filename, full_path) do |temp_file|
|
|
370
|
+
size = 0
|
|
371
|
+
progress = 0
|
|
372
|
+
total = response.header["Content-Length"].to_i
|
|
373
|
+
response.read_body do |chunk|
|
|
374
|
+
temp_file << chunk
|
|
375
|
+
size += chunk.size
|
|
376
|
+
new_progress = (size * 100) / total
|
|
377
|
+
unless new_progress == progress
|
|
378
|
+
message "\rDownloading %s (%3d%%) " % [filename, new_progress]
|
|
379
|
+
end
|
|
380
|
+
progress = new_progress
|
|
381
|
+
end
|
|
382
|
+
output
|
|
383
|
+
end
|
|
384
|
+
end
|
|
385
|
+
end
|
|
386
|
+
end
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
def download_file_ftp(uri, full_path)
|
|
390
|
+
filename = File.basename(uri.path)
|
|
391
|
+
with_tempfile(filename, full_path) do |temp_file|
|
|
392
|
+
size = 0
|
|
393
|
+
progress = 0
|
|
394
|
+
Net::FTP.open(uri.host, uri.user, uri.password) do |ftp|
|
|
395
|
+
ftp.passive = true
|
|
396
|
+
ftp.login
|
|
397
|
+
remote_dir = File.dirname(uri.path)
|
|
398
|
+
ftp.chdir(remote_dir) unless remote_dir == '.'
|
|
399
|
+
total = ftp.size(filename)
|
|
400
|
+
ftp.getbinaryfile(filename, temp_file.path, 8192) do |chunk|
|
|
401
|
+
# Ruby 1.8.7 already wrote the chunk into the file
|
|
402
|
+
unless RUBY_VERSION < "1.9"
|
|
403
|
+
temp_file << chunk
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
size += chunk.size
|
|
407
|
+
new_progress = (size * 100) / total
|
|
408
|
+
unless new_progress == progress
|
|
409
|
+
message "\rDownloading %s (%3d%%) " % [filename, new_progress]
|
|
410
|
+
end
|
|
411
|
+
progress = new_progress
|
|
412
|
+
end
|
|
413
|
+
end
|
|
414
|
+
output
|
|
415
|
+
end
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
def with_tempfile(filename, full_path)
|
|
419
|
+
temp_file = Tempfile.new("download-#{filename}")
|
|
420
|
+
temp_file.binmode
|
|
421
|
+
yield temp_file
|
|
422
|
+
temp_file.close
|
|
423
|
+
File.unlink full_path if File.exists?(full_path)
|
|
424
|
+
FileUtils.mkdir_p File.dirname(full_path)
|
|
425
|
+
FileUtils.mv temp_file.path, full_path, :force => true
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
def gcc_cmd
|
|
429
|
+
cc = ENV["CC"] || RbConfig::CONFIG["CC"] || "gcc"
|
|
430
|
+
return cc.dup
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
def make_cmd
|
|
434
|
+
m = ENV['MAKE'] || ENV['make'] || 'make'
|
|
435
|
+
return m.dup
|
|
436
|
+
end
|
|
437
|
+
end
|