# vim: syntax=python
#
# needs waf created with
# python waf-light --tools=resx,satellite_assembly,wix
#
# Assumed situation:
# - Logic in C, which depends on an external device; some code is generated
# - Wrapper for C#
# - GUI in C# using C# Wrapper
# - GUI localization via satellite assemblies
# - Wrapper for Python
#
# Python libs required: bottle, cffi, pytest
#
# This project requires plenty of applications and libraries such as:
# gcc, mono-devel, pytest, cffi
# LD_LIBRARY_PATH=$PWD/../build/api/: PATH=$PATH:$LD_LIBRARY_PATH waf configure build test --stubs
#


from waflib import Utils
import sys, os, shutil

APPNAME = "funigui"
DLLNAME = "funi"
VERSION = "1.0"

COMPANY = "FuniCo"
MAXFUNI = 4

top = "."
out = "../build"

def options(ctx):
    ctx.add_option("--stubs", action="store_true", default=False, help="Compile with stubs instead of using external device")
    ctx.load('compiler_c compiler_cxx cs')

PYTEST = ''
def configure (ctx):
    global PYTEST
    try:
        PYTEST = ctx.find_program('py.test')[0]
    except:
        PYTEST = ctx.find_program('py.test',path_list=[r'C:\Python35\Scripts']) [0]

    if ctx.options.stubs:
        print('!USING STUBS!')
        ctx.env.append_value('DEFINES',['STUBS','DEBUG'])
    else:
        ctx.env.append_value('DEFINES',['NDEBUG'])

    ctx.load('compiler_c compiler_cxx cs resx satellite_assembly')
    if Utils.is_win32:
        ctx.load('wix')

    if ctx.env['CC_NAME'] == 'msvc':
        if ctx.options.stubs:
            ctx.env.append_value('CFLAGS',['/Z7','/EHsc','/W3'])
            ctx.env.append_value('CXXFLAGS',['/Z7','/EHsc','/W3'])
        else:
            ctx.env.append_value('CFLAGS',['/Ox','/EHsc','/DNDEBUG','/W3'])
            ctx.env.append_value('CXXFLAGS',['/Ox','/EHsc','/DNDEBUG','/W3'])
            print(ctx.env['CC_NAME'])
    else:
        if ctx.options.stubs:
            ctx.env.append_value('CFLAGS',['-g','-w'])
            ctx.env.append_value('CXXFLAGS',['-g','-w'])
        else:
            ctx.env.append_value('CFLAGS',['-O2','-w'])
            ctx.env.append_value('CXXFLAGS',['-O2','-w'])
    ctx.env.guiname = APPNAME
    ctx.env.version = VERSION
    ctx.env.dllname = DLLNAME
    ctx.env.maxfuni = MAXFUNI
    ctx.env.company = COMPANY
    ctx.load('print_commands')

def build(ctx):
    ctx.load('build', tooldir='.') # additional stuff
    ctx.recurse('api')
    ctx.recurse('gui')
    if Utils.is_win32:
        ctx.recurse('msi')

def test(ctx):
    if ctx.options.stubs:
        cwd = ctx.path.find_node('../build/api').abspath()
        print('running test in ',cwd)
        ctx.cmd_and_log(os.path.join(cwd,'test_funi'),cwd=cwd)
        ctx.cmd_and_log(PYTEST+' test_funi.py',cwd=cwd)

