#! /usr/bin/env python
# encoding: utf-8
import os

def addStringDefine(name,value):
        return name+'="\\"' + value + '\\"" '


def build(bld):

        # --------------------------------------------------
        # decide what to build

        import Options
        opts = Options.options
        if opts.cebl == None:
                opts.cebl = False
        if opts.plugins == None:
                opts.plugins = False
        if opts.tests == None:
                opts.tests = False

        build_gui = False
        build_plugins = False
        build_tests = False

        if opts.cebl:
                build_gui = True

        if opts.plugins:
                build_plugins = True

        if opts.tests:
                build_tests = True

        if not (opts.cebl or opts.plugins or opts.tests):
                build_plugins = True
                build_gui = True

        # --------------------------------------------------

        cebl_build = {};

        # DEFINES
        VERSION='2.0.1'
        APPNAME="CEBL"
        temp = addStringDefine('PACKAGE_STRING', APPNAME + "-" + VERSION)
        temp += addStringDefine('PACKAGE', APPNAME)
        temp += addStringDefine('HOMEDIR', os.getenv("HOME"))
        cebl_build["defines"] = temp;

        # SOURCES                       
        cebl_build["source"] ='''
        TextUtils.cpp
        CEBLModel.cpp
        CompiledStrings.cpp
        model/Preferences.cpp
        model/EEGData.cpp
        model/EEGTrainingData.cpp
        model/DataIO.cpp 
        model/TimeoutThread.cpp
        model/ChannelsConfig.cpp
        model/DeviceConfig.cpp
        model/FileDataStreamConfig.cpp
        model/Mindset24.cpp
        model/DataSource.cpp
        model/EEGDataStream.cpp
        model/RandomDataStream.cpp
        model/MindsetStream.cpp
        model/FileDataStream.cpp
        model/DataProcess.cpp
        model/Session.cpp
        model/SessionManager.cpp
        model/FilterConfig.cpp
        model/FeaturesConfig.cpp
        model/DecisionConfig.cpp
        model/ClassifiersConfig.cpp
        model/Training.cpp
        model/RealTimeClassification.cpp
        model/FileUtils.cpp
        model/StringTable.cpp
        model/RController.cpp
        '''
        
        bld.get_env().append_value("cebl_build_source",cebl_build["source"])
        bld.get_env().append_value("cebl_build_defines",cebl_build["defines"])

        # --------------------------------------------------

        if build_plugins:
                bld.add_subdirs('plugins')
                
        if build_tests:
                bld.add_subdirs('tests')
                
        if build_gui:

                cebl = bld.new_task_gen()

                cebl.features = 'cxx cprogram'
                cebl.target = 'cebl'
                cebl.uselib = 'GTK GTKEXTRA BOOST LAPACK DL'
                cebl.env['CPPPATH'] = cebl.env['CPPPATH']  + ['../src']  + ['../src/cppR']
                cebl.install_path = './'
                cebl.defines = cebl_build["defines"]

                cebl.source = cebl_build["source"]
                

                # now add the gui source files 
                cebl.source += '''
                cebl_gui.cpp
                gui/WidgetUtils.cpp
                gui/InterfaceConfigurationWindow.cpp
                gui/CEBLGtkWidget.cpp
                gui/CEBLGtkWidgetDetachable.cpp
                gui/WidgetPanel.cpp
                gui/TabDevice.cpp
                gui/TabMonitor.cpp
                gui/TabFilter.cpp
                gui/TabFeatures.cpp
                gui/TabClassifiers.cpp
                gui/TabTraining.cpp
                gui/TabDecision.cpp
                gui/TabRealTimeClassification.cpp
                gui/EEGPlot.cpp
                gui/EEGMonitor.cpp
                gui/DataSourceCombo.cpp
                gui/InterfaceCombo.cpp
                gui/CEBLViewGTK.cpp
                gui/ToolbarMenu.cpp
                gui/Tab.cpp
                gui/InfoBar.cpp
                gui/StatusBar.cpp
                gui/TabEEGRecording.cpp
                gui/interfaces/PieMenu.cpp
                gui/interfaces/EEGInterface.cpp
                gui/interfaces/PieInterface.cpp
                gui/interfaces/KeyboardPie.cpp
                gui/interfaces/RobotPie.cpp
                gui/interfaces/CursorPie.cpp
                gui/X11Controller.cpp
                '''

def configure(conf):
        return

def set_options(opt):
        opt.add_option('--plugins', const=True, action="store_const", help='Build only plugins.', dest='plugins')
        opt.add_option('--tests', const=True, action="store_const", help='Build tests.', dest='tests')
        opt.add_option('--cebl', const=True, action="store_const", help='Build only cebl.', dest='cebl')
