#!/usr/bin/env python
from waflib.extras import autowaf as autowaf
from waflib import Options
import os

# Mandatory variables
top = '.'
out = 'build'

# Version of this package (even if built as a child)
MAJOR = '0'
MINOR = '0'
MICRO = '0'
TEMPORAL_VERSION = "%s.%s.%s" % (MAJOR, MINOR, MICRO)

# Library version (UNIX style major, minor, micro)
# major increment <=> incompatible changes
# minor increment <=> compatible changes (additions)
# micro increment <=> no interface changes
TEMPORAL_LIB_VERSION = '0.0.0'

# Variables for 'waf dist'
APPNAME = 'temporal'
VERSION = TEMPORAL_VERSION
I18N_PACKAGE = 'libtemporal'

temporal_sources = [
    'debug.cc',
    'bbt_time.cc',
    'beats.cc',
    'enums.cc',
    'range.cc',
    'superclock.cc',
    'tempo.cc',
    'time.cc',
    'timeline.cc',
]

def options(opt):
    autowaf.set_options(opt)

def configure(conf):
    pass

def build(bld):
    # Library
    if bld.is_defined ('INTERNAL_SHARED_LIBS'):
        obj = bld.shlib(features = 'cxx cxxshlib', source=temporal_sources)
        obj.defines      = [ 'LIBTEMPORAL_DLL_EXPORTS=1' ]
    else:
        obj = bld.stlib(features = 'cxx cxxstlib', source=temporal_sources)
        obj.cxxflags = [ bld.env['compiler_flags_dict']['pic'] ]
        obj.cflags   = [ bld.env['compiler_flags_dict']['pic'] ]
        obj.defines  = [ ]

    obj.export_includes = ['.']
    obj.includes     = ['.']
    obj.name         = 'libtemporal'
    obj.target       = 'temporal'
    obj.vnum         = TEMPORAL_LIB_VERSION
    obj.install_path = bld.env['LIBDIR']
    obj.defines     += [ 'PACKAGE="' + I18N_PACKAGE + '"' ]
    obj.uselib       = [ 'GLIBMM', 'XML', 'OSX' ]
    obj.use          = [ 'libpbd' ]

    if  bld.env['BUILD_TESTS'] and bld.is_defined('HAVE_CPPUNIT'):
        # Static library (for unit test code coverage)
        obj = bld(features = 'cxx cstlib')
        obj.source         = temporal_sources
        obj.export_includes = ['.']
        obj.includes       = ['.']
        obj.name           = 'libtemporal_static'
        obj.target         = 'temporal_static'
        obj.uselib         = 'GLIBMM GTHREAD XML LIBPBD'
        obj.use            = 'libpbd'
        obj.vnum           = TEMPORAL_LIB_VERSION
        obj.install_path   = ''
        if bld.env['TEST_COVERAGE']:
             obj.linkflags      = ['--coverage']
             obj.cflags         = ['--coverage']
             obj.cxxflags       = ['--coverage']
        obj.defines        = ['PACKAGE="libtemporal"']

        # Unit tests
        obj              = bld(features = 'cxx cxxprogram')
        obj.source       = [
                'test/BeatTest.cc',
                'test/BBTTest.cc',
                'test/TempoMapTest.cc',
                'test/TimelineTest.cc',
                'test/RangeTest.cc',
                'test/testrunner.cc',
                ]
        obj.includes     = ['.']
        obj.use          = 'libtemporal_static'
        obj.uselib       = 'GLIBMM GTHREAD XML LIBPBD CPPUNIT'
        obj.target       = 'run-tests'
        obj.name         = 'libtemporal-tests'
        obj.install_path = ''
        obj.defines      = ['PACKAGE="libtemporaltest"']
        if bld.env['TEST_COVERAGE']:
            obj.linkflags      = ['--coverage']
            obj.cflags         = ['--coverage']
            obj.cxxflags       = ['--coverage']
        if bld.is_defined('NEED_INTL'):
            obj.linkflags = ' -lintl'

def test(ctx):
    autowaf.pre_test(ctx, APPNAME)
    print(os.getcwd())
    os.environ['EVORAL_TEST_PATH'] = os.path.abspath('../test/testdata/')
    autowaf.run_tests(ctx, APPNAME, ['./run-tests'])
    autowaf.post_test(ctx, APPNAME)

def shutdown():
    autowaf.shutdown()
