Module: GRCommons::GRLib

Defined in:
lib/gr_commons/gr_lib.rb

Overview

This module helps GR, GR and GRM to search the shared library.

The order of priority:

  1. RubyInstaller ( for Windows only )

  2. Environment variable GRDIR

  3. pkg-config : github.com/ruby-gnome/pkg-config

The following packages (should) support pkg-config.

Class Method Summary collapse

Class Method Details

.get_grdir_from_env(lib_names) ⇒ Object

Return the directory path from the GRDIR environment variable.


32
33
34
35
36
37
# File 'lib/gr_commons/gr_lib.rb', line 32

def get_grdir_from_env(lib_names)
  return nil unless ENV['GRDIR']
  return ENV['GRDIR'] if Dir.exist?(ENV['GRDIR'])

  warn "#{lib_names} : Dir GRDIR=#{ENV['GRDIR']} not found." # return nil
end

.pkg_config_search(lib_name, pkg_name) ⇒ Object

Use pkg-config to search for shared libraries


97
98
99
100
101
# File 'lib/gr_commons/gr_lib.rb', line 97

def pkg_config_search(lib_name, pkg_name)
  PKGConfig.variable(pkg_name, 'sopath')
rescue PackageConfig::NotFoundError => e
  warn "#{e.message} Cannot find #{lib_name}. "
end

.recursive_search(name, base_dir) ⇒ Object

Recursive file search in directories

Parameters:

  • name (String)

    File to search for

  • base_dir (String)

    Directory to search


87
88
89
90
91
92
93
94
# File 'lib/gr_commons/gr_lib.rb', line 87

def recursive_search(name, base_dir)
  Dir.chdir(base_dir) do
    paths = Dir["**/#{name}"].sort
    warn "More than one file found: #{paths}" if paths.size > 1
    path = paths.first
    File.expand_path(path) if path
  end
end

.ruby_installer?Boolean

Check if using RubyInstaller or not.

Returns:

  • (Boolean)

27
28
29
# File 'lib/gr_commons/gr_lib.rb', line 27

def ruby_installer?
  Object.const_defined?(:RubyInstaller)
end

.search(lib_names, pkg_name) ⇒ Object

Note:

This method does not detect the Operating System.

Search the shared library.

Parameters:

  • lib_names (Array)

    The actual file name of the shared library.

  • pkg_name (String)

    The package name to be used when searching with pkg-configg


44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/gr_commons/gr_lib.rb', line 44

def search(lib_names, pkg_name)
  # FIXME: There may be a better way to do it...
  def lib_names.map_find(&block)
    lazy.map(&block).find { |path| path }
  end

  # ENV['GRDIR']
  # Verify that the directory exists.
  grdir = get_grdir_from_env(lib_names)

  # Windows + RubyInstaller
  if ruby_installer?
    grdir ||= File.join(RubyInstaller::Runtime.msys2_installation.msys_path,
                        RubyInstaller::Runtime.msys2_installation.mingwarch)
  end

  # Search grdir
  if grdir
    lib_path = lib_names.map_find do |lib_name|
      recursive_search(lib_name, grdir)
    end
  end

  # Search with pkg-config
  lib_path ||= lib_names.map_find do |lib_name|
    pkg_config_search(lib_name, pkg_name)
  end

  # Windows + RubyInstaller
  if ruby_installer?
    RubyInstaller::Runtime.add_dll_directory(File.dirname(lib_path))
    # FIXME: Where should I write this code?
    ENV['GKS_FONTPATH'] ||= grdir
  end

  lib_path
end