#! /usr/bin/python

import os, glob, sys

libraryName='plugins_samplebysample'

def scanFiles(pattern, paths) :
	files = []
	for path in paths :
		files+=glob.glob(os.path.join(path,pattern))
	return files

options = Options('options.cache', ARGUMENTS)
options.Add(PathOption('clam_prefix', 'The prefix where CLAM was installed', ''))
options.Add(PathOption('prefix', 'Installation prefix (normally /usr, by default this is clam_prefix)', "", validator=PathOption.PathAccept))
options.Add(PathOption('sandbox_path', 'Path where third party libraries were installed (in windows)', "", validator=PathOption.PathAccept))
options.Add(BoolOption('crossmingw', 'Using MinGW crosscompiler mode', 'no') )

toolChain = 'default'
if sys.platform == "win32": toolChain = 'mingw'
env = Environment(ENV=os.environ, tools=[toolChain], options=options)
options.Save('options.cache', env)
Help(options.GenerateHelpText(env))
env.SConsignFile() # Single signature file

CLAMInstallDir = env['clam_prefix']
InstallDir = env['prefix'] or env['clam_prefix']
clam_sconstoolspath = os.path.join(CLAMInstallDir,'share','clam','sconstools')
if env['crossmingw'] :
	env.Tool('crossmingw', toolpath=[clam_sconstoolspath])
env.Tool('clam', toolpath=[clam_sconstoolspath])
env.EnableClamModules([
	'clam_core',
	'clam_audioio',
	'clam_processing',
	] , CLAMInstallDir)

sourcePaths = ["src"]
sources = scanFiles('*.cxx', sourcePaths)
sources = dict.fromkeys(sources).keys()
if sys.platform=='linux2' :
	env.Append( CCFLAGS=['-g','-O3','-Wall'] )
	print "adding optimization flags"
	env.Append( CCFLAGS=[
		'-fomit-frame-pointer', 
		'-ffast-math',
		'-funroll-loops',
		'-mmmx',
#		'-march=nocona',
		'-msse',
		'-mfpmath=sse'
	])

if sys.platform=="darwin" : #TODO fix. should be available in clamlibs pc
	env.Append( LIBPATH=['/opt/local/lib'] )
if sys.platform=="win32" or 'crossmingw' in env['TOOLS'] :
	env.Append( LIBPATH=[os.path.join(env['sandbox_path'],'local','lib')] )

libraries = [
	env.SharedLibrary(target=libraryName, source = sources),
	]

examples = scanFiles('*.clamnetwork', ['example-data'])
examples+= scanFiles('*.clamnetwork.pos', ['example-data'])
examples+= scanFiles('*.ui', ['example-data'])

install = [
	env.Install(os.path.join(InstallDir,'lib','clam'), libraries),
	env.Install(os.path.join(InstallDir,'share','networkeditor','example-data'), examples)
	]

env.Alias('install', install)
env.Default(libraries)