core-source 0.2.4 → 0.2.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.
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 4
9
- version: 0.2.4
8
+ - 5
9
+ version: 0.2.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Asher
@@ -14,14 +14,23 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-28 00:00:00 -04:00
17
+ date: 2010-11-28 00:00:00 -05:00
18
18
  default_executable:
19
- dependencies: []
20
-
21
- description: |-
22
- Fork of ruby_core_source modified to support CFLAGS and permit use of whichever build system (mkmf, rpmkmf, or other modules) while utilizing core source.
23
-
24
- This fork was created because the existing ruby_core_source takes over the build definition, preventing definition of CFLAGS and other settings that mkmf requires be defined by an enclosing block.
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: minitar
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :runtime
32
+ version_requirements: *id001
33
+ description: Fork of ruby_core_source modified to support CFLAGS and permit use of whichever build system (mkmf, rpmkmf, or other modules) while utilizing core source. This fork was created because the existing ruby_core_source takes over the build definition, preventing definition of CFLAGS and other settings that mkmf requires be defined by an enclosing block.
25
34
  email: asher@ridiculouspower.com
26
35
  executables: []
27
36
 
@@ -29,12 +38,8 @@ extensions: []
29
38
 
30
39
  extra_rdoc_files: []
31
40
 
32
- files:
33
- - lib/contrib/progressbar.rb
34
- - lib/contrib/uri_ext.rb
35
- - lib/core-source.rb
36
- - lib/VERSION.rdoc
37
- - README.rdoc
41
+ files: []
42
+
38
43
  has_rdoc: true
39
44
  homepage: http://rubygems.org/gems/core-source
40
45
  licenses: []
@@ -1,64 +0,0 @@
1
- == Sender
2
-
3
- http://rubygems.org/gems/weakhash
4
-
5
- == DESCRIPTION:
6
-
7
- Fork of ruby_core_source modified to support CFLAGS and permit use of
8
- whichever build system (mkmf, rpmkmf, or other modules) while utilizing
9
- core source.
10
-
11
- This fork was created because the existing ruby_core_source takes over
12
- the build definition, preventing definition of CFLAGS and other settings
13
- that mkmf requires be defined by an enclosing block.
14
-
15
- == INSTALL:
16
-
17
- * sudo gem install rp_ruby_core_source
18
-
19
- == EXAMPLE:
20
-
21
- require 'mkmfmf' # mkmfmf is a drop-in replacement for mkmf; see http://rubygems.org/gems/mkmfmf
22
- require 'core-source'
23
-
24
- target = "gdb_helper"
25
-
26
- required_core_headers = [ "vm_core.h",
27
- "iseq.h",
28
- "eval_intern.h",
29
- "version.h",
30
- "node.h" ]
31
-
32
- default_cflags = "-march=x86-64 -gfull -fcatch-undefined-behavior -fno-common -fsigned-char -pipe"
33
-
34
- # Create our makefile from sources
35
- if ensure_core_headers( required_core_headers )
36
- with_cflags( default_cflags ) do
37
- create_makefile( target )
38
- end
39
- end
40
-
41
- == LICENSE:
42
-
43
- (The MIT License)
44
-
45
- Copyright (c) 2010 Asher
46
-
47
- Permission is hereby granted, free of charge, to any person obtaining
48
- a copy of this software and associated documentation files (the
49
- 'Software'), to deal in the Software without restriction, including
50
- without limitation the rights to use, copy, modify, merge, publish,
51
- distribute, sublicense, and/or sell copies of the Software, and to
52
- permit persons to whom the Software is furnished to do so, subject to
53
- the following conditions:
54
-
55
- The above copyright notice and this permission notice shall be
56
- included in all copies or substantial portions of the Software.
57
-
58
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
59
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
60
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
61
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
62
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
63
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
64
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1 +0,0 @@
1
- 0.1
@@ -1,239 +0,0 @@
1
- # Contrib code taken from ruby_core_source
2
-
3
- # = progressbar.rb
4
- #
5
- # == Copyright (C) 2001 Satoru Takabayashi
6
- #
7
- # Ruby License
8
- #
9
- # This module is free software. You may use, modify, and/or redistribute this
10
- # software under the same terms as Ruby.
11
- #
12
- # This program is distributed in the hope that it will be useful, but WITHOUT
13
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14
- # FOR A PARTICULAR PURPOSE.
15
- #
16
- # == Author(s)
17
- #
18
- # * Satoru Takabayashi
19
-
20
- # Author:: Satoru Takabayashi
21
- # Copyright:: Copyright (c) 2001 Satoru Takabayashi
22
- # License:: Ruby License
23
-
24
- # = Console Progress Bar
25
- #
26
- # Console::ProgressBar is a terminal-based progress bar library.
27
- #
28
- # == Usage
29
- #
30
- # pbar = ConsoleProgressBar.new( "Demo", 100 )
31
- # 100.times { pbar.inc }
32
- # pbar.finish
33
- #
34
-
35
- module Console; end
36
-
37
- class Console::ProgressBar
38
-
39
- def initialize(title, total, out = STDERR)
40
- @title = title
41
- @total = total
42
- @out = out
43
- @bar_length = 80
44
- @bar_mark = "o"
45
- @total_overflow = true
46
- @current = 0
47
- @previous = 0
48
- @is_finished = false
49
- @start_time = Time.now
50
- @format = "%-14s %3d%% %s %s"
51
- @format_arguments = [:title, :percentage, :bar, :stat]
52
- show_progress
53
- end
54
-
55
- private
56
- def convert_bytes (bytes)
57
- if bytes < 1024
58
- sprintf("%6dB", bytes)
59
- elsif bytes < 1024 * 1000 # 1000kb
60
- sprintf("%5.1fKB", bytes.to_f / 1024)
61
- elsif bytes < 1024 * 1024 * 1000 # 1000mb
62
- sprintf("%5.1fMB", bytes.to_f / 1024 / 1024)
63
- else
64
- sprintf("%5.1fGB", bytes.to_f / 1024 / 1024 / 1024)
65
- end
66
- end
67
-
68
- def transfer_rate
69
- bytes_per_second = @current.to_f / (Time.now - @start_time)
70
- sprintf("%s/s", convert_bytes(bytes_per_second))
71
- end
72
-
73
- def bytes
74
- convert_bytes(@current)
75
- end
76
-
77
- def format_time (t)
78
- t = t.to_i
79
- sec = t % 60
80
- min = (t / 60) % 60
81
- hour = t / 3600
82
- sprintf("%02d:%02d:%02d", hour, min, sec);
83
- end
84
-
85
- # ETA stands for Estimated Time of Arrival.
86
- def eta
87
- if @current == 0
88
- "ETA: --:--:--"
89
- else
90
- elapsed = Time.now - @start_time
91
- eta = elapsed * @total / @current - elapsed;
92
- sprintf("ETA: %s", format_time(eta))
93
- end
94
- end
95
-
96
- def elapsed
97
- elapsed = Time.now - @start_time
98
- sprintf("Time: %s", format_time(elapsed))
99
- end
100
-
101
- def stat
102
- if @is_finished then elapsed else eta end
103
- end
104
-
105
- def stat_for_file_transfer
106
- if @is_finished then
107
- sprintf("%s %s %s", bytes, transfer_rate, elapsed)
108
- else
109
- sprintf("%s %s %s", bytes, transfer_rate, eta)
110
- end
111
- end
112
-
113
- def eol
114
- if @is_finished then "\n" else "\r" end
115
- end
116
-
117
- def bar
118
- len = percentage * @bar_length / 100
119
- sprintf("|%s%s|", @bar_mark * len, " " * (@bar_length - len))
120
- end
121
-
122
- def percentage
123
- if @total.zero?
124
- 100
125
- else
126
- @current * 100 / @total
127
- end
128
- end
129
-
130
- def title
131
- @title[0,13] + ":"
132
- end
133
-
134
- def get_width
135
- # FIXME: I don't know how portable it is.
136
- default_width = 80
137
- begin
138
- tiocgwinsz = 0x5413
139
- data = [0, 0, 0, 0].pack("SSSS")
140
- if @out.ioctl(tiocgwinsz, data) >= 0 then
141
- rows, cols, xpixels, ypixels = data.unpack("SSSS")
142
- if cols >= 0 then cols else default_width end
143
- else
144
- default_width
145
- end
146
- rescue Exception
147
- default_width
148
- end
149
- end
150
-
151
- def show
152
- arguments = @format_arguments.map {|method| send(method) }
153
- line = sprintf(@format, *arguments)
154
-
155
- width = get_width
156
- if line.length == width - 1
157
- @out.print(line + eol)
158
- elsif line.length >= width
159
- @bar_length = [@bar_length - (line.length - width + 1), 0].max
160
- if @bar_length == 0 then @out.print(line + eol) else show end
161
- else #line.length < width - 1
162
- @bar_length += width - line.length + 1
163
- show
164
- end
165
- end
166
-
167
- def show_progress
168
- if @total.zero?
169
- cur_percentage = 100
170
- prev_percentage = 0
171
- else
172
- cur_percentage = (@current * 100 / @total).to_i
173
- prev_percentage = (@previous * 100 / @total).to_i
174
- end
175
-
176
- if cur_percentage > prev_percentage || @is_finished
177
- show
178
- end
179
- end
180
-
181
- public
182
- def file_transfer_mode
183
- @format_arguments = [:title, :percentage, :bar, :stat_for_file_transfer]
184
- end
185
-
186
- def bar_mark= (mark)
187
- @bar_mark = String(mark)[0..0]
188
- end
189
-
190
- def total_overflow= (boolv)
191
- @total_overflow = boolv ? true : false
192
- end
193
-
194
- def format= (format)
195
- @format = format
196
- end
197
-
198
- def format_arguments= (arguments)
199
- @format_arguments = arguments
200
- end
201
-
202
- def finish
203
- @current = @total
204
- @is_finished = true
205
- show_progress
206
- end
207
-
208
- def halt
209
- @is_finished = true
210
- show_progress
211
- end
212
-
213
- def set (count)
214
- if count < 0
215
- raise "invalid count less than zero: #{count}"
216
- elsif count > @total
217
- if @total_overflow
218
- @total = count + 1
219
- else
220
- raise "invalid count greater than total: #{count}"
221
- end
222
- end
223
- @current = count
224
- show_progress
225
- @previous = @current
226
- end
227
-
228
- def inc (step = 1)
229
- @current += step
230
- @current = @total if @current > @total
231
- show_progress
232
- @previous = @current
233
- end
234
-
235
- def inspect
236
- "(ProgressBar: #{@current}/#{@total})"
237
- end
238
-
239
- end
@@ -1,291 +0,0 @@
1
- # Contrib code taken from ruby_core_source, modified only to enable progress bar
2
-
3
- #
4
- # I've striped down dependencies on Net::SSH and Facets to
5
- # stay as simple as possible.
6
- #
7
- # Original code from Assaf Arkin, released under Apache License
8
- # (http://buildr.rubyforge.org/license.html)
9
- #
10
- require 'cgi'
11
- require 'uri'
12
- require 'net/http'
13
- require 'net/https'
14
- require 'tempfile'
15
- require 'fileutils'
16
-
17
- # show progress of download
18
- require File.join(File.dirname(__FILE__), 'progressbar')
19
-
20
- # Not quite open-uri, but similar. Provides read and write methods for the resource represented by the URI.
21
- # Currently supports reads for URI::HTTP and writes for URI::SFTP. Also provides convenience methods for
22
- # downloads and uploads.
23
- module URI
24
- # Raised when trying to read/download a resource that doesn't exist.
25
- class NotFoundError < RuntimeError; end
26
-
27
- class << self
28
- # :call-seq:
29
- # read(uri, options?) => content
30
- # read(uri, options?) { |chunk| ... }
31
- #
32
- # Reads from the resource behind this URI. The first form returns the content of the resource,
33
- # the second form yields to the block with each chunk of content (usually more than one).
34
- #
35
- # For example:
36
- # File.open "image.jpg", "w" do |file|
37
- # URI.read("http://example.com/image.jpg") { |chunk| file.write chunk }
38
- # end
39
- # Shorter version:
40
- # File.open("image.jpg", "w") { |file| file.write URI.read("http://example.com/image.jpg") }
41
- #
42
- # Supported options:
43
- # * :modified -- Only download if file modified since this timestamp. Returns nil if not modified.
44
- # * :progress -- Show the progress bar while reading.
45
- def read(uri, options = nil, &block)
46
- uri = URI.parse(uri.to_s) unless URI === uri
47
- uri.read(options, &block)
48
- end
49
-
50
- # :call-seq:
51
- # download(uri, target, options?)
52
- #
53
- # Downloads the resource to the target.
54
- #
55
- # The target may be a file name (string or task), in which case the file is created from the resource.
56
- # The target may also be any object that responds to +write+, e.g. File, StringIO, Pipe.
57
- #
58
- # Use the progress bar when running in verbose mode.
59
- def download(uri, target, options = nil)
60
- uri = URI.parse(uri.to_s) unless URI === uri
61
- uri.download(target, options)
62
- end
63
-
64
- # :call-seq:
65
- # write(uri, content, options?)
66
- # write(uri, options?) { |bytes| .. }
67
- #
68
- # Writes to the resource behind the URI. The first form writes the content from a string or an object
69
- # that responds to +read+ and optionally +size+. The second form writes the content by yielding to the
70
- # block. Each yield should return up to the specified number of bytes, the last yield returns nil.
71
- #
72
- # For example:
73
- # File.open "killer-app.jar", "rb" do |file|
74
- # write("sftp://localhost/jars/killer-app.jar") { |chunk| file.read(chunk) }
75
- # end
76
- # Or:
77
- # write "sftp://localhost/jars/killer-app.jar", File.read("killer-app.jar")
78
- #
79
- # Supported options:
80
- # * :progress -- Show the progress bar while reading.
81
- def write(uri, *args, &block)
82
- uri = URI.parse(uri.to_s) unless URI === uri
83
- uri.write(*args, &block)
84
- end
85
- end
86
-
87
- class Generic
88
-
89
- # :call-seq:
90
- # read(options?) => content
91
- # read(options?) { |chunk| ... }
92
- #
93
- # Reads from the resource behind this URI. The first form returns the content of the resource,
94
- # the second form yields to the block with each chunk of content (usually more than one).
95
- #
96
- # For options, see URI::read.
97
- def read(options = nil, &block)
98
- fail "This protocol doesn't support reading (yet, how about helping by implementing it?)"
99
- end
100
-
101
- # :call-seq:
102
- # download(target, options?)
103
- #
104
- # Downloads the resource to the target.
105
- #
106
- # The target may be a file name (string or task), in which case the file is created from the resource.
107
- # The target may also be any object that responds to +write+, e.g. File, StringIO, Pipe.
108
- #
109
- # Use the progress bar when running in verbose mode.
110
- def download(target, options = {})
111
- case target
112
- when String
113
- # If download breaks we end up with a partial file which is
114
- # worse than not having a file at all, so download to temporary
115
- # file and then move over.
116
- modified = File.stat(target).mtime if File.exist?(target)
117
- temp = nil
118
- Tempfile.open(File.basename(target)) do |tf|
119
- tf.binmode
120
- read(options.merge(:modified => modified)) { |chunk| tf.write chunk }
121
- temp = tf
122
- end
123
- FileUtils.mkpath(File.dirname(target))
124
- FileUtils.move(temp.path, target)
125
- when File
126
- read(options.merge(:modified => target.mtime)) { |chunk| target.write chunk }
127
- target.flush
128
- else
129
- raise ArgumentError, "Expecting a target that is either a file name (string, task) or object that responds to write (file, pipe)." unless target.respond_to?(:write)
130
- read(options) { |chunk| target.write chunk }
131
- target.flush
132
- end
133
- end
134
-
135
- # :call-seq:
136
- # write(content, options?)
137
- # write(options?) { |bytes| .. }
138
- #
139
- # Writes to the resource behind the URI. The first form writes the content from a string or an object
140
- # that responds to +read+ and optionally +size+. The second form writes the content by yielding to the
141
- # block. Each yield should return up to the specified number of bytes, the last yield returns nil.
142
- #
143
- # For options, see URI::write.
144
- def write(*args, &block)
145
- options = args.pop if Hash === args.last
146
- options ||= {}
147
- if String === args.first
148
- ios = StringIO.new(args.first, "r")
149
- write(options.merge(:size => args.first.size)) { |bytes| ios.read(bytes) }
150
- elsif args.first.respond_to?(:read)
151
- size = args.first.size rescue nil
152
- write({ :size => size }.merge(options)) { |bytes| args.first.read(bytes) }
153
- elsif args.empty? && block
154
- write_internal(options, &block)
155
- else
156
- raise ArgumentError, "Either give me the content, or pass me a block, otherwise what would I upload?"
157
- end
158
- end
159
-
160
- protected
161
-
162
- # :call-seq:
163
- # with_progress_bar(enable, file_name, size) { |progress| ... }
164
- #
165
- # Displays a progress bar while executing the block. The first argument must be true for the
166
- # progress bar to show (TTY output also required), as a convenient for selectively using the
167
- # progress bar from a single block.
168
- #
169
- # The second argument provides a filename to display, the third its size in bytes.
170
- #
171
- # The block is yielded with a progress object that implements a single method.
172
- # Call << for each block of bytes down/uploaded.
173
- def with_progress_bar(enable, file_name, size) #:nodoc:
174
- if enable && $stdout.isatty
175
- progress_bar = Console::ProgressBar.new(file_name, size)
176
- # Extend the progress bar so we can display count/total.
177
- class << progress_bar
178
- def total()
179
- convert_bytes(@total)
180
- end
181
- end
182
- # Squeeze the filename into 30 characters.
183
- if file_name.size > 30
184
- base, ext = File.basename(file_name), File.extname(file_name)
185
- truncated = "#{base[0..26-ext.to_s.size]}..#{ext}"
186
- else
187
- truncated = file_name
188
- end
189
- progress_bar.format = "#{CGI.unescape(truncated)}: %3d%% %s %s/%s %s"
190
- progress_bar.format_arguments = [:percentage, :bar, :bytes, :total, :stat]
191
- progress_bar.bar_mark = "o"
192
-
193
- begin
194
- class << progress_bar
195
- def <<(bytes)
196
- inc bytes.respond_to?(:size) ? bytes.size : bytes
197
- end
198
- end
199
- yield progress_bar
200
- ensure
201
- progress_bar.finish
202
- end
203
- else
204
- progress_bar = Object.new
205
- class << progress_bar
206
- def <<(bytes)
207
- end
208
- end
209
- yield progress_bar
210
- end
211
- end
212
-
213
- # :call-seq:
214
- # proxy_uri() => URI?
215
- #
216
- # Returns the proxy server to use. Obtains the proxy from the relevant environment variable (e.g. HTTP_PROXY).
217
- # Supports exclusions based on host name and port number from environment variable NO_PROXY.
218
- def proxy_uri()
219
- proxy = ENV["#{scheme.upcase}_PROXY"]
220
- proxy = URI.parse(proxy) if String === proxy
221
- excludes = (ENV["NO_PROXY"] || "").split(/\s*,\s*/).compact
222
- excludes = excludes.map { |exclude| exclude =~ /:\d+$/ ? exclude : "#{exclude}:*" }
223
- return proxy unless excludes.any? { |exclude| File.fnmatch(exclude, "#{host}:#{port}") }
224
- end
225
-
226
- def write_internal(options, &block) #:nodoc:
227
- fail "This protocol doesn't support writing (yet, how about helping by implementing it?)"
228
- end
229
- end
230
-
231
- class HTTP #:nodoc:
232
-
233
- # See URI::Generic#read
234
- def read(options = nil, &block)
235
- options ||= {}
236
- connect do |http|
237
- puts "Requesting #{self}" #if verbose
238
- headers = { 'If-Modified-Since' => CGI.rfc1123_date(options[:modified].utc) } if options[:modified]
239
- request = Net::HTTP::Get.new(request_uri.empty? ? '/' : request_uri, headers)
240
- request.basic_auth self.user, self.password if self.user
241
- http.request request do |response|
242
- case response
243
- when Net::HTTPNotModified
244
- # No modification, nothing to do.
245
- puts 'Not modified since last download' #if verbose
246
- return nil
247
- when Net::HTTPRedirection
248
- # Try to download from the new URI, handle relative redirects.
249
- puts "Redirected to #{response['Location']}" #if verbose
250
- return (self + URI.parse(response['location'])).read(options, &block)
251
- when Net::HTTPOK
252
- puts "Downloading #{self}" #if verbose
253
- result = nil
254
- with_progress_bar options[:progress], path.split('/').last, response.content_length do |progress|
255
- if block
256
- response.read_body do |chunk|
257
- block.call chunk
258
- progress << chunk
259
- end
260
- else
261
- result = ''
262
- response.read_body do |chunk|
263
- result << chunk
264
- progress << chunk
265
- end
266
- end
267
- end
268
- return result
269
- when Net::HTTPNotFound
270
- raise NotFoundError, "Looking for #{self} and all I got was a 404!"
271
- else
272
- raise RuntimeError, "Failed to download #{self}: #{response.message}"
273
- end
274
- end
275
- end
276
- end
277
-
278
- private
279
-
280
- def connect
281
- if proxy = proxy_uri
282
- proxy = URI.parse(proxy) if String === proxy
283
- http = Net::HTTP.new(host, port, proxy.host, proxy.port, proxy.user, proxy.password)
284
- else
285
- http = Net::HTTP.new(host, port)
286
- end
287
- http.use_ssl = true if self.instance_of? URI::HTTPS
288
- yield http
289
- end
290
- end
291
- end
@@ -1,61 +0,0 @@
1
-
2
- require_relative 'contrib/uri_ext.rb'
3
- require_relative 'contrib/progressbar.rb'
4
-
5
- require 'rbconfig'
6
- require 'yaml'
7
- require 'archive/tar/minitar'
8
- require 'zlib'
9
- require 'fileutils'
10
- require 'tmpdir'
11
- require 'tempfile'
12
-
13
- STATUS_BAR_WIDTH = 80
14
-
15
- def ensure_core_headers( headers )
16
-
17
- unless headers.select { |header| have_header( header ) }.empty?
18
- return true
19
- end
20
-
21
- ruby_dir = ""
22
- if RUBY_PATCHLEVEL < 0
23
- Tempfile.open("preview-revision") { |temp|
24
- uri_path = "http://cloud.github.com/downloads/mark-moseley/ruby_core_source/preview_revision.yml"
25
- uri = URI.parse(uri_path)
26
- uri.download(temp, {:progress => true})
27
- revision_map = YAML::load(File.open(temp.path))
28
- ruby_dir = revision_map[RUBY_REVISION]
29
- return false if ruby_dir.nil?
30
- }
31
- else
32
- ruby_dir = "ruby-" + RUBY_VERSION.to_s + "-p" + RUBY_PATCHLEVEL.to_s
33
- end
34
-
35
- #
36
- # Download the headers
37
- #
38
- uri_path = "http://ftp.ruby-lang.org/pub/ruby/1.9/" + ruby_dir + ".tar.gz"
39
- Tempfile.open("ruby-src") { |temp|
40
-
41
- temp.binmode
42
- uri = URI.parse(uri_path)
43
- uri.download(temp, {:progress => true})
44
-
45
- tgz = Zlib::GzipReader.new(File.open(temp, "rb"))
46
-
47
- Dir.mktmpdir { |dir|
48
- inc_dir = dir + "/" + ruby_dir + "/*.inc"
49
- hdr_dir = dir + "/" + ruby_dir + "/*.h"
50
- Archive::Tar::Minitar.unpack(tgz, dir)
51
- FileUtils.cp( Dir.glob([ inc_dir, hdr_dir ] ), Config::CONFIG["rubyhdrdir"])
52
- }
53
- }
54
-
55
- return true unless headers.select { |header| have_header( header ) }.empty?
56
-
57
- raise LoadError 'Could not find core headers ' + headers.join( ', ' ) + '.'
58
-
59
-
60
- end
61
-