Sha256: 28e7eb5a9e5fd7500af35093d9a96b260c561d68aeca63148f48a37330416931

Contents?: true

Size: 2 KB

Versions: 1

Compression:

Stored size: 2 KB

Contents

#
# The Make tool routes to extension Makefile(s).
# At this point it's designed to support extconf.rb design.
#
# TODO: Perhaps make a true compiler class in the future.
# TODO: win32 cross-compile.

module Reap

  class Manager

    def extensions
      @extensions ||= metadata.extensions || 'ext/**/extconf.rb'
    end

    # Return list of extconf.rb scripts.

    def extension_scripts
      [extensions].flatten.collect do |ext|
        Dir.glob(ext)
      end.flatten
    end

    # Return list of directory locations of extconf.rb scripts.

    def extension_directories
      glob(extension_scripts).map do |ext|
        File.dirname(ext)
      end
    end

    # Check to see if this project has extensions that need to be compiled.

    def compiles?
      !extension_directories.empty?
    end

    # Compile extensions.

    def make
      make_extconf
      make_target
    end

    # Compile static.

    def make_static
      make_extconf
      make_target 'static'
    end

    # Remove enouhg compile products for a clean compile.

    def make_clean
      make_target 'clean'
    end

    # Remove all compile products.

    def make_distclean
      make_target 'distclean'
    end

    # Create Makefile(s).

    def make_extconf
      extensions.each do |file|
        directory = File.dirname(file)
        next if File.exist?(File.join(directory, 'Makefile'))
        cd(directory) do
          sh "ruby #{File.basename(file)}"
        end
      end  
    end

    private

    def make_target(target='')
      extension_directories.each do |directory|
        cd(directory) do
          sh "make #{target}"
        end
      end  
    end


    # Eric Hodel said NOT to copy the compiled libs.
    #
    #task :copy_files do
    #  cp "ext/**/*.#{dlext}", "lib/**/#{arch}/"
    #end
    #
    #def dlext
    #  Config::CONFIG['DLEXT']
    #end
    #
    #def arch
    #  Config::CONFIG['arch']
    #end

    # Cross-compile for Windows. (TODO)

    #def make_mingw
    #  abort "NOT YET IMPLEMENTED"
    #end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
reap-9.2.0 lib/reap/manager/make.rb