pkg-config 1.3.8 → 1.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/NEWS +36 -0
- data/README.rdoc +2 -8
- data/lib/pkg-config.rb +101 -56
- data/lib/pkg-config/version.rb +2 -2
- data/test/run-test.rb +0 -3
- data/test/test_pkg_config.rb +6 -6
- metadata +4 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de5fd5654e9bb6bcd643ec49f1c3a5e4dffeb8741663c7c5bcb1138bffcf2bfb
|
4
|
+
data.tar.gz: e9ade52de5043ccc219d0f5bcf0083048db0ac10cb5f022df7497f845793711a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 345270f9e96221baed66995429b561c8e0264a65802846abf3d3aaf5be5cd489060dcfa3c6ff4cb9ca5539e0b3e3cb21fd01343d47bac60ee980ab37ae7c0d3d
|
7
|
+
data.tar.gz: 7a16605e05c797c5666a9005bdb75554afffe9fba4c36097e1378c1a5f735be215c4c643ecb64fa516780f8ba7f004ca7c606bf31e8a00dfb84e993e23699d7b
|
data/NEWS
CHANGED
@@ -1,5 +1,41 @@
|
|
1
1
|
= NEWS
|
2
2
|
|
3
|
+
== 1.4.2 - 2020-08-10
|
4
|
+
|
5
|
+
=== Improvements
|
6
|
+
|
7
|
+
* Added support for detecting pkgconfig path on RubyInstaller
|
8
|
+
without "ridk exec".
|
9
|
+
|
10
|
+
== 1.4.1 - 2020-02-10
|
11
|
+
|
12
|
+
=== Improvements
|
13
|
+
|
14
|
+
* Added support for cycled depended .pc such as freetype2.pc and
|
15
|
+
harfbuzz.pc on PLD Linux.
|
16
|
+
[Reported by Jakub Bogusz]
|
17
|
+
|
18
|
+
=== Thanks
|
19
|
+
|
20
|
+
* Jakub Bogusz
|
21
|
+
|
22
|
+
== 1.4.0 - 2019-10-24
|
23
|
+
|
24
|
+
=== Improvements
|
25
|
+
|
26
|
+
* Improved Homebrew detection.
|
27
|
+
|
28
|
+
== 1.3.9 - 2019-09-28
|
29
|
+
|
30
|
+
=== Improvements
|
31
|
+
|
32
|
+
* Added support for absolute path in Requires.
|
33
|
+
[GitHub#18][Reported by Josh Huckabee]
|
34
|
+
|
35
|
+
=== Thanks
|
36
|
+
|
37
|
+
* Josh Huckabee
|
38
|
+
|
3
39
|
== 1.3.8 - 2019-08-13
|
4
40
|
|
5
41
|
=== Improvements
|
data/README.rdoc
CHANGED
@@ -14,14 +14,8 @@ A pkg-config implementation by Ruby.
|
|
14
14
|
|
15
15
|
== Install
|
16
16
|
|
17
|
-
=== Package
|
18
|
-
|
19
17
|
# gem install pkg-config
|
20
18
|
|
21
|
-
=== No package
|
22
|
-
|
23
|
-
# ruby setup.rb
|
24
|
-
|
25
19
|
== Documents
|
26
20
|
|
27
21
|
* TODO
|
@@ -29,11 +23,11 @@ A pkg-config implementation by Ruby.
|
|
29
23
|
== Source
|
30
24
|
|
31
25
|
There is the pkg-config repository at GitHub:
|
32
|
-
http://github.com/
|
26
|
+
http://github.com/ruby-gnome/pkg-config
|
33
27
|
|
34
28
|
== Copyright
|
35
29
|
|
36
|
-
Copyright 2008-
|
30
|
+
Copyright 2008-2019 Kouhei Sutou <kou@clear-code.com>
|
37
31
|
|
38
32
|
This library is free software; you can redistribute it and/or
|
39
33
|
modify it under the terms of the GNU Lesser General Public
|
data/lib/pkg-config.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright 2008-
|
1
|
+
# Copyright 2008-2020 Sutou Kouhei <kou@cozmixng.org>
|
2
2
|
#
|
3
3
|
# This library is free software; you can redistribute it and/or
|
4
4
|
# modify it under the terms of the GNU Lesser General Public
|
@@ -15,17 +15,22 @@
|
|
15
15
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
16
16
|
|
17
17
|
begin
|
18
|
-
|
18
|
+
require_relative "pkg-config/version"
|
19
19
|
rescue LoadError
|
20
20
|
end
|
21
21
|
|
22
|
+
require "English"
|
23
|
+
require "pathname"
|
22
24
|
require "rbconfig"
|
23
|
-
|
24
|
-
require 'shellwords'
|
25
|
-
require 'English'
|
26
|
-
require 'pathname'
|
25
|
+
require "shellwords"
|
27
26
|
|
28
27
|
class PackageConfig
|
28
|
+
class Error < StandardError
|
29
|
+
end
|
30
|
+
|
31
|
+
class NotFoundError < Error
|
32
|
+
end
|
33
|
+
|
29
34
|
SEPARATOR = File::PATH_SEPARATOR
|
30
35
|
|
31
36
|
class << self
|
@@ -122,6 +127,7 @@ class PackageConfig
|
|
122
127
|
def compute_native_pkg_config_prefix
|
123
128
|
pkg_config = native_pkg_config
|
124
129
|
return nil unless pkg_config.absolute?
|
130
|
+
return nil unless pkg_config.exist?
|
125
131
|
|
126
132
|
pkg_config_prefix = pkg_config.parent.parent
|
127
133
|
if File::ALT_SEPARATOR
|
@@ -134,10 +140,19 @@ class PackageConfig
|
|
134
140
|
end
|
135
141
|
end
|
136
142
|
|
143
|
+
attr_reader :name
|
137
144
|
attr_reader :paths
|
138
145
|
attr_accessor :msvc_syntax
|
139
146
|
def initialize(name, options={})
|
140
|
-
|
147
|
+
if Pathname(name).absolute?
|
148
|
+
@pc_path = name
|
149
|
+
@path_position = 0
|
150
|
+
@name = File.basename(@pc_path, ".*")
|
151
|
+
else
|
152
|
+
@pc_path = nil
|
153
|
+
@path_position = nil
|
154
|
+
@name = name
|
155
|
+
end
|
141
156
|
@options = options
|
142
157
|
path = @options[:path] || ENV["PKG_CONFIG_PATH"]
|
143
158
|
@paths = [path, guess_default_path].compact.join(SEPARATOR).split(SEPARATOR)
|
@@ -220,29 +235,63 @@ class PackageConfig
|
|
220
235
|
end
|
221
236
|
|
222
237
|
def pc_path
|
223
|
-
@
|
224
|
-
|
225
|
-
|
238
|
+
if @pc_path
|
239
|
+
return @pc_path if File.exist?(@pc_path)
|
240
|
+
else
|
241
|
+
@paths.each_with_index do |path, i|
|
242
|
+
_pc_path = File.join(path, "#{@name}.pc")
|
243
|
+
if File.exist?(_pc_path)
|
244
|
+
@path_position = i + 1
|
245
|
+
return _pc_path
|
246
|
+
end
|
247
|
+
end
|
226
248
|
end
|
227
249
|
nil
|
228
250
|
end
|
229
251
|
|
252
|
+
protected
|
253
|
+
def path_position
|
254
|
+
@path_position
|
255
|
+
end
|
256
|
+
|
257
|
+
def collect_requires(processed_packages={}, &block)
|
258
|
+
packages = []
|
259
|
+
targets = yield(self)
|
260
|
+
targets.each do |name|
|
261
|
+
next if processed_packages.key?(name)
|
262
|
+
package = self.class.new(name, @options)
|
263
|
+
processed_packages[name] = package
|
264
|
+
packages << package
|
265
|
+
packages.concat(package.collect_requires(processed_packages, &block))
|
266
|
+
end
|
267
|
+
packages_without_self = packages.reject do |package|
|
268
|
+
package.name == @name
|
269
|
+
end
|
270
|
+
packages_without_self.uniq do |package|
|
271
|
+
package.name
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
230
275
|
private
|
231
|
-
def
|
232
|
-
|
233
|
-
|
234
|
-
self.class.new(package, @options).cflags
|
276
|
+
def sort_packages(packages)
|
277
|
+
packages.sort_by.with_index do |package, i|
|
278
|
+
[package.path_position, i]
|
235
279
|
end
|
236
|
-
|
237
|
-
|
280
|
+
end
|
281
|
+
|
282
|
+
def collect_cflags
|
283
|
+
target_packages = sort_packages([self, *all_required_packages])
|
284
|
+
cflags_set = []
|
285
|
+
target_packages.each do |package|
|
286
|
+
cflags_set << package.declaration("Cflags")
|
238
287
|
end
|
239
288
|
all_cflags = normalize_cflags(Shellwords.split(cflags_set.join(" ")))
|
240
289
|
path_flags, other_flags = all_cflags.partition {|flag| /\A-I/ =~ flag}
|
241
290
|
path_flags = normalize_path_flags(path_flags, "-I")
|
242
|
-
path_flags = remove_duplicated_include_paths(path_flags)
|
243
291
|
path_flags = path_flags.reject do |flag|
|
244
292
|
flag == "-I/usr/include"
|
245
293
|
end
|
294
|
+
path_flags = path_flags.uniq
|
246
295
|
if @msvc_syntax
|
247
296
|
path_flags = path_flags.collect do |flag|
|
248
297
|
flag.gsub(/\A-I/, "/I")
|
@@ -284,21 +333,19 @@ class PackageConfig
|
|
284
333
|
normalized_cflags
|
285
334
|
end
|
286
335
|
|
287
|
-
def remove_duplicated_include_paths(path_flags)
|
288
|
-
path_flags.uniq
|
289
|
-
end
|
290
|
-
|
291
336
|
def collect_libs
|
292
|
-
|
293
|
-
|
337
|
+
target_packages = sort_packages(required_packages + [self])
|
338
|
+
libs_set = []
|
339
|
+
target_packages.each do |package|
|
340
|
+
libs_set << package.declaration("Libs")
|
294
341
|
end
|
295
|
-
|
296
|
-
all_flags = split_lib_flags(all_libs.join(" "))
|
342
|
+
all_flags = split_lib_flags(libs_set.join(" "))
|
297
343
|
path_flags, other_flags = all_flags.partition {|flag| /\A-L/ =~ flag}
|
298
344
|
path_flags = normalize_path_flags(path_flags, "-L")
|
299
345
|
path_flags = path_flags.reject do |flag|
|
300
346
|
/\A-L\/usr\/lib(?:64|x32)?\z/ =~ flag
|
301
347
|
end
|
348
|
+
path_flags = path_flags.uniq
|
302
349
|
if @msvc_syntax
|
303
350
|
path_flags = path_flags.collect do |flag|
|
304
351
|
flag.gsub(/\A-L/, "/libpath:")
|
@@ -318,7 +365,7 @@ class PackageConfig
|
|
318
365
|
all_flags = {}
|
319
366
|
flags = []
|
320
367
|
in_option = false
|
321
|
-
libs_command_line.gsub(/-([Ll]) /,
|
368
|
+
libs_command_line.gsub(/-([Ll]) /, "\\1").split.each do |arg|
|
322
369
|
if in_option
|
323
370
|
flags << arg
|
324
371
|
in_option = false
|
@@ -339,12 +386,12 @@ class PackageConfig
|
|
339
386
|
|
340
387
|
IDENTIFIER_RE = /[a-zA-Z\d_\.]+/
|
341
388
|
def parse_pc
|
342
|
-
raise ".pc for #{@name} doesn't exist." unless exist?
|
389
|
+
raise NotFoundError ".pc for #{@name} doesn't exist." unless exist?
|
343
390
|
@variables = {}
|
344
391
|
@declarations = {}
|
345
392
|
File.open(pc_path) do |input|
|
346
393
|
input.each_line do |line|
|
347
|
-
line = line.gsub(/#.*/,
|
394
|
+
line = line.gsub(/#.*/, "").strip
|
348
395
|
next if line.empty?
|
349
396
|
case line
|
350
397
|
when /^(#{IDENTIFIER_RE})=/
|
@@ -358,7 +405,7 @@ class PackageConfig
|
|
358
405
|
|
359
406
|
def parse_requires(requires)
|
360
407
|
return [] if requires.nil?
|
361
|
-
requires_without_version = requires.gsub(/[<>]?=\s*[\d.a-zA-Z_-]+\s*/,
|
408
|
+
requires_without_version = requires.gsub(/[<>]?=\s*[\d.a-zA-Z_-]+\s*/, "")
|
362
409
|
requires_without_version.split(/[,\s]+/)
|
363
410
|
end
|
364
411
|
|
@@ -398,6 +445,11 @@ class PackageConfig
|
|
398
445
|
"/opt/X11/lib/pkgconfig",
|
399
446
|
"/usr/share/pkgconfig",
|
400
447
|
]
|
448
|
+
if Object.const_defined?(:RubyInstaller)
|
449
|
+
mingw_bin_path = RubyInstaller::Runtime.msys2_installation.mingw_bin_path
|
450
|
+
mingw_pkgconfig_path = Pathname.new(mingw_bin_path) + "../lib/pkgconfig"
|
451
|
+
default_paths.unshift(mingw_pkgconfig_path.cleanpath.to_s)
|
452
|
+
end
|
401
453
|
libdir = ENV["PKG_CONFIG_LIBDIR"]
|
402
454
|
default_paths.unshift(libdir) if libdir
|
403
455
|
|
@@ -426,14 +478,13 @@ class PackageConfig
|
|
426
478
|
homebrew_repository_candidates << pkg_config_prefix + "Homebrew"
|
427
479
|
homebrew_repository_candidates << pkg_config_prefix
|
428
480
|
end
|
429
|
-
else
|
430
|
-
brew = self.class.__send__(:search_executable_from_path, "brew")
|
431
|
-
if brew
|
432
|
-
homebrew_repository = `brew --repository`.chomp
|
433
|
-
homebrew_repository_candidates << Pathname(homebrew_repository)
|
434
|
-
end
|
435
481
|
end
|
436
|
-
|
482
|
+
brew = self.class.__send__(:search_executable_from_path, "brew")
|
483
|
+
if brew
|
484
|
+
homebrew_repository = `brew --repository`.chomp
|
485
|
+
homebrew_repository_candidates << Pathname(homebrew_repository)
|
486
|
+
end
|
487
|
+
homebrew_repository_candidates.uniq.each do |candidate|
|
437
488
|
path = candidate + "Library/Homebrew/os/mac/pkgconfig/#{mac_os_version}"
|
438
489
|
paths << path.to_s if path.exist?
|
439
490
|
end
|
@@ -443,21 +494,15 @@ class PackageConfig
|
|
443
494
|
end
|
444
495
|
|
445
496
|
def required_packages
|
446
|
-
|
447
|
-
|
448
|
-
end
|
449
|
-
end
|
450
|
-
|
451
|
-
def private_required_packages
|
452
|
-
requires_private.reject do |package|
|
453
|
-
@name == package
|
454
|
-
end.uniq
|
497
|
+
collect_requires do |package|
|
498
|
+
package.requires
|
499
|
+
end
|
455
500
|
end
|
456
501
|
|
457
502
|
def all_required_packages
|
458
|
-
|
459
|
-
|
460
|
-
end
|
503
|
+
collect_requires do |package|
|
504
|
+
package.requires_private + package.requires
|
505
|
+
end
|
461
506
|
end
|
462
507
|
|
463
508
|
def normalize_paths(paths)
|
@@ -481,7 +526,7 @@ module PKGConfig
|
|
481
526
|
end
|
482
527
|
|
483
528
|
def msvc?
|
484
|
-
/mswin/.match(RUBY_PLATFORM) and /^cl\b/.match(RbConfig::CONFIG[
|
529
|
+
/mswin/.match(RUBY_PLATFORM) and /^cl\b/.match(RbConfig::CONFIG["CC"])
|
485
530
|
end
|
486
531
|
|
487
532
|
def package_config(package)
|
@@ -556,18 +601,18 @@ module PKGConfig
|
|
556
601
|
dldflags = libs(pkg)
|
557
602
|
dldflags = (Shellwords.shellwords(dldflags) -
|
558
603
|
Shellwords.shellwords(libraries))
|
559
|
-
dldflags = dldflags.map {|s| /\s/ =~ s ? "\"#{s}\"" : s }.join(
|
560
|
-
$libs +=
|
604
|
+
dldflags = dldflags.map {|s| /\s/ =~ s ? "\"#{s}\"" : s }.join(" ")
|
605
|
+
$libs += " " + libraries
|
561
606
|
if /mswin/ =~ RUBY_PLATFORM
|
562
|
-
$DLDFLAGS +=
|
607
|
+
$DLDFLAGS += " " + dldflags
|
563
608
|
else
|
564
|
-
$LDFLAGS +=
|
609
|
+
$LDFLAGS += " " + dldflags
|
565
610
|
end
|
566
|
-
$CFLAGS +=
|
611
|
+
$CFLAGS += " " + cflags_only_other(pkg)
|
567
612
|
if defined?($CXXFLAGS)
|
568
|
-
$CXXFLAGS +=
|
613
|
+
$CXXFLAGS += " " + cflags_only_other(pkg)
|
569
614
|
end
|
570
|
-
$INCFLAGS +=
|
615
|
+
$INCFLAGS += " " + cflags_only_I(pkg)
|
571
616
|
end
|
572
617
|
enough_version
|
573
618
|
end
|
data/lib/pkg-config/version.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright 2012-
|
1
|
+
# Copyright 2012-2020 Sutou Kouhei <kou@cozmixng.org>
|
2
2
|
#
|
3
3
|
# This library is free software; you can redistribute it and/or
|
4
4
|
# modify it under the terms of the GNU Lesser General Public
|
@@ -15,5 +15,5 @@
|
|
15
15
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
16
16
|
|
17
17
|
module PKGConfig
|
18
|
-
VERSION = "1.3
|
18
|
+
VERSION = "1.4.3"
|
19
19
|
end
|
data/test/run-test.rb
CHANGED
@@ -6,9 +6,6 @@ base_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
|
6
6
|
lib_dir = File.join(base_dir, "lib")
|
7
7
|
test_dir = File.join(base_dir, "test")
|
8
8
|
|
9
|
-
ENV["BUNDLE_GEMFILE"] ||= File.join(base_dir, "Gemfile")
|
10
|
-
require "bundler/setup"
|
11
|
-
|
12
9
|
require 'test-unit'
|
13
10
|
|
14
11
|
$LOAD_PATH.unshift(lib_dir)
|
data/test/test_pkg_config.rb
CHANGED
@@ -17,10 +17,10 @@ class PkgConfigTest < Test::Unit::TestCase
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_exist?
|
20
|
-
assert(system(
|
20
|
+
assert(system("pkg-config --exists cairo"))
|
21
21
|
assert(@cairo.exist?)
|
22
22
|
|
23
|
-
assert(system(
|
23
|
+
assert(system("pkg-config --exists cairo-png"))
|
24
24
|
assert(@cairo_png.exist?)
|
25
25
|
end
|
26
26
|
|
@@ -94,7 +94,7 @@ class PkgConfigTest < Test::Unit::TestCase
|
|
94
94
|
@cairo.msvc_syntax = true
|
95
95
|
result = pkg_config("cairo", "--libs")
|
96
96
|
msvc_result = result.gsub(/-lcairo\b/, "cairo.lib")
|
97
|
-
msvc_result = msvc_result.gsub(/-L/,
|
97
|
+
msvc_result = msvc_result.gsub(/-L/, "/libpath:")
|
98
98
|
assert_not_equal(msvc_result, result)
|
99
99
|
assert_equal(msvc_result, @cairo.libs)
|
100
100
|
end
|
@@ -107,7 +107,7 @@ class PkgConfigTest < Test::Unit::TestCase
|
|
107
107
|
def test_libs_only_l_msvc
|
108
108
|
@cairo_png.msvc_syntax = true
|
109
109
|
result = pkg_config("cairo-png", "--libs-only-l")
|
110
|
-
msvc_result = result.gsub(/-l(cairo|png[0-9]+|z)\b/,
|
110
|
+
msvc_result = result.gsub(/-l(cairo|png[0-9]+|z)\b/, "\\1.lib")
|
111
111
|
assert_not_equal(msvc_result, result)
|
112
112
|
assert_equal(msvc_result, @cairo_png.libs_only_l)
|
113
113
|
end
|
@@ -120,7 +120,7 @@ class PkgConfigTest < Test::Unit::TestCase
|
|
120
120
|
def test_libs_only_L_msvc
|
121
121
|
@cairo_png.msvc_syntax = true
|
122
122
|
result = pkg_config("cairo-png", "--libs-only-L")
|
123
|
-
msvc_result = result.gsub(/-L/,
|
123
|
+
msvc_result = result.gsub(/-L/, "/libpath:")
|
124
124
|
assert_not_equal(msvc_result, result)
|
125
125
|
assert_equal(msvc_result, @cairo_png.libs_only_L)
|
126
126
|
end
|
@@ -167,7 +167,7 @@ class PkgConfigTest < Test::Unit::TestCase
|
|
167
167
|
private
|
168
168
|
def pkg_config(package, *args)
|
169
169
|
args.unshift("--define-variable=libdir=#{@custom_libdir}")
|
170
|
-
args = args.collect {|arg| arg.dump}.join(
|
170
|
+
args = args.collect {|arg| arg.dump}.join(" ")
|
171
171
|
`pkg-config #{args} #{package}`.strip
|
172
172
|
end
|
173
173
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pkg-config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3
|
4
|
+
version: 1.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kouhei Sutou
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-unit
|
@@ -69,7 +69,7 @@ files:
|
|
69
69
|
- lib/pkg-config/version.rb
|
70
70
|
- test/run-test.rb
|
71
71
|
- test/test_pkg_config.rb
|
72
|
-
homepage: https://github.com/ruby-
|
72
|
+
homepage: https://github.com/ruby-gnome/pkg-config
|
73
73
|
licenses:
|
74
74
|
- LGPLv2+
|
75
75
|
metadata:
|
@@ -89,8 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '0'
|
91
91
|
requirements: []
|
92
|
-
|
93
|
-
rubygems_version: 2.7.6.2
|
92
|
+
rubygems_version: 3.2.0.rc.1
|
94
93
|
signing_key:
|
95
94
|
specification_version: 4
|
96
95
|
summary: A pkg-config implementation for Ruby
|