mini_portile2 2.8.6 → 2.8.8
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 +4 -4
- data/.github/workflows/ci.yml +49 -3
- data/.github/workflows/downstream.yml +66 -0
- data/.github/workflows/upstream.yml +39 -0
- data/CHANGELOG.md +22 -0
- data/Gemfile +11 -2
- data/README.md +14 -5
- data/Rakefile +3 -5
- data/lib/mini_portile2/mini_portile.rb +62 -47
- data/lib/mini_portile2/mini_portile_cmake.rb +5 -33
- data/lib/mini_portile2/version.rb +1 -1
- data/mini_portile2.gemspec +1 -6
- data/test/helper.rb +12 -1
- data/test/test_cmake.rb +34 -52
- data/test/test_cook.rb +30 -1
- data/test/test_digest.rb +75 -77
- data/test/test_download.rb +5 -4
- data/test/test_execute.rb +4 -3
- data/test/test_proxy.rb +7 -6
- metadata +8 -89
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bcea2276fac9f3ca76bfea583e5752f483dd9eb603be305aabda7d94dc3d68d6
|
4
|
+
data.tar.gz: b17dfb956a4830ba45aab9f02bd4de1882e828f238f962dbcffe4177445a4735
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd8cda43aee0d8cc3014d8b55385e7096c0156c5d291084fa8af22b64c74393fdf5358741abfe954a8f9f7624ce7df4550da1ff9950e018ad5fbc64e50c29ffb
|
7
|
+
data.tar.gz: 22003d5b4e9a41cac7e6459f40443800b3b87590992ff164b4dbff34a8b86b6e36dafe3c71c3dcb0c2b2a4eed3e686dbc3b7ad0be4be6743f6b731931ad60e39
|
data/.github/workflows/ci.yml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
name:
|
1
|
+
name: ci
|
2
2
|
concurrency:
|
3
3
|
group: "${{github.workflow}}-${{github.ref}}"
|
4
4
|
cancel-in-progress: true
|
@@ -25,7 +25,15 @@ jobs:
|
|
25
25
|
fail-fast: false
|
26
26
|
matrix:
|
27
27
|
platform: [ubuntu-latest, windows-latest, macos-latest]
|
28
|
-
ruby: ["2.3", "2.4", "2.5", "2.6", "2.7", "3.0", "3.1", "3.2", "
|
28
|
+
ruby: ["2.3", "2.4", "2.5", "2.6", "2.7", "3.0", "3.1", "3.2", "3.3"]
|
29
|
+
exclude:
|
30
|
+
# I can't figure out how to install these on macos through setup-ruby
|
31
|
+
- ruby: "2.3"
|
32
|
+
platform: "macos-latest"
|
33
|
+
- ruby: "2.4"
|
34
|
+
platform: "macos-latest"
|
35
|
+
- ruby: "2.5"
|
36
|
+
platform: "macos-latest"
|
29
37
|
runs-on: ${{ matrix.platform }}
|
30
38
|
steps:
|
31
39
|
- name: configure git crlf on windows
|
@@ -48,7 +56,8 @@ jobs:
|
|
48
56
|
strategy:
|
49
57
|
fail-fast: false
|
50
58
|
matrix:
|
51
|
-
|
59
|
+
# use macos-13 (not 14) because libyaml 0.2.5 doesn't have up-to-date config.guess and config.sub
|
60
|
+
platform: [ubuntu-latest, windows-latest, macos-13]
|
52
61
|
ruby: ["3.1"]
|
53
62
|
runs-on: ${{ matrix.platform }}
|
54
63
|
steps:
|
@@ -115,3 +124,40 @@ jobs:
|
|
115
124
|
gem install bundler
|
116
125
|
bundle install
|
117
126
|
bundle exec rake ${{ matrix.task }}
|
127
|
+
|
128
|
+
openbsd:
|
129
|
+
strategy:
|
130
|
+
fail-fast: false
|
131
|
+
matrix:
|
132
|
+
task: ["test:unit", "test:examples"]
|
133
|
+
runs-on: ubuntu-latest
|
134
|
+
env:
|
135
|
+
MAKE: gmake
|
136
|
+
steps:
|
137
|
+
- uses: actions/checkout@v4
|
138
|
+
- uses: vmactions/openbsd-vm@v1
|
139
|
+
with:
|
140
|
+
envs: MAKE
|
141
|
+
usesh: true
|
142
|
+
copyback: false
|
143
|
+
prepare: |
|
144
|
+
pkg_add ruby%3.1 gmake cmake git pkgconf security/gnupg
|
145
|
+
ln -sf /usr/local/bin/ruby31 /usr/local/bin/ruby
|
146
|
+
ln -sf /usr/local/bin/bundle31 /usr/local/bin/bundle
|
147
|
+
ln -sf /usr/local/bin/bundler31 /usr/local/bin/bundler
|
148
|
+
ln -sf /usr/local/bin/erb31 /usr/local/bin/erb
|
149
|
+
ln -sf /usr/local/bin/gem31 /usr/local/bin/gem
|
150
|
+
ln -sf /usr/local/bin/irb31 /usr/local/bin/irb
|
151
|
+
ln -sf /usr/local/bin/racc31 /usr/local/bin/racc
|
152
|
+
ln -sf /usr/local/bin/rake31 /usr/local/bin/rake
|
153
|
+
ln -sf /usr/local/bin/rbs31 /usr/local/bin/rbs
|
154
|
+
ln -sf /usr/local/bin/rdbg31 /usr/local/bin/rdbg
|
155
|
+
ln -sf /usr/local/bin/rdoc31 /usr/local/bin/rdoc
|
156
|
+
ln -sf /usr/local/bin/ri31 /usr/local/bin/ri
|
157
|
+
ln -sf /usr/local/bin/syntax_suggest31 /usr/local/bin/syntax_suggest
|
158
|
+
ln -sf /usr/local/bin/typeprof31 /usr/local/bin/typeprof
|
159
|
+
run: |
|
160
|
+
git config --global --add safe.directory /home/runner/work/mini_portile/mini_portile
|
161
|
+
gem install bundler
|
162
|
+
bundle install
|
163
|
+
bundle exec rake ${{ matrix.task }}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
name: downstream
|
2
|
+
concurrency:
|
3
|
+
group: "${{github.workflow}}-${{github.ref}}"
|
4
|
+
cancel-in-progress: true
|
5
|
+
on:
|
6
|
+
workflow_dispatch:
|
7
|
+
schedule:
|
8
|
+
- cron: "0 7 * * 1,3,5" # At 07:00 on Monday, Wednesday, and Friday # https://crontab.guru/#0_7_*_*_1,3,5
|
9
|
+
push:
|
10
|
+
branches:
|
11
|
+
- main
|
12
|
+
- "v*.*.x"
|
13
|
+
tags:
|
14
|
+
- v*.*.*
|
15
|
+
pull_request:
|
16
|
+
types: [opened, synchronize]
|
17
|
+
branches:
|
18
|
+
- '*'
|
19
|
+
|
20
|
+
jobs:
|
21
|
+
downstream:
|
22
|
+
name: downstream-${{matrix.name}}-${{matrix.platform}}
|
23
|
+
strategy:
|
24
|
+
fail-fast: false
|
25
|
+
matrix:
|
26
|
+
name: [re2, nokogiri, sqlite3]
|
27
|
+
platform: [ubuntu-latest, windows-latest, macos-latest]
|
28
|
+
include:
|
29
|
+
- name: re2
|
30
|
+
url: https://github.com/mudge/re2
|
31
|
+
command: "bundle exec rake compile spec"
|
32
|
+
ruby: "3.3"
|
33
|
+
- name: nokogiri
|
34
|
+
url: https://github.com/sparklemotion/nokogiri
|
35
|
+
command: "bundle exec rake compile test"
|
36
|
+
ruby: "3.3"
|
37
|
+
- name: sqlite3
|
38
|
+
url: https://github.com/sparklemotion/sqlite3-ruby
|
39
|
+
command: "bundle exec rake compile test"
|
40
|
+
ruby: "3.3"
|
41
|
+
runs-on: ${{matrix.platform}}
|
42
|
+
steps:
|
43
|
+
- name: configure git crlf
|
44
|
+
if: ${{ startsWith(matrix.platform, 'windows') }}
|
45
|
+
run: |
|
46
|
+
git config --system core.autocrlf false
|
47
|
+
git config --system core.eol lf
|
48
|
+
- uses: actions/checkout@v4
|
49
|
+
- uses: ruby/setup-ruby@v1
|
50
|
+
with:
|
51
|
+
ruby-version: ${{matrix.ruby}}
|
52
|
+
bundler-cache: true
|
53
|
+
bundler: latest
|
54
|
+
- run: git clone --depth=1 ${{matrix.url}} ${{matrix.name}}
|
55
|
+
- uses: actions/cache@v4
|
56
|
+
with:
|
57
|
+
path: ${{matrix.name}}/ports/archives
|
58
|
+
key: tarballs-${{matrix.name}}
|
59
|
+
enableCrossOsArchive: true
|
60
|
+
- name: ${{matrix.name}} test suite
|
61
|
+
working-directory: ${{matrix.name}}
|
62
|
+
run: |
|
63
|
+
bundle remove mini_portile2 || true
|
64
|
+
bundle add mini_portile2 --path=".."
|
65
|
+
bundle install --local || bundle install
|
66
|
+
${{matrix.command}}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
name: upstream
|
2
|
+
concurrency:
|
3
|
+
group: "${{github.workflow}}-${{github.ref}}"
|
4
|
+
cancel-in-progress: true
|
5
|
+
on:
|
6
|
+
workflow_dispatch:
|
7
|
+
schedule:
|
8
|
+
- cron: "0 8 * * 5" # At 08:00 on Friday # https://crontab.guru/#0_8_*_*_5
|
9
|
+
pull_request:
|
10
|
+
types: [opened, synchronize]
|
11
|
+
branches:
|
12
|
+
- "*"
|
13
|
+
paths:
|
14
|
+
- .github/workflows/upstream.yml # this file
|
15
|
+
|
16
|
+
jobs:
|
17
|
+
test-unit:
|
18
|
+
env:
|
19
|
+
MAKEFLAGS: -j2
|
20
|
+
strategy:
|
21
|
+
fail-fast: false
|
22
|
+
matrix:
|
23
|
+
platform: [ubuntu-latest, windows-latest, macos-latest]
|
24
|
+
ruby: ["head"]
|
25
|
+
runs-on: ${{ matrix.platform }}
|
26
|
+
steps:
|
27
|
+
- name: configure git crlf on windows
|
28
|
+
if: matrix.platform == 'windows-latest'
|
29
|
+
run: |
|
30
|
+
git config --system core.autocrlf false
|
31
|
+
git config --system core.eol lf
|
32
|
+
- uses: actions/checkout@v4
|
33
|
+
- uses: MSP-Greg/setup-ruby-pkgs@v1
|
34
|
+
with:
|
35
|
+
apt-get: _update_ build-essential cmake
|
36
|
+
mingw: _upgrade_ cmake
|
37
|
+
ruby-version: ${{ matrix.ruby }}
|
38
|
+
bundler-cache: true
|
39
|
+
- run: bundle exec rake test:unit
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,27 @@
|
|
1
1
|
## mini_portile changelog
|
2
2
|
|
3
|
+
### 2.8.8 / 2024-11-14
|
4
|
+
|
5
|
+
#### Improved
|
6
|
+
|
7
|
+
- Raise an exception with a clear error message when `xzcat` is needed but is not installed. (#152) @flavorjones
|
8
|
+
|
9
|
+
|
10
|
+
### 2.8.7 / 2024-05-31
|
11
|
+
|
12
|
+
#### Added
|
13
|
+
|
14
|
+
- When setting the C compiler through the `MiniPortile` constructor, the preferred keyword argument is now `:cc_command`. The original `:gcc_command` is still supported. (#144 by @flavorjones)
|
15
|
+
- Add support for extracting xz-compressed tarballs on OpenBSD. (#141 by @postmodern)
|
16
|
+
- Add OpenBSD support to the experimental method `MakeMakefile#mkmf_config`. (#141 by @flavorjones)
|
17
|
+
|
18
|
+
|
19
|
+
#### Changed
|
20
|
+
|
21
|
+
- `MiniPortileCMake` now detects the C and C++ compiler the same way `MiniPortile` does: by examining environment variables, then using kwargs, then looking in RbConfig (in that order). (#144 by @flavorjones)
|
22
|
+
- GPG file verification error messages are captured in the raised exception. Previously these errors went to `stderr`. (#145 by @flavorjones)
|
23
|
+
|
24
|
+
|
3
25
|
### 2.8.6 / 2024-04-14
|
4
26
|
|
5
27
|
#### Added
|
data/Gemfile
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
+
gemspec
|
4
|
+
|
3
5
|
gem "net-ftp" if Gem::Requirement.new("> 3.1.0.dev").satisfied_by?(Gem::Version.new(RUBY_VERSION))
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
+
gem "minitar", "0.9"
|
8
|
+
gem "minitest", "~> 5.15" # open range for ruby 2.3 support
|
9
|
+
gem "minitest-hooks", "1.5.2"
|
10
|
+
gem "rake", "13.2.1"
|
11
|
+
if RUBY_VERSION >= "3.4"
|
12
|
+
gem "webrick", git: "https://github.com/ruby/webrick" # shouldn't be necessary to pin once webrick 1.8.2 or 1.9.0 is released
|
13
|
+
else
|
14
|
+
gem "webrick"
|
15
|
+
end
|
data/README.md
CHANGED
@@ -85,21 +85,30 @@ system-wide installation.
|
|
85
85
|
|
86
86
|
Some keyword arguments can be passed to the constructor to configure the commands used:
|
87
87
|
|
88
|
-
#### `
|
88
|
+
#### `cc_command` and `cxx_command`
|
89
89
|
|
90
|
-
The compiler command that is used is configurable, and in order of preference will use:
|
90
|
+
The C compiler command that is used is configurable, and in order of preference will use:
|
91
91
|
|
92
92
|
- the `CC` environment variable (if present)
|
93
|
-
- the `
|
93
|
+
- the `:cc_command` keyword argument passed in to the constructor
|
94
94
|
- `RbConfig::CONFIG["CC"]`
|
95
95
|
- `"gcc"`
|
96
96
|
|
97
|
-
|
97
|
+
The C++ compiler is similarly configuratble, and in order of preference will use:
|
98
|
+
|
99
|
+
- the `CXX` environment variable (if present)
|
100
|
+
- the `:cxx_command` keyword argument passed in to the constructor
|
101
|
+
- `RbConfig::CONFIG["CXX"]`
|
102
|
+
- `"g++"`
|
103
|
+
|
104
|
+
You can pass your compiler commands to the MiniPortile constructor:
|
98
105
|
|
99
106
|
``` ruby
|
100
|
-
MiniPortile.new("libiconv", "1.13.1",
|
107
|
+
MiniPortile.new("libiconv", "1.13.1", cc_command: "clang", cxx_command: "clang++")
|
101
108
|
```
|
102
109
|
|
110
|
+
(For backwards compatibility, the constructor also supports a keyword argument `:gcc_command` for the C compiler.)
|
111
|
+
|
103
112
|
#### `make_command`
|
104
113
|
|
105
114
|
The configuration/make command that is used is configurable, and in order of preference will use:
|
data/Rakefile
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
require "rake/clean"
|
2
2
|
require "bundler/gem_tasks"
|
3
|
+
require "rake/testtask"
|
3
4
|
|
4
|
-
|
5
|
-
desc "Test MiniPortile by running unit tests"
|
6
|
-
task :unit do
|
7
|
-
sh "ruby -w -W2 -I. -Ilib -e \"#{Dir["test/test_*.rb"].map { |f| "require '#{f}';" }.join}\" -- #{ENV["TESTOPTS"]} -v"
|
8
|
-
end
|
5
|
+
Rake::TestTask.new("test:unit")
|
9
6
|
|
7
|
+
namespace :test do
|
10
8
|
desc "Test MiniPortile by compiling examples"
|
11
9
|
task :examples do
|
12
10
|
Dir.chdir("examples") do
|
@@ -8,6 +8,7 @@ require 'open-uri'
|
|
8
8
|
require 'cgi'
|
9
9
|
require 'rbconfig'
|
10
10
|
require 'shellwords'
|
11
|
+
require 'open3'
|
11
12
|
|
12
13
|
# Monkey patch for Net::HTTP by ruby open-uri fix:
|
13
14
|
# https://github.com/ruby/ruby/commit/58835a9
|
@@ -103,10 +104,11 @@ class MiniPortile
|
|
103
104
|
@files = []
|
104
105
|
@patch_files = []
|
105
106
|
@log_files = {}
|
106
|
-
@logger = STDOUT
|
107
|
+
@logger = kwargs[:logger] || STDOUT
|
107
108
|
@source_directory = nil
|
108
109
|
|
109
|
-
@
|
110
|
+
@cc_command = kwargs[:cc_command] || kwargs[:gcc_command]
|
111
|
+
@cxx_command = kwargs[:cxx_command]
|
110
112
|
@make_command = kwargs[:make_command]
|
111
113
|
@open_timeout = kwargs[:open_timeout] || DEFAULT_TIMEOUT
|
112
114
|
@read_timeout = kwargs[:read_timeout] || DEFAULT_TIMEOUT
|
@@ -318,10 +320,8 @@ class MiniPortile
|
|
318
320
|
if static
|
319
321
|
libdir = lib_path
|
320
322
|
if pcfile
|
321
|
-
|
322
|
-
|
323
|
-
libdir = minimal_pkg_config(pcfile, "variable=libdir")
|
324
|
-
end
|
323
|
+
pcfile_libdir = minimal_pkg_config(pcfile, "variable=libdir").strip
|
324
|
+
libdir = pcfile_libdir unless pcfile_libdir.empty?
|
325
325
|
end
|
326
326
|
|
327
327
|
#
|
@@ -372,8 +372,13 @@ class MiniPortile
|
|
372
372
|
File.join(path, "lib")
|
373
373
|
end
|
374
374
|
|
375
|
-
def
|
376
|
-
(ENV["CC"] || @
|
375
|
+
def cc_cmd
|
376
|
+
(ENV["CC"] || @cc_command || RbConfig::CONFIG["CC"] || "gcc").dup
|
377
|
+
end
|
378
|
+
alias :gcc_cmd :cc_cmd
|
379
|
+
|
380
|
+
def cxx_cmd
|
381
|
+
(ENV["CXX"] || @cxx_command || RbConfig::CONFIG["CXX"] || "g++").dup
|
377
382
|
end
|
378
383
|
|
379
384
|
def make_cmd
|
@@ -457,24 +462,29 @@ class MiniPortile
|
|
457
462
|
gpg_exe = which('gpg2') || which('gpg') || raise("Neither GPG nor GPG2 is installed")
|
458
463
|
|
459
464
|
# import the key into our own keyring
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
465
|
+
gpg_error = nil
|
466
|
+
gpg_status = Open3.popen3(gpg_exe, "--status-fd", "1", "--no-default-keyring", "--keyring", KEYRING_NAME, "--import") do |gpg_in, gpg_out, gpg_err, _thread|
|
467
|
+
gpg_in.write gpg[:key]
|
468
|
+
gpg_in.close
|
469
|
+
gpg_error = gpg_err.read
|
470
|
+
gpg_out.read
|
464
471
|
end
|
465
472
|
key_ids = gpg_status.scan(/\[GNUPG:\] IMPORT_OK \d+ (?<key_id>[0-9a-f]+)/i).map(&:first)
|
466
|
-
raise "invalid gpg key provided" if key_ids.empty?
|
473
|
+
raise "invalid gpg key provided:\n#{gpg_error}" if key_ids.empty?
|
467
474
|
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
+
begin
|
476
|
+
# verify the signature against our keyring
|
477
|
+
gpg_status, gpg_error, _status = Open3.capture3(gpg_exe, "--status-fd", "1", "--no-default-keyring", "--keyring", KEYRING_NAME, "--verify", signature_file, file[:local_path])
|
478
|
+
|
479
|
+
raise "signature mismatch:\n#{gpg_error}" unless gpg_status.match(/^\[GNUPG:\] VALIDSIG/)
|
480
|
+
ensure
|
481
|
+
# remove the key from our keyring
|
482
|
+
key_ids.each do |key_id|
|
483
|
+
IO.popen([gpg_exe, "--batch", "--yes", "--no-default-keyring", "--keyring", KEYRING_NAME, "--delete-keys", key_id], &:read)
|
484
|
+
raise "unable to delete the imported key" unless $?.exitstatus==0
|
485
|
+
end
|
475
486
|
end
|
476
487
|
|
477
|
-
raise "signature mismatch" unless gpg_status.match(/^\[GNUPG:\] VALIDSIG/)
|
478
488
|
|
479
489
|
else
|
480
490
|
digest = case
|
@@ -498,30 +508,6 @@ class MiniPortile
|
|
498
508
|
}
|
499
509
|
end
|
500
510
|
|
501
|
-
TAR_EXECUTABLES = %w[gtar bsdtar tar basic-bsdtar]
|
502
|
-
def tar_exe
|
503
|
-
@@tar_exe ||= begin
|
504
|
-
TAR_EXECUTABLES.find { |c|
|
505
|
-
which(c)
|
506
|
-
} or raise("tar not found - please make sure that one of the following commands is in the PATH: #{TAR_EXECUTABLES.join(", ")}")
|
507
|
-
end
|
508
|
-
end
|
509
|
-
|
510
|
-
def tar_compression_switch(filename)
|
511
|
-
case File.extname(filename)
|
512
|
-
when '.gz', '.tgz'
|
513
|
-
'z'
|
514
|
-
when '.bz2', '.tbz2'
|
515
|
-
'j'
|
516
|
-
when '.xz'
|
517
|
-
'J'
|
518
|
-
when '.Z'
|
519
|
-
'Z'
|
520
|
-
else
|
521
|
-
''
|
522
|
-
end
|
523
|
-
end
|
524
|
-
|
525
511
|
# From: http://stackoverflow.com/a/5471032/7672
|
526
512
|
# Thanks, Mislav!
|
527
513
|
#
|
@@ -548,6 +534,8 @@ class MiniPortile
|
|
548
534
|
output = `#{gcc_cmd} -v 2>&1`
|
549
535
|
if m = output.match(/^Target\: (.*)$/)
|
550
536
|
@detect_host = m[1]
|
537
|
+
else
|
538
|
+
@detect_host = nil
|
551
539
|
end
|
552
540
|
|
553
541
|
@detect_host
|
@@ -556,12 +544,39 @@ class MiniPortile
|
|
556
544
|
end
|
557
545
|
end
|
558
546
|
|
547
|
+
TAR_EXECUTABLES = %w[gtar bsdtar tar basic-bsdtar]
|
548
|
+
def tar_exe
|
549
|
+
@@tar_exe ||= begin
|
550
|
+
TAR_EXECUTABLES.find { |c|
|
551
|
+
which(c)
|
552
|
+
} or raise("tar not found - please make sure that one of the following commands is in the PATH: #{TAR_EXECUTABLES.join(", ")}")
|
553
|
+
end
|
554
|
+
end
|
555
|
+
|
556
|
+
def xzcat_exe
|
557
|
+
@@xzcat_exe ||= which("xzcat") ? "xzcat" : raise("xzcat not found")
|
558
|
+
end
|
559
|
+
|
560
|
+
def tar_command(file, target)
|
561
|
+
case File.extname(file)
|
562
|
+
when '.gz', '.tgz'
|
563
|
+
[tar_exe, 'xzf', file, '-C', target]
|
564
|
+
when '.bz2', '.tbz2'
|
565
|
+
[tar_exe, 'xjf', file, '-C', target]
|
566
|
+
when '.xz'
|
567
|
+
# NOTE: OpenBSD's tar command does not support the -J option
|
568
|
+
"#{xzcat_exe.shellescape} #{file.shellescape} | #{tar_exe.shellescape} xf - -C #{target.shellescape}"
|
569
|
+
else
|
570
|
+
[tar_exe, 'xf', file, '-C', target]
|
571
|
+
end
|
572
|
+
end
|
573
|
+
|
559
574
|
def extract_file(file, target)
|
560
575
|
filename = File.basename(file)
|
561
576
|
FileUtils.mkdir_p target
|
562
577
|
|
563
578
|
message "Extracting #{filename} into #{target}... "
|
564
|
-
execute('extract',
|
579
|
+
execute('extract', tar_command(file, target) , {:cd => Dir.pwd, :initial_message => false})
|
565
580
|
end
|
566
581
|
|
567
582
|
# command could be an array of args, or one string containing a command passed to the shell. See
|
@@ -697,7 +712,7 @@ class MiniPortile
|
|
697
712
|
return download_file(redirect.url, full_path, count-1)
|
698
713
|
rescue => e
|
699
714
|
count = count - 1
|
700
|
-
puts "#{count} retrie(s) left for #{filename} (#{e.message})"
|
715
|
+
@logger.puts "#{count} retrie(s) left for #{filename} (#{e.message})"
|
701
716
|
if count > 0
|
702
717
|
sleep 1
|
703
718
|
return download_file_http(url, full_path, count)
|
@@ -67,49 +67,21 @@ class MiniPortileCMake < MiniPortile
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def cmake_compile_flags
|
70
|
-
|
70
|
+
# RbConfig::CONFIG['CC'] and RbConfig::CONFIG['CXX'] can contain additional flags, for example
|
71
|
+
# "clang++ -std=gnu++11" or "clang -fdeclspec". CMake is just looking for the command name.
|
72
|
+
cc_compiler = cc_cmd.split.first
|
73
|
+
cxx_compiler = cxx_cmd.split.first
|
71
74
|
|
72
75
|
# needed to ensure cross-compilation with CMake targets the right CPU and compilers
|
73
76
|
[
|
74
77
|
"-DCMAKE_SYSTEM_NAME=#{cmake_system_name}",
|
75
78
|
"-DCMAKE_SYSTEM_PROCESSOR=#{cpu_type}",
|
76
|
-
"-DCMAKE_C_COMPILER=#{
|
79
|
+
"-DCMAKE_C_COMPILER=#{cc_compiler}",
|
77
80
|
"-DCMAKE_CXX_COMPILER=#{cxx_compiler}",
|
78
81
|
"-DCMAKE_BUILD_TYPE=#{cmake_build_type}",
|
79
82
|
]
|
80
83
|
end
|
81
84
|
|
82
|
-
def find_compiler(compilers)
|
83
|
-
compilers.find { |binary| which(binary) }
|
84
|
-
end
|
85
|
-
|
86
|
-
# configure automatically searches for the right compiler based on the
|
87
|
-
# `--host` parameter. However, CMake doesn't have an equivalent feature.
|
88
|
-
# Search for the right compiler for the target architecture using
|
89
|
-
# some basic heruistics.
|
90
|
-
def find_c_and_cxx_compilers(host)
|
91
|
-
c_compiler = ENV["CC"]
|
92
|
-
cxx_compiler = ENV["CXX"]
|
93
|
-
|
94
|
-
if MiniPortile.darwin?
|
95
|
-
c_compiler ||= 'clang'
|
96
|
-
cxx_compiler ||='clang++'
|
97
|
-
elsif MiniPortile.freebsd?
|
98
|
-
c_compiler ||= 'cc'
|
99
|
-
cxx_compiler ||= 'c++'
|
100
|
-
else
|
101
|
-
c_compiler ||= 'gcc'
|
102
|
-
cxx_compiler ||= 'g++'
|
103
|
-
end
|
104
|
-
|
105
|
-
c_platform_compiler = "#{host}-#{c_compiler}"
|
106
|
-
cxx_platform_compiler = "#{host}-#{cxx_compiler}"
|
107
|
-
c_compiler = find_compiler([c_platform_compiler, c_compiler])
|
108
|
-
cxx_compiler = find_compiler([cxx_platform_compiler, cxx_compiler])
|
109
|
-
|
110
|
-
[c_compiler, cxx_compiler]
|
111
|
-
end
|
112
|
-
|
113
85
|
# Full list: https://gitlab.kitware.com/cmake/cmake/-/blob/v3.26.4/Modules/CMakeDetermineSystem.cmake?ref_type=tags#L12-31
|
114
86
|
def cmake_system_name
|
115
87
|
return system_name if system_name
|
data/mini_portile2.gemspec
CHANGED
@@ -34,10 +34,5 @@ Gem::Specification.new do |spec|
|
|
34
34
|
|
35
35
|
spec.required_ruby_version = ">= 2.3.0"
|
36
36
|
|
37
|
-
spec.
|
38
|
-
spec.add_development_dependency "minitar", "~> 0.9"
|
39
|
-
spec.add_development_dependency "minitest", "~> 5.15"
|
40
|
-
spec.add_development_dependency "minitest-hooks", "~> 1.5"
|
41
|
-
spec.add_development_dependency "rake", "~> 13.0"
|
42
|
-
spec.add_development_dependency "webrick", "~> 1.7"
|
37
|
+
spec.metadata["changelog_uri"] = spec.homepage + "/blob/main/CHANGELOG.md"
|
43
38
|
end
|
data/test/helper.rb
CHANGED
@@ -9,6 +9,12 @@ require 'archive/tar/minitar'
|
|
9
9
|
require 'fileutils'
|
10
10
|
require 'erb'
|
11
11
|
require 'mini_portile2'
|
12
|
+
require 'logger'
|
13
|
+
|
14
|
+
puts "#{__FILE__}:#{__LINE__}: relevant RbConfig::CONFIG values:"
|
15
|
+
%w[target_os target_cpu CC CXX].each do |key|
|
16
|
+
puts "- #{key}: #{RbConfig::CONFIG[key].inspect}"
|
17
|
+
end
|
12
18
|
|
13
19
|
class TestCase < Minitest::Test
|
14
20
|
include Minitest::Hooks
|
@@ -18,7 +24,12 @@ class TestCase < Minitest::Test
|
|
18
24
|
attr_accessor :webrick
|
19
25
|
|
20
26
|
def start_webrick(path)
|
21
|
-
@webrick = WEBrick::HTTPServer.new(
|
27
|
+
@webrick = WEBrick::HTTPServer.new(
|
28
|
+
:Port => HTTP_PORT,
|
29
|
+
:DocumentRoot => path,
|
30
|
+
:Logger => Logger.new(File::NULL),
|
31
|
+
:AccessLog => [],
|
32
|
+
).tap do |w|
|
22
33
|
Thread.new do
|
23
34
|
w.start
|
24
35
|
end
|
data/test/test_cmake.rb
CHANGED
@@ -14,12 +14,16 @@ class TestCMake < TestCase
|
|
14
14
|
create_tar(@tar_path, @assets_path, "test-cmake-1.0")
|
15
15
|
start_webrick(File.dirname(@tar_path))
|
16
16
|
|
17
|
+
@logger = StringIO.new # IO to keep recipe logs in case we need to debug
|
17
18
|
@recipe = init_recipe
|
18
19
|
|
19
20
|
git_dir = File.join(@assets_path, "git")
|
20
21
|
with_custom_git_dir(git_dir) do
|
21
22
|
recipe.cook
|
22
23
|
end
|
24
|
+
rescue => e
|
25
|
+
puts @logger.string
|
26
|
+
raise e
|
23
27
|
end
|
24
28
|
|
25
29
|
def after_all
|
@@ -58,6 +62,7 @@ class TestCMake < TestCase
|
|
58
62
|
|
59
63
|
def init_recipe
|
60
64
|
MiniPortileCMake.new("test-cmake", "1.0").tap do |recipe|
|
65
|
+
recipe.logger = @logger
|
61
66
|
recipe.files << "http://localhost:#{HTTP_PORT}/#{ERB::Util.url_encode(File.basename(@tar_path))}"
|
62
67
|
recipe.patch_files << File.join(@assets_path, "patch 1.diff")
|
63
68
|
end
|
@@ -83,23 +88,20 @@ class TestCMakeConfig < TestCMake
|
|
83
88
|
end
|
84
89
|
|
85
90
|
def test_configure_defaults_with_macos
|
86
|
-
recipe = init_recipe
|
87
|
-
recipe.host = 'some-host'
|
88
|
-
|
89
91
|
with_env({ "CC" => nil, "CXX" => nil }) do
|
90
92
|
MiniPortile.stub(:darwin?, true) do
|
91
93
|
with_stubbed_target(os: 'darwin22', cpu: 'arm64') do
|
92
|
-
with_compilers(
|
94
|
+
with_compilers(c_compiler: 'clang', cxx_compiler: 'clang++') do
|
93
95
|
Open3.stub(:capture2, cmake_help_mock('Unix')) do
|
94
96
|
assert_equal(
|
95
97
|
[
|
96
98
|
"-DCMAKE_SYSTEM_NAME=Darwin",
|
97
99
|
"-DCMAKE_SYSTEM_PROCESSOR=arm64",
|
98
|
-
"-DCMAKE_C_COMPILER=
|
99
|
-
"-DCMAKE_CXX_COMPILER=
|
100
|
+
"-DCMAKE_C_COMPILER=clang",
|
101
|
+
"-DCMAKE_CXX_COMPILER=clang++",
|
100
102
|
"-DCMAKE_BUILD_TYPE=Release"
|
101
103
|
],
|
102
|
-
recipe.configure_defaults)
|
104
|
+
@recipe.configure_defaults)
|
103
105
|
end
|
104
106
|
end
|
105
107
|
end
|
@@ -108,12 +110,9 @@ class TestCMakeConfig < TestCMake
|
|
108
110
|
end
|
109
111
|
|
110
112
|
def test_configure_defaults_with_freebsd
|
111
|
-
recipe = init_recipe
|
112
|
-
recipe.host = 'some-host'
|
113
|
-
|
114
113
|
with_env({ "CC" => nil, "CXX" => nil }) do
|
115
114
|
with_stubbed_target(os: 'freebsd14') do
|
116
|
-
with_compilers(
|
115
|
+
with_compilers(c_compiler: 'cc', cxx_compiler: 'c++') do
|
117
116
|
Open3.stub(:capture2, cmake_help_mock('Unix')) do
|
118
117
|
assert_equal(
|
119
118
|
[
|
@@ -123,7 +122,7 @@ class TestCMakeConfig < TestCMake
|
|
123
122
|
"-DCMAKE_CXX_COMPILER=c++",
|
124
123
|
"-DCMAKE_BUILD_TYPE=Release"
|
125
124
|
],
|
126
|
-
recipe.configure_defaults)
|
125
|
+
@recipe.configure_defaults)
|
127
126
|
end
|
128
127
|
end
|
129
128
|
end
|
@@ -131,22 +130,21 @@ class TestCMakeConfig < TestCMake
|
|
131
130
|
end
|
132
131
|
|
133
132
|
def test_configure_defaults_with_manual_system_name
|
134
|
-
recipe = init_recipe
|
135
|
-
recipe.system_name = 'Custom'
|
136
|
-
|
137
133
|
MiniPortile.stub(:darwin?, false) do
|
138
134
|
with_stubbed_target do
|
139
|
-
with_compilers
|
135
|
+
with_compilers do
|
140
136
|
Open3.stub(:capture2, cmake_help_mock('Unix')) do
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
137
|
+
@recipe.stub(:system_name, 'Custom') do
|
138
|
+
assert_equal(
|
139
|
+
[
|
140
|
+
"-DCMAKE_SYSTEM_NAME=Custom",
|
141
|
+
"-DCMAKE_SYSTEM_PROCESSOR=x86_64",
|
142
|
+
"-DCMAKE_C_COMPILER=gcc",
|
143
|
+
"-DCMAKE_CXX_COMPILER=g++",
|
144
|
+
"-DCMAKE_BUILD_TYPE=Release"
|
145
|
+
],
|
146
|
+
@recipe.configure_defaults)
|
147
|
+
end
|
150
148
|
end
|
151
149
|
end
|
152
150
|
end
|
@@ -154,16 +152,14 @@ class TestCMakeConfig < TestCMake
|
|
154
152
|
end
|
155
153
|
|
156
154
|
def test_configure_defaults_with_unix_makefiles
|
157
|
-
recipe = init_recipe
|
158
|
-
|
159
155
|
MiniPortile.stub(:linux?, true) do
|
160
156
|
MiniPortile.stub(:darwin?, false) do
|
161
157
|
with_stubbed_target do
|
162
|
-
with_compilers
|
158
|
+
with_compilers do
|
163
159
|
Open3.stub(:capture2, cmake_help_mock('Unix')) do
|
164
160
|
MiniPortile.stub(:mingw?, true) do
|
165
161
|
assert_equal(default_x86_compile_flags,
|
166
|
-
|
162
|
+
@recipe.configure_defaults)
|
167
163
|
end
|
168
164
|
end
|
169
165
|
end
|
@@ -173,15 +169,13 @@ class TestCMakeConfig < TestCMake
|
|
173
169
|
end
|
174
170
|
|
175
171
|
def test_configure_defaults_with_msys_makefiles
|
176
|
-
recipe = init_recipe
|
177
|
-
|
178
172
|
MiniPortile.stub(:linux?, true) do
|
179
173
|
MiniPortile.stub(:darwin?, false) do
|
180
174
|
with_stubbed_target do
|
181
|
-
with_compilers
|
175
|
+
with_compilers do
|
182
176
|
Open3.stub(:capture2, cmake_help_mock('MSYS')) do
|
183
177
|
MiniPortile.stub(:mingw?, true) do
|
184
|
-
assert_equal(['-G', 'MSYS Makefiles'] + default_x86_compile_flags, recipe.configure_defaults)
|
178
|
+
assert_equal(['-G', 'MSYS Makefiles'] + default_x86_compile_flags, @recipe.configure_defaults)
|
185
179
|
end
|
186
180
|
end
|
187
181
|
end
|
@@ -191,15 +185,13 @@ class TestCMakeConfig < TestCMake
|
|
191
185
|
end
|
192
186
|
|
193
187
|
def test_configure_defaults_with_nmake_makefiles
|
194
|
-
recipe = init_recipe
|
195
|
-
|
196
188
|
MiniPortile.stub(:linux?, true) do
|
197
189
|
MiniPortile.stub(:darwin?, false) do
|
198
190
|
with_stubbed_target do
|
199
|
-
with_compilers
|
191
|
+
with_compilers do
|
200
192
|
Open3.stub(:capture2, cmake_help_mock('NMake')) do
|
201
193
|
MiniPortile.stub(:mswin?, true) do
|
202
|
-
assert_equal(['-G', 'NMake Makefiles'] + default_x86_compile_flags, recipe.configure_defaults)
|
194
|
+
assert_equal(['-G', 'NMake Makefiles'] + default_x86_compile_flags, @recipe.configure_defaults)
|
203
195
|
end
|
204
196
|
end
|
205
197
|
end
|
@@ -240,21 +232,11 @@ class TestCMakeConfig < TestCMake
|
|
240
232
|
end
|
241
233
|
end
|
242
234
|
|
243
|
-
def with_compilers(
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
mock.expect(:call, true, ["#{recipe.host}-#{cxx_compiler}"])
|
249
|
-
else
|
250
|
-
mock.expect(:call, false, ["#{recipe.host}-#{c_compiler}"])
|
251
|
-
mock.expect(:call, true, [c_compiler])
|
252
|
-
mock.expect(:call, false, ["#{recipe.host}-#{cxx_compiler}"])
|
253
|
-
mock.expect(:call, true, [cxx_compiler])
|
254
|
-
end
|
255
|
-
|
256
|
-
recipe.stub(:which, mock) do
|
257
|
-
yield
|
235
|
+
def with_compilers(c_compiler: 'gcc', cxx_compiler: 'g++')
|
236
|
+
@recipe.stub(:cc_cmd, c_compiler) do
|
237
|
+
@recipe.stub(:cxx_cmd, cxx_compiler) do
|
238
|
+
yield
|
239
|
+
end
|
258
240
|
end
|
259
241
|
end
|
260
242
|
|
data/test/test_cook.rb
CHANGED
@@ -13,7 +13,9 @@ class TestCook < TestCase
|
|
13
13
|
create_tar(@tar_path, @assets_path, "test mini portile-1.0.0")
|
14
14
|
start_webrick(File.dirname(@tar_path))
|
15
15
|
|
16
|
+
@logger = StringIO.new # IO to keep recipe logs in case we need to debug
|
16
17
|
@recipe = MiniPortile.new("test mini portile", "1.0.0").tap do |recipe|
|
18
|
+
recipe.logger = @logger
|
17
19
|
recipe.files << "http://localhost:#{HTTP_PORT}/#{ERB::Util.url_encode(File.basename(@tar_path))}"
|
18
20
|
recipe.patch_files << File.join(@assets_path, "patch 1.diff")
|
19
21
|
recipe.configure_options << "--option=\"path with 'space'\""
|
@@ -22,6 +24,9 @@ class TestCook < TestCase
|
|
22
24
|
recipe.cook
|
23
25
|
end
|
24
26
|
end
|
27
|
+
rescue => e
|
28
|
+
puts @logger.string
|
29
|
+
raise e
|
25
30
|
end
|
26
31
|
|
27
32
|
def after_all
|
@@ -79,17 +84,37 @@ class TestCookConfiguration < TestCase
|
|
79
84
|
end
|
80
85
|
end
|
81
86
|
|
82
|
-
def
|
87
|
+
def test_cc_command_configuration
|
83
88
|
without_env("CC") do
|
84
89
|
expected_compiler = RbConfig::CONFIG["CC"] || "gcc"
|
90
|
+
assert_equal(expected_compiler, MiniPortile.new("test", "1.0.0").cc_cmd)
|
85
91
|
assert_equal(expected_compiler, MiniPortile.new("test", "1.0.0").gcc_cmd)
|
92
|
+
assert_equal("xyzzy", MiniPortile.new("test", "1.0.0", cc_command: "xyzzy").cc_cmd)
|
93
|
+
assert_equal("xyzzy", MiniPortile.new("test", "1.0.0", gcc_command: "xyzzy").cc_cmd)
|
94
|
+
assert_equal("xyzzy", MiniPortile.new("test", "1.0.0", cc_command: "xyzzy").gcc_cmd)
|
86
95
|
assert_equal("xyzzy", MiniPortile.new("test", "1.0.0", gcc_command: "xyzzy").gcc_cmd)
|
87
96
|
end
|
88
97
|
with_env("CC"=>"asdf") do
|
98
|
+
assert_equal("asdf", MiniPortile.new("test", "1.0.0").cc_cmd)
|
89
99
|
assert_equal("asdf", MiniPortile.new("test", "1.0.0").gcc_cmd)
|
100
|
+
assert_equal("asdf", MiniPortile.new("test", "1.0.0", cc_command: "xyzzy").cc_cmd)
|
101
|
+
assert_equal("asdf", MiniPortile.new("test", "1.0.0", gcc_command: "xyzzy").cc_cmd)
|
102
|
+
assert_equal("asdf", MiniPortile.new("test", "1.0.0", cc_command: "xyzzy").gcc_cmd)
|
90
103
|
assert_equal("asdf", MiniPortile.new("test", "1.0.0", gcc_command: "xyzzy").gcc_cmd)
|
91
104
|
end
|
92
105
|
end
|
106
|
+
|
107
|
+
def test_cxx_command_configuration
|
108
|
+
without_env("CXX") do
|
109
|
+
expected_compiler = RbConfig::CONFIG["CXX"] || "g++"
|
110
|
+
assert_equal(expected_compiler, MiniPortile.new("test", "1.0.0").cxx_cmd)
|
111
|
+
assert_equal("xyzzy", MiniPortile.new("test", "1.0.0", cxx_command: "xyzzy").cxx_cmd)
|
112
|
+
end
|
113
|
+
with_env("CXX"=>"asdf") do
|
114
|
+
assert_equal("asdf", MiniPortile.new("test", "1.0.0").cxx_cmd)
|
115
|
+
assert_equal("asdf", MiniPortile.new("test", "1.0.0", cxx_command: "xyzzy").cxx_cmd)
|
116
|
+
end
|
117
|
+
end
|
93
118
|
end
|
94
119
|
|
95
120
|
|
@@ -116,7 +141,9 @@ class TestCookWithBrokenGitDir < TestCase
|
|
116
141
|
|
117
142
|
create_tar(@tar_path, @assets_path, "test mini portile-1.0.0")
|
118
143
|
|
144
|
+
@logger = StringIO.new # IO to keep recipe logs in case we need to debug
|
119
145
|
@recipe = MiniPortile.new("test mini portile", "1.0.0").tap do |recipe|
|
146
|
+
recipe.logger = @logger
|
120
147
|
recipe.files << "file://#{@tar_path}"
|
121
148
|
recipe.patch_files << File.join(@assets_path, "patch 1.diff")
|
122
149
|
recipe.configure_options << "--option=\"path with 'space'\""
|
@@ -146,7 +173,9 @@ class TestCookAgainstSourceDirectory < TestCase
|
|
146
173
|
def setup
|
147
174
|
super
|
148
175
|
|
176
|
+
@logger = StringIO.new # IO to keep recipe logs in case we need to debug
|
149
177
|
@recipe ||= MiniPortile.new("test mini portile", "1.0.0").tap do |recipe|
|
178
|
+
recipe.logger = @logger
|
150
179
|
recipe.source_directory = File.expand_path("../assets/test mini portile-1.0.0", __FILE__)
|
151
180
|
end
|
152
181
|
end
|
data/test/test_digest.rb
CHANGED
@@ -24,7 +24,8 @@ class TestDigest < TestCase
|
|
24
24
|
def setup
|
25
25
|
super
|
26
26
|
FileUtils.rm_rf("ports/archives")
|
27
|
-
@
|
27
|
+
@logger = StringIO.new # IO to keep recipe logs in case we need to debug
|
28
|
+
@recipe = MiniPortile.new("test-digest", "1.0.0", logger: @logger)
|
28
29
|
end
|
29
30
|
|
30
31
|
def download_with_digest(key, klass)
|
@@ -68,28 +69,28 @@ class TestDigest < TestCase
|
|
68
69
|
end
|
69
70
|
|
70
71
|
def public_key
|
71
|
-
|
72
|
-
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
73
|
-
Version: GnuPG v1
|
74
|
-
|
75
|
-
mI0EVwUhJQEEAMYxFhgaAdM2Ul5r+XfpqAaI7SOxB14eRjhFjhchy4ylgVxetyLq
|
76
|
-
di3zeANXBIHsLBl7quYTlnmhJr/+GQRkCnXWiUp0tJsBVzGM3puK7c534gakEUH6
|
77
|
-
AlDtj5p3IeygzSyn8u7KORv+ainXfhwkvTO04mJmxAb2uT8ngKYFdPa1ABEBAAG0
|
78
|
-
J1Rlc3QgTWluaXBvcnRpbGUgPHRlc3RAbWluaXBvcnRpbGUub3JnPoi4BBMBAgAi
|
79
|
-
BQJXBSElAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRBl6D5JZMNwswAK
|
80
|
-
A/90Cdb+PX21weBR2Q6uR06M/alPexuXXyJL8ZcwbQMJ/pBBgcS5/h1+rQkBI/CN
|
81
|
-
qpXdDlw2Xys2k0sNwdjIw3hmYRzBrddXlCSW3Sifq/hS+kfPZ1snQmIjCgy1Xky5
|
82
|
-
QGCcPUxBUxzmra88LakkDO+euKK3hcrfeFIi611lTum1NLiNBFcFISUBBADoyY6z
|
83
|
-
2PwH3RWUbqv0VX1s3/JO3v3xMjCRKPlFwsNwLTBtZoWfR6Ao1ajeCuZKfzNKIQ2I
|
84
|
-
rn86Rcqyrq4hTj+7BTWjkIPOBthjiL1YqbEBtX7jcYRkYvdQz/IG2F4zVV6X4AAR
|
85
|
-
Twx7qaXNt67ArzbHCe5gLNRUK6e6OArkahMv7QARAQABiJ8EGAECAAkFAlcFISUC
|
86
|
-
GwwACgkQZeg+SWTDcLNFiwP/TR33ClqWOz0mpjt0xPEoZ0ORmV6fo4sjjzgQoHH/
|
87
|
-
KTdsabJbGp8oLQGW/mx3OxgbsAkyZymb5H5cjaF4HtSd4cxI5t1C9ZS/ytN8pqfR
|
88
|
-
e29SBje8DAAJn2l57s2OddXLPQ0DUwCcdNEaqgHwSk/Swxc7K+IpfvjLKHKUZZBP
|
89
|
-
4Ko=
|
90
|
-
=SVWi
|
91
|
-
-----END PGP PUBLIC KEY BLOCK-----
|
92
|
-
KEY
|
72
|
+
<<~KEY
|
73
|
+
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
74
|
+
Version: GnuPG v1
|
75
|
+
|
76
|
+
mI0EVwUhJQEEAMYxFhgaAdM2Ul5r+XfpqAaI7SOxB14eRjhFjhchy4ylgVxetyLq
|
77
|
+
di3zeANXBIHsLBl7quYTlnmhJr/+GQRkCnXWiUp0tJsBVzGM3puK7c534gakEUH6
|
78
|
+
AlDtj5p3IeygzSyn8u7KORv+ainXfhwkvTO04mJmxAb2uT8ngKYFdPa1ABEBAAG0
|
79
|
+
J1Rlc3QgTWluaXBvcnRpbGUgPHRlc3RAbWluaXBvcnRpbGUub3JnPoi4BBMBAgAi
|
80
|
+
BQJXBSElAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRBl6D5JZMNwswAK
|
81
|
+
A/90Cdb+PX21weBR2Q6uR06M/alPexuXXyJL8ZcwbQMJ/pBBgcS5/h1+rQkBI/CN
|
82
|
+
qpXdDlw2Xys2k0sNwdjIw3hmYRzBrddXlCSW3Sifq/hS+kfPZ1snQmIjCgy1Xky5
|
83
|
+
QGCcPUxBUxzmra88LakkDO+euKK3hcrfeFIi611lTum1NLiNBFcFISUBBADoyY6z
|
84
|
+
2PwH3RWUbqv0VX1s3/JO3v3xMjCRKPlFwsNwLTBtZoWfR6Ao1ajeCuZKfzNKIQ2I
|
85
|
+
rn86Rcqyrq4hTj+7BTWjkIPOBthjiL1YqbEBtX7jcYRkYvdQz/IG2F4zVV6X4AAR
|
86
|
+
Twx7qaXNt67ArzbHCe5gLNRUK6e6OArkahMv7QARAQABiJ8EGAECAAkFAlcFISUC
|
87
|
+
GwwACgkQZeg+SWTDcLNFiwP/TR33ClqWOz0mpjt0xPEoZ0ORmV6fo4sjjzgQoHH/
|
88
|
+
KTdsabJbGp8oLQGW/mx3OxgbsAkyZymb5H5cjaF4HtSd4cxI5t1C9ZS/ytN8pqfR
|
89
|
+
e29SBje8DAAJn2l57s2OddXLPQ0DUwCcdNEaqgHwSk/Swxc7K+IpfvjLKHKUZZBP
|
90
|
+
4Ko=
|
91
|
+
=SVWi
|
92
|
+
-----END PGP PUBLIC KEY BLOCK-----
|
93
|
+
KEY
|
93
94
|
end
|
94
95
|
|
95
96
|
def test_with_valid_gpg_signature
|
@@ -130,7 +131,7 @@ KEY
|
|
130
131
|
exception = assert_raises(RuntimeError){
|
131
132
|
@recipe.download
|
132
133
|
}
|
133
|
-
|
134
|
+
assert_includes(exception.message, "signature mismatch")
|
134
135
|
end
|
135
136
|
|
136
137
|
def test_with_invalid_key
|
@@ -144,60 +145,58 @@ KEY
|
|
144
145
|
}
|
145
146
|
}
|
146
147
|
exception = assert_raises(RuntimeError){ @recipe.download }
|
147
|
-
|
148
|
+
assert_includes(exception.message, "invalid gpg key provided")
|
148
149
|
end
|
149
150
|
|
150
151
|
def test_with_different_key_than_one_used_to_sign
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
/
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
+
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
-----END PGP PUBLIC KEY BLOCK-----
|
200
|
-
KEY
|
152
|
+
key = <<~KEY
|
153
|
+
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
154
|
+
Version: GnuPG v1
|
155
|
+
|
156
|
+
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
|
197
|
+
=4JAR
|
198
|
+
-----END PGP PUBLIC KEY BLOCK-----
|
199
|
+
KEY
|
201
200
|
|
202
201
|
data_file = File.expand_path(File.join(File.dirname(__FILE__), 'assets', 'gpg-fixtures', 'data'))
|
203
202
|
|
@@ -209,7 +208,6 @@ KEY
|
|
209
208
|
}
|
210
209
|
}
|
211
210
|
exception = assert_raises(RuntimeError){ @recipe.download }
|
212
|
-
|
211
|
+
assert_includes(exception.message, "signature mismatch")
|
213
212
|
end
|
214
213
|
end
|
215
|
-
|
data/test/test_download.rb
CHANGED
@@ -25,12 +25,13 @@ describe "recipe download" do
|
|
25
25
|
server.close
|
26
26
|
end
|
27
27
|
|
28
|
-
request_count
|
28
|
+
assert_operator(request_count, :>, 0)
|
29
29
|
end
|
30
30
|
|
31
31
|
before do
|
32
32
|
@request_count = 0
|
33
|
-
@
|
33
|
+
@logger = StringIO.new
|
34
|
+
@recipe = MiniPortile.new("test-download", "1.1.1", logger: @logger)
|
34
35
|
end
|
35
36
|
|
36
37
|
describe "urls" do
|
@@ -62,12 +63,12 @@ describe "recipe download" do
|
|
62
63
|
@recipe.files << "file://#{path}"
|
63
64
|
@recipe.download
|
64
65
|
assert File.exist?(dest)
|
65
|
-
Digest::MD5.file(dest).hexdigest
|
66
|
+
assert_equal("ee0e9f44e72213015ef976d5ac23931d", Digest::MD5.file(dest).hexdigest)
|
66
67
|
end
|
67
68
|
|
68
69
|
it "other" do
|
69
70
|
@recipe.files << "foo://foo"
|
70
|
-
|
71
|
+
assert_raises(ArgumentError) { @recipe.download }
|
71
72
|
end
|
72
73
|
end
|
73
74
|
end
|
data/test/test_execute.rb
CHANGED
@@ -4,7 +4,8 @@ class TestExecute < TestCase
|
|
4
4
|
def setup
|
5
5
|
super
|
6
6
|
@env = {"TEST_ENV_VAR1" => "VAR1_VALUE", "TEST_ENV_VAR2" => "VAR2_VALUE"}
|
7
|
-
@
|
7
|
+
@logger = StringIO.new
|
8
|
+
@recipe = MiniPortile.new("test_execute", "1.0.0", logger: @logger)
|
8
9
|
@log_path = @recipe.send(:tmp_path)
|
9
10
|
FileUtils.mkdir_p File.join(@log_path, "subdir") # normally created by `download`
|
10
11
|
end
|
@@ -14,7 +15,7 @@ class TestExecute < TestCase
|
|
14
15
|
def execute_with_env(env)
|
15
16
|
execute("testenv1",
|
16
17
|
%Q(ruby -e "puts ENV['TEST_ENV_VAR1'].inspect ; exit 0"),
|
17
|
-
{:env => env, :initial_message => false
|
18
|
+
{:env => env, :initial_message => false})
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
@@ -28,7 +29,7 @@ class TestExecute < TestCase
|
|
28
29
|
def execute_with_env(env)
|
29
30
|
execute("testenv2",
|
30
31
|
["ruby", "-e", "puts ENV['TEST_ENV_VAR2'].inspect"],
|
31
|
-
{:env => env, :initial_message => false
|
32
|
+
{:env => env, :initial_message => false})
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
data/test/test_proxy.rb
CHANGED
@@ -37,6 +37,7 @@ class TestProxy < TestCase
|
|
37
37
|
def setup
|
38
38
|
# remove any download files
|
39
39
|
FileUtils.rm_rf("port/archives")
|
40
|
+
@logger = StringIO.new
|
40
41
|
end
|
41
42
|
|
42
43
|
def assert_proxy_auth(expected, request)
|
@@ -48,7 +49,7 @@ class TestProxy < TestCase
|
|
48
49
|
end
|
49
50
|
|
50
51
|
def test_http_proxy
|
51
|
-
recipe = MiniPortile.new("test http_proxy", "1.0.0")
|
52
|
+
recipe = MiniPortile.new("test http_proxy", "1.0.0", logger: @logger)
|
52
53
|
recipe.files << "http://myserver/path/to/tar.gz"
|
53
54
|
request = with_dummy_proxy do |url, thread|
|
54
55
|
ENV['http_proxy'] = url
|
@@ -59,7 +60,7 @@ class TestProxy < TestCase
|
|
59
60
|
end
|
60
61
|
|
61
62
|
def test_http_proxy_with_basic_auth
|
62
|
-
recipe = MiniPortile.new("test http_proxy", "1.0.0")
|
63
|
+
recipe = MiniPortile.new("test http_proxy", "1.0.0", logger: @logger)
|
63
64
|
recipe.files << "http://myserver/path/to/tar.gz"
|
64
65
|
request = with_dummy_proxy('user: @name', '@12: üMp') do |url, thread|
|
65
66
|
ENV['http_proxy'] = url
|
@@ -72,7 +73,7 @@ class TestProxy < TestCase
|
|
72
73
|
end
|
73
74
|
|
74
75
|
def test_https_proxy
|
75
|
-
recipe = MiniPortile.new("test https_proxy", "1.0.0")
|
76
|
+
recipe = MiniPortile.new("test https_proxy", "1.0.0", logger: @logger)
|
76
77
|
recipe.files << "https://myserver/path/to/tar.gz"
|
77
78
|
request = with_dummy_proxy do |url, thread|
|
78
79
|
ENV['https_proxy'] = url
|
@@ -83,7 +84,7 @@ class TestProxy < TestCase
|
|
83
84
|
end
|
84
85
|
|
85
86
|
def test_https_proxy_with_basic_auth
|
86
|
-
recipe = MiniPortile.new("test https_proxy", "1.0.0")
|
87
|
+
recipe = MiniPortile.new("test https_proxy", "1.0.0", logger: @logger)
|
87
88
|
recipe.files << "https://myserver/path/to/tar.gz"
|
88
89
|
request = with_dummy_proxy('user: @name', '@12: üMp') do |url, thread|
|
89
90
|
ENV['https_proxy'] = url
|
@@ -96,7 +97,7 @@ class TestProxy < TestCase
|
|
96
97
|
end
|
97
98
|
|
98
99
|
def test_ftp_proxy
|
99
|
-
recipe = MiniPortile.new("test ftp_proxy", "1.0.0")
|
100
|
+
recipe = MiniPortile.new("test ftp_proxy", "1.0.0", logger: @logger)
|
100
101
|
recipe.files << "ftp://myserver/path/to/tar.gz"
|
101
102
|
request = with_dummy_proxy do |url, thread|
|
102
103
|
ENV['ftp_proxy'] = url
|
@@ -107,7 +108,7 @@ class TestProxy < TestCase
|
|
107
108
|
end
|
108
109
|
|
109
110
|
def test_ftp_proxy_with_basic_auth
|
110
|
-
recipe = MiniPortile.new("test ftp_proxy", "1.0.0")
|
111
|
+
recipe = MiniPortile.new("test ftp_proxy", "1.0.0", logger: @logger)
|
111
112
|
recipe.files << "ftp://myserver/path/to/tar.gz"
|
112
113
|
request = with_dummy_proxy('user: @name', '@12: üMp') do |url, thread|
|
113
114
|
ENV['ftp_proxy'] = url
|
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.8.
|
4
|
+
version: 2.8.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luis Lavena
|
@@ -10,92 +10,8 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2024-
|
14
|
-
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
name: bundler
|
17
|
-
requirement: !ruby/object:Gem::Requirement
|
18
|
-
requirements:
|
19
|
-
- - "~>"
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '2.2'
|
22
|
-
type: :development
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
requirements:
|
26
|
-
- - "~>"
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
version: '2.2'
|
29
|
-
- !ruby/object:Gem::Dependency
|
30
|
-
name: minitar
|
31
|
-
requirement: !ruby/object:Gem::Requirement
|
32
|
-
requirements:
|
33
|
-
- - "~>"
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: '0.9'
|
36
|
-
type: :development
|
37
|
-
prerelease: false
|
38
|
-
version_requirements: !ruby/object:Gem::Requirement
|
39
|
-
requirements:
|
40
|
-
- - "~>"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: '0.9'
|
43
|
-
- !ruby/object:Gem::Dependency
|
44
|
-
name: minitest
|
45
|
-
requirement: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - "~>"
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '5.15'
|
50
|
-
type: :development
|
51
|
-
prerelease: false
|
52
|
-
version_requirements: !ruby/object:Gem::Requirement
|
53
|
-
requirements:
|
54
|
-
- - "~>"
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: '5.15'
|
57
|
-
- !ruby/object:Gem::Dependency
|
58
|
-
name: minitest-hooks
|
59
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
-
requirements:
|
61
|
-
- - "~>"
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: '1.5'
|
64
|
-
type: :development
|
65
|
-
prerelease: false
|
66
|
-
version_requirements: !ruby/object:Gem::Requirement
|
67
|
-
requirements:
|
68
|
-
- - "~>"
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: '1.5'
|
71
|
-
- !ruby/object:Gem::Dependency
|
72
|
-
name: rake
|
73
|
-
requirement: !ruby/object:Gem::Requirement
|
74
|
-
requirements:
|
75
|
-
- - "~>"
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '13.0'
|
78
|
-
type: :development
|
79
|
-
prerelease: false
|
80
|
-
version_requirements: !ruby/object:Gem::Requirement
|
81
|
-
requirements:
|
82
|
-
- - "~>"
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
version: '13.0'
|
85
|
-
- !ruby/object:Gem::Dependency
|
86
|
-
name: webrick
|
87
|
-
requirement: !ruby/object:Gem::Requirement
|
88
|
-
requirements:
|
89
|
-
- - "~>"
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
version: '1.7'
|
92
|
-
type: :development
|
93
|
-
prerelease: false
|
94
|
-
version_requirements: !ruby/object:Gem::Requirement
|
95
|
-
requirements:
|
96
|
-
- - "~>"
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
version: '1.7'
|
13
|
+
date: 2024-11-14 00:00:00.000000000 Z
|
14
|
+
dependencies: []
|
99
15
|
description: |
|
100
16
|
Simple autoconf and cmake builder for developers. It provides a standard way to compile against
|
101
17
|
dependency libraries without requiring system-wide installation. It also simplifies
|
@@ -107,6 +23,8 @@ extra_rdoc_files: []
|
|
107
23
|
files:
|
108
24
|
- ".github/FUNDING.yml"
|
109
25
|
- ".github/workflows/ci.yml"
|
26
|
+
- ".github/workflows/downstream.yml"
|
27
|
+
- ".github/workflows/upstream.yml"
|
110
28
|
- ".gitignore"
|
111
29
|
- CHANGELOG.md
|
112
30
|
- Gemfile
|
@@ -144,7 +62,8 @@ files:
|
|
144
62
|
homepage: https://github.com/flavorjones/mini_portile
|
145
63
|
licenses:
|
146
64
|
- MIT
|
147
|
-
metadata:
|
65
|
+
metadata:
|
66
|
+
changelog_uri: https://github.com/flavorjones/mini_portile/blob/main/CHANGELOG.md
|
148
67
|
post_install_message:
|
149
68
|
rdoc_options: []
|
150
69
|
require_paths:
|
@@ -160,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
160
79
|
- !ruby/object:Gem::Version
|
161
80
|
version: '0'
|
162
81
|
requirements: []
|
163
|
-
rubygems_version: 3.5.
|
82
|
+
rubygems_version: 3.5.22
|
164
83
|
signing_key:
|
165
84
|
specification_version: 4
|
166
85
|
summary: Simple autoconf and cmake builder for developers
|