Class: Mkrf::Generator

### Home Classes Methods

### In Files

- lib/mkrf/generator.rb

### Parent

Object

### Methods

- ::new
- #abort!
- #add_define
- #has_function?
- #include_header
- #include_library
- #logger
- #sources

### Included Modules

- Rake

### Files

- CHANGELOG
- MIT-LICENSE
- README

### Class/Module Index

Quicksearch

- Mkrf
- Mkrf::Availability
- Mkrf::Generator
- Object

No matching classes.

# Mkrf::Generator

`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

### Constants

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

new(extension_name, source_patterns = ["*.c"], availability_options = {}) click to toggle source

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.

    # File lib/mkrf/generator.rb, line 73
    def initialize(extension_name, source_patterns = ["*.c"], availability_options = {})
      @sources = source_patterns
      @extension_name = extension_name + ".#{CONFIG['DLEXT']}"
      @available = Mkrf::Availability.new(availability_options)
      @defines = []
      if @sources[0] =~ /cpp/
        @cc = 'g++' # should be in CONFIG['C++'] but is not.
        @source_extension = 'cpp'
      else
        @cc = CONFIG['CC']
        @source_extension = 'c'
      end

      @objects  = ''
      @ldshared = ''
      @cflags   = "#{CONFIG['CCDLFLAGS']} #{CONFIG['CFLAGS']} #{CONFIG['ARCH_FLAG']}"

      yield self if block_given?
      write_rakefile
    end

### Public Instance Methods

abort!(str, code = 1) click to toggle source

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

    # File lib/mkrf/generator.rb, line 147
    def abort!(str, code = 1)
      logger.fatal str
      exit code
    end

add_define(defn) click to toggle source

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

    # File lib/mkrf/generator.rb, line 107
    def add_define(defn)
      @available.defines << defn
    end

has_function?(function) click to toggle source

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

    # File lib/mkrf/generator.rb, line 132
    def has_function?(function)
      @available.has_function? function
    end

include_header(*args) click to toggle source

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

    # File lib/mkrf/generator.rb, line 123
    def include_header(*args)
      @available.include_header(*args)
    end

include_library(*args) click to toggle source

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

    # File lib/mkrf/generator.rb, line 114
    def include_library(*args)
      @available.include_library(*args)
    end

logger() click to toggle source

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

    # File lib/mkrf/generator.rb, line 142
    def logger
      @available.logger
    end

sources() click to toggle source

An array of the source patterns as single quoted strings

    # File lib/mkrf/generator.rb, line 95
    def sources
      @sources.collect {|s| "'#{s}'"}
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.