crate 0.1.1 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY +22 -0
- data/README +3 -2
- data/data/recipes/amalgalite/amalgalite.rake +3 -3
- data/data/recipes/openssl/openssl.rake +3 -3
- data/data/recipes/ruby/ext-openssl-openssl_missing.h.patch +14 -0
- data/gemspec.rb +12 -13
- data/lib/crate.rb +1 -0
- data/lib/crate/dependency.rb +1 -1
- data/lib/crate/project.rb +4 -3
- data/lib/crate/utils.rb +55 -20
- data/lib/crate/version.rb +1 -1
- data/tasks/rubyforge.rake +1 -1
- data/tasks/utils.rb +1 -1
- metadata +13 -12
data/HISTORY
CHANGED
@@ -1,4 +1,26 @@
|
|
1
1
|
= Changelog
|
2
|
+
== Version 0.2.1 2009-01-18
|
3
|
+
|
4
|
+
=== Enhancements
|
5
|
+
* update with new amalgalite vesion
|
6
|
+
* update to new openssl version
|
7
|
+
|
8
|
+
=== Bugfixes
|
9
|
+
* fix missing libs on final build
|
10
|
+
* fix lib ordering on final build
|
11
|
+
|
12
|
+
== Version 0.2.0 2008-12-20
|
13
|
+
|
14
|
+
=== Enhancements
|
15
|
+
* use Net::FTP for passive ftp [ jonbrenner ]
|
16
|
+
* use Net::HTTP instead of open-uri
|
17
|
+
|
18
|
+
=== Bugfixes
|
19
|
+
* update sha1 hash for amalgalite gem [ jonbrenner ]
|
20
|
+
* update dependencies, removing progressbar and adding logging
|
21
|
+
* fix digest check task [ jonbrenner ]
|
22
|
+
* set binary mode for writing downloaded files to disk
|
23
|
+
|
2
24
|
== Version 0.1.1
|
3
25
|
|
4
26
|
* fix packing of ruby stdlib extension's pure ruby components
|
data/README
CHANGED
@@ -4,12 +4,13 @@
|
|
4
4
|
* {Rubyforge Project}[http://rubyforge.org/projects/copiousfreetime/]
|
5
5
|
* email jeremy at copiousfreetime dot org
|
6
6
|
* git clone url git://github.com/copiousfreetime/crate.git
|
7
|
-
* {Packaging an Application With Crate}[http://copiousfreetime.org/articles/2008/11/30/package-an-application-with-crate.html
|
7
|
+
* {Packaging an Application With Crate}[http://copiousfreetime.org/articles/2008/11/30/package-an-application-with-crate.html]
|
8
|
+
* {RubyConf '08 Presentation}[http://rubyconf2008.confreaks.com/crate-packaging-your-ruby-application.html]
|
8
9
|
|
9
10
|
== DESCRIPTION
|
10
11
|
|
11
12
|
Crate is a developer tool to help package up your application as a custom static
|
12
|
-
build of the ruby interpreter plus all
|
13
|
+
build of the ruby interpreter plus all dependent binary extensions. All the
|
13
14
|
pure ruby code (the ruby application, the ruby stdlib, etc ) is packed into one
|
14
15
|
or more SQLite databases.
|
15
16
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#
|
2
2
|
# The recipe for integrating amalgalite into the ruby build
|
3
3
|
#
|
4
|
-
Crate::GemIntegration.new("amalgalite", "0.
|
5
|
-
t.upstream_source
|
6
|
-
t.upstream_sha1
|
4
|
+
Crate::GemIntegration.new("amalgalite", "0.7.1") do |t|
|
5
|
+
t.upstream_source = "http://rubyforge.org/frs/download.php/50393/amalgalite-0.7.1.gem"
|
6
|
+
t.upstream_sha1 = "84a84fd1192cef2d77701ec74afc8325a2a99ca7"
|
7
7
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
#
|
2
2
|
# Crate recipe for openssl
|
3
3
|
#
|
4
|
-
Crate::Dependency.new("openssl", "0.9.
|
4
|
+
Crate::Dependency.new("openssl", "0.9.8j") do |t|
|
5
5
|
t.depends_on( "zlib" )
|
6
|
-
t.upstream_source
|
7
|
-
t.upstream_sha1
|
6
|
+
t.upstream_source = "http://openssl.org/source/openssl-0.9.8j.tar.gz"
|
7
|
+
t.upstream_sha1 = "f70f7127a26e951e8a0d854c0c9e6b4c24df78e4"
|
8
8
|
|
9
9
|
t.build_commands = [
|
10
10
|
"./config --prefix=#{File.join( '/', 'usr' )} zlib no-threads no-shared",
|
@@ -0,0 +1,14 @@
|
|
1
|
+
* make sure the headers for openssl match up
|
2
|
+
--- ext/openssl/openssl_missing.h 2008-08-03 22:43:34.000000000 -0600
|
3
|
+
+++ ext/openssl/openssl_missing.h 2009-01-18 17:46:19.000000000 -0700
|
4
|
+
@@ -120,8 +120,8 @@
|
5
|
+
int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
|
6
|
+
int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx);
|
7
|
+
int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx);
|
8
|
+
-int BN_rand_range(BIGNUM *r, BIGNUM *range);
|
9
|
+
-int BN_pseudo_rand_range(BIGNUM *r, BIGNUM *range);
|
10
|
+
+int BN_rand_range(BIGNUM *rnd, const BIGNUM *range);
|
11
|
+
+int BN_pseudo_rand_range(BIGNUM *r, const BIGNUM *range);
|
12
|
+
char *CONF_get1_default_config_file(void);
|
13
|
+
int PEM_def_callback(char *buf, int num, int w, void *key);
|
14
|
+
|
data/gemspec.rb
CHANGED
@@ -6,7 +6,7 @@ Crate::GEM_SPEC = Gem::Specification.new do |spec|
|
|
6
6
|
proj = Configuration.for('project')
|
7
7
|
spec.name = proj.name
|
8
8
|
spec.version = Crate::VERSION
|
9
|
-
|
9
|
+
|
10
10
|
spec.author = proj.author
|
11
11
|
spec.email = proj.email
|
12
12
|
spec.homepage = proj.homepage
|
@@ -14,34 +14,33 @@ Crate::GEM_SPEC = Gem::Specification.new do |spec|
|
|
14
14
|
spec.description = proj.description
|
15
15
|
spec.platform = Gem::Platform::RUBY
|
16
16
|
|
17
|
-
|
17
|
+
|
18
18
|
pkg = Configuration.for('packaging')
|
19
19
|
spec.files = pkg.files.all
|
20
20
|
spec.executables = pkg.files.bin.collect { |b| File.basename(b) }
|
21
21
|
|
22
22
|
# add dependencies here
|
23
|
-
spec.add_dependency("rake", "
|
24
|
-
spec.add_dependency("configuration", "~> 0.0.5")
|
25
|
-
spec.add_dependency("
|
26
|
-
spec.add_dependency("
|
27
|
-
spec.add_dependency("
|
28
|
-
|
29
|
-
|
30
|
-
|
23
|
+
spec.add_dependency( "rake", "~> 0.8.3")
|
24
|
+
spec.add_dependency( "configuration", "~> 0.0.5")
|
25
|
+
spec.add_dependency( "archive-tar-minitar")
|
26
|
+
spec.add_dependency( "amalgalite", "~> 0.7")
|
27
|
+
spec.add_dependency( "logging", "~> 0.9" )
|
28
|
+
|
29
|
+
|
31
30
|
if rdoc = Configuration.for_if_exist?('rdoc') then
|
32
31
|
spec.has_rdoc = true
|
33
32
|
spec.extra_rdoc_files = pkg.files.rdoc
|
34
33
|
spec.rdoc_options = rdoc.options + [ "--main" , rdoc.main_page ]
|
35
34
|
else
|
36
35
|
spec.has_rdoc = false
|
37
|
-
end
|
36
|
+
end
|
38
37
|
|
39
38
|
if test = Configuration.for_if_exist?('testing') then
|
40
39
|
spec.test_files = test.files
|
41
|
-
end
|
40
|
+
end
|
42
41
|
|
43
42
|
if rf = Configuration.for_if_exist?('rubyforge') then
|
44
43
|
spec.rubyforge_project = rf.project
|
45
|
-
end
|
44
|
+
end
|
46
45
|
|
47
46
|
end
|
data/lib/crate.rb
CHANGED
data/lib/crate/dependency.rb
CHANGED
@@ -159,7 +159,7 @@ module Crate
|
|
159
159
|
def define_verify
|
160
160
|
desc "Verify source against its checksum"
|
161
161
|
task :verify => "#{name}:download" do
|
162
|
-
if @
|
162
|
+
if @digest then
|
163
163
|
if @digest.valid?( local_source ) then
|
164
164
|
logger.info "#{local_source} validates against #{@digest.hex}"
|
165
165
|
else
|
data/lib/crate/project.rb
CHANGED
@@ -158,10 +158,11 @@ CRATE_BOOT_H
|
|
158
158
|
def link_project
|
159
159
|
link_options = %w[ CFLAGS XCFLAGS LDFLAGS ].collect { |c| compile_params[c] }.join(' ')
|
160
160
|
Dir.chdir( ::Crate.ruby.pkg_dir ) do
|
161
|
-
dot_a = FileList[ "
|
161
|
+
dot_a = FileList[ "ext/**/*.a" ]
|
162
|
+
dot_a << %w[ libssl.a libcrypto.a libz.a libruby-static.a ] # order is important on the last 4
|
162
163
|
dot_o = [ "ext/extinit.o", File.join( project_root, "crate_boot.o" )]
|
163
164
|
libs = compile_params['LIBS']
|
164
|
-
cmd = "#{compile_params['CC']} #{link_options} #{dot_o.join(' ')} #{dot_a.join(' ')} -o #{File.join( dist_dir, name) }"
|
165
|
+
cmd = "#{compile_params['CC']} #{link_options} #{dot_o.join(' ')} #{libs} #{dot_a.join(' ')} -o #{File.join( dist_dir, name) }"
|
165
166
|
logger.debug cmd
|
166
167
|
sh cmd
|
167
168
|
end
|
@@ -174,7 +175,7 @@ CRATE_BOOT_H
|
|
174
175
|
lib_db = File.join( dist_dir, "lib.db" )
|
175
176
|
app_db = File.join( dist_dir, "app.db" )
|
176
177
|
directory dist_dir
|
177
|
-
packer_cmd = "
|
178
|
+
packer_cmd = "amalgalite-pack"
|
178
179
|
|
179
180
|
task :pack_ruby => dist_dir do
|
180
181
|
prefix = File.join( ::Crate.ruby.pkg_dir, "lib" )
|
data/lib/crate/utils.rb
CHANGED
@@ -1,14 +1,20 @@
|
|
1
1
|
require 'archive/tar/minitar'
|
2
2
|
require 'zlib'
|
3
|
-
require 'open-uri'
|
4
3
|
require 'fileutils'
|
5
|
-
require 'progressbar'
|
6
4
|
require 'rubygems/installer'
|
5
|
+
require 'net/ftp'
|
6
|
+
require 'net/http'
|
7
7
|
|
8
8
|
module Crate
|
9
9
|
#
|
10
10
|
# Utiltiy methods useful for many items
|
11
11
|
module Utils
|
12
|
+
|
13
|
+
def logger
|
14
|
+
@logger ||= Logging::Logger['Crate::Utils']
|
15
|
+
end
|
16
|
+
extend self
|
17
|
+
|
12
18
|
#
|
13
19
|
# Changes into a directory and unpacks the archive.
|
14
20
|
#
|
@@ -26,6 +32,7 @@ module Crate
|
|
26
32
|
end
|
27
33
|
end
|
28
34
|
|
35
|
+
|
29
36
|
#
|
30
37
|
# Verify the given file against a digest value. If the digest value is nil
|
31
38
|
# then it is a no-op.
|
@@ -34,30 +41,63 @@ module Crate
|
|
34
41
|
return ( against ? against.verify( file ) : true )
|
35
42
|
end
|
36
43
|
|
44
|
+
|
37
45
|
#
|
38
|
-
# download the given URI to a specified location
|
39
|
-
# progress bar.
|
46
|
+
# download the given URI to a specified location
|
40
47
|
#
|
41
48
|
def download( uri, to )
|
42
49
|
to_dir = File.dirname( to )
|
43
50
|
FileUtils.mkdir_p( to_dir ) unless File.directory?( to_dir )
|
44
51
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
52
|
-
rescue => e
|
53
|
-
puts
|
54
|
-
STDERR.puts "Error downloading #{uri.to_s} : #{e}"
|
55
|
-
exit 1
|
52
|
+
begin
|
53
|
+
case uri
|
54
|
+
when URI::FTP : download_via_ftp( uri, to )
|
55
|
+
when URI::HTTP : download_via_http( uri, to )
|
56
|
+
else
|
57
|
+
raise ::Crate::Error, "Downloading is only supported via FTP or HTTP at this time"
|
56
58
|
end
|
59
|
+
rescue => e
|
60
|
+
puts
|
61
|
+
STDERR.puts "Error downloading #{uri.to_s} : #{e}"
|
62
|
+
exit 1
|
57
63
|
end
|
58
64
|
end
|
59
65
|
|
66
|
+
|
67
|
+
# download vi FTP
|
60
68
|
#
|
69
|
+
def download_via_ftp( uri, to )
|
70
|
+
Net::FTP.open( uri.host ) do |ftp|
|
71
|
+
ftp.passive = true
|
72
|
+
ftp.login
|
73
|
+
ftp.getbinaryfile( uri.path, to )
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
# download via HTTP, following redirects
|
79
|
+
#
|
80
|
+
def download_via_http( uri, to, limit = 10 )
|
81
|
+
uri = URI.parse( uri ) unless URI === uri
|
82
|
+
raise ::Crate::Error, "Reached HTTP Redirect limit with #{uri.to_s}" if limit == 0
|
83
|
+
Net::HTTP.start( uri.host, uri.port ) do |http|
|
84
|
+
http.request_get( uri.request_uri ) do |response|
|
85
|
+
case response
|
86
|
+
when Net::HTTPSuccess then
|
87
|
+
Utils.logger.debug "success! saving to #{to}"
|
88
|
+
File.open( to, "wb" ) do |outf|
|
89
|
+
response.read_body { |bytes| outf.write bytes }
|
90
|
+
end
|
91
|
+
when Net::HTTPRedirection then
|
92
|
+
Utils.logger.debug "redirect to #{response['location']}"
|
93
|
+
download_via_http( response['location'], to, limit - 1 )
|
94
|
+
else response.error!
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
|
61
101
|
# Apply the given patch file in a particular directory
|
62
102
|
#
|
63
103
|
def apply_patch( patch_file, location )
|
@@ -65,10 +105,5 @@ module Crate
|
|
65
105
|
%x[ patch -p0 < #{patch_file} ]
|
66
106
|
end
|
67
107
|
end
|
68
|
-
|
69
|
-
#
|
70
|
-
# Wrap a command sending its output to the the Crate.project logger at the
|
71
|
-
# debug level
|
72
|
-
#
|
73
108
|
end
|
74
109
|
end
|
data/lib/crate/version.rb
CHANGED
data/tasks/rubyforge.rake
CHANGED
@@ -45,7 +45,7 @@ if rf_conf = Configuration.for_if_exist?("rubyforge") then
|
|
45
45
|
info = Utils.announcement
|
46
46
|
|
47
47
|
puts "Subject : #{info[:subject]}"
|
48
|
-
msg = "#{info[:title]}\n\n#{info[:urls]}\n\n#{info[:release_notes]}"
|
48
|
+
msg = "#{info[:title]}\n\n#{info[:urls]}\n\n#{info[:description]}\n\n#{info[:release_notes]}"
|
49
49
|
puts msg
|
50
50
|
|
51
51
|
rubyforge = RubyForge.new
|
data/tasks/utils.rb
CHANGED
@@ -54,7 +54,7 @@ module Utils
|
|
54
54
|
#
|
55
55
|
def release_notes_from(history_file)
|
56
56
|
releases = {}
|
57
|
-
File.read(history_file).split(/^(
|
57
|
+
File.read(history_file).split(/^(?=== Version)/).each do |section|
|
58
58
|
lines = section.split("\n")
|
59
59
|
md = %r{Version ((\w+\.)+\w+)}.match(lines.first)
|
60
60
|
next unless md
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Hinegardner
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-01-18 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -18,9 +18,9 @@ dependencies:
|
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
|
-
- -
|
21
|
+
- - ~>
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.8.
|
23
|
+
version: 0.8.3
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: configuration
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: 0.0.5
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
36
|
+
name: archive-tar-minitar
|
37
37
|
type: :runtime
|
38
38
|
version_requirement:
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -43,26 +43,26 @@ dependencies:
|
|
43
43
|
version: "0"
|
44
44
|
version:
|
45
45
|
- !ruby/object:Gem::Dependency
|
46
|
-
name:
|
46
|
+
name: amalgalite
|
47
47
|
type: :runtime
|
48
48
|
version_requirement:
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: "0"
|
53
|
+
version: "0.7"
|
54
54
|
version:
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: logging
|
57
57
|
type: :runtime
|
58
58
|
version_requirement:
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
61
|
- - ~>
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: 0.
|
63
|
+
version: "0.9"
|
64
64
|
version:
|
65
|
-
description: Crate is a developer tool to help package up your application as a custom static build of the ruby interpreter plus all
|
65
|
+
description: Crate is a developer tool to help package up your application as a custom static build of the ruby interpreter plus all dependent binary extensions. All the pure ruby code (the ruby application, the ruby stdlib, etc ) is packed into one or more SQLite databases. The final distributable pieces are a single executable and a few SQLite databases which can be then wrapped up appropriately as an OS X App; a self extracting executable for Windows; a shar archive, rpm or tarball for Unixes.
|
66
66
|
email: jeremy@copiousfreetime.org
|
67
67
|
executables:
|
68
68
|
- crate
|
@@ -111,6 +111,7 @@ files:
|
|
111
111
|
- data/recipes/openssl/openssl.rake
|
112
112
|
- data/recipes/ruby
|
113
113
|
- data/recipes/ruby/ext-extmk.rb.patch
|
114
|
+
- data/recipes/ruby/ext-openssl-openssl_missing.h.patch
|
114
115
|
- data/recipes/ruby/ruby.rake
|
115
116
|
- data/recipes/rubygems
|
116
117
|
- data/recipes/rubygems/rubygems.rake
|
@@ -155,6 +156,6 @@ rubyforge_project: copiousfreetime
|
|
155
156
|
rubygems_version: 1.3.1
|
156
157
|
signing_key:
|
157
158
|
specification_version: 2
|
158
|
-
summary: Crate is a developer tool to help package up your application as a custom static build of the ruby interpreter plus all
|
159
|
+
summary: Crate is a developer tool to help package up your application as a custom static build of the ruby interpreter plus all dependent binary extensions
|
159
160
|
test_files: []
|
160
161
|
|