mini_portile 0.6.2 → 0.7.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.travis.yml +15 -0
- data/{History.txt → CHANGELOG.md} +36 -14
- data/Gemfile +4 -0
- data/README.md +185 -0
- data/Rakefile +16 -44
- data/appveyor.yml +21 -0
- data/examples/.gitignore +2 -0
- data/examples/Rakefile +17 -3
- data/examples/libiconv-patches/1-avoid-gets-error.patch +16 -0
- data/lib/mini_portile.rb +2 -437
- data/lib/mini_portile/mini_portile.rb +494 -0
- data/lib/mini_portile/version.rb +3 -0
- data/mini_portile.gemspec +30 -0
- data/test/assets/patch 1.diff +7 -0
- data/test/assets/test mini portile-1.0.0/configure +11 -0
- data/test/helper.rb +46 -0
- data/test/test_cook.rb +71 -0
- data/test/test_digest.rb +75 -0
- data/test/test_proxy.rb +124 -0
- metadata +92 -19
- data/README.rdoc +0 -169
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bdb0513b385a424c53b4671b7b4d2f05dd5ea3bf
|
4
|
+
data.tar.gz: 2af3bdbf45700b4c2285f7b486e2f88515095118
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27dee570e1241cffc7c77c329b58ea2d6d4688fae10cb3692c92b4eaa0f9ffb62547209a1dba4a0e1f1ed7f3cd37e1cd708608ece3aabd9e8d87bc6e10b3135c
|
7
|
+
data.tar.gz: 07462c1c96fe025fdcf005cb50ca9e3fb829c4432a37657caee9f695671b1359ba0b50a92335d5600da622545ec75a7e124ddffcb968debd8bb54ccd3bd3855e
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
@@ -1,15 +1,37 @@
|
|
1
|
-
|
1
|
+
### 0.7.0.rc1 / 2015-08-24
|
2
|
+
|
3
|
+
Many thanks to @larskanis, @knu, and @kirikak2, who all contributed
|
4
|
+
code, ideas, or both to this release.
|
5
|
+
|
6
|
+
#### Enhancements
|
7
|
+
|
8
|
+
* In patch task, use git(1) or patch(1), whichever is available.
|
9
|
+
* Append outputs to patch.log instead of clobbering it for every patch command.
|
10
|
+
* Take `configure_options` literally without running a subshell.
|
11
|
+
This changes allows for embedded spaces in a path, among other things.
|
12
|
+
Please unescape `configure_options` where you have been doing it yourself.
|
13
|
+
* Print last 20 lines of the given log file, for convenience.
|
14
|
+
* Allow SHA1, SHA256 and MD5 hash verification of downloads
|
15
|
+
|
16
|
+
|
17
|
+
#### Bugfixes
|
18
|
+
|
19
|
+
* Fix issue when proxy username/password use escaped characters.
|
20
|
+
* Fix use of https and ftp proxy.
|
21
|
+
|
22
|
+
|
23
|
+
### 0.6.2 / 2014-12-30
|
2
24
|
|
3
25
|
* Updated gemspec, license and README to reflect new maintainer.
|
4
26
|
|
5
27
|
|
6
|
-
|
28
|
+
### 0.6.1 / 2014-08-03
|
7
29
|
|
8
30
|
* Enhancements:
|
9
31
|
* Expand path to logfile to easier debugging on failures.
|
10
32
|
Pull #33 [marvin2k]
|
11
33
|
|
12
|
-
|
34
|
+
### 0.6.0 / 2014-04-18
|
13
35
|
|
14
36
|
* Enhancements:
|
15
37
|
* Add default cert store and custom certs from `SSL_CERT_FILE` if present.
|
@@ -22,7 +44,7 @@
|
|
22
44
|
* Internal:
|
23
45
|
* Improve examples and use them as test harness.
|
24
46
|
|
25
|
-
|
47
|
+
### 0.5.3 / 2014-03-24
|
26
48
|
|
27
49
|
* Bugfixes:
|
28
50
|
* Shell escape paths in tar command. Pull #29. [quickshiftin]
|
@@ -30,7 +52,7 @@
|
|
30
52
|
the compression type. Pull #27. Closes #21. [b-dean]
|
31
53
|
* Try RbConfig's CC before fall back to 'gcc'. Ref #28.
|
32
54
|
|
33
|
-
|
55
|
+
### 0.5.2 / 2013-10-23
|
34
56
|
|
35
57
|
* Bugfixes:
|
36
58
|
* Change tar detection order to support NetBSD 'gtar'. Closes #24
|
@@ -39,27 +61,27 @@
|
|
39
61
|
* Respect ENV's CC variable before fallback to 'gcc'.
|
40
62
|
* Avoid non-ASCII output of GCC cause host detection issues. Closes #22
|
41
63
|
|
42
|
-
|
64
|
+
### 0.5.1 / 2013-07-07
|
43
65
|
|
44
66
|
* Bugfixes:
|
45
67
|
* Detect tar executable without shelling out. [jtimberman]
|
46
68
|
|
47
|
-
|
69
|
+
### 0.5.0 / 2012-11-17
|
48
70
|
|
49
71
|
* Enhancements:
|
50
72
|
* Allow patching extracted files using `git apply`. [metaskills]
|
51
73
|
|
52
|
-
|
74
|
+
### 0.4.1 / 2012-10-24
|
53
75
|
|
54
76
|
* Bugfixes:
|
55
77
|
* Syntax to process FTp binary chunks differs between Ruby 1.8.7 and 1.9.x
|
56
78
|
|
57
|
-
|
79
|
+
### 0.4.0 / 2012-10-24
|
58
80
|
|
59
81
|
* Enhancements:
|
60
82
|
* Allow fetching of FTP URLs along HTTP ones. [metaskills]
|
61
83
|
|
62
|
-
|
84
|
+
### 0.3.0 / 2012-03-23
|
63
85
|
|
64
86
|
* Enhancements:
|
65
87
|
* Use `gcc -v` to determine original host (platform) instead of Ruby one.
|
@@ -67,7 +89,7 @@
|
|
67
89
|
* Deprecations:
|
68
90
|
* Dropped support for Rubies older than 1.8.7
|
69
91
|
|
70
|
-
|
92
|
+
### 0.2.2 / 2011-04-11
|
71
93
|
|
72
94
|
* Minor enhancements:
|
73
95
|
* Use LDFLAGS when activating recipes for cross-compilation. Closes #6
|
@@ -75,12 +97,12 @@
|
|
75
97
|
* Bugfixes:
|
76
98
|
* Remove memoization of *_path helpers. Closes #7
|
77
99
|
|
78
|
-
|
100
|
+
### 0.2.1 / 2011-04-06
|
79
101
|
|
80
102
|
* Minor enhancements:
|
81
103
|
* Provide MiniPortile#path to obtain full path to installation directory. Closes GH-5
|
82
104
|
|
83
|
-
|
105
|
+
### 0.2.0 / 2011-04-05
|
84
106
|
|
85
107
|
* Enhancements:
|
86
108
|
* Improve tar detection
|
@@ -92,6 +114,6 @@
|
|
92
114
|
* MiniPortile#target can be changed now. Closes GH-2
|
93
115
|
* Always redirect tar output properly
|
94
116
|
|
95
|
-
|
117
|
+
### 0.1.0 / 2011-03-08
|
96
118
|
|
97
119
|
* Initial release. Welcome to this world!
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,185 @@
|
|
1
|
+
# MiniPortile
|
2
|
+
|
3
|
+
[![travis status](https://travis-ci.org/flavorjones/mini_portile.svg?branch=master)](https://travis-ci.org/flavorjones/mini_portile?branch=master)
|
4
|
+
[![appveyor status](https://ci.appveyor.com/api/projects/status/rjji6y9uteaw4oua/branch/master?svg=true)](https://ci.appveyor.com/project/flavorjones/mini-portile/branch/master)
|
5
|
+
|
6
|
+
* Documentation: http://www.rubydoc.info/github/flavorjones/mini_portile
|
7
|
+
* Source Code: https://github.com/flavorjones/mini_portile
|
8
|
+
* Bug Reports: https://github.com/flavorjones/mini_portile/issues
|
9
|
+
|
10
|
+
This project is a minimalistic implementation of a port/recipe system
|
11
|
+
**for developers**.
|
12
|
+
|
13
|
+
Because _"Works on my machine"_ is unacceptable for a library maintainer.
|
14
|
+
|
15
|
+
|
16
|
+
## Not Another Package Management System
|
17
|
+
|
18
|
+
`mini_portile` is not a general package management system. It is not
|
19
|
+
aimed to replace apt, macports or homebrew.
|
20
|
+
|
21
|
+
It's intended primarily to make sure that you, as the developer of a
|
22
|
+
library, can reproduce a user's dependencies and environment by
|
23
|
+
specifying a specific version of an underlying dependency that you'd
|
24
|
+
like to use.
|
25
|
+
|
26
|
+
So, if a user says, "This bug happens on my system that uses libiconv
|
27
|
+
1.13.1", `mini_portile` should make it easy for you to download,
|
28
|
+
compile and link against libiconv 1.13.1; and run your test suite
|
29
|
+
against it.
|
30
|
+
|
31
|
+
This scenario might be simplified with something like this:
|
32
|
+
|
33
|
+
```
|
34
|
+
rake compile LIBICONV_VERSION=1.13.1
|
35
|
+
```
|
36
|
+
|
37
|
+
(For your homework, you can make libiconv version be taken from the
|
38
|
+
appropriate `ENV` variables.)
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
## Sounds easy, but where's the catch?
|
43
|
+
|
44
|
+
You got me, there is a catch. At this time (and highly likely will be
|
45
|
+
always) `MiniPortile` is only compatible with **GCC compilers** and
|
46
|
+
**autoconf**- or **configure**-based projects.
|
47
|
+
|
48
|
+
That is, it assumes the library you want to build contains a
|
49
|
+
`configure` script, which all the autoconf-based libraries do.
|
50
|
+
|
51
|
+
|
52
|
+
### How to use
|
53
|
+
|
54
|
+
Now that you know the catch, and you're still reading this, here is a
|
55
|
+
quick example:
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
require "mini_portile"
|
59
|
+
recipe = MiniPortile.new("libiconv", "1.13.1")
|
60
|
+
recipe.files = ["http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz"]
|
61
|
+
recipe.cook
|
62
|
+
recipe.activate
|
63
|
+
```
|
64
|
+
|
65
|
+
That's all. `#cook` will download, extract, patch, configure and
|
66
|
+
compile the library into a namespaced structure. `#activate` ensures
|
67
|
+
GCC will find this library and prefer it over a system-wide
|
68
|
+
installation.
|
69
|
+
|
70
|
+
|
71
|
+
### Directory Structure Conventions
|
72
|
+
|
73
|
+
`MiniPortile` follows the principle of **convention over configuration** and
|
74
|
+
established a folder structure where is going to place files and perform work.
|
75
|
+
|
76
|
+
Take the above example, and let's draw some picture:
|
77
|
+
|
78
|
+
```
|
79
|
+
mylib
|
80
|
+
|-- ports
|
81
|
+
| |-- archives
|
82
|
+
| | `-- libiconv-1.13.1.tar.gz
|
83
|
+
| `-- <platform>
|
84
|
+
| `-- libiconv
|
85
|
+
| `-- 1.13.1
|
86
|
+
| |-- bin
|
87
|
+
| |-- include
|
88
|
+
| `-- lib
|
89
|
+
`-- tmp
|
90
|
+
`-- <platform>
|
91
|
+
`-- ports
|
92
|
+
```
|
93
|
+
|
94
|
+
In above structure, `<platform>` refers to the architecture that
|
95
|
+
represents the operating system you're using (e.g. i686-linux,
|
96
|
+
i386-mingw32, etc).
|
97
|
+
|
98
|
+
Inside the platform folder, `MiniPortile` will store the artifacts
|
99
|
+
that result from the compilation process. The library is versioned so
|
100
|
+
you can keep multiple versions around on disk without clobbering
|
101
|
+
anything.
|
102
|
+
|
103
|
+
`archives` is where downloaded source files are cached. It is
|
104
|
+
recommended you avoid trashing that folder to avoid downloading the
|
105
|
+
same file multiple times (save bandwidth, save the world).
|
106
|
+
|
107
|
+
`tmp` is where compilation is performed and can be safely discarded.
|
108
|
+
|
109
|
+
Use the recipe's `#path` to obtain the full path to the installation
|
110
|
+
directory:
|
111
|
+
|
112
|
+
```ruby
|
113
|
+
recipe.cook
|
114
|
+
recipe.path # => /home/luis/projects/myapp/ports/i686-linux/libiconv/1.13.1
|
115
|
+
```
|
116
|
+
|
117
|
+
### How can I combine this with my compilation task?
|
118
|
+
|
119
|
+
In the simplest case, your rake `compile` task will depend on
|
120
|
+
`MiniPortile` compilation and most important, activation.
|
121
|
+
|
122
|
+
Example:
|
123
|
+
|
124
|
+
```ruby
|
125
|
+
task :libiconv do
|
126
|
+
recipe = MiniPortile.new("libiconv", "1.13.1")
|
127
|
+
recipe.files << {
|
128
|
+
url: "http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz"],
|
129
|
+
md5: "7ab33ebd26687c744a37264a330bbe9a"
|
130
|
+
}
|
131
|
+
checkpoint = ".#{recipe.name}-#{recipe.version}.installed"
|
132
|
+
|
133
|
+
unless File.exist?(checkpoint)
|
134
|
+
recipe.cook
|
135
|
+
touch checkpoint
|
136
|
+
end
|
137
|
+
|
138
|
+
recipe.activate
|
139
|
+
end
|
140
|
+
|
141
|
+
task :compile => [:libiconv] do
|
142
|
+
# ... your library's compilation task ...
|
143
|
+
end
|
144
|
+
```
|
145
|
+
|
146
|
+
The above example will:
|
147
|
+
|
148
|
+
* **download** and verify integrity the sources only once
|
149
|
+
* **compile** the library only once (using a timestamp file)
|
150
|
+
* ensure compiled library is **activated**
|
151
|
+
* make the compile task depend upon compiled library activation
|
152
|
+
|
153
|
+
As an exercise for the reader, you could specify the libiconv version
|
154
|
+
in an environment variable or a configuration file.
|
155
|
+
|
156
|
+
|
157
|
+
### Native and/or Cross Compilation
|
158
|
+
|
159
|
+
The above example covers the normal use case: compiling dependencies
|
160
|
+
natively.
|
161
|
+
|
162
|
+
`MiniPortile` also covers another use case, which is the
|
163
|
+
cross-compilation of the dependencies to be used as part of a binary
|
164
|
+
gem compilation.
|
165
|
+
|
166
|
+
It is the perfect complementary tool for
|
167
|
+
[`rake-compiler`](https://github.com/rake-compiler/rake-compiler) and
|
168
|
+
its `cross` rake task.
|
169
|
+
|
170
|
+
Depending on your usage of `rake-compiler`, you will need to use
|
171
|
+
`host` to match the installed cross-compiler toolchain.
|
172
|
+
|
173
|
+
Please refer to the examples directory for simplified and practical usage.
|
174
|
+
|
175
|
+
|
176
|
+
### Supported Scenarios
|
177
|
+
|
178
|
+
As mentioned before, `MiniPortile` requires a GCC compiler
|
179
|
+
toolchain. This has been tested against Ubuntu, OSX and even Windows
|
180
|
+
(RubyInstaller with DevKit)
|
181
|
+
|
182
|
+
|
183
|
+
## License
|
184
|
+
|
185
|
+
This library is licensed under MIT license. Please see LICENSE.txt for details.
|
data/Rakefile
CHANGED
@@ -1,53 +1,25 @@
|
|
1
1
|
require "rake/clean"
|
2
|
-
require
|
2
|
+
require 'bundler/gem_tasks'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
# description and details
|
11
|
-
s.summary = "Simplistic port-like solution for developers"
|
12
|
-
s.description = "Simplistic port-like solution for developers. It provides a standard and simplified way to compile against dependency libraries without messing up your system."
|
13
|
-
|
14
|
-
# requirements
|
15
|
-
s.required_ruby_version = ">= 1.8.7"
|
16
|
-
s.required_rubygems_version = ">= 1.3.5"
|
17
|
-
|
18
|
-
# dependencies (add_dependency)
|
19
|
-
# development dependencies (add_development_dependency)
|
20
|
-
|
21
|
-
# components, files and paths
|
22
|
-
s.files = FileList["examples/Rakefile", "lib/**/*.rb", "Rakefile", "*.{rdoc,txt}"]
|
23
|
-
|
24
|
-
s.require_path = 'lib'
|
25
|
-
|
26
|
-
# documentation
|
27
|
-
s.has_rdoc = true
|
28
|
-
s.rdoc_options << '--main' << 'README.rdoc' << '--title' << 'MiniPortile -- Documentation'
|
29
|
-
|
30
|
-
s.extra_rdoc_files = %w(README.rdoc History.txt LICENSE.txt)
|
31
|
-
|
32
|
-
# project information
|
33
|
-
s.homepage = 'http://github.com/flavorjones/mini_portile'
|
34
|
-
s.licenses = ['MIT']
|
4
|
+
namespace :test do
|
5
|
+
desc "Test MiniPortile by running unit tests"
|
6
|
+
task :unit do
|
7
|
+
sh "ruby -w -W2 -I. -e \"#{Dir["test/test_*.rb"].map{|f| "require '#{f}';"}.join}\" -- -v"
|
8
|
+
end
|
35
9
|
|
36
|
-
|
37
|
-
|
38
|
-
|
10
|
+
desc "Test MiniPortile by compiling examples"
|
11
|
+
task :examples do
|
12
|
+
Dir.chdir("examples") do
|
13
|
+
sh "rake ports:all"
|
14
|
+
end
|
15
|
+
end
|
39
16
|
end
|
40
17
|
|
41
|
-
|
42
|
-
|
43
|
-
pkg.need_zip = false
|
18
|
+
task :clean do
|
19
|
+
FileUtils.rm_rf ["examples/ports", "examples/tmp"], :verbose => true
|
44
20
|
end
|
45
21
|
|
46
|
-
desc "
|
47
|
-
task :test
|
48
|
-
Dir.chdir("examples") do
|
49
|
-
sh "rake ports:all"
|
50
|
-
end
|
51
|
-
end
|
22
|
+
desc "Run all tests"
|
23
|
+
task :test => ["test:unit", "test:examples"]
|
52
24
|
|
53
25
|
task :default => [:test]
|
data/appveyor.yml
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
version: "{build}"
|
3
|
+
clone_depth: 10
|
4
|
+
install:
|
5
|
+
- ps: ((New-Object Net.WebClient).DownloadFile('https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt', "$env:TMP\ca-bundle.crt"))
|
6
|
+
- SET SSL_CERT_FILE=%TMP%\ca-bundle.crt
|
7
|
+
- SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
|
8
|
+
- ruby --version
|
9
|
+
- gem --version
|
10
|
+
- bundle install
|
11
|
+
build: off
|
12
|
+
test_script:
|
13
|
+
- bundle exec rake -rdevkit test
|
14
|
+
|
15
|
+
environment:
|
16
|
+
matrix:
|
17
|
+
- ruby_version: "193"
|
18
|
+
# - ruby_version: "200"
|
19
|
+
# - ruby_version: "200-x64"
|
20
|
+
# - ruby_version: "21"
|
21
|
+
- ruby_version: "21-x64"
|
data/examples/.gitignore
ADDED
data/examples/Rakefile
CHANGED
@@ -1,10 +1,20 @@
|
|
1
|
-
require
|
1
|
+
require 'rbconfig'
|
2
|
+
|
3
|
+
$: << File.expand_path(File.join(File.dirname(__FILE__), "../lib"))
|
4
|
+
require "mini_portile"
|
2
5
|
|
3
6
|
recipes = []
|
4
7
|
|
8
|
+
def windows?
|
9
|
+
RbConfig::CONFIG['target_os'] =~ /mswin|mingw32/
|
10
|
+
end
|
11
|
+
|
5
12
|
# libiconv
|
6
13
|
libiconv = MiniPortile.new "libiconv", "1.14"
|
7
14
|
libiconv.files << "ftp://ftp.gnu.org/pub/gnu/#{libiconv.name}/#{libiconv.name}-#{libiconv.version}.tar.gz"
|
15
|
+
unless windows?
|
16
|
+
libiconv.patch_files = Dir["libiconv-patches/*.patch"].map { |dir| File.expand_path dir }
|
17
|
+
end
|
8
18
|
|
9
19
|
recipes.push libiconv
|
10
20
|
|
@@ -16,7 +26,7 @@ recipes.push sqlite3
|
|
16
26
|
|
17
27
|
# c-ares
|
18
28
|
c_ares = MiniPortile.new "c-ares", "1.7.5"
|
19
|
-
c_ares.files << "
|
29
|
+
c_ares.files << "http://distfiles.openknapsack.org/#{c_ares.name}/#{c_ares.name}-#{c_ares.version}.tar.gz"
|
20
30
|
|
21
31
|
recipes.push c_ares
|
22
32
|
|
@@ -73,7 +83,11 @@ class ZlibRecipe < MiniPortile
|
|
73
83
|
end
|
74
84
|
|
75
85
|
zlib = ZlibRecipe.new "zlib", "1.2.8"
|
76
|
-
zlib.files <<
|
86
|
+
zlib.files << {
|
87
|
+
url: "http://zlib.net/#{zlib.name}-#{zlib.version}.tar.gz",
|
88
|
+
md5: "44d667c142d7cda120332623eab69f40",
|
89
|
+
}
|
90
|
+
|
77
91
|
|
78
92
|
recipes.push zlib
|
79
93
|
|