Module: BitGirder::Ops::Ruby::RubyIncludes

Extended by:
Core::BitGirderMethods, Io
Defined in:
lib/bitgirder/ops/ruby.rb

Constant Summary

Constants included from Core::BitGirderMethods

Core::BitGirderMethods::PARAM_TYPE_ARG, Core::BitGirderMethods::PARAM_TYPE_ENVVAR, Core::BitGirderMethods::PARAM_TYPE_KEY

Constants included from Io

Io::ORDER_BIG_ENDIAN, Io::ORDER_LITTLE_ENDIAN

Constants included from Core

Core::ENV_BITGIRDER_DEBUG, Core::EXIT_FAILURE, Core::EXIT_SUCCESS

Class Method Summary collapse

Methods included from Core::BitGirderMethods

argv_to_argh, check_fail_prefix, class_name_to_sym, code, compares_to, console, ext_to_class_name, ext_to_sym, has_env, has_key, has_keys, nonnegative, not_nil, positive, raisef, set_from_key, set_var, split_argv, sym_to_cli_switch, sym_to_ext_id, to_bool, unpack_argv_array, unpack_argv_hash, warn

Methods included from Io

as_encoded, as_json, as_read_src, as_write_dest, can_connect?, debug_kill, debug_wait2, digest_file, dump_json, dump_yaml, enc_utf8, ensure_dir, ensure_dirs, ensure_parent, ensure_wiped, file_exists, first_line, fsize, fu, int_to_byte_array, is_executable, load_json, load_yaml, mktmpdir, open_tempfile, parse_json, read_full, slurp, slurp_io, strict_decode64, strict_encode64, which, write_file

Class Method Details

.as_include_argv(incl_dirs) ⇒ Object



83
84
85
# File 'lib/bitgirder/ops/ruby.rb', line 83

def self.as_include_argv( incl_dirs )
    incl_dirs.map { |dir| [ "-I", dir ] }.flatten
end

.clean_include_dir_names(dirs) ⇒ Object

clean up adjacent slashes and other things that can be unsightly and in some cases cause more serious problems



22
23
24
25
26
# File 'lib/bitgirder/ops/ruby.rb', line 22

def self.clean_include_dir_names( dirs )
    
    dirs.map { |dir| dir.gsub( %r{/+}, "/" ) }.
         map { |dir| dir.sub( %r{/$}, "" ) }
end

.expect_single_dir(dir, pat) ⇒ Object



45
46
47
48
49
# File 'lib/bitgirder/ops/ruby.rb', line 45

def self.expect_single_dir( dir, pat )

    self.get_single_dir( dir, pat ) or
        raise "Couldn't find entry in #{dir} matching #{pat}"
end

.get_arch_dir(dir) ⇒ Object



55
56
57
58
59
# File 'lib/bitgirder/ops/ruby.rb', line 55

def self.get_arch_dir( dir )

    self.get_single_dir( 
        dir, /^(?:i\d86|x86_64).*(?:darwin|linux|solaris)/ )
end

.get_ruby_include_dirs(opts) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/bitgirder/ops/ruby.rb', line 61

def self.get_ruby_include_dirs( opts )

    ruby_home = has_key( opts, :ruby_home )
    lib_dir = file_exists( "#{ruby_home}/lib/ruby" )

    ver = opts[ :version ] || self.infer_version_str( lib_dir )

    res = [ "", "site_ruby", "vendor_ruby" ].inject( [] ) do |res, dir|
        
        dir = file_exists( "#{lib_dir}/#{dir}/#{ver}" )
        res << dir

        if arch_dir = self.get_arch_dir( dir )
            res << "#{dir}/#{arch_dir}"
        end

        res
    end

    self.clean_include_dir_names( res )
end

.get_single_dir(dir, pat) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/bitgirder/ops/ruby.rb', line 28

def self.get_single_dir( dir, pat )

    res = 
        Dir.chdir( dir ) do |dir|
            Dir.glob( "*" ).
                select { |f| File.directory?( f ) }.
                grep( pat )
        end
 
    case res.size

        when 0 then nil
        when 1 then res[ 0 ]
        else raise "Multiple directories in #{dir} match #{pat}"
    end
end

.infer_version_str(lib_dir) ⇒ Object



51
52
53
# File 'lib/bitgirder/ops/ruby.rb', line 51

def self.infer_version_str( lib_dir )
    self.expect_single_dir( lib_dir, /^\d+(?:\.\d+)*$/ )
end