/
custom.rake
101 lines (91 loc) · 3 KB
/
custom.rake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#-----------------------------------------------------------------------
# Custom tasks for this project
#-----------------------------------------------------------------------
require 'pathname'
namespace :util do
desc "List the sqlite api calls that are not implemented"
task :todo do
not_implementing = %w[
sqlite3_exec
sqlite3_open
sqlite3_os_end
sqlite3_os_init
sqlite3_malloc
sqlite3_realloc
sqlite3_free
sqlite3_get_table
sqlite3_free_table
sqlite3_key
sqlite3_rekey
sqlite3_next_stmt
sqlite3_release_memory
sqlite3_sleep
sqlite3_snprintf
sqlite3_vmprintf
sqlite3_strnicmp
sqlite3_test_control
sqlite3_unlock_notify
sqlite3_vfs_find
sqlite3_vfs_register
sqlite3_vfs_unregister
]
sqlite_h = File.join( *%w[ ext amalgalite c sqlite3.h ] )
api_todo = {}
IO.readlines( sqlite_h ).each do |line|
if line =~ /\ASQLITE_API/ then
if line !~ /SQLITE_DEPRECATED/ and line !~ /SQLITE_EXPERIMENTAL/ then
if md = line.match( /(sqlite3_[^(\s]+)\(/ ) then
next if not_implementing.include?(md.captures[0])
api_todo[md.captures[0]] = true
end
end
end
end
Dir.glob("ext/amalgalite/c/amalgalite*.c").each do |am_file|
IO.readlines( am_file ).each do |am_line|
if md = am_line.match( /(sqlite3_[^(\s]+)\(/ ) then
api_todo.delete( md.captures[0] )
end
end
end
puts "#{api_todo.keys.size} functions to still implement"
puts api_todo.keys.sort.join("\n")
end
desc "Download and integrate the next version of sqlite (use VERSION=x.y.z)"
task :update_sqlite do
require 'uri'
require 'net/http'
require 'zip'
parts = ENV['VERSION'].split(".")
next_version = [ parts.shift.to_s ]
parts.each do |p|
next_version << "#{"%02d" % p }"
end
next_version << "00" if next_version.size == 3
next_version = next_version.join('')
version_year = ENV['VERSION_YEAR'] || Date.today.year
raise "VERSION env variable must be set" unless next_version
url = ::URI.parse("http://sqlite.org/#{version_year}/sqlite-amalgamation-#{next_version}.zip")
puts "downloading #{url.to_s} ..."
file = "tmp/#{File.basename( url.path ) }"
FileUtils.mkdir "tmp" unless File.directory?( "tmp" )
File.open( file, "wb+") do |f|
res = Net::HTTP.get_response( url )
f.write( res.body )
end
puts "extracting..."
upstream_files = %w[ sqlite3.h sqlite3.c sqlite3ext.h ]
Zip::ZipInputStream.open( file ) do |io|
loop do
entry = io.get_next_entry
break unless entry
bname = File.basename( entry.name )
if upstream_files.include?( bname ) then
dest_file = File.join( "ext", "amalgalite", "c", bname )
puts "updating #{dest_file}"
entry.extract( dest_file ) { true }
end
end
end
end
end