import os
import Params
import Common

def build(bld):
    obj = bld.create_obj("cc", "plugin")
    obj.target = 'XMMSClient'
    obj.includes = '. ../../../include ../../../includepriv ' + bld.env_of_name('default')["PERL_CORE_INC"]
    obj.source = """
                 perl_xmmsclient.c
                 XMMSClient.xs
                 XMMSClientPlaylist.xs
                 XMMSClientCollection.xs
                 XMMSClientResult.xs
                 XMMSClientResultPropDict.xs
                 XMMSClientResultPropDictTie.xs
                 """.split()
    obj.uselib_local = 'xmmsclient'
    obj.uselib = 'perl'
    obj.install_in = "INST_AUTODIR_perl"

    obj.env["plugin_PREFIX"] = ''

    Common.install_files('INST_LIBDIR_perl', '', 'pm/XMMSClient.pm')
    Common.install_files('INST_LIBDIR_perl', 'XMMSClient', 'pm/XMMSClient/Sync.pm')
    Common.install_files('INST_LIBDIR_perl', 'XMMSClient', 'pm/XMMSClient/Glib.pm')
    Common.install_files('INST_LIBDIR_perl', 'XMMSClient', 'pm/XMMSClient/Collection.pm')

def configure(conf):
    if Params.g_options.perlbinary:
        perl = Params.g_options.perlbinary
        conf.env["PERL"] = perl
    else:
        perl = conf.find_program("perl", var="PERL")

    if not perl:
        return False

    version = os.popen(perl + " -e'printf \"%vd\", $^V'").read()
    if not version or [int(a) for a in version.split(".")] < [5, 7, 3]:
        conf.check_message("perl version", "> 5.7.3", False, version)
        return False
    conf.check_message("perl version", "> 5.7.3", True, version)

    conf.env["LDFLAGS_perl"] = os.popen(perl + " -MConfig -e'print $Config{ldflags}'").read()
    conf.env["XSUBPP"] = os.popen(perl + " -MConfig -e'print \"$Config{privlib}/ExtUtils/xsubpp$Config{exe_ext}\"'").read()
    conf.env["EXTUTILS_TYPEMAP"] = os.popen(perl + " -MConfig -e'print \"$Config{privlib}/ExtUtils/typemap\"'").read()
    conf.env["PERL_CORE_INC"] = os.popen(perl + " -MConfig -e'print \"$Config{archlib}/CORE\"'").read()
    conf.env["CCFLAGS_perl"] = os.popen(perl + " -MConfig -e'print $Config{ccflags}'").read()
    conf.env["CCFLAGS_perl"] += ' -DVERSION="0.03"'

    if not Params.g_options.perlarchdir:
        conf.env["ARCHDIR_perl"] = os.popen(perl + " -MConfig -e'print $Config{sitearch}'").read()
    else:
        conf.env["ARCHDIR_perl"] = Params.g_options.perlarchdir

    conf.env["INST_AUTODIR_perl"] = conf.env["ARCHDIR_perl"] + '/auto/Audio/XMMSClient'
    conf.env["INST_LIBDIR_perl"] = conf.env["ARCHDIR_perl"] + '/Audio'

    if not conf.check_tool('xsubpp', tooldir=os.path.abspath('waftools')):
        return False

    dir = os.path.join(conf.m_blddir, 'default', 'src', 'clients', 'lib', 'perl')
    try:
        os.makedirs(dir)
    except:
        pass
    os.popen(perl + " -MDevel::PPPort -e'Devel::PPPort::WriteFile($ARGV[0])' " + os.path.join(dir, 'ppport.h')).read()

    return True

def set_options(opt):
    opt.add_option("--with-perl-binary", type="string", dest="perlbinary")
    opt.add_option("--with-perl-archdir", type="string", dest="perlarchdir")
