pkg-config 1.4.0 → 1.6.5

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.
@@ -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)
@@ -0,0 +1,347 @@
1
+ require "mkmf"
2
+ require "tempfile"
3
+
4
+ require "pkg-config"
5
+
6
+ class PkgConfigTest < Test::Unit::TestCase
7
+ def find_program(name)
8
+ exeext = RbConfig::CONFIG["EXEEXT"]
9
+ ENV["PATH"].split(File::PATH_SEPARATOR).each do |path|
10
+ program = File.join(path, name)
11
+ return name if File.exist?(program)
12
+ return name if File.exist?("#{program}.#{exeext}")
13
+ end
14
+ nil
15
+ end
16
+
17
+ def setup
18
+ @pkgconf = find_program("pkgconf") || "pkg-config"
19
+ @custom_libdir = "/tmp/local/lib"
20
+ options = {:override_variables => {"libdir" => @custom_libdir}}
21
+ @glib = PackageConfig.new("glib-2.0", options)
22
+ end
23
+
24
+ def only_pkg_config_version(major, minor)
25
+ pkg_config_version = `#{@pkgconf} --version`.chomp
26
+ current_major, current_minor = pkg_config_version.split(".").collect(&:to_i)
27
+ return if ([major, minor] <=> [current_major, current_minor]) <= 0
28
+ omit("Require #{@pkgconf} #{pkg_config_version} or later")
29
+ end
30
+
31
+ def test_exist?
32
+ assert(system("#{@pkgconf} --exists glib-2.0"))
33
+ end
34
+
35
+ def test_cflags
36
+ omit("Fragile on macOS") if RUBY_PLATFORM.include?("darwin")
37
+ assert_pkg_config("glib-2.0", ["--cflags"], @glib.cflags)
38
+ end
39
+
40
+ def test_cflags_only_I
41
+ omit("Fragile on macOS") if RUBY_PLATFORM.include?("darwin")
42
+ assert_pkg_config("glib-2.0", ["--cflags-only-I"], @glib.cflags_only_I)
43
+ end
44
+
45
+ def split_lib_flags(libs_command_line)
46
+ @glib.__send__(:split_lib_flags, libs_command_line)
47
+ end
48
+
49
+ def test_split_libs
50
+ assert_equal([
51
+ "-L/usr/local/Cellar/gtk+3/3.24.10/lib",
52
+ "-L/usr/local/Cellar/pango/1.44.3/lib",
53
+ "-L/usr/local/Cellar/harfbuzz/2.5.3/lib",
54
+ "-L/usr/local/Cellar/gdk-pixbuf/2.38.1_1/lib",
55
+ "-L/usr/local/Cellar/cairo/1.16.0_2/lib",
56
+ "-L/usr/local/Cellar/glib/2.60.6/lib",
57
+ "-L/usr/local/opt/gettext/lib",
58
+ "-lgdk-3",
59
+ "-framework", "Cocoa",
60
+ "-framework", "Carbon",
61
+ "-framework", "CoreGraphics",
62
+ "-lpangocairo-1.0",
63
+ "-lpango-1.0",
64
+ "-lharfbuzz",
65
+ "-lgdk_pixbuf-2.0",
66
+ "-lcairo-gobject",
67
+ "-lcairo",
68
+ "-lgobject-2.0",
69
+ "-lglib-2.0",
70
+ "-lintl"
71
+ ],
72
+ split_lib_flags("-L/usr/local/Cellar/gtk+3/3.24.10/lib " +
73
+ "-L/usr/local/Cellar/pango/1.44.3/lib " +
74
+ "-L/usr/local/Cellar/harfbuzz/2.5.3/lib " +
75
+ "-L/usr/local/Cellar/gdk-pixbuf/2.38.1_1/lib " +
76
+ "-L/usr/local/Cellar/cairo/1.16.0_2/lib " +
77
+ "-L/usr/local/Cellar/glib/2.60.6/lib " +
78
+ "-L/usr/local/opt/gettext/lib " +
79
+ "-lgdk-3 " +
80
+ "-framework Cocoa " +
81
+ "-framework Carbon " +
82
+ "-framework CoreGraphics " +
83
+ "-lpangocairo-1.0 " +
84
+ "-lpango-1.0 " +
85
+ "-lharfbuzz " +
86
+ "-lgdk_pixbuf-2.0 " +
87
+ "-lcairo-gobject " +
88
+ "-lcairo " +
89
+ "-lgobject-2.0 " +
90
+ "-lglib-2.0 " +
91
+ "-lintl"))
92
+ end
93
+
94
+ def test_libs
95
+ assert_pkg_config("glib-2.0", ["--libs"], @glib.libs)
96
+ end
97
+
98
+ def test_libs_msvc
99
+ @glib.msvc_syntax = true
100
+ result = pkg_config("glib-2.0", "--libs")
101
+ msvc_result = result.gsub(/-l(glib-2\.0|intl)\b/, "\\1.lib")
102
+ msvc_result = msvc_result.gsub(/-L/, "/libpath:")
103
+ assert_not_equal(msvc_result, result)
104
+ assert_equal(msvc_result, @glib.libs)
105
+ end
106
+
107
+ def test_libs_only_l
108
+ assert_pkg_config("glib-2.0", ["--libs-only-l"], @glib.libs_only_l)
109
+ end
110
+
111
+ def test_libs_only_l_msvc
112
+ @glib.msvc_syntax = true
113
+ result = pkg_config("glib-2.0", "--libs-only-l")
114
+ msvc_result = result.gsub(/-l(glib-2\.0|intl)\b/, "\\1.lib")
115
+ assert_not_equal(msvc_result, result)
116
+ assert_equal(msvc_result, @glib.libs_only_l)
117
+ end
118
+
119
+ def test_libs_only_L
120
+ assert_pkg_config("glib-2.0", ["--libs-only-L"], @glib.libs_only_L)
121
+ end
122
+
123
+ def test_libs_only_L_msvc
124
+ @glib.msvc_syntax = true
125
+ result = pkg_config("glib-2.0", "--libs-only-L")
126
+ msvc_result = result.gsub(/-L/, "/libpath:")
127
+ assert_not_equal(msvc_result, result)
128
+ assert_equal(msvc_result, @glib.libs_only_L)
129
+ end
130
+
131
+ def test_requires
132
+ assert_equal([], @glib.requires)
133
+ end
134
+
135
+ def test_requires_private
136
+ requires_private = pkg_config("glib-2.0", "--print-requires-private")
137
+ expected_requires = requires_private.split(/\n/).collect do |require|
138
+ require.split(/\s/, 2)[0]
139
+ end
140
+ assert_equal(expected_requires,
141
+ @glib.requires_private)
142
+ end
143
+
144
+ def test_version
145
+ assert_pkg_config("glib-2.0", ["--modversion"], @glib.version)
146
+ end
147
+
148
+ def test_parse_override_variables
149
+ assert_override_variables({}, nil)
150
+ assert_override_variables({"prefix" => "c:\\\\gtk-dev"},
151
+ "prefix=c:\\\\gtk-dev")
152
+ assert_override_variables({
153
+ "prefix" => "c:\\\\gtk-dev",
154
+ "includdir" => "d:\\\\gtk\\include"
155
+ },
156
+ ["prefix=c:\\\\gtk-dev",
157
+ "includdir=d:\\\\gtk\\include"].join(","))
158
+ end
159
+
160
+ def test_override_variables
161
+ overridden_prefix = "c:\\\\gtk-dev"
162
+ original_prefix = @glib.variable("prefix")
163
+ assert_not_equal(overridden_prefix, original_prefix)
164
+ with_override_variables("prefix=#{overridden_prefix}") do
165
+ glib = PackageConfig.new("glib-2.0")
166
+ assert_equal(overridden_prefix, glib.variable("prefix"))
167
+ end
168
+ end
169
+
170
+ def test_not_found
171
+ message = ".pc doesn't exist: <nonexistent>"
172
+ assert_raise(PackageConfig::NotFoundError.new(message)) do
173
+ PKGConfig.modversion("nonexistent")
174
+ end
175
+ end
176
+
177
+ private
178
+ def pkg_config(package, *args)
179
+ args.unshift("--define-variable=libdir=#{@custom_libdir}")
180
+ args = args.collect {|arg| arg.dump}.join(" ")
181
+ normalize_pkg_config_result(`#{@pkgconf} #{args} #{package}`.strip)
182
+ end
183
+
184
+ def normalize_pkg_config_result(result)
185
+ case RUBY_PLATFORM
186
+ when /mingw/
187
+ result = result.gsub(/\/bin\/..\//, "/")
188
+ if result.include?(" -mms-bitfields ")
189
+ # Reorder -mms-bitfields (non path flag)
190
+ result = result.gsub(" -mms-bitfields ", " ")
191
+ result = "-mms-bitfields #{result}"
192
+ end
193
+ result
194
+ else
195
+ result
196
+ end
197
+ end
198
+
199
+ def assert_pkg_config(package, pkg_config_args, actual)
200
+ result = pkg_config(package, *pkg_config_args)
201
+ result = nil if result.empty?
202
+ assert_equal(result, actual)
203
+ end
204
+
205
+ def assert_override_variables(expected, override_variables)
206
+ with_override_variables(override_variables) do
207
+ glib = PackageConfig.new("glib-2.0")
208
+ assert_equal(expected, glib.instance_variable_get("@override_variables"))
209
+ end
210
+ end
211
+
212
+ def with_override_variables(override_variables)
213
+ if override_variables.nil?
214
+ args = {}
215
+ else
216
+ args = {"--with-override-variables" => override_variables}
217
+ end
218
+ PackageConfig.clear_configure_args_cache
219
+ configure_args(args) do
220
+ yield
221
+ end
222
+ end
223
+
224
+ def configure_args(args)
225
+ original_configure_args = $configure_args
226
+ $configure_args = $configure_args.merge(args)
227
+ yield
228
+ ensure
229
+ $configure_args = original_configure_args
230
+ end
231
+
232
+ sub_test_case("#parse_pc") do
233
+ def parse_pc(content)
234
+ Tempfile.create(["pkg-config", ".pc"]) do |file|
235
+ file.puts(content)
236
+ file.close
237
+ package_config = PackageConfig.new(file.path)
238
+ package_config.__send__(:parse_pc)
239
+ [
240
+ package_config.instance_variable_get(:@variables),
241
+ package_config.instance_variable_get(:@declarations),
242
+ ]
243
+ end
244
+ end
245
+
246
+ def test_continuous_line
247
+ assert_equal([
248
+ {
249
+ "prefix" => "/usr/local",
250
+ "libdir" => "/usr/local/lib",
251
+ "includedir" => "/usr/local/include",
252
+ },
253
+ {
254
+ "Name" => "my-package",
255
+ "Description" => "This is my package",
256
+ "Version" => "1.0.0",
257
+ "Requires" => "glib-2.0 >= 2.72 gobject-2.0 >= 2.72",
258
+ "Requires.private" => "gio-2.0 >= 2.72 " +
259
+ " cairo",
260
+ "Libs" => "-L${libdir} -lmy-package",
261
+ "Cflags" => "-I${includedir}/my-package",
262
+ },
263
+ ],
264
+ parse_pc(<<-PC))
265
+ prefix=/usr/local
266
+ libdir=/usr/local/lib
267
+ includedir=/usr/local/include
268
+
269
+ Name: my-package
270
+ Description: This is my package
271
+ Version: 1.0.0
272
+ Requires: glib-2.0 >= 2.72 gobject-2.0 >= 2.72
273
+ Requires.private: gio-2.0 >= 2.72 \
274
+ cairo
275
+
276
+ Libs: -L${libdir} -lmy-package
277
+ Cflags: -I${includedir}/my-package
278
+ PC
279
+ end
280
+ end
281
+
282
+ sub_test_case("#parse_requires") do
283
+ def parse_requires(requires)
284
+ @glib.__send__(:parse_requires, requires)
285
+ end
286
+
287
+ def test_broken_version
288
+ assert_equal(["fribidi"],
289
+ parse_requires("fribidi >= fribidi_required_dep"))
290
+ end
291
+
292
+ def test_greater_than_or_equals_to
293
+ assert_equal(["fribidi"],
294
+ parse_requires("fribidi >= 1.0"))
295
+ end
296
+
297
+ def test_greater_than
298
+ assert_equal(["fribidi"],
299
+ parse_requires("fribidi > 1.0"))
300
+ end
301
+
302
+ def test_less_than_or_equals_to
303
+ assert_equal(["fribidi"],
304
+ parse_requires("fribidi <= 1.0"))
305
+ end
306
+
307
+ def test_less_than
308
+ assert_equal(["fribidi"],
309
+ parse_requires("fribidi < 1.0"))
310
+ end
311
+
312
+ def test_equals_to
313
+ assert_equal(["fribidi"],
314
+ parse_requires("fribidi = 1.0"))
315
+ end
316
+ end
317
+
318
+ sub_test_case("#merge_back_cflags") do
319
+ def merge_back_cflags(cflags)
320
+ @glib.__send__(:merge_back_cflags, cflags)
321
+ end
322
+
323
+ def test_d
324
+ assert_equal(["-DFOO"],
325
+ merge_back_cflags(["-DFOO", "-DFOO"]))
326
+ end
327
+
328
+ def test_w
329
+ assert_equal(["-Wno-unknown-warning-option"],
330
+ merge_back_cflags(["-Wno-unknown-warning-option",
331
+ "-Wno-unknown-warning-option"]))
332
+ end
333
+
334
+ def test_wa_wl_wp
335
+ assert_equal(["-Wa,--noexecstack", "-Wl,--as-needed", "-Wp,-DFOO",
336
+ "-Wa,--noexecstack", "-Wl,--as-needed", "-Wp,-DFOO"],
337
+ merge_back_cflags(["-Wa,--noexecstack", "-Wl,--as-needed", "-Wp,-DFOO",
338
+ "-Wa,--noexecstack", "-Wl,--as-needed", "-Wp,-DFOO"]))
339
+ end
340
+
341
+ def test_mixed
342
+ assert_equal(["-Wl,--as-needed", "-DFOO", "-Wall", "-Wl,--as-needed"],
343
+ merge_back_cflags(["-DFOO", "-Wall", "-Wl,--as-needed",
344
+ "-DFOO", "-Wall", "-Wl,--as-needed"]))
345
+ end
346
+ end
347
+ end
metadata CHANGED
@@ -1,57 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pkg-config
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.6.5
5
5
  platform: ruby
6
6
  authors:
7
- - Kouhei Sutou
8
- autorequire:
7
+ - Sutou Kouhei
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2019-10-24 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: test-unit
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies: []
55
12
  description: pkg-config can be used in your extconf.rb to properly detect need libraries
56
13
  for compiling Ruby native extensions
57
14
  email:
@@ -62,19 +19,17 @@ extra_rdoc_files: []
62
19
  files:
63
20
  - Gemfile
64
21
  - LGPL-2.1
65
- - NEWS
22
+ - NEWS.md
66
23
  - README.rdoc
67
24
  - Rakefile
68
25
  - lib/pkg-config.rb
69
- - lib/pkg-config/version.rb
70
- - test/run-test.rb
71
- - test/test_pkg_config.rb
26
+ - test/run.rb
27
+ - test/test-pkg-config.rb
72
28
  homepage: https://github.com/ruby-gnome/pkg-config
73
29
  licenses:
74
30
  - LGPLv2+
75
31
  metadata:
76
- msys2_mingw_dependencies: pkg-config
77
- post_install_message:
32
+ msys2_mingw_dependencies: pkgconf
78
33
  rdoc_options: []
79
34
  require_paths:
80
35
  - lib
@@ -89,11 +44,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
89
44
  - !ruby/object:Gem::Version
90
45
  version: '0'
91
46
  requirements: []
92
- rubyforge_project:
93
- rubygems_version: 2.7.6.2
94
- signing_key:
47
+ rubygems_version: 3.6.9
95
48
  specification_version: 4
96
49
  summary: A pkg-config implementation for Ruby
97
50
  test_files:
98
- - test/run-test.rb
99
- - test/test_pkg_config.rb
51
+ - test/run.rb
52
+ - test/test-pkg-config.rb