import libtbx.load_env
import sys
import os
from os import path

Import("env_etc")

env_etc.fast_linalg_dist = libtbx.env.dist_path("fast_linalg")
env_etc.fast_linalg_include = libtbx.env.under_dist("fast_linalg", "..")
env_etc.fast_linalg_common_includes = [
  env_etc.libtbx_include,
  env_etc.fast_linalg_include,
  env_etc.boost_include,
]

def enable_fast_linalg(env):
  if not libtbx.env.has_module('fast_linalg'):
    return
  env_etc.include_registry.append(
    env=env,
    paths=env_etc.fast_linalg_common_includes)
  env.Append(LIBS=['boost_filesystem', 'fast_linalg'])
  for flag in ("USE_FAST_LINALG",):
    flag = "-D" + flag
    env.Append(CXXFLAGS=flag)
    env.Append(SHCXXFLAGS=flag)

env_etc.enable_fast_linalg = enable_fast_linalg

Import("env_base")
envs = [env_base]
if not env_etc.no_boost_python:
  Import("env_no_includes_boost_python_ext")
  envs.append(env_no_includes_boost_python_ext)
fast_linalg_envs = []
for env, extra_inc in zip(envs, ([], [env_etc.python_include])):
  e = env.Clone()
  env_etc.enable_fast_linalg(e)
  env_etc.include_registry.append(env=e, paths=extra_inc)
  fast_linalg_envs.append(e)
env_fast_linalg_base = fast_linalg_envs[0]
Export("env_fast_linalg_base")
if not env_etc.no_boost_python:
  env_fast_linalg_boost_python_ext = fast_linalg_envs[1]
  Export("env_fast_linalg_boost_python_ext")

env = env_fast_linalg_base.Clone()
if 'fast_linalg' in env['LIBS']:
  env['LIBS'].remove('fast_linalg')
if sys.platform != 'win32':
  env['LIBS'].append("dl")
fast_linalg = env.SharedLibrary(target='#lib/fast_linalg', source=['np_ext.cpp'])

if not env_etc.no_boost_python:
  env = env_fast_linalg_boost_python_ext.Clone()
  fast_linalg_ext = env.SharedLibrary(target='#lib/fast_linalg_ext', source=['ext.cpp'])
  Depends(fast_linalg_ext, fast_linalg)

SConscript("tests/SConscript")

