misc/monkeypatches.rb
changeset 0 92d00ff32c56
child 1 09d0d209d06d
equal deleted inserted replaced
-1:000000000000 0:92d00ff32c56
       
     1 ### Monkeypatch to work around the broken Rakefile generated by Mkrf <= 0.2.3
       
     2 
       
     3 # This fixes:
       
     4 # * Some weird unnecessary string interpolation
       
     5 # * The :install task doesn't work unless you have RUBYARCHDIR in your environment, instead of
       
     6 #   falling back to CONFIG['sitearchdir'].
       
     7 # * The :install task created the target install directory every time instead of just
       
     8 #   declaring a dependency on a directory task
       
     9 
       
    10 require 'mkrf/generator'
       
    11 
       
    12 class Mkrf::Generator
       
    13 
       
    14     def rakefile_contents # :nodoc:
       
    15       objext = CONFIG['OBJEXT']
       
    16 
       
    17       <<-END_RAKEFILE
       
    18 # Generated by mkrf
       
    19 require 'rake/clean'
       
    20 require 'rbconfig'
       
    21 
       
    22 include Config
       
    23 
       
    24 SRC = FileList[#{sources.join(',')}]
       
    25 OBJ = SRC.ext('#{objext}')
       
    26 CC = '#{@cc}'
       
    27 
       
    28 ADDITIONAL_OBJECTS = '#{objects}'
       
    29 
       
    30 LDSHARED = "#{@available.ldshared_string} #{ldshared}"
       
    31 
       
    32 LIBPATH =  "#{library_path(CONFIG['libdir'])} #{@available.library_paths_compile_string}"
       
    33 
       
    34 INCLUDES = "#{@available.includes_compile_string}"
       
    35 
       
    36 LIBS = "#{@available.library_compile_string}"
       
    37 
       
    38 CFLAGS = "#{cflags} #{defines_compile_string}"
       
    39 
       
    40 RUBYARCHDIR = ENV["RUBYARCHDIR"] || CONFIG['sitearchdir']
       
    41 LIBRUBYARG_SHARED = "#{CONFIG['LIBRUBYARG_SHARED']}"
       
    42 EXT = '#{@extension_name}'
       
    43 
       
    44 CLEAN.include( EXT, '*.#{objext}' )
       
    45 CLOBBER.include( 'mkrf.log' )
       
    46 
       
    47 task :default => EXT
       
    48 
       
    49 rule '.#{objext}' => '.#{@source_extension}' do |t|
       
    50   sh "\#{CC} \#{CFLAGS} \#{INCLUDES} -c \#{t.source}"
       
    51 end
       
    52 
       
    53 desc "Build this extension"
       
    54 file EXT => OBJ do
       
    55   sh "\#{LDSHARED} \#{LIBPATH} #{@available.ld_outfile(@extension_name)} \#{OBJ} \#{ADDITIONAL_OBJECTS} \#{LIBS} \#{LIBRUBYARG_SHARED}"
       
    56 end
       
    57 
       
    58 
       
    59 directory RUBYARCHDIR
       
    60 
       
    61 desc "Install this extension"
       
    62 task :install => [EXT, RUBYARCHDIR] do
       
    63   install EXT, RUBYARCHDIR, :verbose => true
       
    64 end
       
    65 
       
    66 #{additional_code}
       
    67       END_RAKEFILE
       
    68     end
       
    69 
       
    70 end
       
    71