# vim: filetype=python expandtab sw=4 tabstop=4

Import("commonEnvironment", "commandOptions", "util" )
Import("configure")

commandOptions.Add('useFLTK',
    'Set to 1 to use FLTK for graphs and widget opcodes.',
    '1')
commandOptions.Add('noFLTKThreads',
    'Set to 1 to disable use of a separate thread for FLTK widgets.',
    '1')
commandOptions.Add('buildVirtual',
    "Build Virtual MIDI keyboard. Requires FLTK 1.1.7 or later headers and libs",
    '0')

commandOptions.Update(commonEnvironment)
Help(commandOptions.GenerateHelpText(commonEnvironment))

util.fixEnvForOLPC(commonEnvironment)

# widgets
if commonEnvironment['useFLTK'] != '0' and commonEnvironment['buildOLPC'] == '0':
    fltkfound = configure.CheckHeader("FL/Fl.H",
            language = "C++")
    if not fltkfound:
        util.fatal('You specified useFLTK but FLTK was not found')

    util.confDecision('building with FLTK graphs and widgets.')

    is117 = configure.CheckHeader("FL/Fl_Spinner.H", language = "C++")
    widgetsEnvironment = commonEnvironment.Clone()
    if util.platform == 'darwin':
        widgetsEnvironment['SHLIBSUFFIX'] = '.dylib'
        widgetsEnvironment.Prepend(CXXFLAGS = "-fno-rtti")

    if (commonEnvironment['buildvst4cs'] == '1'):
        widgetsEnvironment.Append(CCFLAGS = ['-DCS_VSTHOST'])
    if (commonEnvironment['noFLTKThreads'] == '1'):
        widgetsEnvironment.Append(CCFLAGS = ['-DNO_FLTK_THREADS'])
    if util.platform == 'linux':
        ## dont do this  widgetsEnvironment.Append(CCFLAGS = ['-DCS_VSTHOST'])
        widgetsEnvironment.ParseConfig('fltk-config --use-images --cflags --cxxflags --ldflags')
        widgetsEnvironment.Append(LIBS = ['stdc++', 'pthread', 'm'])
    elif util.platform == 'win32':
        if util.compilerGNU():
            widgetsEnvironment.Append(LIBS = ['stdc++', 'supc++'])
            widgetsEnvironment.Prepend(
                LINKFLAGS = ['-Wl'])#,'--enable-runtime-pseudo-reloc'])
            widgetsEnvironment.Append(LIBS = Split('fltk_images fltk_png fltk_z fltk_jpeg fltk'))
        else:
            widgetsEnvironment.Append(LIBS = Split('fltkimages fltkpng fltkz fltkjpeg fltk'))
    elif util.platform == 'darwin':
        widgetsEnvironment.Append(LIBS = ['fltk', 'stdc++', 'pthread', 'm'])
        widgetsEnvironment.Append(LINKFLAGS = Split('''
            -framework Carbon -framework CoreAudio -framework CoreMidi
            -framework ApplicationServices
        '''))
    util.makePlugin(widgetsEnvironment, 'widgets',
               ['FL_graph.cpp', 'winFLTK.c', 'widgets.cpp'])

    if commonEnvironment['buildVirtual'] != '0':
        if not is117:
            util.fatal('You specified buildVirtual but FLTK 1.17 was not found')

        util.confDecision("Building Virtual Keyboard plugin.")
        widgetsEnvironment.Append(CPPPATH = ['#/InOut', '#/InOut/virtual_keyboard'])
        util.makePlugin(widgetsEnvironment, 'virtual',
                   ['virtual_keyboard/FLTKKeyboard.cpp',
                    'virtual_keyboard/FLTKKeyboardWindow.cpp',
                    'virtual_keyboard/FLTKKeyboardWidget.cpp',
                    'virtual_keyboard/virtual_keyboard.cpp',
                    'virtual_keyboard/Bank.cpp',
                    'virtual_keyboard/KeyboardMapping.cpp',
                    'virtual_keyboard/Program.cpp',
                    'virtual_keyboard/SliderBank.cpp',
                    'virtual_keyboard/SliderData.cpp'])
else:
    util.confDecision('Not building FLTK widgets and graphs.')


