#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import SCons
import shutil

Import('build')
Import('mixxxminimal_depends')

mixxxminimal_sources = [
	"dsp/ChangeDetectionFunction.cpp",
	"dsp/DownBeat.cpp",
	"dsp/PeakPicking.cpp",
	"dsp/Chromagram.cpp",
	"dsp/FFT.cpp",
	"dsp/PhaseVocoder.cpp",
	"dsp/ConstantQ.cpp",
	"dsp/Filter.cpp",
	"dsp/Pitch.cpp",
	"dsp/Correlation.cpp",
	"dsp/FiltFilt.cpp",
	"dsp/TCSgram.cpp",
	"dsp/CQprecalc.cpp",
	"dsp/Framer.cpp",
	"dsp/TempoTrack.cpp",
	"dsp/Decimator.cpp",
	"dsp/GetKeyMode.cpp",
	"dsp/TempoTrackV2.cpp",
	"dsp/DetectionFunction.cpp",
	"dsp/KLDivergence.cpp",
	"dsp/TonalEstimator.cpp",
	"dsp/DFProcess.cpp",
	"dsp/MathUtilities.cpp",
	"plugins/BarBeatTrack.cpp",
	"plugins/KeyDetect.cpp",
	"plugins/BeatTrack.cpp",
	"plugins/TonalChangeDetect.cpp",
	"plugins/MixxxBpmDetection.cpp",
	"libmain.cpp",
]

#Tell SCons to build the plugin
#=========================
if int(build.flags['vamp']):
    env = build.env.Clone()
    conf = Configure(env)

    # If there is no system vamp-hostdk installed, then we'll directly link
    # the vamp-hostsdk.
    if not conf.CheckLib('vamp-sdk'):
        INTERNAL_VAMP_PATH = '#lib/vamp-2.3'
        # For header includes
        env.Append(CPPPATH=[INTERNAL_VAMP_PATH])
        sdk_src_path = '%s/src/vamp-sdk' % INTERNAL_VAMP_PATH
        mixxxminimal_sources.extend(path % sdk_src_path for path in
                                    ['%s/PluginAdapter.cpp',
                                     '%s/RealTime.cpp'])

    for depend in mixxxminimal_depends:
        depend = depend()
        # Hack to get rid of EngineBufferScaleST since the SoundTouch dependence
        # includes this.
        depend_source = [x for x in depend.sources(build) if 'enginebufferscalest' not in x]
        mixxxminimal_sources.extend(depend_source)

    env = conf.Finish()
    if build.platform_is_linux:
        env["LINKFLAGS"].append("-Wl,--version-script=vamp-plugins/vamp-plugin.map")
    if build.platform_is_windows:
        env["LINKFLAGS"].remove("/entry:mainCRTStartup")
        env["LINKFLAGS"].append("/EXPORT:vampGetPluginDescriptor")
        #this will reduce DLL dependencies; no need to depend on MSVCRT.dll, etc
        #env["LINKFLAGS"].remove("/nodefaultlib:LIBCMT.lib")
        #env["LINKFLAGS"].remove("/nodefaultlib:LIBCMTd.lib")
        #env["LINKFLAGS"].append("/NODEFAULTLIB:MSVCRT.lib")
        #env["LINKFLAGS"].append("/DEFAULTLIB:LIBCMT.lib")
        #env["LINKFLAGS"].append("/DEFAULTLIB:LIBCPMT.lib")
        mixxxminimal_bin = env.SharedLibrary('libmixxxminimal', mixxxminimal_sources)
    else:
    	mixxxminimal_bin = env.SharedLibrary('mixxxminimal', mixxxminimal_sources)
    #Pass this library object file back to the SConscript above us.
    Return("mixxxminimal_bin")
else:
    Return("")
