#!/usr/bin/env python
# encoding: utf-8

import os, re

def sub_file(src_fname, dst_fname, lst):

    f = open(src_fname, 'rU')
    txt = f.read()
    f.close()

    for (key, val) in lst:
        re_pat = re.compile(key, re.M)
        txt = re_pat.sub(val, txt)

    f = open(dst_fname, 'w')
    f.write(txt)
    f.close()

def append_sse_flags():
    cpu_model = None
    x86_flags = None
    try:
        for line in open("/proc/cpuinfo"):
            if cpu_model is None:
                if line.startswith("model name"):
                    cpu_model = line.split(":",1)[1].strip()
            elif x86_flags is None:
                if line.startswith("flags"):
                    x86_flags = line.split(":",1)[1].strip()
            else:
                break
    except IOError:
        pass
    if cpu_model is None or x86_flags is None:
        return False
    model = cpu_model.split()
    arch = os.uname()[4]

    if "sse2" in x86_flags:
        return True
    else:
        return False

def configure(conf):
    conf.env['SSE2'] = append_sse_flags()
    pa = '.so'
    sub_file('./src/LV2/gxamp.lv2/manifest.ttl.in', './src/LV2/gxamp.lv2/manifest.ttl', (('@LIB_EXT@', '%s' % pa), ))
    conf.sub_config('gxamp.lv2/StereoAmp');
    sub_file('./src/LV2/gxamp.lv2/StereoAmp/manifest_stereo.ttl.in', './src/LV2/gxamp.lv2/StereoAmp/manifest.ttl', (('@LIB_EXT@', '%s' % pa), ))
    conf.sub_config('gxts9.lv2');
    sub_file('./src/LV2/gxts9.lv2/manifest.ttl.in', './src/LV2/gxts9.lv2/manifest.ttl', (('@LIB_EXT@', '%s' % pa), ))
    conf.sub_config('gxbooster.lv2');
    sub_file('./src/LV2/gxbooster.lv2/manifest.ttl.in', './src/LV2/gxbooster.lv2/manifest.ttl', (('@LIB_EXT@', '%s' % pa), ))
    conf.sub_config('gxautowah.lv2');
    sub_file('./src/LV2/gxautowah.lv2/manifest.ttl.in', './src/LV2/gxautowah.lv2/manifest.ttl', (('@LIB_EXT@', '%s' % pa), ))
    
def build(bld):
    bld.add_subdirs('gxamp.lv2')
    bld.add_subdirs('gxamp.lv2/StereoAmp')
    bld.add_subdirs('gxts9.lv2')
    bld.add_subdirs('gxbooster.lv2')
    bld.add_subdirs('gxautowah.lv2')

    gxlv2style_files = [
        'gxamp.lv2/GUI/amp21.png',
        'gxamp.lv2/GUI/amp22.png',
        'gxamp.lv2/GUI/amp23.png',
        'gxamp.lv2/GUI/amp24.png',
        'gxamp.lv2/GUI/amp25.png',
        'gxamp.lv2/GUI/mastergain-label.png',
        'gxamp.lv2/GUI/pregain-label.png',
        'gxamp.lv2/GUI/drive-label.png',
        'gxamp.lv2/GUI/distortion-label.png',
        'gxamp.lv2/GUI/cabinet-label.png',
        'gxamp.lv2/GUI/presence-label.png',
        'gxamp.lv2/GUI/presence-label.png',
        'gxamp.lv2/GUI/bass-label.png',
        'gxamp.lv2/GUI/treble-label.png',
        'gxamp.lv2/GUI/mid-label.png',
        'gxamp.lv2/GUI/knob.png',
        'gxamp.lv2/GUI/knob-middle.png',
        'gxamp.lv2/GUI/knob-small.png',
        'gxamp.lv2/GUI/metalic1-knob.png',
        'gxamp.lv2/GUI/metalic1-knob-middle.png',
        'gxamp.lv2/GUI/metalic1-knob-small.png',
        'gxamp.lv2/GUI/black-knob.png',
        'gxamp.lv2/GUI/black-knob-middle.png',
        'gxamp.lv2/GUI/black-knob-small.png',
        'gxamp.lv2/GUI/booster.png',
        'gxamp.lv2/GUI/booster-knob.png',
        'gxamp.lv2/GUI/ts9.png',
        'gxamp.lv2/GUI/ts9-knob.png',
        'gxamp.lv2/GUI/autowah.png',
        'gxamp.lv2/GUI/wah.png',
        'gxamp.lv2/GUI/wah-pedal.png',
        ]

    bld.install_files(bld.env['GX_LV2_STYLE_DIR'], gxlv2style_files, chmod=0o644)
