#!/usr/bin/env python


def build(bld):
    core_source = '''
            ArcImpl.cpp
            BlockFactory.cpp
            BlockImpl.cpp
            Broadcaster.cpp
            Buffer.cpp
            BufferFactory.cpp
            CompiledGraph.cpp
            ClientUpdate.cpp
            ControlBindings.cpp
            DuplexPort.cpp
            Engine.cpp
            EventWriter.cpp
            GraphImpl.cpp
            InputPort.cpp
            InternalBlock.cpp
            InternalPlugin.cpp
            LV2Block.cpp
            LV2Plugin.cpp
            NodeImpl.cpp
            PortImpl.cpp
            PostProcessor.cpp
            PreProcessor.cpp
            RunContext.cpp
            SocketListener.cpp
            Task.cpp
            UndoStack.cpp
            Worker.cpp
            events/Connect.cpp
            events/Copy.cpp
            events/CreateBlock.cpp
            events/CreateGraph.cpp
            events/CreatePort.cpp
            events/Delete.cpp
            events/Delta.cpp
            events/Disconnect.cpp
            events/DisconnectAll.cpp
            events/Get.cpp
            events/Mark.cpp
            events/Move.cpp
            events/SetPortValue.cpp
            events/Undo.cpp
            ingen_engine.cpp
            internals/BlockDelay.cpp
            internals/Controller.cpp
            internals/Note.cpp
            internals/Time.cpp
            internals/Trigger.cpp
            mix.cpp
    '''

    core_libs = 'LV2 LILV RAUL SERD SORD SRATOM'

    bld(features        = 'cxx cxxshlib',
        source          = core_source,
        export_includes = ['../../include'],
        includes        = ['.', '../../include'],
        name            = 'libingen_server',
        target          = 'ingen_server',
        install_path    = '${LIBDIR}',
        use             = 'libingen libingen_socket',
        uselib          = core_libs,
        cxxflags        = bld.env.PTHREAD_CFLAGS + bld.env.INGEN_TEST_CXXFLAGS,
        linkflags       = bld.env.PTHREAD_LINKFLAGS + bld.env.INGEN_TEST_LINKFLAGS)

    if bld.env.HAVE_JACK:
        bld(features        = 'cxx cxxshlib',
            source          = 'JackDriver.cpp ingen_jack.cpp',
            includes        = ['.', '../../include'],
            name            = 'libingen_jack',
            target          = 'ingen_jack',
            install_path    = '${LIBDIR}',
            use             = 'libingen_server',
            uselib          = core_libs + ' JACK',
            cxxflags        = ['-fvisibility=hidden'] + bld.env.PTHREAD_CFLAGS,
            linkflags       = bld.env.PTHREAD_LINKFLAGS)

    if bld.env.HAVE_PORTAUDIO:
        bld(features        = 'cxx cxxshlib',
            source          = 'PortAudioDriver.cpp ingen_portaudio.cpp',
            includes        = ['.', '../../include'],
            name            = 'libingen_portaudio',
            target          = 'ingen_portaudio',
            install_path    = '${LIBDIR}',
            use             = 'libingen_server',
            uselib          = core_libs + ' PORTAUDIO',
            cxxflags        = ['-fvisibility=hidden'] + bld.env.PTHREAD_CFLAGS,
            linkflags       = bld.env.PTHREAD_LINKFLAGS)

    # Ingen LV2 wrapper
    if bld.env.INGEN_BUILD_LV2:
        bld(features     = 'cxx cxxshlib',
            source       = ' ingen_lv2.cpp ',
            cflags       = ['-fvisibility=hidden'],
            includes     = ['../../include'],
            name         = 'libingen_lv2',
            target       = 'ingen_lv2',
            install_path = '${LV2DIR}/ingen.lv2/',
            use          = 'libingen libingen_server',
            uselib       = core_libs,
            cxxflags     = ['-fvisibility=hidden'] + bld.env.PTHREAD_CFLAGS,
            linkflags    = bld.env.PTHREAD_LINKFLAGS)