import os
from Params import pprint
import Params
import Common

def build(bld):
    obj = bld.create_obj('cc', 'plugin')
    obj.target = 'xmmsclient_ext'
    obj.includes = '../../../include ../../../includepriv'
    obj.source = "rb_xmmsclient_main.c rb_xmmsclient.c rb_playlist.c rb_collection.c rb_result.c".split()
    obj.uselib_local = 'xmmsclient'
    obj.uselib = 'ruby'
    obj.install_in = "ARCHDIR_ruby"
    obj.env["plugin_PREFIX"] = ''

    Common.install_files('LIBDIR_ruby', '.', 'xmmsclient.rb')
    Common.install_files('LIBDIR_ruby', 'xmmsclient', 'sync.rb')
    Common.install_files('LIBDIR_ruby', 'xmmsclient', 'async.rb')

    # glib
    obj = bld.create_obj('cc', 'plugin')
    obj.target = 'xmmsclient_glib'
    obj.includes = '../../../include ../../../includepriv'
    obj.source = ['rb_xmmsclient_glib.c']
    obj.uselib_local = 'xmmsclient-glib xmmsclient'
    obj.uselib = 'ruby glib2'
    obj.install_in = "ARCHDIR_ruby"
    obj.env["plugin_PREFIX"] = ''

    # ecore
    if 'src/clients/lib/xmmsclient-ecore' in bld.env_of_name('default')['XMMS_OPTIONAL_BUILD']:
        obj = bld.create_obj('cc', 'plugin')
        obj.target = 'xmmsclient_ecore'
        obj.includes = '../../../include ../../../includepriv'
        obj.source = ['rb_xmmsclient_ecore.c']
        obj.uselib_local = 'xmmsclient-ecore xmmsclient'
        obj.uselib = 'ruby ecore'
        obj.install_in = "ARCHDIR_ruby"
        obj.env["plugin_PREFIX"] = ''

def configure(conf):
    if Params.g_options.rubybinary:
        ruby = Params.g_options.rubybinary
    else:
        ruby = conf.find_program('ruby', var='RUBY')

    if not ruby:
        return False

    version = os.popen(ruby + " -e 'puts defined?(VERSION) ? VERSION : RUBY_VERSION'").read().strip()
    if not version or [int(a) for a in version.split(".")] < [1, 8]:
        conf.check_message('ruby version', '> 1.8', False, version)
        return False
    conf.check_message('ruby version', '> 1.8', True, version)

    ruby_h = os.popen(ruby + " -rrbconfig -e 'puts File.exist?(Config::CONFIG[\"archdir\"] + \"/ruby.h\")'").read().strip()
    if ruby_h != 'true':
        conf.check_message('ruby', 'header file', False)
        return False
    conf.check_message('ruby', 'header file', True)

    dir = os.popen(ruby + " -rrbconfig -e 'puts \"%s\" % [].fill(Config::CONFIG[\"archdir\"], 0..1)'").read().strip()
    conf.env["CCFLAGS_ruby"] = '-I%s' % dir
    conf.env["LINKFLAGS_ruby"] = '-L%s' % dir

    if not Params.g_options.rubyarchdir:
        conf.env["ARCHDIR_ruby"] = os.popen(ruby + " -rrbconfig -e 'print Config::CONFIG[\"sitearchdir\"]'").read().strip()
    else:
        conf.env["ARCHDIR_ruby"] = Params.g_options.rubyarchdir

    if not Params.g_options.rubylibdir:
        conf.env["LIBDIR_ruby"] = os.popen(ruby + " -rrbconfig -e 'print Config::CONFIG[\"sitelibdir\"]'").read().strip()
    else:
        conf.env["LIBDIR_ruby"] = Params.g_options.rubylibdir

    return True

def set_options(opt):
    opt.add_option('--with-ruby-archdir', type="string", dest="rubyarchdir")
    opt.add_option('--with-ruby-libdir', type="string", dest="rubylibdir")
    opt.add_option('--with-ruby-binary', type='string', dest='rubybinary')
