amalgalite 0.4.2-x86-mswin32-60
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.
- data/HISTORY +81 -0
- data/LICENSE +29 -0
- data/README +40 -0
- data/bin/amalgalite-pack-into-db +155 -0
- data/examples/a.rb +9 -0
- data/examples/blob.rb +105 -0
- data/examples/bootstrap.rb +36 -0
- data/examples/gem-db.rb +94 -0
- data/examples/requires.rb +54 -0
- data/examples/schema-info.rb +34 -0
- data/ext/amalgalite3.c +201 -0
- data/ext/amalgalite3.h +121 -0
- data/ext/amalgalite3_blob.c +241 -0
- data/ext/amalgalite3_constants.c +221 -0
- data/ext/amalgalite3_database.c +550 -0
- data/ext/amalgalite3_requires_bootstrap.c +210 -0
- data/ext/amalgalite3_statement.c +628 -0
- data/ext/extconf.rb +19 -0
- data/ext/gen_constants.rb +130 -0
- data/ext/rbconfig-mingw.rb +178 -0
- data/ext/sqlite3.c +97092 -0
- data/ext/sqlite3.h +6364 -0
- data/ext/sqlite3_options.h +4 -0
- data/ext/sqlite3ext.h +372 -0
- data/gemspec.rb +55 -0
- data/lib/amalgalite.rb +33 -0
- data/lib/amalgalite/blob.rb +186 -0
- data/lib/amalgalite/boolean.rb +42 -0
- data/lib/amalgalite/column.rb +86 -0
- data/lib/amalgalite/core_ext/kernel/require.rb +14 -0
- data/lib/amalgalite/database.rb +514 -0
- data/lib/amalgalite/index.rb +43 -0
- data/lib/amalgalite/paths.rb +70 -0
- data/lib/amalgalite/profile_tap.rb +130 -0
- data/lib/amalgalite/requires.rb +112 -0
- data/lib/amalgalite/schema.rb +115 -0
- data/lib/amalgalite/sqlite3.rb +6 -0
- data/lib/amalgalite/sqlite3/constants.rb +82 -0
- data/lib/amalgalite/sqlite3/database/status.rb +69 -0
- data/lib/amalgalite/sqlite3/status.rb +61 -0
- data/lib/amalgalite/sqlite3/version.rb +38 -0
- data/lib/amalgalite/statement.rb +394 -0
- data/lib/amalgalite/table.rb +36 -0
- data/lib/amalgalite/taps.rb +2 -0
- data/lib/amalgalite/taps/console.rb +27 -0
- data/lib/amalgalite/taps/io.rb +71 -0
- data/lib/amalgalite/trace_tap.rb +35 -0
- data/lib/amalgalite/type_map.rb +63 -0
- data/lib/amalgalite/type_maps/default_map.rb +167 -0
- data/lib/amalgalite/type_maps/storage_map.rb +41 -0
- data/lib/amalgalite/type_maps/text_map.rb +23 -0
- data/lib/amalgalite/version.rb +37 -0
- data/lib/amalgalite/view.rb +26 -0
- data/lib/amalgalite3.so +0 -0
- data/spec/amalgalite_spec.rb +4 -0
- data/spec/blob_spec.rb +81 -0
- data/spec/boolean_spec.rb +23 -0
- data/spec/database_spec.rb +238 -0
- data/spec/default_map_spec.rb +87 -0
- data/spec/integeration_spec.rb +111 -0
- data/spec/paths_spec.rb +28 -0
- data/spec/schema_spec.rb +60 -0
- data/spec/spec_helper.rb +25 -0
- data/spec/sqlite3/constants_spec.rb +65 -0
- data/spec/sqlite3/database_status_spec.rb +36 -0
- data/spec/sqlite3/status_spec.rb +18 -0
- data/spec/sqlite3/version_spec.rb +14 -0
- data/spec/sqlite3_spec.rb +23 -0
- data/spec/statement_spec.rb +134 -0
- data/spec/storage_map_spec.rb +41 -0
- data/spec/tap_spec.rb +59 -0
- data/spec/text_map_spec.rb +23 -0
- data/spec/type_map_spec.rb +17 -0
- data/spec/version_spec.rb +9 -0
- data/tasks/announce.rake +39 -0
- data/tasks/config.rb +110 -0
- data/tasks/distribution.rake +53 -0
- data/tasks/documentation.rake +33 -0
- data/tasks/extension.rake +100 -0
- data/tasks/rspec.rake +32 -0
- data/tasks/rubyforge.rake +59 -0
- data/tasks/utils.rb +80 -0
- metadata +192 -0
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec'
|
3
|
+
|
4
|
+
$: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
|
5
|
+
require 'amalgalite/type_maps/storage_map'
|
6
|
+
|
7
|
+
describe Amalgalite::TypeMaps::StorageMap do
|
8
|
+
before(:each) do
|
9
|
+
@map = Amalgalite::TypeMaps::StorageMap.new
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#bind_type_of" do
|
13
|
+
|
14
|
+
it "Float is bound to DataType::FLOAT" do
|
15
|
+
@map.bind_type_of( 3.14 ).should == ::Amalgalite::SQLite3::Constants::DataType::FLOAT
|
16
|
+
end
|
17
|
+
|
18
|
+
it "Fixnum is bound to DataType::INTGER" do
|
19
|
+
@map.bind_type_of( 42 ).should == ::Amalgalite::SQLite3::Constants::DataType::INTEGER
|
20
|
+
end
|
21
|
+
|
22
|
+
it "nil is bound to DataType::NULL" do
|
23
|
+
@map.bind_type_of( nil ).should == ::Amalgalite::SQLite3::Constants::DataType::NULL
|
24
|
+
end
|
25
|
+
|
26
|
+
it "::Amalgalite::Blob is bound to DataType::BLOB" do
|
27
|
+
@map.bind_type_of( ::Amalgalite::Blob.new( :string => "testing mapping", :column => true ) ).should == ::Amalgalite::SQLite3::Constants::DataType::BLOB
|
28
|
+
end
|
29
|
+
|
30
|
+
it "everything else is bound to DataType::TEXT" do
|
31
|
+
@map.bind_type_of( "everything else" ).should == ::Amalgalite::SQLite3::Constants::DataType::TEXT
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#result_value_of" do
|
37
|
+
it "returns the original object for everything passed in" do
|
38
|
+
@map.result_value_of( "doesn't matter", 42 ).should == 42
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/spec/tap_spec.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec'
|
3
|
+
|
4
|
+
$: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
|
5
|
+
require 'amalgalite'
|
6
|
+
require 'amalgalite/trace_tap'
|
7
|
+
require 'amalgalite/profile_tap'
|
8
|
+
require 'amalgalite/taps/console'
|
9
|
+
require 'stringio'
|
10
|
+
|
11
|
+
describe Amalgalite::TraceTap do
|
12
|
+
it "wraps up an object and delegates the 'trace' method to a method on that object" do
|
13
|
+
s = StringIO.new
|
14
|
+
tt = ::Amalgalite::TraceTap.new( s, 'puts' )
|
15
|
+
tt.trace('test trace')
|
16
|
+
s.string.should == "test trace\n"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "raises an error if an the wrapped object does not respond to the indicated method" do
|
20
|
+
lambda{ ::Amalgalite::TraceTap.new( Object.new ) }.should raise_error( Amalgalite::Error )
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe Amalgalite::ProfileTap do
|
25
|
+
it "raises an error if an the wrapped object does not respond to the indicated method" do
|
26
|
+
lambda{ ::Amalgalite::ProfileTap.new( Object.new ) }.should raise_error( Amalgalite::Error )
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe Amalgalite::Taps::StringIO do
|
31
|
+
it "dumps profile information" do
|
32
|
+
s = ::Amalgalite::Taps::StringIO.new
|
33
|
+
s.profile( 'test', 42 )
|
34
|
+
s.dump_profile
|
35
|
+
s.string.should == "42 : test\ntest[test] => sum: 42, sumsq: 1764, n: 1, mean: 42.000000, stddev: 0.000000, min: 42, max: 42\n"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "has a stdout tap" do
|
39
|
+
s = ::Amalgalite::Taps::Stdout.new
|
40
|
+
end
|
41
|
+
|
42
|
+
it "has a stderr tap" do
|
43
|
+
s = ::Amalgalite::Taps::Stderr.new
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe Amalgalite::ProfileSampler do
|
48
|
+
it "aggregates samples" do
|
49
|
+
s = Amalgalite::ProfileSampler.new( 'test1' )
|
50
|
+
s.sample( 42 )
|
51
|
+
s.sample( 84 )
|
52
|
+
s.sample( 21 )
|
53
|
+
h = s.to_h
|
54
|
+
h['min'].should == 21
|
55
|
+
h['max'].should == 84
|
56
|
+
h['mean'].should == 49
|
57
|
+
h['n'].should == 3
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec'
|
3
|
+
|
4
|
+
$: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
|
5
|
+
require 'amalgalite/type_maps/text_map'
|
6
|
+
|
7
|
+
describe Amalgalite::TypeMaps::TextMap do
|
8
|
+
before(:each) do
|
9
|
+
@map = Amalgalite::TypeMaps::TextMap.new
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#bind_type_of" do
|
13
|
+
it "returnes text for everything" do
|
14
|
+
@map.bind_type_of( 3.14 ).should == ::Amalgalite::SQLite3::Constants::DataType::TEXT
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#result_value_of" do
|
19
|
+
it "returns the string value of the object for everything passed in" do
|
20
|
+
@map.result_value_of( "doesn't matter", 42 ).should == "42"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec'
|
3
|
+
|
4
|
+
$: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
|
5
|
+
require 'amalgalite/type_map'
|
6
|
+
|
7
|
+
describe Amalgalite::TypeMap do
|
8
|
+
it "#bind_type_of raises NotImplemented error" do
|
9
|
+
tm = Amalgalite::TypeMap.new
|
10
|
+
lambda { tm.bind_type_of( Object.new ) }.should raise_error( NotImplementedError )
|
11
|
+
end
|
12
|
+
|
13
|
+
it "#result_value_of raises NotImplemented error" do
|
14
|
+
tm = Amalgalite::TypeMap.new
|
15
|
+
lambda { tm.result_value_of( "foo", Object.new ) }.should raise_error( NotImplementedError )
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__),"spec_helper.rb"))
|
2
|
+
require 'amalgalite/version'
|
3
|
+
|
4
|
+
describe "Amalgalite::Version" do
|
5
|
+
it "should have a version string" do
|
6
|
+
Amalgalite::Version.to_s.should =~ /\d+\.\d+\.\d+/
|
7
|
+
Amalgalite::VERSION.should =~ /\d+\.\d+\.\d+/
|
8
|
+
end
|
9
|
+
end
|
data/tasks/announce.rake
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'tasks/config'
|
2
|
+
#-------------------------------------------------------------------------------
|
3
|
+
# announcement methods
|
4
|
+
#-------------------------------------------------------------------------------
|
5
|
+
|
6
|
+
proj_config = Configuration.for('project')
|
7
|
+
namespace :announce do
|
8
|
+
desc "create email for ruby-talk"
|
9
|
+
task :email do
|
10
|
+
info = Utils.announcement
|
11
|
+
|
12
|
+
File.open("email.txt", "w") do |mail|
|
13
|
+
mail.puts "From: #{proj_config.author} <#{proj_config.email}>"
|
14
|
+
mail.puts "To: ruby-talk@ruby-lang.org"
|
15
|
+
mail.puts "Date: #{Time.now.rfc2822}"
|
16
|
+
mail.puts "Subject: [ANN] #{info[:subject]}"
|
17
|
+
mail.puts
|
18
|
+
mail.puts info[:title]
|
19
|
+
mail.puts
|
20
|
+
mail.puts " gem install #{Amalgalite::GEM_SPEC.name}"
|
21
|
+
mail.puts
|
22
|
+
mail.puts info[:urls]
|
23
|
+
mail.puts
|
24
|
+
mail.puts info[:description]
|
25
|
+
mail.puts
|
26
|
+
mail.puts "{{ Release notes for Version #{Amalgalite::VERSION} }}"
|
27
|
+
mail.puts
|
28
|
+
mail.puts info[:release_notes]
|
29
|
+
mail.puts
|
30
|
+
end
|
31
|
+
puts "Created the following as email.txt:"
|
32
|
+
puts "-" * 72
|
33
|
+
puts File.read("email.txt")
|
34
|
+
puts "-" * 72
|
35
|
+
end
|
36
|
+
|
37
|
+
CLOBBER << "email.txt"
|
38
|
+
end
|
39
|
+
|
data/tasks/config.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'configuration'
|
2
|
+
|
3
|
+
require 'rake'
|
4
|
+
require 'tasks/utils'
|
5
|
+
|
6
|
+
#-----------------------------------------------------------------------
|
7
|
+
# General project configuration
|
8
|
+
#-----------------------------------------------------------------------
|
9
|
+
Configuration.for('project') {
|
10
|
+
name "amalgalite"
|
11
|
+
version Amalgalite::Version.to_s
|
12
|
+
author "Jeremy Hinegardner"
|
13
|
+
email "jeremy at copiousfreetime dot org"
|
14
|
+
homepage "http://copiousfreetime.rubyforge.org/amalgalite/"
|
15
|
+
description Utils.section_of("README", "description")
|
16
|
+
summary description.split(".").first
|
17
|
+
history "HISTORY"
|
18
|
+
license FileList["LICENSE"]
|
19
|
+
readme "README"
|
20
|
+
}
|
21
|
+
|
22
|
+
#-----------------------------------------------------------------------
|
23
|
+
# Packaging
|
24
|
+
#-----------------------------------------------------------------------
|
25
|
+
Configuration.for('packaging') {
|
26
|
+
# files in the project
|
27
|
+
proj_conf = Configuration.for('project')
|
28
|
+
files {
|
29
|
+
bin FileList["bin/*"]
|
30
|
+
ext FileList["ext/*.{c,h,rb}"]
|
31
|
+
examples FileList["examples/*"]
|
32
|
+
lib FileList["lib/**/*.rb"]
|
33
|
+
test FileList["spec/**/*.rb", "test/**/*.rb"]
|
34
|
+
data FileList["data/**/*"]
|
35
|
+
tasks FileList["tasks/**/*.r{ake,b}"]
|
36
|
+
rdoc FileList[proj_conf.readme, proj_conf.history,
|
37
|
+
proj_conf.license] + lib + FileList["ext/amalgalite3*.c"]
|
38
|
+
all bin + ext + examples + lib + test + data + rdoc + tasks
|
39
|
+
}
|
40
|
+
|
41
|
+
puts "ext files = #{files.ext}"
|
42
|
+
|
43
|
+
# ways to package the results
|
44
|
+
formats {
|
45
|
+
tgz true
|
46
|
+
zip true
|
47
|
+
gem Configuration::Table.has_key?('gem')
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
#-----------------------------------------------------------------------
|
52
|
+
# Gem packaging
|
53
|
+
#-----------------------------------------------------------------------
|
54
|
+
Configuration.for("gem") {
|
55
|
+
spec "gemspec.rb"
|
56
|
+
Configuration.for('packaging').files.all << spec
|
57
|
+
}
|
58
|
+
|
59
|
+
#-----------------------------------------------------------------------
|
60
|
+
# Testing
|
61
|
+
# - change mode to 'testunit' to use unit testing
|
62
|
+
#-----------------------------------------------------------------------
|
63
|
+
Configuration.for('test') {
|
64
|
+
mode "spec"
|
65
|
+
files Configuration.for("packaging").files.test
|
66
|
+
options %w[ --format specdoc --color ]
|
67
|
+
ruby_opts %w[ ]
|
68
|
+
}
|
69
|
+
|
70
|
+
#-----------------------------------------------------------------------
|
71
|
+
# Rcov
|
72
|
+
#-----------------------------------------------------------------------
|
73
|
+
Configuration.for('rcov') {
|
74
|
+
output_dir "coverage"
|
75
|
+
libs %w[ lib ]
|
76
|
+
rcov_opts %w[ --html ]
|
77
|
+
ruby_opts %w[ ]
|
78
|
+
test_files Configuration.for('packaging').files.test
|
79
|
+
}
|
80
|
+
|
81
|
+
#-----------------------------------------------------------------------
|
82
|
+
# Rdoc
|
83
|
+
#-----------------------------------------------------------------------
|
84
|
+
Configuration.for('rdoc') {
|
85
|
+
files Configuration.for('packaging').files.rdoc
|
86
|
+
main_page files.first
|
87
|
+
title Configuration.for('project').name
|
88
|
+
options %w[ --line-numbers --inline-source ] #-f darkfish ]
|
89
|
+
output_dir "doc"
|
90
|
+
}
|
91
|
+
|
92
|
+
#-----------------------------------------------------------------------
|
93
|
+
# Extensions
|
94
|
+
#-----------------------------------------------------------------------
|
95
|
+
Configuration.for('extension') {
|
96
|
+
#configs Configuration.for('packaging').files.ext.find_all { |x| %w[ mkrf_conf.rb extconf.rb ].include?(File.basename(x)) }
|
97
|
+
configs Configuration.for('packaging').files.ext.find_all { |x| %w[ extconf.rb ].include?(File.basename(x)) }
|
98
|
+
}
|
99
|
+
|
100
|
+
#-----------------------------------------------------------------------
|
101
|
+
# Rubyforge
|
102
|
+
#-----------------------------------------------------------------------
|
103
|
+
Configuration.for('rubyforge') {
|
104
|
+
project "copiousfreetime"
|
105
|
+
user "jjh"
|
106
|
+
host "rubyforge.org"
|
107
|
+
rdoc_location "#{user}@#{host}:/var/www/gforge-projects/#{project}/amalgalite/"
|
108
|
+
}
|
109
|
+
|
110
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'tasks/config'
|
2
|
+
|
3
|
+
#-------------------------------------------------------------------------------
|
4
|
+
# Distribution and Packaging
|
5
|
+
#-------------------------------------------------------------------------------
|
6
|
+
if pkg_config = Configuration.for_if_exist?("packaging") then
|
7
|
+
|
8
|
+
require 'gemspec'
|
9
|
+
require 'rake/gempackagetask'
|
10
|
+
require 'rake/contrib/sshpublisher'
|
11
|
+
|
12
|
+
namespace :dist do
|
13
|
+
|
14
|
+
Rake::GemPackageTask.new(Amalgalite::GEM_SPEC) do |pkg|
|
15
|
+
pkg.need_tar = pkg_config.formats.tgz
|
16
|
+
pkg.need_zip = pkg_config.formats.zip
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "Install as a gem"
|
20
|
+
task :install => [:clobber, :package] do
|
21
|
+
sh "sudo gem install --local pkg/#{Amalgalite::GEM_SPEC.full_name}.gem"
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "Uninstall gem"
|
25
|
+
task :uninstall do
|
26
|
+
sh "sudo gem uninstall -i #{Amalgalite::GEM_SPEC.name} -x"
|
27
|
+
end
|
28
|
+
|
29
|
+
desc "dump gemspec"
|
30
|
+
task :gemspec do
|
31
|
+
puts Amalgalite::GEM_SPEC.to_ruby
|
32
|
+
end
|
33
|
+
|
34
|
+
desc "reinstall gem"
|
35
|
+
task :reinstall => [:uninstall, :repackage, :install]
|
36
|
+
|
37
|
+
desc "package the windows gem"
|
38
|
+
task :package_win => "ext:build_win" do
|
39
|
+
cp "ext/amalgalite3.so", "lib", :verbose => true
|
40
|
+
Gem::Builder.new( Amalgalite::GEM_SPEC_WIN ).build
|
41
|
+
mv Dir["*.gem"].first, "pkg"
|
42
|
+
end
|
43
|
+
|
44
|
+
desc "distribute copiously"
|
45
|
+
task :copious => [:package, :package_win] do
|
46
|
+
gems = Amalgalite::SPECS.collect { |s| "#{s.full_name}.gem" }
|
47
|
+
Rake::SshFilePublisher.new('jeremy@copiousfreetime.org',
|
48
|
+
'/var/www/vhosts/www.copiousfreetime.org/htdocs/gems/gems',
|
49
|
+
'pkg', *gems).upload
|
50
|
+
sh "ssh jeremy@copiousfreetime.org rake -f /var/www/vhosts/www.copiousfreetime.org/htdocs/gems/Rakefile"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'tasks/config'
|
2
|
+
|
3
|
+
#-----------------------------------------------------------------------
|
4
|
+
# Documentation
|
5
|
+
#-----------------------------------------------------------------------
|
6
|
+
|
7
|
+
if rdoc_config = Configuration.for_if_exist?('rdoc') then
|
8
|
+
|
9
|
+
namespace :doc do
|
10
|
+
|
11
|
+
require 'rake/rdoctask'
|
12
|
+
#gem 'darkfish-rdoc'
|
13
|
+
#require 'darkfish-rdoc'
|
14
|
+
|
15
|
+
# generating documentation locally
|
16
|
+
Rake::RDocTask.new do |rdoc|
|
17
|
+
rdoc.rdoc_dir = rdoc_config.output_dir
|
18
|
+
rdoc.options = rdoc_config.options
|
19
|
+
rdoc.rdoc_files = rdoc_config.files
|
20
|
+
rdoc.title = rdoc_config.title
|
21
|
+
rdoc.main = rdoc_config.main_page
|
22
|
+
end
|
23
|
+
|
24
|
+
if rubyforge_config = Configuration.for_if_exist?('rubyforge') then
|
25
|
+
desc "Deploy the RDoc documentation to #{rubyforge_config.rdoc_location}"
|
26
|
+
task :deploy => :rerdoc do
|
27
|
+
sh "rsync -zav --delete #{rdoc_config.output_dir}/ #{rubyforge_config.rdoc_location}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'tasks/config'
|
2
|
+
require 'pathname'
|
3
|
+
require 'zlib'
|
4
|
+
require 'archive/tar/minitar'
|
5
|
+
|
6
|
+
#-----------------------------------------------------------------------
|
7
|
+
# Extensions
|
8
|
+
#-----------------------------------------------------------------------
|
9
|
+
|
10
|
+
if ext_config = Configuration.for_if_exist?('extension') then
|
11
|
+
namespace :ext do
|
12
|
+
desc "Build the extension(s)"
|
13
|
+
task :build do
|
14
|
+
ext_config.configs.each do |extension|
|
15
|
+
path = Pathname.new(extension)
|
16
|
+
parts = path.split
|
17
|
+
conf = parts.last
|
18
|
+
Dir.chdir(path.dirname) do |d|
|
19
|
+
ruby conf.to_s
|
20
|
+
#sh "rake default"
|
21
|
+
sh "make"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "Build the extensions for windows"
|
27
|
+
task :build_win => :clobber do
|
28
|
+
ext_config.configs.each do |extension|
|
29
|
+
path = Pathname.new( extension )
|
30
|
+
parts = path.split
|
31
|
+
conf = parts.last
|
32
|
+
Dir.chdir( path.dirname ) do |d|
|
33
|
+
cp "rbconfig-mingw.rb", "rbconfig.rb"
|
34
|
+
sh "ruby -I. extconf.rb"
|
35
|
+
sh "make"
|
36
|
+
rm_f "rbconfig.rb"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
task :clean do
|
42
|
+
ext_config.configs.each do |extension|
|
43
|
+
path = Pathname.new(extension)
|
44
|
+
parts = path.split
|
45
|
+
conf = parts.last
|
46
|
+
Dir.chdir(path.dirname) do |d|
|
47
|
+
#sh "rake clean"
|
48
|
+
sh "make clean"
|
49
|
+
rm_f "rbconfig.rb"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
task :clobber do
|
55
|
+
ext_config.configs.each do |extension|
|
56
|
+
path = Pathname.new(extension)
|
57
|
+
parts = path.split
|
58
|
+
conf = parts.last
|
59
|
+
Dir.chdir(path.dirname) do |d|
|
60
|
+
#sh "rake clobber"
|
61
|
+
if File.exist?( "Makefile") then
|
62
|
+
sh "make distclean"
|
63
|
+
end
|
64
|
+
rm_f "rbconfig.rb"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
desc "Download and integrate the next version of sqlite"
|
70
|
+
task :update_sqlite do
|
71
|
+
next_version = ENV['VERSION']
|
72
|
+
puts "downloading ..."
|
73
|
+
url = URI.parse("http://sqlite.org/sqlite-amalgamation-#{next_version}.tar.gz")
|
74
|
+
file = "tmp/#{File.basename( url.path ) }"
|
75
|
+
File.open( file, "wb+") do |f|
|
76
|
+
res = Net::HTTP.get_response( url )
|
77
|
+
f.write( res.body )
|
78
|
+
end
|
79
|
+
|
80
|
+
puts "extracting..."
|
81
|
+
upstream_files = %w[ sqlite3.h sqlite3.c sqlite3ext.h ]
|
82
|
+
Zlib::GzipReader.open( file ) do |tgz|
|
83
|
+
Archive::Tar::Minitar::Reader.open( tgz ) do |tar|
|
84
|
+
tar.each_entry do |entry|
|
85
|
+
bname = File.basename( entry.full_name )
|
86
|
+
if upstream_files.include?( bname ) then
|
87
|
+
dest_file = File.join( "ext", bname )
|
88
|
+
puts "updating #{ dest_file }"
|
89
|
+
File.open( dest_file, "wb" ) do |df|
|
90
|
+
while bytes = entry.read do
|
91
|
+
df.write bytes
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|