import os
from distutils import sysconfig
from commands import getstatusoutput


def lib_dirs():
    try:
        status, output = getstatusoutput(
                    sysconfig.get_config_var('CC') + ' -print-search-dirs')
        for line in output.splitlines():
            if 'libraries: =' in line:
                libdirs = line.split('=', 1)[1]
                return libdirs.split(':')
        return []
    except Exception:
        return []

def boost_lib_name(name, add_suffixes=[]):
    for suffix in add_suffixes + ['', '-mt']:
        for libdir in lib_dirs():
            libname = 'lib%s%s.so' % (name, suffix)
            if os.path.isfile(os.path.join(libdir, libname)):
                return name + suffix
    return name


env = Environment(
#    CXX = 'clang++',
#    CCFLAGS = ['-O2', '-Wall', '-Wextra',
#               '-fvisibility=hidden', '-fvisibility-inlines-hidden'],
    CCFLAGS = ['-g', '-Wall', '-Wextra'],
    CPPDEFINES = [
#        'NDEBUG',
#        'ENABLE_DEBUG_FN',
#        'ENABLE_DEBUG_PRINT',
#        'ENABLE_DEBUG_STATS',
#        'ENABLE_BENCHMARK',
        'ENABLE_ALSA_SEQ',
        'ENABLE_JACK_MIDI',
    ],
    CPPPATH = ['.'],
    ENV = os.environ,
    LIBS = [
        boost_lib_name('boost_python'),
#        boost_lib_name('boost_python-py32'),
        boost_lib_name('boost_thread'),
    ],
)

status, output = getstatusoutput('git rev-parse --short HEAD')
if not status:
    env.Append(CPPDEFINES = [('VERSION', 'r%s' % output)])


env.Append(
    CPPPATH = [sysconfig.get_python_inc(plat_specific=1)],
    LIBPATH = [sysconfig.get_python_lib(plat_specific=1)],
#    CPPPATH = ['/usr/include/python3.2'],
)

sources = [
    'engine.cc',
    'patch.cc',
    'python_caller.cc',
    'send_midi.cc',
    'python_module.cc',
    'backend/base.cc',
]

#env.ParseConfig('pkg-config --cflags --libs glib-2.0')
env.Append(CCFLAGS = '-std=c++11')

if 'ENABLE_ALSA_SEQ' in env['CPPDEFINES']:
    env.ParseConfig('pkg-config --cflags --libs alsa')
    sources.append('backend/alsa.cc')

if 'ENABLE_JACK_MIDI' in env['CPPDEFINES']:
    env.ParseConfig('pkg-config --cflags --libs jack')
    sources.append(['backend/jack.cc',
                    'backend/jack_buffered.cc',
                    'backend/jack_realtime.cc'])

env.SharedLibrary('_mididings', sources, SHLIBPREFIX='', SHOBJSUFFIX='.o')
