module Orocos::Rake

Constants

USE_MQUEUE
USE_ROS

Public Class Methods

generate_and_build(src, work_basedir, options = Hash.new) click to toggle source

Generates, builds and installs the orogen component defined by the orogen description file src. The compiled package is installed in prefix

# File lib/orocos/rake.rb, line 26
def self.generate_and_build(src, work_basedir, options = Hash.new)
    require 'orogen/gen'
    options = Kernel.validate_options options,
        keep_wc: false,
        transports: false,
        make_options: []
    keep_wc, transports, make_options =
        *options.values_at(:keep_wc, :transports, :make_options)

    if !transports
        transports = %w{corba typelib mqueue}
        if USE_ROS
            transports << 'ros'
        end
    end

    src_dir  = File.dirname(src)
    src_name = File.basename(src_dir)

    FileUtils.mkdir_p work_basedir
    work_dir = File.join(work_basedir, src_name)
    if !keep_wc
        FileUtils.rm_rf work_dir
    end
    FileUtils.cp_r  src_dir, work_dir, preserve: true, remove_destination: true

    redirect_options = Hash.new
    if make_jobserver = make_options.find { |opt| opt =~ /^--jobserver-fds=\d+,\d+$/ }
        make_jobserver =~ /^--jobserver-fds=(\d+),(\d+)$/
        fd0, fd1 = [$1, $2]
        redirect_options[Integer(fd0)] = Integer(fd0)
        redirect_options[Integer(fd1)] = Integer(fd1)
    end

    prefix     = File.join(work_basedir, "prefix")
    ruby_bin   = RbConfig::CONFIG['RUBY_INSTALL_NAME']
    orogen_bin = File.expand_path('../bin/orogen', Orocos::Generation.base_dir)

    build_dir = File.join(work_dir, 'build')
    if !system(ruby_bin, orogen_bin, '--corba', '--no-rtt-scripting', '--import=std', "--transports=#{transports.join(",")}", File.basename(src), chdir: work_dir)
        raise "failed to build #{src} in #{work_basedir}"
    end

    if !File.directory? build_dir
        FileUtils.mkdir build_dir
    end

    if !system 'cmake', "-DCMAKE_INSTALL_PREFIX=#{prefix}", "-DCMAKE_BUILD_TYPE=Debug", "..", chdir: build_dir
        raise "failed to configure"
    elsif !system "make", "install", *make_options, redirect_options.merge(chdir: build_dir)
        raise "failed to install"
    end
    ENV['PKG_CONFIG_PATH'] += ":#{prefix}/lib/pkgconfig"
end