Class Mkrf::Generator
In: lib/mkrf/generator.rb
Parent: Object

Generator is concerned with taking configuration for an extension and writing a Rakefile to the local filesystem which will later be used to build the extension.

You will typically only create one Generator per extconf.rb file, which in turn will generate a Rakefile for building one extension module.

Usage

In the most basic usage, Generator simply takes the name of the library to compile:

  require 'mkrf'
  Mkrf::Generator.new('libtrivial')

Configuration of the build can be passed to the Generator constructor as a block:

  Mkrf::Generator.new('libxml') do |g|
    g.include_library('socket','socket')
    g.include_header('libxml/xmlversion.h',
                     '/opt/include/libxml2',
                     '/usr/local/include/libxml2',
                     '/usr/include/libxml2')
  end

It is also possible to specify the library paths in include_library

  Mkrf::Generator.new('libxml') do |g|
    g.include_library('socket','socket', '/usr/local/lib/libxml')
  end

Methods

Included Modules

Rake

Constants

CONFIG = Config::CONFIG

Attributes

additional_code  [RW]  Any extra code, given as a string, to be appended to the Rakefile.
cflags  [RW]  You may append to these attributes directly in your Generator.new block, for example: g.objects << ’ ../common/foo.o ../common/bar.so -lmystuff‘ or g.cflags << ’ -ansi -Wall‘

Note the extra space at the beginning of those strings.

ldshared  [RW]  Any additional options you‘d like appended to your system-specific linker command (which is used to build the shared library).
objects  [RW]  objects is for adding additional object files to the link-edit command — outside of the ones that correspond to the source files.

Public Class methods

Create a Generator object which writes a Rakefile to the current directory of the local filesystem.

Params:

  • extension_name — the name of the extension
  • source_patterns — an array of patterns describing source files to be compiled. ["*.c"] is the default.

Public Instance methods

Logs a fatal error and exits with a non-zero code (defaults to 1)

Add a define to the compile string. Example:

  Mkrf::Generator.new('my_library') do |g|
    g.add_define('HAVE_PTHREADS')
  end

Params:

  • defn — string to add to compile time defines

Returns true if the function is able to be called based on libraries and headers currently loaded. Returns false otherwise.

Params:

  • function — the function to check for

Include a header in the compile. Returns false if the header is not available, returns non-false otherwise. As a side effect, a compile time define occurs as HAVE_ appended with the name of the header in upper and scored case. Parameters are the same as Mkrf::Availability#include_header

Include a library in the compile. Returns false if the library is not available. Returns non-false otherwise. Parameters are the same as Mkrf::Availability#include_library

Returns mkrf‘s logger instance. You can use this to set logging levels.

  Mkrf::Generator.new('libsomethin') do |g|
    g.logger.level = Logger::WARN
  end

An array of the source patterns as single quoted strings

[Validate]