mini_portile2 2.5.3 → 2.6.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b4913fc9a77207eb01b12c960a04125fd6517d57d727423af306689b5d5fc833
4
- data.tar.gz: bc4a0a28a469ce473217fd176094b4e7238064a4f38040f39d7f514544a34842
3
+ metadata.gz: cead22320fb80bbc4e46f568f422211dd8a6af92006edc220e1320019cc52676
4
+ data.tar.gz: d4b5deaa502e5ae66526eb2b23978a4ef52996a100a64f224664927dca0658b2
5
5
  SHA512:
6
- metadata.gz: 19b7cff7f935399f4b1162240bf0999e4db1a9af53edd0b462174dfcec32a38813afcca1901e95d7a539d4773dc1618e99349075b55181f300f43a1126936802
7
- data.tar.gz: d872cbd565306b31f8a612fa03fcf1d7fbe2c35307806c8ae7c1099679aac729452567b5970bf7e121bcba05c504b235367acf159b950bebf08a0bd942063b07
6
+ metadata.gz: 7dbd446271e3b0c26cf39504b6b1af53faee8a212ba7451af76f17e1f8858b3f329c5e281f753d1731fe27a3d9121c9f7328188ead52aaf63c1d4728c44fcd99
7
+ data.tar.gz: a6b17cd4c01588c86d70a4e18c713cc5c13c16922ac64cc38e7c77fac416b1a9e1fa4eeee502dd23f13ece5a16d8b364033169de0e8e4612012544599a692c03
data/CHANGELOG.md CHANGED
@@ -1,8 +1,12 @@
1
1
  ## mini_portile changelog
2
2
 
3
- ### 2.5.3 / 2021-05-31
3
+ ### 2.6.0 / 2021-05-31
4
4
 
5
- Make `net-ftp` an optional dependency, since requiring it as a hard dependency in v2.5.2 caused warnings to be emitted by Ruby 2.7 and earlier. A warning message is emitted if FTP functionality is called and `net-ftp` isn't available; this should only happen in Ruby 3.1 and later.
5
+ ### Added
6
+
7
+ Recipes may build against a local directory by specifying `source_directory` instead of `files`. In
8
+ particular, this may be useful for debugging problems with the upstream dependency (e.g., use `git
9
+ bisect` in a local clone) or for continuous integration with upstream HEAD.
6
10
 
7
11
 
8
12
  ### 2.5.2 / 2021-05-28
data/Gemfile CHANGED
@@ -1,6 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem "net-ftp" if Gem::Requirement.new("> 3.1.0.dev").satisfied_by?(Gem::Version.new(RUBY_VERSION))
4
-
5
3
  # Specify your gem's dependencies in mini_portile2.gemspec
6
4
  gemspec
data/README.md CHANGED
@@ -89,6 +89,18 @@ system-wide installation.
89
89
  Same as above, but instead of `MiniPortile.new`, call `MiniPortileCMake.new`.
90
90
 
91
91
 
92
+ ### Local source directories
93
+
94
+ Instead of downloading a remote file, you can also point mini_portile2 at a local source
95
+ directory. In particular, this may be useful for testing or debugging:
96
+
97
+ ``` ruby
98
+ gem "mini_portile2", "~> 2.0.0" # NECESSARY if used in extconf.rb. see below.
99
+ require "mini_portile2"
100
+ recipe = MiniPortile.new("libiconv", "1.13.1")
101
+ recipe.source_directory = "/path/to/local/source/for/library-1.2.3"
102
+ ```
103
+
92
104
  ### Directory Structure Conventions
93
105
 
94
106
  `mini_portile2` follows the principle of **convention over configuration** and
@@ -1,6 +1,7 @@
1
1
  require 'rbconfig'
2
2
  require 'net/http'
3
3
  require 'net/https'
4
+ require 'net/ftp'
4
5
  require 'fileutils'
5
6
  require 'tempfile'
6
7
  require 'digest'
@@ -30,7 +31,7 @@ end
30
31
  class MiniPortile
31
32
  attr_reader :name, :version, :original_host
32
33
  attr_writer :configure_options
33
- attr_accessor :host, :files, :patch_files, :target, :logger
34
+ attr_accessor :host, :files, :patch_files, :target, :logger, :source_directory
34
35
 
35
36
  def self.windows?
36
37
  RbConfig::CONFIG['target_os'] =~ /mswin|mingw/
@@ -54,10 +55,22 @@ class MiniPortile
54
55
  @patch_files = []
55
56
  @log_files = {}
56
57
  @logger = STDOUT
58
+ @source_directory = nil
57
59
 
58
60
  @original_host = @host = detect_host
59
61
  end
60
62
 
63
+ def source_directory=(path)
64
+ @source_directory = File.expand_path(path)
65
+ end
66
+
67
+ def prepare_build_directory
68
+ raise "source_directory is not set" if source_directory.nil?
69
+ output "Building #{@name} #{@version} from source at '#{source_directory}'"
70
+ FileUtils.mkdir_p(File.join(tmp_path, [name, version].join("-")))
71
+ FileUtils.rm_rf(port_path) # make sure we always re-install
72
+ end
73
+
61
74
  def download
62
75
  files_hashs.each do |file|
63
76
  download_file(file[:url], file[:local_path])
@@ -109,15 +122,16 @@ class MiniPortile
109
122
  def configure
110
123
  return if configured?
111
124
 
125
+ FileUtils.mkdir_p(tmp_path)
112
126
  cache_file = File.join(tmp_path, 'configure.options_cache')
113
127
  File.open(cache_file, "w") { |f| f.write computed_options.to_s }
114
128
 
129
+ command = Array(File.join((source_directory || "."), "configure"))
115
130
  if RUBY_PLATFORM=~/mingw|mswin/
116
131
  # Windows doesn't recognize the shebang.
117
- execute('configure', %w(sh ./configure) + computed_options)
118
- else
119
- execute('configure', %w(./configure) + computed_options)
132
+ command.unshift("sh")
120
133
  end
134
+ execute('configure', command + computed_options)
121
135
  end
122
136
 
123
137
  def compile
@@ -138,7 +152,7 @@ class MiniPortile
138
152
  end
139
153
 
140
154
  def configured?
141
- configure = File.join(work_path, 'configure')
155
+ configure = File.join((source_directory || work_path), 'configure')
142
156
  makefile = File.join(work_path, 'Makefile')
143
157
  cache_file = File.join(tmp_path, 'configure.options_cache')
144
158
 
@@ -156,9 +170,13 @@ class MiniPortile
156
170
  end
157
171
 
158
172
  def cook
159
- download unless downloaded?
160
- extract
161
- patch
173
+ if source_directory
174
+ prepare_build_directory
175
+ else
176
+ download unless downloaded?
177
+ extract
178
+ patch
179
+ end
162
180
  configure unless configured?
163
181
  compile
164
182
  install unless installed?
@@ -472,6 +490,7 @@ private
472
490
  def download_file_http(url, full_path, count = 3)
473
491
  filename = File.basename(full_path)
474
492
  with_tempfile(filename, full_path) do |temp_file|
493
+ progress = 0
475
494
  total = 0
476
495
  params = {
477
496
  "Accept-Encoding" => 'identity',
@@ -480,6 +499,7 @@ private
480
499
  if total
481
500
  new_progress = (bytes * 100) / total
482
501
  message "\rDownloading %s (%3d%%) " % [filename, new_progress]
502
+ progress = new_progress
483
503
  else
484
504
  # Content-Length is unavailable because Transfer-Encoding is chunked
485
505
  message "\rDownloading %s " % [filename]
@@ -527,15 +547,16 @@ private
527
547
  end
528
548
 
529
549
  def download_file_ftp(uri, full_path)
530
- require "net/ftp"
531
550
  filename = File.basename(uri.path)
532
551
  with_tempfile(filename, full_path) do |temp_file|
552
+ progress = 0
533
553
  total = 0
534
554
  params = {
535
555
  :content_length_proc => lambda{|length| total = length },
536
556
  :progress_proc => lambda{|bytes|
537
557
  new_progress = (bytes * 100) / total
538
558
  message "\rDownloading %s (%3d%%) " % [filename, new_progress]
559
+ progress = new_progress
539
560
  }
540
561
  }
541
562
  if ENV["ftp_proxy"]
@@ -551,8 +572,6 @@ private
551
572
  end
552
573
  output
553
574
  end
554
- rescue LoadError
555
- raise LoadError, "Ruby #{RUBY_VERSION} does not provide the net-ftp gem, please add it as a dependency if you need to use FTP"
556
575
  rescue Net::FTPError
557
576
  return false
558
577
  end
@@ -1,3 +1,3 @@
1
1
  class MiniPortile
2
- VERSION = "2.5.3"
2
+ VERSION = "2.6.0"
3
3
  end
@@ -33,6 +33,8 @@ Gem::Specification.new do |spec|
33
33
 
34
34
  spec.required_ruby_version = ">= 2.3.0"
35
35
 
36
+ spec.add_dependency "net-ftp", "~> 0.1"
37
+
36
38
  spec.add_development_dependency "bundler", "~> 2.1"
37
39
  spec.add_development_dependency "minitar", "~> 0.7"
38
40
  spec.add_development_dependency "minitest", "~> 5.11"
data/test/test_cook.rb CHANGED
@@ -113,3 +113,32 @@ class TestCookWithBrokenGitDir < TestCase
113
113
  end
114
114
  end
115
115
  end
116
+
117
+ class TestCookAgainstSourceDirectory < TestCase
118
+ attr_accessor :recipe
119
+
120
+ def setup
121
+ super
122
+
123
+ @recipe ||= MiniPortile.new("test mini portile", "1.0.0").tap do |recipe|
124
+ recipe.source_directory = File.expand_path("../assets/test mini portile-1.0.0", __FILE__)
125
+ end
126
+ end
127
+
128
+ def test_source_directory
129
+ recipe.cook
130
+
131
+ path = File.join(work_dir, "configure.txt")
132
+ assert(File.exist?(path))
133
+ assert_equal((recipe.configure_options + ["--prefix=#{recipe.path}"]).inspect,
134
+ File.read(path).chomp);
135
+
136
+ path = File.join(work_dir, "compile.txt")
137
+ assert(File.exist?(path))
138
+ assert_equal("[\"all\"]", File.read(path).chomp);
139
+
140
+ path = File.join(work_dir, "install.txt")
141
+ assert(File.exist?(path))
142
+ assert_equal("[\"install\"]", File.read(path).chomp);
143
+ end
144
+ end
@@ -18,12 +18,10 @@ describe "recipe download" do
18
18
  end
19
19
  end
20
20
 
21
- begin
22
- block.call
23
- ensure
24
- thread.kill
25
- server.close
26
- end
21
+ block.call
22
+
23
+ thread.kill
24
+ server.close
27
25
 
28
26
  request_count.must_be :>, 0
29
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_portile2
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.3
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luis Lavena
@@ -12,6 +12,20 @@ bindir: bin
12
12
  cert_chain: []
13
13
  date: 2021-05-31 00:00:00.000000000 Z
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: net-ftp
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '0.1'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '0.1'
15
29
  - !ruby/object:Gem::Dependency
16
30
  name: bundler
17
31
  requirement: !ruby/object:Gem::Requirement