libxml-ruby 0.6.0-x86-mswin32-60

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. data/CHANGES +122 -0
  2. data/LICENSE +23 -0
  3. data/README +144 -0
  4. data/ext/libxml/cbg.c +76 -0
  5. data/ext/libxml/extconf.rb +308 -0
  6. data/ext/libxml/libxml.c +62 -0
  7. data/ext/libxml/ruby_libxml.h +93 -0
  8. data/ext/libxml/ruby_xml_attr.c +405 -0
  9. data/ext/libxml/ruby_xml_attr.h +19 -0
  10. data/ext/libxml/ruby_xml_document.c +1111 -0
  11. data/ext/libxml/ruby_xml_document.h +27 -0
  12. data/ext/libxml/ruby_xml_dtd.c +168 -0
  13. data/ext/libxml/ruby_xml_dtd.h +17 -0
  14. data/ext/libxml/ruby_xml_html_parser.c +449 -0
  15. data/ext/libxml/ruby_xml_html_parser.h +29 -0
  16. data/ext/libxml/ruby_xml_input_cbg.c +158 -0
  17. data/ext/libxml/ruby_xml_input_cbg.h +20 -0
  18. data/ext/libxml/ruby_xml_node.c +2410 -0
  19. data/ext/libxml/ruby_xml_node.h +27 -0
  20. data/ext/libxml/ruby_xml_node_set.c +170 -0
  21. data/ext/libxml/ruby_xml_node_set.h +20 -0
  22. data/ext/libxml/ruby_xml_ns.c +153 -0
  23. data/ext/libxml/ruby_xml_ns.h +21 -0
  24. data/ext/libxml/ruby_xml_parser.c +1425 -0
  25. data/ext/libxml/ruby_xml_parser.h +31 -0
  26. data/ext/libxml/ruby_xml_parser_context.c +750 -0
  27. data/ext/libxml/ruby_xml_parser_context.h +22 -0
  28. data/ext/libxml/ruby_xml_reader.c +900 -0
  29. data/ext/libxml/ruby_xml_reader.h +14 -0
  30. data/ext/libxml/ruby_xml_sax_parser.c +485 -0
  31. data/ext/libxml/ruby_xml_sax_parser.h +56 -0
  32. data/ext/libxml/ruby_xml_schema.c +146 -0
  33. data/ext/libxml/ruby_xml_schema.h +16 -0
  34. data/ext/libxml/ruby_xml_state.c +113 -0
  35. data/ext/libxml/ruby_xml_state.h +12 -0
  36. data/ext/libxml/ruby_xml_tree.c +43 -0
  37. data/ext/libxml/ruby_xml_tree.h +12 -0
  38. data/ext/libxml/ruby_xml_xinclude.c +20 -0
  39. data/ext/libxml/ruby_xml_xinclude.h +13 -0
  40. data/ext/libxml/ruby_xml_xpath.c +243 -0
  41. data/ext/libxml/ruby_xml_xpath.h +23 -0
  42. data/ext/libxml/ruby_xml_xpath_context.c +118 -0
  43. data/ext/libxml/ruby_xml_xpath_context.h +20 -0
  44. data/ext/libxml/ruby_xml_xpath_object.c +293 -0
  45. data/ext/libxml/ruby_xml_xpath_object.h +28 -0
  46. data/ext/libxml/ruby_xml_xpointer.c +100 -0
  47. data/ext/libxml/ruby_xml_xpointer.h +27 -0
  48. data/ext/libxml/ruby_xml_xpointer_context.c +21 -0
  49. data/ext/libxml/ruby_xml_xpointer_context.h +18 -0
  50. data/ext/libxml/sax_parser_callbacks.inc +213 -0
  51. data/ext/libxml/version.h +9 -0
  52. data/lib/libxml.rb +125 -0
  53. data/lib/libxml_ruby.so +0 -0
  54. data/lib/xml/libxml.rb +5 -0
  55. data/mingw/libiconv-2.dll +0 -0
  56. data/mingw/libxml2-2.dll +0 -0
  57. data/mingw/libxml_ruby.so +0 -0
  58. data/mingw/mingw.rake +36 -0
  59. data/test/dtd-test.rb +24 -0
  60. data/test/etc_doc_to_s.rb +19 -0
  61. data/test/ets_copy_bug.rb +21 -0
  62. data/test/ets_copy_bug2.rb +32 -0
  63. data/test/ets_copy_bug3.rb +38 -0
  64. data/test/ets_doc_file.rb +15 -0
  65. data/test/ets_doc_to_s.rb +21 -0
  66. data/test/ets_gpx.rb +26 -0
  67. data/test/ets_node_gc.rb +21 -0
  68. data/test/ets_test.xml +2 -0
  69. data/test/ets_tsr.rb +9 -0
  70. data/test/gc.log +0 -0
  71. data/test/merge_bug.rb +55 -0
  72. data/test/schema-test.rb +74 -0
  73. data/test/tc_well_formed.rb +11 -0
  74. data/test/tc_xml_document.rb +52 -0
  75. data/test/tc_xml_document_write.rb +24 -0
  76. data/test/tc_xml_document_write2.rb +54 -0
  77. data/test/tc_xml_document_write3.rb +96 -0
  78. data/test/tc_xml_html_parser.rb +63 -0
  79. data/test/tc_xml_node.rb +59 -0
  80. data/test/tc_xml_node2.rb +25 -0
  81. data/test/tc_xml_node3.rb +27 -0
  82. data/test/tc_xml_node4.rb +86 -0
  83. data/test/tc_xml_node5.rb +52 -0
  84. data/test/tc_xml_node6.rb +27 -0
  85. data/test/tc_xml_node7.rb +35 -0
  86. data/test/tc_xml_node8.rb +32 -0
  87. data/test/tc_xml_node9.rb +32 -0
  88. data/test/tc_xml_node_copy.rb +40 -0
  89. data/test/tc_xml_node_set.rb +24 -0
  90. data/test/tc_xml_node_set2.rb +37 -0
  91. data/test/tc_xml_node_text.rb +17 -0
  92. data/test/tc_xml_node_xlink.rb +28 -0
  93. data/test/tc_xml_parser.rb +190 -0
  94. data/test/tc_xml_parser2.rb +16 -0
  95. data/test/tc_xml_parser3.rb +23 -0
  96. data/test/tc_xml_parser4.rb +33 -0
  97. data/test/tc_xml_parser5.rb +27 -0
  98. data/test/tc_xml_parser6.rb +23 -0
  99. data/test/tc_xml_parser7.rb +28 -0
  100. data/test/tc_xml_parser8.rb +32 -0
  101. data/test/tc_xml_parser9.rb +11 -0
  102. data/test/tc_xml_parser_context.rb +88 -0
  103. data/test/tc_xml_reader.rb +112 -0
  104. data/test/tc_xml_sax_parser.rb +104 -0
  105. data/test/tc_xml_sax_parser2.rb +51 -0
  106. data/test/tc_xml_xinclude.rb +30 -0
  107. data/test/tc_xml_xpath.rb +38 -0
  108. data/test/tc_xml_xpath2.rb +14 -0
  109. data/test/tc_xml_xpointer.rb +78 -0
  110. data/vc/libxml.sln +20 -0
  111. data/vc/libxml.vcproj +389 -0
  112. data/work/Rakefile +247 -0
  113. data/work/task/make +26 -0
  114. data/work/task/memory +37 -0
  115. data/work/task/rdoc +39 -0
  116. data/work/task/setup +1616 -0
  117. data/work/task/test +29 -0
  118. data/work/test/ets_runner.rb +33 -0
  119. data/work/test/libxml_test.rb +3 -0
  120. data/work/test/runner.rb +0 -0
  121. data/work/test/runner_ets.rb +33 -0
  122. data/work/vc/debug/libxml.exp +0 -0
  123. data/work/vc/debug/libxml.ilk +0 -0
  124. data/work/vc/debug/libxml.lib +0 -0
  125. data/work/vc/debug/libxml.pdb +0 -0
  126. data/work/vc/debug/libxml.so +0 -0
  127. metadata +224 -0
data/CHANGES ADDED
@@ -0,0 +1,122 @@
1
+ (See log/ChangeLog for more detailed changes derived directly from source control.)
2
+
3
+ == 0.5.3 /
4
+
5
+ === 2007-11-16 "Dan Janowski" <danj at 3skel.com>
6
+
7
+ * Merged Dan's MEM2 branch to trunk.
8
+
9
+
10
+ == 0.5.2 / 2007-10-10
11
+
12
+ === 2007-10-10 "Dan Janowski" <danj at 3skel.com>
13
+
14
+ * (Dan, fill in the major points of the changes you made up to here -thanks)
15
+
16
+ === 2007-01-14 "Laurent Sansonetti" <lrz at chopine.be>
17
+
18
+ * Added some preliminary RDoc comments for XML::Reader.
19
+
20
+ === 2006-12-05 "Laurent Sansonetti" <lrz at chopine.be>
21
+
22
+ * Added XML::Reader, a set of bindings to the xmlTextReader API.
23
+
24
+
25
+ == 0.3.8.4 / 2006-12-02
26
+
27
+ === 2006-04-15 "Ross Bamform" <rosco at roscopeco.co.uk>
28
+
29
+ * Implemented SAX parser callback handling.
30
+
31
+ === 2006-04-12 "Ross Bamford" <rosco at roscopeco.co.uk>
32
+
33
+ * Integrated and tested community patches.
34
+ * Defined XML::Node (hash) equality in terms of XML representation.
35
+
36
+ === 2006-04-12 "Tim Yamin" <plasmaroo at gentoo.org>
37
+
38
+ * Fixed XML::Node#content inoperable bug (plasmaroo) [patch]
39
+ * Fixed memory leak in same
40
+
41
+ === 2006-04-12 "Mark Van Holstyn" <mvette13 at gmail.com>
42
+
43
+ * Added XML::Node::Set#first (mvette13) [patch]
44
+ * Added XML::Node::Set#empty?
45
+ * Fixed XML::Node::Set#to_a
46
+ * Added XML::Node#find_first
47
+ * Added XML::Node#remove!
48
+
49
+ === 2006-03-27 "Ross Bamford" <rosco at roscopeco.co.uk>
50
+
51
+ * Integrated contributed XML::Parser.register_error_handler patch (rosco)
52
+
53
+ === 2006-02-27 "Ross Bamford" <rosco at roscopeco.co.uk>
54
+
55
+ * Fixed all multiple symbol definitions for -fno-common.
56
+ * Removed OSX -fno-common workaround.
57
+
58
+
59
+ == 0.3.6 / 2006-02-23
60
+
61
+ === 2006-02-21 "Ross Bamford" <rosco at roscopeco.co.uk>
62
+
63
+ * Patched extconf.rb with OSX -fno-common workaround
64
+ * Added gem and packaging support to Rakefile
65
+ * Moved version update to Rakefile
66
+ * Removed legacy project utility scripts
67
+
68
+ === 2005-02-19 "Ross Bamford" <rosco at roscopeco.co.uk>
69
+
70
+ * Fixed doublefree bug in ruby_xml_attr.
71
+ * Fixed small leak in parser
72
+
73
+ === 2005-12-18 "Ross Bamford" <rosco at roscopeco.co.uk>
74
+
75
+ * Updated for GCC 4.0 (community patches)
76
+ * Fixed default validation bug
77
+ * Refactored project, removed outdated files, cleaned up tests.
78
+ * Added RDoc documentation across .c files.
79
+ * Fixed up a few strings.
80
+
81
+ === 2004-04-04 "Mangler Jurgen" <et@wkv.at>
82
+
83
+ * ruby_xml_node.cz: fixed ruby_xml_node_property_set. The ill-behaviour
84
+ was, that there was added a second attribute of the same
85
+ name, when you were setting the value of an already existing
86
+ attribute.
87
+
88
+ === 2004-03-17 "Lukas Svoboda" <luks@fi.muni.cz>
89
+
90
+ * ruby_xml_node.c: ruby_xml_node_to_s now returns XML subtree dump.
91
+
92
+ === 2004-02-27 "Martin Povolny" <martin@solnet.cz>
93
+
94
+ * ruby_xml_node.c: added XML::Node.copy, this makes possible building
95
+ of xml documents from nodes taken from other xml documents
96
+ without making ruby SIGSEGV (see tests/copy_bug.rb).
97
+
98
+ === 2004-02-26 "Martin Povolny" <martin@solnet.cz>
99
+
100
+ * ruby_xml_dtd.c, ruby_xml_dtd.h, ruby_xml_schema.c, ruby_xml_schema.h:
101
+ more work on validation, now you can actually validate
102
+ document using dtd or xml schema, also solved warning and
103
+ error propagation (see tests/{dtd|schema}-test.rb).
104
+
105
+ === 2003-12-30 "Martin Povolny" <martin@solnet.cz>
106
+
107
+ * ruby_xml_dtd.c, ruby_xml_dtd.h, ruby_xml_schema.c, ruby_xml_schema.h:
108
+ prelimitary support for dtd and schema validation
109
+
110
+ === 2003-09-15 "Martin Povolny" <martin@solnet.cz>
111
+
112
+ * ruby_xml_input_cbg.c, libxml.c: added class InputCallbacks to make
113
+ possible registering custom input callbacks
114
+ handlers (xmlRegisterInputCallbacks) written in ruby
115
+
116
+ === 2003-08-01 "Martin Povolny" <martin@solnet.cz>
117
+
118
+ * ruby_xml_document.c: corrected argument handling in ruby_xml_document_find
119
+ * ruby_xml_node.c: corrected argument handling in ruby_xml_node_find
120
+
121
+
122
+
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ LibXML-Ruby
2
+
3
+ Copyright (c) 2002-2006 Sean Chittenden <sean@chittenden.org> and contributors
4
+ Copyright (c) 2001 Wai-Sun "Squidster" Chia <waisun.chia@compaq.com>
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
7
+ this software and associated documentation files (the "Software"), to deal in
8
+ the Software without restriction, including without limitation the rights to
9
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
10
+ of the Software, and to permit persons to whom the Software is furnished to do
11
+ so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
23
+
data/README ADDED
@@ -0,0 +1,144 @@
1
+ == INSTALLATION
2
+
3
+ Installation is simple. Follow the following steps:
4
+
5
+ === Rubygems
6
+
7
+ gem install libxml-ruby
8
+
9
+ === Tarball/zip
10
+
11
+ $ rake test
12
+ $ rake install
13
+
14
+ If extconf yacks up an error, follow the instructions it provides.
15
+ You will need to chdir to ext/xml and run 'ruby extconf.rb' to provide
16
+ options, after which you can either use Rake for everything or
17
+ do with make (make && make install).
18
+
19
+ Once installed, look at the test scripts (tests/*.rb), and run
20
+ 'rake doc' to generate API documentation.
21
+ You can find the latest documentation at:
22
+
23
+ * http://libxml.rubyforge.org/doc
24
+
25
+ == DEPENDENCIES
26
+
27
+ libxml requires a few other libraries to be installed inorder to
28
+ function properly.
29
+
30
+ * libm (math routines: very standard)
31
+ * libz (zlib)
32
+ * libiconv
33
+ * libxml2
34
+
35
+ == USAGE
36
+
37
+ Basic usage for reading and writing documents.
38
+
39
+ === WRITING
40
+
41
+ Writing a simple document:
42
+
43
+ # require 'rubygems' # if installed via Gems
44
+ require 'xml/libxml'
45
+
46
+ doc = XML::Document.new()
47
+ doc.root = XML::Node.new('root_node')
48
+ root = doc.root
49
+
50
+ root << elem1 = XML::Node.new('elem1')
51
+ elem1['attr1'] = 'val1'
52
+ elem1['attr2'] = 'val2'
53
+
54
+ root << elem2 = XML::Node.new('elem2')
55
+ elem2['attr1'] = 'val1'
56
+ elem2['attr2'] = 'val2'
57
+
58
+ root << elem3 = XML::Node.new('elem3')
59
+ elem3 << elem4 = XML::Node.new('elem4')
60
+ elem3 << elem5 = XML::Node.new('elem5')
61
+
62
+ elem5 << elem6 = XML::Node.new('elem6')
63
+ elem6 << 'Content for element 6'
64
+
65
+ elem3['attr'] = 'baz'
66
+
67
+ # Namespace hack to reduce the numer of times XML:: is typed
68
+ include XML
69
+ root << elem7 = Node.new('foo')
70
+ 1.upto(10) do |i|
71
+ elem7 << n = Node.new('bar')
72
+ n << i
73
+ end
74
+
75
+ format = true
76
+ doc.save('output.xml', format)
77
+
78
+ The file output.xml contains:
79
+
80
+ <?xml version="1.0"?>
81
+ <root_node>
82
+ <elem1 attr1="val1" attr2="val2"/>
83
+ <elem2 attr1="val1" attr2="val2"/>
84
+ <elem3 attr="baz">
85
+ <elem4/>
86
+ <elem5>
87
+ <elem6>Content for element 6</elem6>
88
+ </elem5>
89
+ </elem3>
90
+ <foo>
91
+ <bar>1</bar>
92
+ <bar>2</bar>
93
+ <bar>3</bar>
94
+ <bar>4</bar>
95
+ <bar>5</bar>
96
+ <bar>6</bar>
97
+ <bar>7</bar>
98
+ <bar>8</bar>
99
+ <bar>9</bar>
100
+ <bar>10</bar>
101
+ </foo>
102
+ </root_node>
103
+
104
+ === READING
105
+
106
+ Reading XML is slightly more complex and there are many more ways to
107
+ perform this operation. This reads in and processes the above
108
+ generated XML document, output.xml. This script assumes that the
109
+ structure of the document is already known.
110
+
111
+ # require 'rubygems' # if installed via Gems
112
+ require 'xml/libxml'
113
+ doc = XML::Document.file('output.xml')
114
+ root = doc.root
115
+
116
+ puts "Root element name: #{root.name}"
117
+
118
+ elem3 = root.find('elem3').to_a.first
119
+ puts "Elem3: #{elem3['attr']}"
120
+
121
+ doc.find('//root_node/foo/bar').each do |node|
122
+ puts "Node path: #{node.path} \t Contents: #{node.content}"
123
+ end
124
+
125
+ And your terminal should look like:
126
+
127
+ Root element name: root_node
128
+ Elem3: baz
129
+ Node path: /root_node/foo/bar[1] Contents: 1
130
+ Node path: /root_node/foo/bar[2] Contents: 2
131
+ Node path: /root_node/foo/bar[3] Contents: 3
132
+ Node path: /root_node/foo/bar[4] Contents: 4
133
+ Node path: /root_node/foo/bar[5] Contents: 5
134
+ Node path: /root_node/foo/bar[6] Contents: 6
135
+ Node path: /root_node/foo/bar[7] Contents: 7
136
+ Node path: /root_node/foo/bar[8] Contents: 8
137
+ Node path: /root_node/foo/bar[9] Contents: 9
138
+ Node path: /root_node/foo/bar[10] Contents: 10
139
+
140
+ == MORE INFORMATION
141
+
142
+ If you have any questions, please send email to libxml-devel@rubyforge.org.
143
+
144
+ # $Id: README 143 2007-08-29 21:45:48Z transami $
data/ext/libxml/cbg.c ADDED
@@ -0,0 +1,76 @@
1
+ #include <string.h>
2
+ #include <libxml/xmlIO.h>
3
+ #include "ruby.h"
4
+
5
+ /*
6
+ int xmlRegisterInputCallbacks (xmlInputMatchCallback matchFunc,
7
+ xmlInputOpenCallback openFunc,
8
+ xmlInputReadCallback readFunc,
9
+ xmlInputCloseCallback closeFunc);
10
+
11
+
12
+ int (*xmlInputMatchCallback) (char const *filename);
13
+ void* (*xmlInputOpenCallback) (char const *filename);
14
+ int (*xmlInputReadCallback) (void *context,
15
+ char *buffer,
16
+ int len);
17
+ int (*xmlInputCloseCallback) (void *context);
18
+ */
19
+
20
+ typedef struct deb_doc_context {
21
+ char *buffer;
22
+ char *bpos;
23
+ int remaining;
24
+ } deb_doc_context;
25
+
26
+ int deb_Match (char const *filename) {
27
+ fprintf( stderr, "deb_Match: %s\n", filename );
28
+ if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "deb://", 6)) {
29
+ return(1);
30
+ }
31
+ return(0);
32
+ }
33
+
34
+ void* deb_Open (char const *filename) {
35
+ deb_doc_context *deb_doc;
36
+ VALUE res;
37
+
38
+ deb_doc = (deb_doc_context*)malloc( sizeof(deb_doc_context) );
39
+
40
+ res = rb_funcall( rb_funcall( rb_mKernel, rb_intern("const_get"), 1, rb_str_new2("DEBSystem") ),
41
+ rb_intern("document_query"), 1, rb_str_new2(filename));
42
+ deb_doc->buffer = strdup( StringValuePtr(res) );
43
+ //deb_doc->buffer = strdup("<serepes>serepes</serepes>");
44
+
45
+ deb_doc->bpos = deb_doc->buffer;
46
+ deb_doc->remaining = strlen(deb_doc->buffer);
47
+ return deb_doc;
48
+ }
49
+
50
+ int deb_Read (void *context, char *buffer, int len) {
51
+ deb_doc_context *deb_doc;
52
+ int ret_len;
53
+ deb_doc = (deb_doc_context*)context;
54
+
55
+ if (len >= deb_doc->remaining) {
56
+ ret_len = deb_doc->remaining;
57
+ } else {
58
+ ret_len = len;
59
+ }
60
+ deb_doc->remaining -= ret_len;
61
+ strncpy( buffer, deb_doc->bpos, ret_len );
62
+ deb_doc->bpos += ret_len;
63
+
64
+ return ret_len;
65
+ }
66
+
67
+ int deb_Close (void *context) {
68
+ free( ((deb_doc_context*)context)->buffer );
69
+ free( context );
70
+ return 1;
71
+ }
72
+
73
+
74
+ void deb_register_cbg() {
75
+ xmlRegisterInputCallbacks( deb_Match, deb_Open, deb_Read, deb_Close );
76
+ }
@@ -0,0 +1,308 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rbconfig'
4
+
5
+ def method_missing(s, *args)
6
+ if v = Config::CONFIG[s] || Config::CONFIG[s.upcase]
7
+ return v
8
+ else
9
+ puts "missing: #{s}"
10
+ super
11
+ end
12
+ end
13
+
14
+
15
+ if RUBY_PLATFORM =~ /win32/ # FIXME: Make more robust
16
+
17
+ # We can't use Ruby's standard build procedures
18
+ # on Windows because the Ruby executable is
19
+ # built with VC++ while here we want to build
20
+ # with MingW. So just roll our own...
21
+
22
+ target = "libxml"
23
+
24
+ #RUBY_INCLUDE_DIR = Config::CONFIG["archdir"]
25
+ #RUBY_BIN_DIR = Config::CONFIG["bindir"]
26
+ #RUBY_LIB_DIR = Config::CONFIG["libdir"]
27
+ #RUBY_SHARED_LIB = Config::CONFIG["LIBRUBY"]
28
+ #RUBY_SHARED_DLL = RUBY_SHARED_LIB.gsub(/lib$/, 'dll')
29
+
30
+ #CLEAN.include('*.o')
31
+ #CLOBBER.include('ruby_prof.so')
32
+
33
+ srcs = Dir['../ext/*.c']
34
+
35
+ objs = srcs.collect do |srcfile|
36
+ srcfile = File.basename(srcfile)
37
+ srcfile.chomp(File.extname(srcfile) + '.o')
38
+ end
39
+
40
+ #srcs.each do |srcfile|
41
+ # srcfile = File.basename(srcfile)
42
+ # objfile = srcfile.chomp(File.extname(srcfile) + '.o')
43
+ #
44
+ # if File.mtime(objfile) < File.mtime(srcfile)
45
+ # system "gcc -c -fPIC -O2 -Wall -o #{objfile} #{srcfile} -I#{RUBY_INCLUDE_DIR}"
46
+ # end
47
+ #end
48
+
49
+ #system "gcc -shared -o #{LIBNAME} #{obj} #{RUBY_BIN_DIR}/#{RUBY_SHARED_DLL}"
50
+
51
+ makefile_template = DATA.read
52
+ makefile = eval(makefile_template)
53
+
54
+ File.open('Makefile', 'w'){ |f| f << makefile }
55
+
56
+ else
57
+
58
+ require 'mkmf'
59
+
60
+ if defined?(CFLAGS)
61
+ if CFLAGS.index(CONFIG['CCDLFLAGS'])
62
+ $CFLAGS = CFLAGS
63
+ else
64
+ $CFLAGS = CFLAGS + ' ' + CONFIG['CCDLFLAGS']
65
+ end
66
+ else
67
+ $CFLAGS = CONFIG['CFLAGS']
68
+ end
69
+ $LDFLAGS = CONFIG['LDFLAGS']
70
+ $LIBPATH.push(Config::CONFIG['libdir'])
71
+
72
+ def crash(str)
73
+ printf(" extconf failure: %s\n", str)
74
+ exit 1
75
+ end
76
+
77
+ dir_config('iconv')
78
+ dir_config('xml2')
79
+ dir_config('zlib')
80
+
81
+ have_library('socket','socket')
82
+ have_library('nsl','gethostbyname')
83
+
84
+ unless have_library('m', 'atan')
85
+ # try again for gcc 4.0
86
+ saveflags = $CFLAGS
87
+ $CFLAGS += ' -fno-builtin'
88
+ unless have_library('m', 'atan')
89
+ crash('need libm')
90
+ end
91
+ $CFLAGS = saveflags
92
+ end
93
+
94
+ unless have_library('z', 'inflate') or
95
+ have_library('zlib', 'inflate') or
96
+ have_library('zlib1', 'inflate')
97
+ crash('need zlib')
98
+ else
99
+ $defs.push('-DHAVE_ZLIB_H')
100
+ end
101
+
102
+ unless have_library('iconv','iconv_open') or
103
+ have_library('iconv','libiconv_open') or
104
+ have_library('libiconv', 'libiconv_open') or
105
+ have_library('libiconv', 'iconv_open') or
106
+ have_library('c','iconv_open') or
107
+ have_library('recode','iconv_open') or
108
+ have_library('iconv')
109
+ crash(<<EOL)
110
+ need libiconv.
111
+
112
+ Install the libiconv or try passing one of the following options
113
+ to extconf.rb:
114
+
115
+ --with-iconv-dir=/path/to/iconv
116
+ --with-iconv-lib=/path/to/iconv/lib
117
+ --with-iconv-include=/path/to/iconv/include
118
+ EOL
119
+ end
120
+
121
+ unless (have_library('xml2', 'xmlParseDoc') or
122
+ have_library('libxml2', 'xmlParseDoc') or
123
+ find_library('xml2', '/opt/lib', '/usr/local/lib', '/usr/lib')) and
124
+ (have_header('libxml/xmlversion.h') or
125
+ find_header('libxml/xmlversion.h',
126
+ "#{CONFIG['prefix']}/include",
127
+ '/opt/include/libxml2',
128
+ '/usr/local/include/libxml2',
129
+ '/usr/include/libxml2'))
130
+ crash(<<EOL)
131
+ need libxml2.
132
+
133
+ Install the library or try one of the following options to extconf.rb:
134
+
135
+ --with-xml2-dir=/path/to/libxml2
136
+ --with-xml2-lib=/path/to/libxml2/lib
137
+ --with-xml2-include=/path/to/libxml2/include
138
+ EOL
139
+ end
140
+
141
+ unless have_func('xmlDocFormatDump')
142
+ crash('Your version of libxml2 is too old. Please upgrade.')
143
+ end
144
+
145
+ unless have_func('docbCreateFileParserCtxt')
146
+ crash('Need docbCreateFileParserCtxt')
147
+ end
148
+
149
+ $CFLAGS << ' ' << $INCFLAGS
150
+ #$INSTALLFILES = [["libxml.rb", "$(RUBYLIBDIR)", "../xml"]]
151
+
152
+ create_header()
153
+ create_makefile('libxml_ruby')
154
+ end
155
+
156
+ __END__
157
+
158
+ SHELL = /bin/sh
159
+
160
+ #### Start of system configuration section. ####
161
+
162
+ # I think we can remove all the parts related to the install target
163
+ # since setup.rb and RubyGems handles that on their own. Correct?
164
+
165
+ srcdir = .
166
+ topdir = #{archdir} #/usr/lib/ruby/1.8/x86_64-linux
167
+ hdrdir = $(topdir)
168
+ VPATH = $(srcdir):$(topdir):$(hdrdir)
169
+ prefix = $(DESTDIR)/usr
170
+ exec_prefix = $(DESTDIR)/usr
171
+ sitedir = $(DESTDIR)/usr/local/lib/site_ruby
172
+ rubylibdir = $(libdir)/ruby/$(ruby_version)
173
+ docdir = $(datarootdir)/doc/$(PACKAGE)
174
+ dvidir = $(docdir)
175
+ datarootdir = $(prefix)/share
176
+ archdir = $(rubylibdir)/$(arch)
177
+ sbindir = $(exec_prefix)/sbin
178
+ psdir = $(docdir)
179
+ localedir = $(datarootdir)/locale
180
+ htmldir = $(docdir)
181
+ datadir = $(datarootdir)
182
+ includedir = $(prefix)/include
183
+ infodir = $(prefix)/share/info
184
+ sysconfdir = $(DESTDIR)/etc
185
+ mandir = $(prefix)/share/man
186
+ libdir = $(DESTDIR)/usr/lib
187
+ sharedstatedir = $(prefix)/com
188
+ oldincludedir = $(DESTDIR)/usr/include
189
+ pdfdir = $(docdir)
190
+ sitearchdir = $(sitelibdir)/$(sitearch)
191
+ bindir = $(exec_prefix)/bin
192
+ localstatedir = $(DESTDIR)/var
193
+ sitelibdir = $(sitedir)/$(ruby_version)
194
+ libexecdir = $(prefix)/lib/ruby1.8
195
+
196
+ CC = cc
197
+ LIBRUBY = $(LIBRUBY_SO)
198
+ LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
199
+ LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
200
+ LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
201
+
202
+ RUBY_EXTCONF_H = extconf.h
203
+ CFLAGS = -fPIC -fno-strict-aliasing -g -O2 -fPIC -I. -I/usr/lib/ruby/1.8/x86_64-linux -I. -I/usr/include/libxml2
204
+ INCFLAGS = -I. -I. -I/usr/lib/ruby/1.8/x86_64-linux -I. -I/usr/include/libxml2
205
+ CPPFLAGS = -DRUBY_EXTCONF_H=\"$(RUBY_EXTCONF_H)\"
206
+ CXXFLAGS = $(CFLAGS)
207
+ DLDFLAGS = -L. -rdynamic -Wl,-export-dynamic
208
+ LDSHARED = $(CC) -shared
209
+ AR = ar
210
+ EXEEXT =
211
+
212
+ RUBY_INSTALL_NAME = ruby1.8
213
+ RUBY_SO_NAME = ruby1.8
214
+ arch = x86_64-linux
215
+ sitearch = x86_64-linux
216
+ ruby_version = 1.8
217
+ ruby = /usr/bin/ruby1.8
218
+ RUBY = $(ruby)
219
+ RM = rm -f
220
+ MAKEDIRS = mkdir -p
221
+ INSTALL = /usr/bin/install -c
222
+ INSTALL_PROG = $(INSTALL) -m 0755
223
+ INSTALL_DATA = $(INSTALL) -m 644
224
+ COPY = cp
225
+
226
+ preload =
227
+
228
+ libpath = . $(libdir) /usr/lib
229
+ LIBPATH = -L"." -L"$(libdir)" -L"/usr/lib"
230
+ DEFFILE =
231
+
232
+ CLEANFILES =
233
+ DISTCLEANFILES =
234
+
235
+ extout =
236
+ extout_prefix =
237
+ target_prefix = /xml
238
+ LOCAL_LIBS =
239
+ LIBS = $(LIBRUBYARG_SHARED) -lxml2 -lc -lz -lm -lnsl -lpthread -ldl -lcrypt -lm -lc
240
+
241
+ SRCS = #{srcs.join(' ')}
242
+ OBJS = #{objs.join(' ')}
243
+
244
+ TARGET = #{target}
245
+ DLLIB = $(TARGET).so
246
+ EXTSTATIC =
247
+ STATIC_LIB =
248
+
249
+ RUBYCOMMONDIR = $(sitedir)$(target_prefix)
250
+ RUBYLIBDIR = $(sitelibdir)$(target_prefix)
251
+ RUBYARCHDIR = $(sitearchdir)$(target_prefix)
252
+
253
+ TARGET_SO = $(DLLIB)
254
+ CLEANLIBS = $(TARGET).so $(TARGET).il? $(TARGET).tds $(TARGET).map
255
+ CLEANOBJS = *.o *.a *.s[ol] *.pdb *.exp *.bak
256
+
257
+ all: $(DLLIB)
258
+ static: $(STATIC_LIB)
259
+
260
+ clean:
261
+ @-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
262
+
263
+ distclean: clean
264
+ @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
265
+ @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
266
+
267
+ realclean: distclean
268
+ install: install-so install-rb
269
+
270
+ install-so: $(RUBYARCHDIR)
271
+ install-so: $(RUBYARCHDIR)/$(DLLIB)
272
+ $(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
273
+ $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
274
+ install-rb: pre-install-rb install-rb-default
275
+ install-rb-default: pre-install-rb-default
276
+ pre-install-rb: Makefile
277
+ pre-install-rb-default: Makefile
278
+ $(RUBYARCHDIR):
279
+ $(MAKEDIRS) $@
280
+
281
+ site-install: site-install-so site-install-rb
282
+ site-install-so: install-so
283
+ site-install-rb: install-rb
284
+
285
+ .SUFFIXES: .c .m .cc .cxx .cpp .C .o
286
+
287
+ .cc.o:
288
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
289
+
290
+ .cxx.o:
291
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
292
+
293
+ .cpp.o:
294
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
295
+
296
+ .C.o:
297
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
298
+
299
+ .c.o:
300
+ $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $<
301
+
302
+ $(DLLIB): $(OBJS)
303
+ @-$(RM) $@
304
+ $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
305
+
306
+
307
+ $(OBJS): ruby.h defines.h $(RUBY_EXTCONF_H)
308
+