Class: Utilrb::PkgConfig
Overview
Access to information from pkg-config(1)
This class allows to enumerate the pkg-config packages available, and create a PkgConfig object that allows to get access to the pkgconfig information.
Create a new pkgconfig object with
pkg = PkgConfig.new(name)
It raises PkgConfig::NotFound if the package is not available.
Then, the classical include directory and library directory flags can be listed with
pkg.include_dirs
pkg.library_dirs
Standard fields are available with
pkg.cflags
pkg.cflags_only_I
pkg.cflags_only_other
pkg.libs
pkg.libs_only_L
pkg.libs_only_l
pkg.libs_only_other
pkg.static
Arbitrary variables defined in the .pc file can be accessed with
pkg.prefix
pkg.libdir
Defined Under Namespace
Constant Summary collapse
- PACKAGE_NAME_RX =
/[\w\-\.]+/
- VAR_NAME_RX =
/\w+/
- FIELD_NAME_RX =
/[\w\.\-]+/
- SHELL_VARS =
%w{Cflags Libs Libs.private}
- ACTIONS =
%w{cflags cflags-only-I cflags-only-other libs libs-only-L libs-only-l libs-only-other}
- FOUND_PATH_RX =
/Scanning directory (?:#\d+ )?'(.*\/)((?:lib|lib64|share)\/.*)'$/
- NONEXISTENT_PATH_RX =
/Cannot open directory (?:#\d+ )?'.*\/((?:lib|lib64|share)\/.*)' in package search path:.*/
Instance Attribute Summary collapse
-
#description ⇒ Object
readonly
Returns the value of attribute description.
-
#fields ⇒ Object
readonly
Returns the value of attribute fields.
-
#name ⇒ Object
readonly
The module name.
-
#path ⇒ Object
readonly
Returns the value of attribute path.
-
#raw_fields ⇒ Object
readonly
Returns the value of attribute raw_fields.
-
#raw_version ⇒ Object
readonly
The module version as a string.
-
#requires ⇒ Array<PkgConfig>
readonly
The list of packages that are Require:‘d by this package.
-
#variables ⇒ Object
readonly
Information extracted from the file.
-
#version ⇒ Object
readonly
The module version, as an array of integers.
Class Method Summary collapse
- .available_package_names(pkg_config_path: self.pkg_config_path) ⇒ Object
-
.clear_cache ⇒ Object
deprecated
Deprecated.
PkgConfig does not cache the packages anymore, so no need to call this method
-
.default_search_path ⇒ Object
Returns the system-wide search path that is embedded in pkg-config.
-
.default_search_suffixes ⇒ Object
Returns the system-wide standard suffixes that should be appended to new prefixes to find pkg-config files.
-
.define_pkgconfig_action(action) ⇒ Object
:nodoc:.
-
.each_package(regex = nil, pkg_config_path: self.pkg_config_path) ⇒ Object
Yields the package names of available packages.
- .each_pkgconfig_directory(pkg_config_path: self.pkg_config_path, &block) ⇒ Object
-
.find_all_package_files(name, pkg_config_path: self.pkg_config_path) ⇒ Object
Returns true if there is a package with this name.
-
.find_matching_version(candidates, version_spec) ⇒ Object
Returns the first package in
candidates
that match the given version spec. -
.get(name, version_spec = nil, preset_variables = Hash.new, minimal: false, pkg_config_path: self.pkg_config_path) ⇒ Object
Returns the pkg-config object that matches the given name, and optionally a version string.
-
.has_package?(name, pkg_config_path: self.pkg_config_path) ⇒ Boolean
Returns true if there is a package with this name.
- .load(path, preset_variables) ⇒ Object
- .load_minimal(path, preset_variables) ⇒ Object
-
.new(name, version_spec = nil, options = Hash.new) ⇒ PkgConfig
Finds the provided package and optional version and returns its PkgConfig description.
- .parse_dependencies(string) ⇒ Object
- .pkg_config_path ⇒ Object
Instance Method Summary collapse
- #cflags ⇒ Object
- #cflags_only_I ⇒ Object
- #cflags_only_other ⇒ Object
- #expand_field(name, field) ⇒ Object
- #expand_variables(raw_variables) ⇒ Object
-
#include_dirs ⇒ Object
Returns the list of include directories listed in the Cflags: section of the pkgconfig file.
-
#initialize(name) ⇒ PkgConfig
constructor
Create a PkgConfig object for the package
name
Raises PkgConfig::NotFound if the module does not exist. -
#library_dirs ⇒ Object
Returns the list of library directories listed in the Libs: section of the pkgconfig file.
- #libs(static = false) ⇒ Object
- #libs_only_l(static = false) ⇒ Object
- #libs_only_L(static = false) ⇒ Object
- #libs_only_other(static = false) ⇒ Object
-
#load(path, preset_variables = Hash.new) ⇒ Object
Loads the information contained in
path
. - #load_fields ⇒ Object
- #load_minimal(path, preset_variables = Hash.new) ⇒ Object
- #load_variables(path, preset_variables = Hash.new) ⇒ Object
-
#method_missing(varname, *args, &proc) ⇒ Object
:nodoc:.
-
#normalize_field_name(name) ⇒ Object
private
Normalize a field name to be lowercase with only the first letter capitalized.
-
#parse(path) ⇒ (Hash,Hash)
Parse a pkg-config field and extracts the raw definition of variables and fields.
-
#perform_substitution(value, variables, current) ⇒ Object
Helper method that expands $word in
value
using the name to value mapvariables
. - #pkgconfig_variable(varname) ⇒ Object
- #raw_cflags ⇒ Object
- #raw_cflags_only_I ⇒ Object
- #raw_cflags_only_other ⇒ Object
- #raw_ldflags ⇒ Object
- #raw_ldflags_with_requires ⇒ Object
- #raw_libs(static = false) ⇒ Object
- #raw_libs_only_l(static = false) ⇒ Object
- #raw_libs_only_L(static = false) ⇒ Object
- #raw_libs_only_other(static = false) ⇒ Object
Constructor Details
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(varname, *args, &proc) ⇒ Object
:nodoc:
498 499 500 501 502 503 504 |
# File 'lib/utilrb/pkgconfig.rb', line 498 def method_missing(varname, *args, &proc) # :nodoc: if args.empty? variables[varname.to_s] else super(varname, *args, &proc) end end |
Instance Attribute Details
#description ⇒ Object (readonly)
Returns the value of attribute description.
151 152 153 |
# File 'lib/utilrb/pkgconfig.rb', line 151 def description @description end |
#fields ⇒ Object (readonly)
Returns the value of attribute fields.
161 162 163 |
# File 'lib/utilrb/pkgconfig.rb', line 161 def fields @fields end |
#name ⇒ Object (readonly)
The module name
150 151 152 |
# File 'lib/utilrb/pkgconfig.rb', line 150 def name @name end |
#path ⇒ Object (readonly)
Returns the value of attribute path.
147 148 149 |
# File 'lib/utilrb/pkgconfig.rb', line 147 def path @path end |
#raw_fields ⇒ Object (readonly)
Returns the value of attribute raw_fields.
157 158 159 |
# File 'lib/utilrb/pkgconfig.rb', line 157 def raw_fields @raw_fields end |
#raw_version ⇒ Object (readonly)
The module version as a string
153 154 155 |
# File 'lib/utilrb/pkgconfig.rb', line 153 def raw_version @raw_version end |
#requires ⇒ Array<PkgConfig> (readonly)
The list of packages that are Require:‘d by this package
166 167 168 |
# File 'lib/utilrb/pkgconfig.rb', line 166 def requires @requires end |
#variables ⇒ Object (readonly)
Information extracted from the file
160 161 162 |
# File 'lib/utilrb/pkgconfig.rb', line 160 def variables @variables end |
#version ⇒ Object (readonly)
The module version, as an array of integers
155 156 157 |
# File 'lib/utilrb/pkgconfig.rb', line 155 def version @version end |
Class Method Details
.available_package_names(pkg_config_path: self.pkg_config_path) ⇒ Object
530 531 532 533 534 535 536 537 538 |
# File 'lib/utilrb/pkgconfig.rb', line 530 def self.available_package_names(pkg_config_path: self.pkg_config_path) result = [] each_pkgconfig_directory(pkg_config_path: pkg_config_path) do |dir| Dir.glob(File.join(dir, "*.pc")) do |path| result << File.basename(path, ".pc") end end result end |
.clear_cache ⇒ Object
Utilrb::PkgConfig does not cache the packages anymore, so no need to call this method
60 61 |
# File 'lib/utilrb/pkgconfig.rb', line 60 def self.clear_cache end |
.default_search_path ⇒ Object
Returns the system-wide search path that is embedded in pkg-config
568 569 570 571 572 573 574 575 |
# File 'lib/utilrb/pkgconfig.rb', line 568 def self.default_search_path if !@default_search_path output = `LANG=C PKG_CONFIG_PATH= pkg-config --debug 2>&1`.split("\n") @default_search_path = output.grep(FOUND_PATH_RX). map { |l| l.gsub(FOUND_PATH_RX, '\1\2') } end return @default_search_path end |
.default_search_suffixes ⇒ Object
Returns the system-wide standard suffixes that should be appended to new prefixes to find pkg-config files
580 581 582 583 584 585 586 587 588 589 590 591 592 |
# File 'lib/utilrb/pkgconfig.rb', line 580 def self.default_search_suffixes if !@default_search_suffixes output = `LANG=C PKG_CONFIG_PATH= pkg-config --debug 2>&1`.split("\n") found_paths = output.grep(FOUND_PATH_RX). map { |l| l.gsub(FOUND_PATH_RX, '\2') }. to_set not_found = output.grep(NONEXISTENT_PATH_RX). map { |l| l.gsub(NONEXISTENT_PATH_RX, '\1') }. to_set @default_search_suffixes = found_paths | not_found end return @default_search_suffixes end |
.define_pkgconfig_action(action) ⇒ Object
:nodoc:
390 391 392 393 394 395 396 397 398 399 400 401 |
# File 'lib/utilrb/pkgconfig.rb', line 390 def self.define_pkgconfig_action(action) # :nodoc: class_eval <<-EOD, __FILE__, __LINE__+1 def pkgconfig_#{action.gsub(/-/, '_')}(static = false) if static `pkg-config --#{action} --static \#{name}`.strip else `pkg-config --#{action} \#{name}`.strip end end EOD nil end |
.each_package(regex = nil, pkg_config_path: self.pkg_config_path) ⇒ Object
Yields the package names of available packages. If regex
is given, lists only the names that match the regular expression.
547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 |
# File 'lib/utilrb/pkgconfig.rb', line 547 def self.each_package(regex = nil, pkg_config_path: self.pkg_config_path) return enum_for(__method__) if !block_given? seen = Set.new each_pkgconfig_directory(pkg_config_path: pkg_config_path) do |dir| Dir.glob(File.join(dir, '*.pc')) do |file| pkg_name = File.basename(file, ".pc") next if seen.include?(pkg_name) next if regex && pkg_name !~ regex seen << pkg_name yield(pkg_name) end end end |
.each_pkgconfig_directory(pkg_config_path: self.pkg_config_path, &block) ⇒ Object
510 511 512 513 514 515 516 |
# File 'lib/utilrb/pkgconfig.rb', line 510 def self.each_pkgconfig_directory(pkg_config_path: self.pkg_config_path, &block) return enum_for(__method__) if !block_given? if pkg_config_path pkg_config_path.split(':').each(&block) end default_search_path.each(&block) end |
.find_all_package_files(name, pkg_config_path: self.pkg_config_path) ⇒ Object
Returns true if there is a package with this name
519 520 521 522 523 524 525 526 527 528 |
# File 'lib/utilrb/pkgconfig.rb', line 519 def self.find_all_package_files(name, pkg_config_path: self.pkg_config_path) result = [] each_pkgconfig_directory(pkg_config_path: pkg_config_path) do |dir| path = File.join(dir, "#{name}.pc") if File.exist?(path) result << path end end result end |
.find_matching_version(candidates, version_spec) ⇒ Object
Returns the first package in candidates
that match the given version spec
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/utilrb/pkgconfig.rb', line 102 def self.find_matching_version(candidates, version_spec) if version_spec version_spec =~ /([<>=]+)\s*([\d\.]+)/ op, requested_version = $1, $2 requested_op = if op == "=" then [0] elsif op == ">" then [1] elsif op == "<" then [-1] elsif op == "<=" then [-1, 0] elsif op == ">=" then [1, 0] end requested_version = requested_version.split('.').map { |v| Integer(v) } result = candidates.find do |pkg| requested_op.include?(pkg.version <=> requested_version) end if !result name = candidates.first.name raise NotFound.new(name), "no version of #{name} match #{version_spec}. Available versions are: #{candidates.map(&:raw_version).join(", ")}" end result else candidates.first end end |
.get(name, version_spec = nil, preset_variables = Hash.new, minimal: false, pkg_config_path: self.pkg_config_path) ⇒ Object
Returns the pkg-config object that matches the given name, and optionally a version string
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/utilrb/pkgconfig.rb', line 65 def self.get(name, version_spec = nil, preset_variables = Hash.new, minimal: false, pkg_config_path: self.pkg_config_path) paths = find_all_package_files(name, pkg_config_path: pkg_config_path) if paths.empty? raise NotFound.new(name), "cannot find the pkg-config specification for #{name}" end candidates = paths.map do |p| PkgConfig.load_minimal(p, preset_variables) end # Now try to find a matching spec if match = find_matching_version(candidates, version_spec) match else raise NotFound, "found #{candidates.size} packages for #{name}, but none match the version specification #{version_spec}" end if !minimal match.load_fields end match end |
.has_package?(name, pkg_config_path: self.pkg_config_path) ⇒ Boolean
Returns true if there is a package with this name
541 542 543 |
# File 'lib/utilrb/pkgconfig.rb', line 541 def self.has_package?(name, pkg_config_path: self.pkg_config_path) !find_all_package_files(name, pkg_config_path: pkg_config_path).empty? end |
.load(path, preset_variables) ⇒ Object
44 45 46 47 48 49 |
# File 'lib/utilrb/pkgconfig.rb', line 44 def self.load(path, preset_variables) pkg_name = File.basename(path, ".pc") pkg = Class.instance_method(:new).bind(PkgConfig).call(pkg_name) pkg.load(path, preset_variables) pkg end |
.load_minimal(path, preset_variables) ⇒ Object
51 52 53 54 55 56 |
# File 'lib/utilrb/pkgconfig.rb', line 51 def self.load_minimal(path, preset_variables) pkg_name = File.basename(path, ".pc") pkg = Class.instance_method(:new).bind(PkgConfig).call(pkg_name) pkg.load_minimal(path, preset_variables) pkg end |
.new(name, version_spec = nil, options = Hash.new) ⇒ PkgConfig
Finds the provided package and optional version and returns its PkgConfig description
number“, where op is < <= >= > or == and the version number X, X.y, …
96 97 98 |
# File 'lib/utilrb/pkgconfig.rb', line 96 def self.new(name, version_spec = nil, = Hash.new) get(name, version_spec, ) end |
.parse_dependencies(string) ⇒ Object
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
# File 'lib/utilrb/pkgconfig.rb', line 195 def self.parse_dependencies(string) if string =~ /,/ packages = string.split(',') else packages = [] words = string.split(' ') while !words.empty? w = words.shift if w =~ /[<>=]/ packages[-1] += " #{w} #{words.shift}" else packages << w end end end result = packages.map do |dep| dep = dep.strip if dep =~ /^(#{PACKAGE_NAME_RX})\s*([=<>]+.*)/ PkgConfig.get($1, $2.strip) else PkgConfig.get(dep) end end result end |
.pkg_config_path ⇒ Object
506 507 508 |
# File 'lib/utilrb/pkgconfig.rb', line 506 def self.pkg_config_path ENV['PKG_CONFIG_PATH'] end |
Instance Method Details
#cflags ⇒ Object
443 444 445 |
# File 'lib/utilrb/pkgconfig.rb', line 443 def cflags raw_cflags.join(" ") end |
#cflags_only_I ⇒ Object
447 448 449 |
# File 'lib/utilrb/pkgconfig.rb', line 447 def cflags_only_I raw_cflags_only_I.join(" ") end |
#cflags_only_other ⇒ Object
451 452 453 |
# File 'lib/utilrb/pkgconfig.rb', line 451 def cflags_only_other raw_cflags_only_other.join(" ") end |
#expand_field(name, field) ⇒ Object
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 |
# File 'lib/utilrb/pkgconfig.rb', line 292 def (name, field) if SHELL_VARS.include?(name) value = Shellwords.shellsplit(field) resolved = Array.new while !value.empty? value = value.flat_map do |v| = perform_substitution(v, variables, name) if == v resolved << v nil else Shellwords.shellsplit() end end.compact end resolved else perform_substitution(field, variables, name) end end |
#expand_variables(raw_variables) ⇒ Object
275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 |
# File 'lib/utilrb/pkgconfig.rb', line 275 def (raw_variables) raw_variables = raw_variables.dup variables = Hash.new # Resolve the variables while variables.size != raw_variables.size raw_variables.each do |name, value| value = perform_substitution(value, raw_variables, name) raw_variables[name] = value if value !~ /\$\{#{VAR_NAME_RX}\}/ variables[name] = value end end end variables end |
#include_dirs ⇒ Object
Returns the list of include directories listed in the Cflags: section of the pkgconfig file
409 410 411 412 413 414 415 |
# File 'lib/utilrb/pkgconfig.rb', line 409 def include_dirs result = raw_cflags_only_I.map { |v| v[2..-1] } if result.any?(&:empty?) raise Invalid.new(name), "empty include directory (-I without argument) found in pkg-config package #{name}" end result end |
#library_dirs ⇒ Object
Returns the list of library directories listed in the Libs: section of the pkgconfig file
419 420 421 422 423 424 425 |
# File 'lib/utilrb/pkgconfig.rb', line 419 def library_dirs result = raw_libs_only_L.map { |v| v[2..-1] } if result.any?(&:empty?) raise Invalid.new(name), "empty link directory (-L without argument) found in pkg-config package #{name}" end result end |
#libs(static = false) ⇒ Object
482 483 484 |
# File 'lib/utilrb/pkgconfig.rb', line 482 def libs(static = false) raw_libs(static).join(" ") end |
#libs_only_l(static = false) ⇒ Object
490 491 492 |
# File 'lib/utilrb/pkgconfig.rb', line 490 def libs_only_l(static = false) raw_libs_only_l(static).join(" ") end |
#libs_only_L(static = false) ⇒ Object
486 487 488 |
# File 'lib/utilrb/pkgconfig.rb', line 486 def libs_only_L(static = false) raw_libs_only_L(static).join(" ") end |
#libs_only_other(static = false) ⇒ Object
494 495 496 |
# File 'lib/utilrb/pkgconfig.rb', line 494 def libs_only_other(static = false) raw_libs_only_other(static).join(" ") end |
#load(path, preset_variables = Hash.new) ⇒ Object
Loads the information contained in path
383 384 385 386 387 388 |
# File 'lib/utilrb/pkgconfig.rb', line 383 def load(path, preset_variables = Hash.new) if !@raw_fields load_minimal(path, preset_variables) end load_fields end |
#load_fields ⇒ Object
336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 |
# File 'lib/utilrb/pkgconfig.rb', line 336 def load_fields fields = Hash.new @raw_fields.each do |name, value| fields[name] = (name, value) end @fields = fields # Initialize the main flags @description = (fields['Description'] || '') # Get the requires/conflicts @requires = PkgConfig.parse_dependencies(fields['Requires'] || '') @requires_private = PkgConfig.parse_dependencies(fields['Requires.private'] || '') @conflicts = PkgConfig.parse_dependencies(fields['Conflicts'] || '') # And finally resolve the compilation flags @cflags = fields['Cflags'] || [] @requires.each do |pkg| @cflags.concat(pkg.raw_cflags) end @requires_private.each do |pkg| @cflags.concat(pkg.raw_cflags) end @cflags.uniq! @cflags.delete('-I/usr/include') @ldflags = Hash.new @ldflags[false] = fields['Libs'] || [] @ldflags[false].delete('-L/usr/lib') @ldflags[false].uniq! @ldflags[true] = @ldflags[false] + (fields['Libs.private'] || []) @ldflags[true].delete('-L/usr/lib') @ldflags[true].uniq! @ldflags_with_requires = { true => @ldflags[true].dup, false => @ldflags[false].dup } @requires.each do |pkg| @ldflags_with_requires[true].concat(pkg.raw_ldflags_with_requires[true]) @ldflags_with_requires[false].concat(pkg.raw_ldflags_with_requires[false]) end @requires_private.each do |pkg| @ldflags_with_requires[true].concat(pkg.raw_ldflags_with_requires[true]) end end |
#load_minimal(path, preset_variables = Hash.new) ⇒ Object
319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 |
# File 'lib/utilrb/pkgconfig.rb', line 319 def load_minimal(path, preset_variables = Hash.new) raw_variables, raw_fields = parse(path) raw_variables = preset_variables.merge(raw_variables) @variables = (raw_variables) if raw_fields['Version'] @raw_version = ('Version', raw_fields['Version']) else @raw_version = '' end @version = raw_version.split('.').map { |v| Integer(v) if v =~ /^\d+$/ }.compact # To be used in the call to #load @raw_fields = raw_fields @path = path end |
#load_variables(path, preset_variables = Hash.new) ⇒ Object
313 314 315 316 317 |
# File 'lib/utilrb/pkgconfig.rb', line 313 def load_variables(path, preset_variables = Hash.new) raw_variables, raw_fields = parse(path) raw_variables = preset_variables.merge(raw_variables) (raw_variables) end |
#normalize_field_name(name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Normalize a field name to be lowercase with only the first letter capitalized
228 229 230 231 232 |
# File 'lib/utilrb/pkgconfig.rb', line 228 def normalize_field_name(name) name = name.downcase name[0, 1] = name[0, 1].upcase name end |
#parse(path) ⇒ (Hash,Hash)
Parse a pkg-config field and extracts the raw definition of variables and fields
238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 |
# File 'lib/utilrb/pkgconfig.rb', line 238 def parse(path) running_line = nil file = File.readlines(path).map do |line| line = line.gsub(/\s*#.*$/, '') line = line.strip next if line.empty? value = line.gsub(/\\$/, '') if running_line running_line << " " << value end if line =~ /\\$/ running_line ||= value elsif running_line running_line = nil else value end end.compact raw_variables, raw_fields = Hash.new, Hash.new file.each do |line| case line when /^(#{VAR_NAME_RX})\s*=(.*)/ raw_variables[$1] = $2.strip when /^(#{FIELD_NAME_RX}):\s*(.*)/ field_name = normalize_field_name($1) raw_fields[field_name] = $2.strip else raise NotImplementedError, "#{path}: cannot parse pkg-config line #{line.inspect}" end end return raw_variables, raw_fields end |
#perform_substitution(value, variables, current) ⇒ Object
Helper method that expands $word in value
using the name to value map variables
current
is a string that describes what we are expanding. It is used to detect recursion in expansion of variables, and to give meaningful errors to the user
182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/utilrb/pkgconfig.rb', line 182 def perform_substitution(value, variables, current) value = value.gsub(/\$\{(\w+)\}/) do |rx| = $1 if == current raise "error in pkg-config file #{path}: #{current} contains a reference to itself" elsif !( = variables[]) raise "error in pkg-config file #{path}: #{current} contains a reference to #{} but there is no such variable" end end value end |
#pkgconfig_variable(varname) ⇒ Object
403 404 405 |
# File 'lib/utilrb/pkgconfig.rb', line 403 def pkgconfig_variable(varname) `pkg-config --variable=#{varname}`.strip end |
#raw_cflags ⇒ Object
431 432 433 |
# File 'lib/utilrb/pkgconfig.rb', line 431 def raw_cflags @cflags end |
#raw_cflags_only_I ⇒ Object
435 436 437 |
# File 'lib/utilrb/pkgconfig.rb', line 435 def raw_cflags_only_I @cflags.grep(/^-I/) end |
#raw_cflags_only_other ⇒ Object
439 440 441 |
# File 'lib/utilrb/pkgconfig.rb', line 439 def raw_cflags_only_other @cflags.find_all { |s| s !~ /^-I/ } end |
#raw_ldflags ⇒ Object
456 457 458 |
# File 'lib/utilrb/pkgconfig.rb', line 456 def raw_ldflags @ldflags end |
#raw_ldflags_with_requires ⇒ Object
460 461 462 |
# File 'lib/utilrb/pkgconfig.rb', line 460 def raw_ldflags_with_requires @ldflags_with_requires end |
#raw_libs(static = false) ⇒ Object
465 466 467 |
# File 'lib/utilrb/pkgconfig.rb', line 465 def raw_libs(static = false) @ldflags_with_requires[static] end |
#raw_libs_only_l(static = false) ⇒ Object
473 474 475 |
# File 'lib/utilrb/pkgconfig.rb', line 473 def raw_libs_only_l(static = false) @ldflags_with_requires[static].grep(/^-l/) end |
#raw_libs_only_L(static = false) ⇒ Object
469 470 471 |
# File 'lib/utilrb/pkgconfig.rb', line 469 def raw_libs_only_L(static = false) @ldflags_with_requires[static].grep(/^-L/) end |
#raw_libs_only_other(static = false) ⇒ Object
477 478 479 |
# File 'lib/utilrb/pkgconfig.rb', line 477 def raw_libs_only_other(static = false) @ldflags_with_requires[static].find_all { |s| s !~ /^-[lL]/ } end |