mini_portile2 2.8.4 → 2.8.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -27,12 +28,14 @@ class Net::HTTP
27
28
  end
28
29
  end
29
30
 
31
+ $MINI_PORTILE_STATIC_LIBS = {}
32
+
30
33
  class MiniPortile
31
34
  DEFAULT_TIMEOUT = 10
32
35
 
33
- attr_reader :name, :version, :original_host
36
+ attr_reader :name, :version, :original_host, :source_directory
34
37
  attr_writer :configure_options
35
- attr_accessor :host, :files, :patch_files, :target, :logger, :source_directory
38
+ attr_accessor :host, :files, :patch_files, :target, :logger
36
39
 
37
40
  def self.windows?
38
41
  target_os =~ /mswin|mingw/
@@ -76,6 +79,24 @@ class MiniPortile
76
79
  RbConfig::CONFIG['target_cpu']
77
80
  end
78
81
 
82
+ def self.native_path(path)
83
+ path = File.expand_path(path)
84
+ if File::ALT_SEPARATOR
85
+ path.tr(File::SEPARATOR, File::ALT_SEPARATOR)
86
+ else
87
+ path
88
+ end
89
+ end
90
+
91
+ def self.posix_path(path)
92
+ path = File.expand_path(path)
93
+ if File::ALT_SEPARATOR
94
+ "/" + path.tr(File::ALT_SEPARATOR, File::SEPARATOR).tr(":", File::SEPARATOR)
95
+ else
96
+ path
97
+ end
98
+ end
99
+
79
100
  def initialize(name, version, **kwargs)
80
101
  @name = name
81
102
  @version = version
@@ -83,15 +104,16 @@ class MiniPortile
83
104
  @files = []
84
105
  @patch_files = []
85
106
  @log_files = {}
86
- @logger = STDOUT
107
+ @logger = kwargs[:logger] || STDOUT
87
108
  @source_directory = nil
88
109
 
89
- @original_host = @host = detect_host
90
-
91
- @gcc_command = kwargs[:gcc_command]
110
+ @cc_command = kwargs[:cc_command] || kwargs[:gcc_command]
111
+ @cxx_command = kwargs[:cxx_command]
92
112
  @make_command = kwargs[:make_command]
93
113
  @open_timeout = kwargs[:open_timeout] || DEFAULT_TIMEOUT
94
114
  @read_timeout = kwargs[:read_timeout] || DEFAULT_TIMEOUT
115
+
116
+ @original_host = @host = detect_host
95
117
  end
96
118
 
97
119
  def source_directory=(path)
@@ -219,11 +241,10 @@ class MiniPortile
219
241
  end
220
242
 
221
243
  def activate
222
- lib_path = File.join(port_path, "lib")
223
244
  vars = {
224
245
  'PATH' => File.join(port_path, 'bin'),
225
- 'CPATH' => File.join(port_path, 'include'),
226
- 'LIBRARY_PATH' => lib_path
246
+ 'CPATH' => include_path,
247
+ 'LIBRARY_PATH' => lib_path,
227
248
  }.reject { |env, path| !File.directory?(path) }
228
249
 
229
250
  output "Activating #{@name} #{@version} (from #{port_path})..."
@@ -240,7 +261,7 @@ class MiniPortile
240
261
 
241
262
  # rely on LDFLAGS when cross-compiling
242
263
  if File.exist?(lib_path) && (@host != @original_host)
243
- full_path = File.expand_path(lib_path)
264
+ full_path = native_path(lib_path)
244
265
 
245
266
  old_value = ENV.fetch("LDFLAGS", "")
246
267
 
@@ -250,12 +271,114 @@ class MiniPortile
250
271
  end
251
272
  end
252
273
 
274
+ # pkg: the pkg-config file name (without the .pc extension)
275
+ # dir: inject the directory path for the pkg-config file (probably only useful for tests)
276
+ # static: the name of the static library archive (without the "lib" prefix or the file extension), or nil for dynamic linking
277
+ #
278
+ # we might be able to be terribly clever and infer the name of the static archive file, but
279
+ # unfortunately projects have so much freedom in what they can report (for name, for libs, etc.)
280
+ # that it feels unreliable to try to do so, so I'm preferring to just have the developer make it
281
+ # explicit.
282
+ def mkmf_config(pkg: nil, dir: nil, static: nil)
283
+ require "mkmf"
284
+
285
+ if pkg
286
+ dir ||= File.join(lib_path, "pkgconfig")
287
+ pcfile = File.join(dir, "#{pkg}.pc")
288
+ unless File.exist?(pcfile)
289
+ raise ArgumentError, "pkg-config file '#{pcfile}' does not exist"
290
+ end
291
+
292
+ output "Configuring MakeMakefile for #{File.basename(pcfile)} (in #{File.dirname(pcfile)})\n"
293
+
294
+ # on macos, pkg-config will not return --cflags without this
295
+ ENV["PKG_CONFIG_ALLOW_SYSTEM_CFLAGS"] = "t"
296
+
297
+ # append to PKG_CONFIG_PATH as we go, so later pkg-config files can depend on earlier ones
298
+ ENV["PKG_CONFIG_PATH"] = [ENV["PKG_CONFIG_PATH"], dir].compact.join(File::PATH_SEPARATOR)
299
+
300
+ incflags = minimal_pkg_config(pcfile, "cflags-only-I")
301
+ cflags = minimal_pkg_config(pcfile, "cflags-only-other")
302
+ if static
303
+ ldflags = minimal_pkg_config(pcfile, "libs-only-L", "static")
304
+ libflags = minimal_pkg_config(pcfile, "libs-only-l", "static")
305
+ else
306
+ ldflags = minimal_pkg_config(pcfile, "libs-only-L")
307
+ libflags = minimal_pkg_config(pcfile, "libs-only-l")
308
+ end
309
+ else
310
+ output "Configuring MakeMakefile for #{@name} #{@version} (from #{path})\n"
311
+
312
+ lib_name = name.sub(/\Alib/, "") # TODO: use delete_prefix when we no longer support ruby 2.4
313
+
314
+ incflags = Dir.exist?(include_path) ? "-I#{include_path}" : ""
315
+ cflags = ""
316
+ ldflags = Dir.exist?(lib_path) ? "-L#{lib_path}" : ""
317
+ libflags = Dir.exist?(lib_path) ? "-l#{lib_name}" : ""
318
+ end
319
+
320
+ if static
321
+ libdir = lib_path
322
+ if pcfile
323
+ pcfile_libdir = minimal_pkg_config(pcfile, "variable=libdir").strip
324
+ libdir = pcfile_libdir unless pcfile_libdir.empty?
325
+ end
326
+
327
+ #
328
+ # keep track of the libraries we're statically linking against, and fix up ldflags and
329
+ # libflags to make sure we link statically against the recipe's libaries.
330
+ #
331
+ # this avoids the unintentionally dynamically linking against system libraries, and makes sure
332
+ # that if multiple pkg-config files reference each other that we are able to intercept flags
333
+ # from dependent packages that reference the static archive.
334
+ #
335
+ $MINI_PORTILE_STATIC_LIBS[static] = libdir
336
+ static_ldflags = $MINI_PORTILE_STATIC_LIBS.values.map { |v| "-L#{v}" }
337
+ static_libflags = $MINI_PORTILE_STATIC_LIBS.keys.map { |v| "-l#{v}" }
338
+
339
+ # remove `-L#{libdir}` and `-lfoo`. we don't need them since we link against the static
340
+ # archive using the full path.
341
+ ldflags = ldflags.shellsplit.reject { |f| static_ldflags.include?(f) }.shelljoin
342
+ libflags = libflags.shellsplit.reject { |f| static_libflags.include?(f) }.shelljoin
343
+
344
+ # prepend the full path to the static archive to the linker flags
345
+ static_archive = File.join(libdir, "lib#{static}.#{$LIBEXT}")
346
+ libflags = [static_archive, libflags].join(" ").strip
347
+ end
348
+
349
+ # prefer this package by prepending to search paths and library flags
350
+ #
351
+ # convert the ldflags into a list of directories and append to $LIBPATH (instead of just using
352
+ # $LDFLAGS) to ensure we get the `-Wl,-rpath` linker flag for re-finding shared libraries.
353
+ $INCFLAGS = [incflags, $INCFLAGS].join(" ").strip
354
+ libpaths = ldflags.shellsplit.map { |f| f.sub(/\A-L/, "") }
355
+ $LIBPATH = libpaths | $LIBPATH
356
+ $libs = [libflags, $libs].join(" ").strip
357
+
358
+ # prefer this package's compiler flags by appending them to the command line
359
+ $CFLAGS = [$CFLAGS, cflags].join(" ").strip
360
+ $CXXFLAGS = [$CXXFLAGS, cflags].join(" ").strip
361
+ end
362
+
253
363
  def path
254
364
  File.expand_path(port_path)
255
365
  end
256
366
 
257
- def gcc_cmd
258
- (ENV["CC"] || @gcc_command || RbConfig::CONFIG["CC"] || "gcc").dup
367
+ def include_path
368
+ File.join(path, "include")
369
+ end
370
+
371
+ def lib_path
372
+ File.join(path, "lib")
373
+ end
374
+
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
259
382
  end
260
383
 
261
384
  def make_cmd
@@ -265,21 +388,11 @@ class MiniPortile
265
388
  private
266
389
 
267
390
  def native_path(path)
268
- path = File.expand_path(path)
269
- if File::ALT_SEPARATOR
270
- path.tr(File::SEPARATOR, File::ALT_SEPARATOR)
271
- else
272
- path
273
- end
391
+ MiniPortile.native_path(path)
274
392
  end
275
393
 
276
394
  def posix_path(path)
277
- path = File.expand_path(path)
278
- if File::ALT_SEPARATOR
279
- "/" + path.tr(File::ALT_SEPARATOR, File::SEPARATOR).tr(":", File::SEPARATOR)
280
- else
281
- path
282
- end
395
+ MiniPortile.posix_path(path)
283
396
  end
284
397
 
285
398
  def tmp_path
@@ -349,24 +462,29 @@ class MiniPortile
349
462
  gpg_exe = which('gpg2') || which('gpg') || raise("Neither GPG nor GPG2 is installed")
350
463
 
351
464
  # import the key into our own keyring
352
- gpg_status = IO.popen([gpg_exe, "--status-fd", "1", "--no-default-keyring", "--keyring", KEYRING_NAME, "--import"], "w+") do |io|
353
- io.write gpg[:key]
354
- io.close_write
355
- 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
356
471
  end
357
472
  key_ids = gpg_status.scan(/\[GNUPG:\] IMPORT_OK \d+ (?<key_id>[0-9a-f]+)/i).map(&:first)
358
- raise "invalid gpg key provided" if key_ids.empty?
359
-
360
- # verify the signature against our keyring
361
- gpg_status = IO.popen([gpg_exe, "--status-fd", "1", "--no-default-keyring", "--keyring", KEYRING_NAME, "--verify", signature_file, file[:local_path]], &:read)
473
+ raise "invalid gpg key provided:\n#{gpg_error}" if key_ids.empty?
362
474
 
363
- # remove the key from our keyring
364
- key_ids.each do |key_id|
365
- IO.popen([gpg_exe, "--batch", "--yes", "--no-default-keyring", "--keyring", KEYRING_NAME, "--delete-keys", key_id], &:read)
366
- 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
367
486
  end
368
487
 
369
- raise "signature mismatch" unless gpg_status.match(/^\[GNUPG:\] VALIDSIG/)
370
488
 
371
489
  else
372
490
  digest = case
@@ -390,30 +508,6 @@ class MiniPortile
390
508
  }
391
509
  end
392
510
 
393
- TAR_EXECUTABLES = %w[gtar bsdtar tar basic-bsdtar]
394
- def tar_exe
395
- @@tar_exe ||= begin
396
- TAR_EXECUTABLES.find { |c|
397
- which(c)
398
- } or raise("tar not found - please make sure that one of the following commands is in the PATH: #{TAR_EXECUTABLES.join(", ")}")
399
- end
400
- end
401
-
402
- def tar_compression_switch(filename)
403
- case File.extname(filename)
404
- when '.gz', '.tgz'
405
- 'z'
406
- when '.bz2', '.tbz2'
407
- 'j'
408
- when '.xz'
409
- 'J'
410
- when '.Z'
411
- 'Z'
412
- else
413
- ''
414
- end
415
- end
416
-
417
511
  # From: http://stackoverflow.com/a/5471032/7672
418
512
  # Thanks, Mislav!
419
513
  #
@@ -440,6 +534,8 @@ class MiniPortile
440
534
  output = `#{gcc_cmd} -v 2>&1`
441
535
  if m = output.match(/^Target\: (.*)$/)
442
536
  @detect_host = m[1]
537
+ else
538
+ @detect_host = nil
443
539
  end
444
540
 
445
541
  @detect_host
@@ -448,12 +544,35 @@ class MiniPortile
448
544
  end
449
545
  end
450
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 tar_command(file, target)
557
+ case File.extname(file)
558
+ when '.gz', '.tgz'
559
+ [tar_exe, 'xzf', file, '-C', target]
560
+ when '.bz2', '.tbz2'
561
+ [tar_exe, 'xjf', file, '-C', target]
562
+ when '.xz'
563
+ # NOTE: OpenBSD's tar command does not support the -J option
564
+ "xzcat #{file.shellescape} | #{tar_exe.shellescape} xf - -C #{target.shellescape}"
565
+ else
566
+ [tar_exe, 'xf', file, '-C', target]
567
+ end
568
+ end
569
+
451
570
  def extract_file(file, target)
452
571
  filename = File.basename(file)
453
572
  FileUtils.mkdir_p target
454
573
 
455
574
  message "Extracting #{filename} into #{target}... "
456
- execute('extract', [tar_exe, "#{tar_compression_switch(filename)}xf", file, "-C", target], {:cd => Dir.pwd, :initial_message => false})
575
+ execute('extract', tar_command(file, target) , {:cd => Dir.pwd, :initial_message => false})
457
576
  end
458
577
 
459
578
  # command could be an array of args, or one string containing a command passed to the shell. See
@@ -589,7 +708,7 @@ class MiniPortile
589
708
  return download_file(redirect.url, full_path, count-1)
590
709
  rescue => e
591
710
  count = count - 1
592
- puts "#{count} retrie(s) left for #{filename} (#{e.message})"
711
+ @logger.puts "#{count} retrie(s) left for #{filename} (#{e.message})"
593
712
  if count > 0
594
713
  sleep 1
595
714
  return download_file_http(url, full_path, count)
@@ -648,4 +767,29 @@ class MiniPortile
648
767
  FileUtils.mkdir_p File.dirname(full_path)
649
768
  FileUtils.mv temp_file.path, full_path, :force => true
650
769
  end
770
+
771
+ #
772
+ # this minimal version of pkg_config is based on ruby 29dc9378 (2023-01-09)
773
+ #
774
+ # specifically with the fix from b90e56e6 to support multiple pkg-config options, and removing
775
+ # code paths that aren't helpful for mini-portile's use case of parsing pc files.
776
+ #
777
+ def minimal_pkg_config(pkg, *pcoptions)
778
+ if pcoptions.empty?
779
+ raise ArgumentError, "no pkg-config options are given"
780
+ end
781
+
782
+ if ($PKGCONFIG ||=
783
+ (pkgconfig = MakeMakefile.with_config("pkg-config") {MakeMakefile.config_string("PKG_CONFIG") || "pkg-config"}) &&
784
+ MakeMakefile.find_executable0(pkgconfig) && pkgconfig)
785
+ pkgconfig = $PKGCONFIG
786
+ else
787
+ raise RuntimeError, "pkg-config is not found"
788
+ end
789
+
790
+ pcoptions = Array(pcoptions).map { |o| "--#{o}" }
791
+ response = IO.popen([pkgconfig, *pcoptions, pkg], err:[:child, :out], &:read)
792
+ raise RuntimeError, response unless $?.success?
793
+ response.strip
794
+ end
651
795
  end
@@ -11,6 +11,7 @@ class MiniPortileCMake < MiniPortile
11
11
  def initialize(name, version, **kwargs)
12
12
  super(name, version, **kwargs)
13
13
  @cmake_command = kwargs[:cmake_command]
14
+ @cmake_build_type = kwargs[:cmake_build_type]
14
15
  end
15
16
 
16
17
  def configure_defaults
@@ -49,6 +50,10 @@ class MiniPortileCMake < MiniPortile
49
50
  (ENV["CMAKE"] || @cmake_command || "cmake").dup
50
51
  end
51
52
 
53
+ def cmake_build_type
54
+ (ENV["CMAKE_BUILD_TYPE"] || @cmake_build_type || "Release").dup
55
+ end
56
+
52
57
  private
53
58
 
54
59
  def generator_defaults
@@ -62,45 +67,21 @@ class MiniPortileCMake < MiniPortile
62
67
  end
63
68
 
64
69
  def cmake_compile_flags
65
- 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
66
74
 
67
75
  # needed to ensure cross-compilation with CMake targets the right CPU and compilers
68
76
  [
69
77
  "-DCMAKE_SYSTEM_NAME=#{cmake_system_name}",
70
78
  "-DCMAKE_SYSTEM_PROCESSOR=#{cpu_type}",
71
- "-DCMAKE_C_COMPILER=#{c_compiler}",
72
- "-DCMAKE_CXX_COMPILER=#{cxx_compiler}"
79
+ "-DCMAKE_C_COMPILER=#{cc_compiler}",
80
+ "-DCMAKE_CXX_COMPILER=#{cxx_compiler}",
81
+ "-DCMAKE_BUILD_TYPE=#{cmake_build_type}",
73
82
  ]
74
83
  end
75
84
 
76
- def find_compiler(compilers)
77
- compilers.find { |binary| which(binary) }
78
- end
79
-
80
- # configure automatically searches for the right compiler based on the
81
- # `--host` parameter. However, CMake doesn't have an equivalent feature.
82
- # Search for the right compiler for the target architecture using
83
- # some basic heruistics.
84
- def find_c_and_cxx_compilers(host)
85
- c_compiler = ENV["CC"]
86
- cxx_compiler = ENV["CXX"]
87
-
88
- if MiniPortile.darwin?
89
- c_compiler ||= 'clang'
90
- cxx_compiler ||='clang++'
91
- else
92
- c_compiler ||= 'gcc'
93
- cxx_compiler ||= 'g++'
94
- end
95
-
96
- c_platform_compiler = "#{host}-#{c_compiler}"
97
- cxx_platform_compiler = "#{host}-#{cxx_compiler}"
98
- c_compiler = find_compiler([c_platform_compiler, c_compiler])
99
- cxx_compiler = find_compiler([cxx_platform_compiler, cxx_compiler])
100
-
101
- [c_compiler, cxx_compiler]
102
- end
103
-
104
85
  # Full list: https://gitlab.kitware.com/cmake/cmake/-/blob/v3.26.4/Modules/CMakeDetermineSystem.cmake?ref_type=tags#L12-31
105
86
  def cmake_system_name
106
87
  return system_name if system_name
@@ -1,3 +1,3 @@
1
1
  class MiniPortile
2
- VERSION = "2.8.4"
2
+ VERSION = "2.8.7"
3
3
  end
@@ -1,7 +1,4 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "mini_portile2/version"
1
+ require_relative "lib/mini_portile2/version"
5
2
 
6
3
  Gem::Specification.new do |spec|
7
4
  spec.name = "mini_portile2"
@@ -10,8 +7,12 @@ Gem::Specification.new do |spec|
10
7
  spec.authors = ["Luis Lavena", "Mike Dalessio", "Lars Kanis"]
11
8
  spec.email = "mike.dalessio@gmail.com"
12
9
 
13
- spec.summary = "Simplistic port-like solution for developers"
14
- spec.description = "Simplistic port-like solution for developers. It provides a standard and simplified way to compile against dependency libraries without messing up your system."
10
+ spec.summary = "Simple autoconf and cmake builder for developers"
11
+ spec.description = <<~TEXT
12
+ Simple autoconf and cmake builder for developers. It provides a standard way to compile against
13
+ dependency libraries without requiring system-wide installation. It also simplifies
14
+ vendoring and cross-compilation by providing a consistent build interface.
15
+ TEXT
15
16
 
16
17
  spec.homepage = "https://github.com/flavorjones/mini_portile"
17
18
  spec.licenses = ["MIT"]
@@ -0,0 +1,13 @@
1
+ prefix=/foo/libxml2/2.11.5
2
+ exec_prefix=${prefix}
3
+ libdir=/foo/libxml2/2.11.5/lib
4
+ includedir=${prefix}/include
5
+ modules=1
6
+
7
+ Name: libXML
8
+ Version: 2.11.5
9
+ Description: libXML library version2.
10
+ Requires:
11
+ Libs: -L${libdir} -lxml2
12
+ Libs.private: -L/foo/zlib/1.3/lib -lz -lm
13
+ Cflags: -I${includedir}/libxml2 -ggdb3
@@ -0,0 +1,13 @@
1
+ prefix=/foo/libxslt/1.1.38
2
+ exec_prefix=${prefix}
3
+ libdir=/foo/libxslt/1.1.38/lib
4
+ includedir=${prefix}/include
5
+
6
+
7
+ Name: libexslt
8
+ Version: 0.8.21
9
+ Description: EXSLT Extension library
10
+ Requires: libxml-2.0, libxslt
11
+ Cflags: -I${includedir}
12
+ Libs: -L${libdir} -lexslt
13
+ Libs.private: -lm
@@ -0,0 +1,13 @@
1
+ prefix=/foo/libxslt/1.1.38
2
+ exec_prefix=${prefix}
3
+ libdir=/foo/libxslt/1.1.38/lib
4
+ includedir=${prefix}/include
5
+
6
+
7
+ Name: libxslt
8
+ Version: 1.1.38
9
+ Description: XSLT library version 2.
10
+ Requires: libxml-2.0
11
+ Cflags: -I${includedir} -Wno-deprecated-enum-enum-conversion
12
+ Libs: -L${libdir} -lxslt
13
+ Libs.private: -lm
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