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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8e05baa930606f2d6523ea99ac9e8eedebd895c7ce4d54cfeb66ec18cd765929
4
- data.tar.gz: 4176f83bb1d2bba075e03e3e97d3205198cf595d6462da3c3004cae98421c341
3
+ metadata.gz: bcea2276fac9f3ca76bfea583e5752f483dd9eb603be305aabda7d94dc3d68d6
4
+ data.tar.gz: b17dfb956a4830ba45aab9f02bd4de1882e828f238f962dbcffe4177445a4735
5
5
  SHA512:
6
- metadata.gz: 9d665ab774d8f71ed02c2f0fc1fb79cea7dfaf4b989093afe58f666f9b71d731d95981e261e21d49c2d8ccbea759929ad3dce0420885daf1251a834e6c060f6f
7
- data.tar.gz: d225acb7e38adff4ad72f54a5dfa786791a45c61cff83c8cf8e85aef749446632da5d23dbf133ff6617304b47ded60b617fd2a0582b759216390add7d69b1565
6
+ metadata.gz: bd8cda43aee0d8cc3014d8b55385e7096c0156c5d291084fa8af22b64c74393fdf5358741abfe954a8f9f7624ce7df4550da1ff9950e018ad5fbc64e50c29ffb
7
+ data.tar.gz: 22003d5b4e9a41cac7e6459f40443800b3b87590992ff164b4dbff34a8b86b6e36dafe3c71c3dcb0c2b2a4eed3e686dbc3b7ad0be4be6743f6b731931ad60e39
@@ -1,4 +1,4 @@
1
- name: Continuous Integration
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", "head"]
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
- platform: [ubuntu-latest, windows-latest, macos-latest]
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
- # Specify your gem's dependencies in mini_portile2.gemspec
6
- gemspec
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
- #### `gcc_command`
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 `gcc_command` value passed in to the constructor
93
+ - the `:cc_command` keyword argument passed in to the constructor
94
94
  - `RbConfig::CONFIG["CC"]`
95
95
  - `"gcc"`
96
96
 
97
- You can pass it in like so:
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", gcc_command: "cc")
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
- namespace :test do
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
- @gcc_command = kwargs[:gcc_command]
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
- variables = minimal_pkg_config(pcfile, "print-variables").split("\n").map(&:strip)
322
- if variables.include?("libdir")
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 gcc_cmd
376
- (ENV["CC"] || @gcc_command || RbConfig::CONFIG["CC"] || "gcc").dup
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
- gpg_status = IO.popen([gpg_exe, "--status-fd", "1", "--no-default-keyring", "--keyring", KEYRING_NAME, "--import"], "w+") do |io|
461
- io.write gpg[:key]
462
- io.close_write
463
- io.read
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
- # verify the signature against our keyring
469
- gpg_status = IO.popen([gpg_exe, "--status-fd", "1", "--no-default-keyring", "--keyring", KEYRING_NAME, "--verify", signature_file, file[:local_path]], &:read)
470
-
471
- # remove the key from our keyring
472
- key_ids.each do |key_id|
473
- IO.popen([gpg_exe, "--batch", "--yes", "--no-default-keyring", "--keyring", KEYRING_NAME, "--delete-keys", key_id], &:read)
474
- raise "unable to delete the imported key" unless $?.exitstatus==0
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', [tar_exe, "#{tar_compression_switch(filename)}xf", file, "-C", target], {:cd => Dir.pwd, :initial_message => false})
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
- c_compiler, cxx_compiler = find_c_and_cxx_compilers(host)
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=#{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
@@ -1,3 +1,3 @@
1
1
  class MiniPortile
2
- VERSION = "2.8.6"
2
+ VERSION = "2.8.8"
3
3
  end
@@ -34,10 +34,5 @@ Gem::Specification.new do |spec|
34
34
 
35
35
  spec.required_ruby_version = ">= 2.3.0"
36
36
 
37
- spec.add_development_dependency "bundler", "~> 2.2"
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(:Port => HTTP_PORT, :DocumentRoot => path).tap do |w|
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(recipe, host_prefix: true, c_compiler: 'clang', cxx_compiler: 'clang++') do
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=some-host-clang",
99
- "-DCMAKE_CXX_COMPILER=some-host-clang++",
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(recipe, c_compiler: 'cc', cxx_compiler: 'c++') do
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(recipe) do
135
+ with_compilers do
140
136
  Open3.stub(:capture2, cmake_help_mock('Unix')) do
141
- assert_equal(
142
- [
143
- "-DCMAKE_SYSTEM_NAME=Custom",
144
- "-DCMAKE_SYSTEM_PROCESSOR=x86_64",
145
- "-DCMAKE_C_COMPILER=gcc",
146
- "-DCMAKE_CXX_COMPILER=g++",
147
- "-DCMAKE_BUILD_TYPE=Release"
148
- ],
149
- recipe.configure_defaults)
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(recipe) do
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
- recipe.configure_defaults)
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(recipe) do
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(recipe) do
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(recipe, host_prefix: false, c_compiler: 'gcc', cxx_compiler: 'g++')
244
- mock = MiniTest::Mock.new
245
-
246
- if host_prefix
247
- mock.expect(:call, true, ["#{recipe.host}-#{c_compiler}"])
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 test_gcc_command_configuration
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
- @recipe = MiniPortile.new("test-digest", "1.0.0")
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
- <<-KEY
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
- assert_equal("signature mismatch", exception.message)
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
- assert_equal("invalid gpg key provided", exception.message)
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
- puts "################"
152
-
153
- key = <<-KEY
154
- -----BEGIN PGP PUBLIC KEY BLOCK-----
155
- Version: GnuPG v1
156
-
157
- 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
- 0cpKL05Ff9upjrIzLD5TJUCzYYM9GQOhguDUP8+ZU9JpSz3yO2TvH7WBbUZ8FADf
159
- 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
- m6BMTqI7IBlYW2vyIOIHasISGiAwZfp0ucMeXXvTtt14LGa8qXVcFnJTdwbf03AS
161
- ljhYrQnKnpl3VpDAoQt8C68YCwjaNJW59hKqWB+XeIJ9CW98+EOAxLAFszSyGanp
162
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- CQoLBBYCAwECHgECF4AACgkQUgqZk6HAUvj+iwf/b4FS6zVzJ5T0v1vcQGD4ZzXe
170
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- YIsKTiKoJirFSGEgAkcTVXAvo/aD+XiWzc/QP/l+B2X4e5mqR7dF7xLZ5uFbXA0j
183
- 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
- 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
- 6nYd/TPvXV2Zw0YhjvBzlIfkl5MlJ+j4AZy1hn7Mqe1O//bRd0KKLjjhMQ6tjR6Y
186
- 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
- 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
- +jboO/1inH2BTtLiHjAXvicXZk3oaZt2Sotx5mMI3yzpFQRVqZXsi0LpUTPJEh3o
189
- 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
- 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
- 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
- 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
- o1fIm4wW3tEmkQdchSHECJDq7pgTloN65pwB5tBoT47cyYNZA9eTfJVgRc74q5ce
194
- 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
- TiqrWoCBXk2UyVsl03gJblSJAeJGYPPeo+Yj6m63OWe2+/S2VTgmbPS/RObn0Aeg
196
- 7yuff0n5+ytEt2KL51gOQE2uIxTCawHr12PsllPkbqPk/PagIttfEJqn9b0CrqPC
197
- 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
198
- =4JAR
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
- assert_equal("signature mismatch", exception.message)
211
+ assert_includes(exception.message, "signature mismatch")
213
212
  end
214
213
  end
215
-
@@ -25,12 +25,13 @@ describe "recipe download" do
25
25
  server.close
26
26
  end
27
27
 
28
- request_count.must_be :>, 0
28
+ assert_operator(request_count, :>, 0)
29
29
  end
30
30
 
31
31
  before do
32
32
  @request_count = 0
33
- @recipe = MiniPortile.new("test-download", "1.1.1")
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.must_equal "ee0e9f44e72213015ef976d5ac23931d"
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
- proc { @recipe.download }.must_raise ArgumentError
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
- @recipe = MiniPortile.new("test_execute", "1.0.0")
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, :debug => true})
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, :debug => true})
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.6
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-04-14 00:00:00.000000000 Z
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.3
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