#!/usr/bin/env python
# Ardour developers (c) 2015
# This file is redistributed with the same license as vamp-plugin-sdk (x11)

from waflib import TaskGen
import re

# Get waf to do %FOO% substitution rather than @FOO@
TaskGen.re_m4 = re.compile('%%(\w+)%%', re.M)

def options(opt):
    opt.load('compiler_cxx')
    pass

def configure(conf):
    conf.load('compiler_cxx')
    conf.check_cfg (package='fftw3', uselib_store='FFTW3', args=['--cflags', '--libs'], mandatory=True)
    conf.check_cfg (package='fftw3f', uselib_store='FFTW3F',  args=['--cflags', '--libs'], mandatory=True)
    conf.check_cfg (package='sndfile', uselib_store='SNDFILE', args=['--cflags', '--libs'], mandatory=True)
    conf.env.append_value('CXXFLAGS', '-DHAVE_FFTW3')

def build(bld):
    # Host Library
    host_sources = '''
            src/vamp-hostsdk/Files.cpp
            src/vamp-hostsdk/PluginBufferingAdapter.cpp
            src/vamp-hostsdk/PluginChannelAdapter.cpp
            src/vamp-hostsdk/PluginHostAdapter.cpp
            src/vamp-hostsdk/PluginInputDomainAdapter.cpp
            src/vamp-hostsdk/PluginLoader.cpp
            src/vamp-hostsdk/PluginSummarisingAdapter.cpp
            src/vamp-hostsdk/PluginWrapper.cpp
            src/vamp-hostsdk/RealTime.cpp
            src/vamp-hostsdk/host-c.cpp
    '''
    sdk_sources = '''
            src/vamp-sdk/PluginAdapter.cpp
            src/vamp-sdk/RealTime.cpp
    '''

    bld.shlib (source = host_sources,
               includes = '.',
               target = 'vamp-hostsdk',
               name = 'vamp-hostsdk',
               uselib = 'FFTW3 FFTW3F',
               features = 'cxx cxxshlib',
               vnum = '3.6.0',
               )
    
    bld.shlib (source = sdk_sources,
               includes = '.',
               target = 'vamp-sdk',
               name = 'vamp-sdk',
               uselib = 'FFTW3 FFTW3F',
               features = 'cxx cxxshlib',
               vnum = '2.6.0',
               )

    rdf_sources = '''
        rdf/generator/vamp-rdf-template-generator.cpp
    '''

    simple_host_sources = '''
        host/vamp-simple-host.cpp
    '''

    bld.program (source = rdf_sources,
               includes = '.',
               target = 'vamp-rdf-template-generator',
               name = 'rdf-generator',
               use = 'vamp-hostsdk vamp-sdk',
               features = 'cxx'
               )

    bld.program (source = simple_host_sources,
               includes = '.',
               target = 'vamp-simple-host',
               name = 'simple-host-generator',
               use = 'vamp-hostsdk vamp-sdk SNDFILE',
               features = 'cxx'
               )

    sdk_headers = '''
         vamp-sdk/Plugin.h
         vamp-sdk/PluginAdapter.h
         vamp-sdk/PluginBase.h
         vamp-sdk/RealTime.h
         vamp-sdk/FFT.h
         vamp-sdk/plugguard.h
         vamp-sdk/vamp-sdk.h
    '''
    hostsdk_headers = '''
         vamp-hostsdk/Plugin.h
         vamp-hostsdk/PluginBase.h
         vamp-hostsdk/PluginHostAdapter.h
         vamp-hostsdk/RealTime.h
         vamp-hostsdk/PluginBufferingAdapter.h
         vamp-hostsdk/PluginChannelAdapter.h
         vamp-hostsdk/PluginInputDomainAdapter.h
         vamp-hostsdk/PluginLoader.h
         vamp-hostsdk/PluginSummarisingAdapter.h
         vamp-hostsdk/PluginWrapper.h
         vamp-hostsdk/host-c.h
         vamp-hostsdk/hostguard.h
         vamp-hostsdk/vamp-hostsdk.h
    '''
    api_headers = '''
       vamp/vamp.h
    '''
    bld.install_files ('${PREFIX}/include/vamp', api_headers)
    bld.install_files ('${PREFIX}/include/vamp-sdk', sdk_headers)
    bld.install_files ('${PREFIX}/include/vamp-hostsdk', hostsdk_headers)

    pc = bld (features = 'subst',
              source = 'pkgconfig/vamp.pc.in',
              target = 'vamp.pc',
              install_path = '${PREFIX}/lib/pkgconfig',
              dict = {'PREFIX' : bld.env.PREFIX },
              )

    pc = bld (features = 'subst',
              source = 'pkgconfig/vamp-sdk.pc.in',
              target = 'vamp-sdk.pc',
              install_path = '${PREFIX}/lib/pkgconfig',
              dict = {'PREFIX' : bld.env.PREFIX },
              )

    pc = bld (features = 'subst',
              source = 'pkgconfig/vamp-hostsdk.pc.in',
              target = 'vamp-hostsdk.pc',
              install_path = '${PREFIX}/lib/pkgconfig',
              dict = {'PREFIX' : bld.env.PREFIX },
              )
    
