module BitGirder::Ops::Ruby::RubyIncludes

Public Class Methods

as_include_argv( incl_dirs ) click to toggle source
# 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 ) click to toggle source

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

# 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 ) click to toggle source
# 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 ) click to toggle source
# 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 ) click to toggle source
# 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 ) click to toggle source
# 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 ) click to toggle source
# File lib/bitgirder/ops/ruby.rb, line 51
def self.infer_version_str( lib_dir )
    self.expect_single_dir( lib_dir, /^\d+(?:\.\d+)*$/ )
end