Module: PKGConfig

Defined in:
lib/orchid/pkg-config.rb

Constant Summary collapse

@@cmd =
with_config('pkg-config', ENV["PKG_CONFIG"] ||  'pkg-config')
@@list =
{}

Class Method Summary collapse

Class Method Details

.cflags(pkg) ⇒ Object



44
45
46
# File 'lib/orchid/pkg-config.rb', line 44

def cflags(pkg)
  `#{@@cmd} --cflags #{pkg}`.chomp
end

.cflags_only_I(pkg) ⇒ Object



48
49
50
# File 'lib/orchid/pkg-config.rb', line 48

def cflags_only_I(pkg)
  `#{@@cmd} --cflags-only-I #{pkg}`.chomp
end

.cflags_only_other(pkg) ⇒ Object



52
53
54
# File 'lib/orchid/pkg-config.rb', line 52

def cflags_only_other(pkg)
  `#{@@cmd} --cflags-only-other #{pkg}`.chomp
end

.check_version?(pkg, major = 0, minor = 0, micro = 0) ⇒ Boolean

Returns:

  • (Boolean)


89
90
91
92
93
94
95
96
97
98
# File 'lib/orchid/pkg-config.rb', line 89

def check_version?(pkg, major = 0, minor = 0, micro = 0)
  return false unless exist?(pkg)
  ver = modversion(pkg).split(".").collect{|item| item.to_i}
  (0..2).each {|i| ver[i] = 0 unless ver[i]}
 
  (ver[0] > major ||
   (ver[0] == major && ver[1] > minor) ||
   (ver[0] == major && ver[1] == minor &&
    ver[2] >= micro))
end

.description(pkg) ⇒ Object



77
78
79
# File 'lib/orchid/pkg-config.rb', line 77

def description(pkg)
  @@list[pkg][1]
end

.exist?(pkg) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/orchid/pkg-config.rb', line 28

def exist?(pkg)
  system("#{@@cmd} --exists #{pkg}")
end

.have_package(pkg, major = nil, minor = 0, micro = 0) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/orchid/pkg-config.rb', line 100

def have_package(pkg, major = nil, minor = 0, micro = 0)
  if major.nil?
    STDOUT.print("checking for #{pkg}... ")
  else
    STDOUT.print("checking for #{pkg} version (>= #{major}.#{minor}.#{micro})... ")
  end
  major ||= 0
  STDOUT.flush
  if check_version?(pkg, major, minor, micro)
    STDOUT.print "yes\n"
    libraries = libs_only_l(pkg)
    dldflags = libs(pkg)
    dldflags = (Shellwords.shellwords(dldflags) - Shellwords.shellwords(libraries)).map{|s| /\s/ =~ s ? "\"#{s}\"" : s }.join(' ')
    $libs   += ' ' + libraries
    if /mswin32/ =~ RUBY_PLATFORM
	$DLDFLAGS += ' ' + dldflags
    else
	$LDFLAGS += ' ' + dldflags
    end
    $CFLAGS += ' ' + cflags(pkg)
    true
  else
    STDOUT.print "no\n"
    false
  end
end

.libs(pkg) ⇒ Object



32
33
34
# File 'lib/orchid/pkg-config.rb', line 32

def libs(pkg)
  `#{@@cmd} --libs #{pkg}`.chomp
end

.libs_only_l(pkg) ⇒ Object



40
41
42
# File 'lib/orchid/pkg-config.rb', line 40

def libs_only_l(pkg)
  `#{@@cmd} --libs-only-l #{pkg}`.chomp
end

.libs_only_L(pkg) ⇒ Object



36
37
38
# File 'lib/orchid/pkg-config.rb', line 36

def libs_only_L(pkg)
  `#{@@cmd} --libs-only-L #{pkg}`.chomp
end

.list_allObject



68
69
70
71
# File 'lib/orchid/pkg-config.rb', line 68

def list_all
  # Returns [pkg, name, description]
  @@list.keys.collect{|key| [key] + @@list[key]}.sort
end

.modversion(pkg) ⇒ Object



60
61
62
# File 'lib/orchid/pkg-config.rb', line 60

def modversion(pkg)
  `#{@@cmd} --modversion #{pkg}`.chomp
end

.name(pkg) ⇒ Object



73
74
75
# File 'lib/orchid/pkg-config.rb', line 73

def name(pkg)
  @@list[pkg][0]
end

.provides(pkg) ⇒ Object



81
82
83
# File 'lib/orchid/pkg-config.rb', line 81

def provides(pkg)
  `#{@@cmd} --print-provides #{pkg}`.chomp
end

.requires(pkg) ⇒ Object



85
86
87
# File 'lib/orchid/pkg-config.rb', line 85

def requires(pkg)
  `#{@@cmd} --print-requires #{pkg}`.chomp.gsub("\n", ", ") 
end

.variable(pkg, var) ⇒ Object



56
57
58
# File 'lib/orchid/pkg-config.rb', line 56

def variable(pkg, var)
  `#{@@cmd} --variable=#{var} #{pkg}`.chomp
end

.versionObject



64
65
66
# File 'lib/orchid/pkg-config.rb', line 64

def version
  `#{@@cmd} --version`.chomp
end