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:
-
RubyInstaller ( for Windows only )
-
Environment variable GRDIR
-
pkg-config : github.com/ruby-gnome/pkg-config
The following packages (should) support pkg-config.
-
Linux
-
Red Data Tools github.com/red-data-tools/packages.red-data-tools.org
-
libgr-dev
-
libgr3-dev
-
libgrm-dev
-
-
-
Mac
-
Homebrew github.com/Homebrew/homebrew-core
-
libgr
-
-
-
Windows
-
MinGW github.com/msys2/MINGW-packages
-
mingw-w64-gr
-
-
Class Method Summary collapse
-
.get_grdir_from_env(lib_names) ⇒ Object
Return the directory path from the GRDIR environment variable.
-
.pkg_config_search(lib_name, pkg_name) ⇒ Object
Use pkg-config to search for shared libraries.
-
.recursive_search(name, base_dir) ⇒ Object
Recursive file search in directories.
-
.ruby_installer? ⇒ Boolean
Check if using RubyInstaller or not.
-
.search(lib_names, pkg_name) ⇒ Object
Search the shared library.
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.} Cannot find #{lib_name}. " end |
.recursive_search(name, base_dir) ⇒ Object
Recursive file search in directories
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.(path) if path end end |
.ruby_installer? ⇒ Boolean
Check if using RubyInstaller or not.
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
This method does not detect the Operating System.
Search the shared library.
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 |