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

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
    '''

    obj = bld(features        = 'cxx cxxshlib',
              source          = core_source,
              export_includes = ['../..'],
              includes        = ['.', '../..'],
              name            = 'libingen_server',
              target          = 'ingen_server',
              install_path    = '${LIBDIR}',
              use             = 'libingen libingen_socket',
              cxxflags        = bld.env.PTHREAD_CFLAGS,
              linkflags       = bld.env.PTHREAD_LINKFLAGS)
    core_libs = 'GLIBMM LV2 LILV RAUL SERD SORD'
    autowaf.use_lib(bld, obj, core_libs)

    if bld.env.BUILD_TESTS:
        obj = bld(features        = 'cxx cxxshlib',
                  source          = core_source,
                  export_includes = ['../..'],
                  includes        = ['.', '../..'],
                  name            = 'libingen_server_profiled',
                  target          = 'ingen_server_profiled',
                  install_path    = '${LIBDIR}',
                  use             = 'libingen_profiled',
                  cxxflags        = bld.env.PTHREAD_CFLAGS + bld.env.INGEN_TEST_CXXFLAGS,
                  linkflags       = bld.env.PTHREAD_LINKFLAGS + bld.env.INGEN_TEST_LINKFLAGS)
        autowaf.use_lib(bld, obj, core_libs)

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

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

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