# -*- python -*-

import os
from distutils import sysconfig

def boost_lib_name(lib):
    for libdir in ('/usr/lib', '/usr/local/lib', '/usr/lib64', '/usr/local/lib64'):
        for suffix in ('', '-mt'):
            libname = 'lib%s%s.so' % (lib, suffix)
            if os.path.isfile(os.path.join(libdir, libname)):
                return lib + suffix
    return lib + '-mt'

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

# hack to remove compiler flags from the distutils default.
# -Wstrict-prototypes is not valid for C++
cv_opt = sysconfig.get_config_var('CFLAGS')
cflags = [ x for x in cv_opt.split() if x not in ['-g', '-O2', '-Wstrict-prototypes', '-DNDEBUG'] ]
env.Append(CCFLAGS = cflags)

# avoid some annoying warnings caused by recent boost versions and an overreacting gcc
env.Append(CCFLAGS = '-Wno-missing-field-initializers')

env.Append(
    CPPPATH = [sysconfig.get_python_inc(plat_specific=1)],
    LIBPATH = [sysconfig.get_python_lib(plat_specific=1)],
#    CPPPATH = ['/opt/boost1.43/include', '/opt/python3.2/include/python3.2m'],
#    LIBPATH = ['/opt/boost1.43/lib', '/opt/python3.2/lib'],
#    CPPPATH = ['/opt/boost1.46.1/include', '/usr/include/python3.1'],
#    LIBPATH = ['/opt/boost1.46.1/lib'],
)

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

env.ParseConfig('pkg-config --cflags --libs glib-2.0')

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'])

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

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