
import os, glob, distutils.sysconfig

coefficient_repartition_path = "./"
include_path = "../../"

env = Environment(ENV = os.environ)
env.Replace(CONFIGURELOG = "./.scons.log")

if not ARGUMENTS.has_key("mpi"):
    ARGUMENTS["mpi"] = "no"

if not ARGUMENTS.has_key("netcdf"):
    ARGUMENTS["netcdf"] = "yes"

# Compilation options.
env.Replace(CCFLAGS = " -O2")

swig_flags = ["-Wall", "-c++", "-python", "-outdir", "python",
              "-I" + os.path.join(coefficient_repartition_path, "include"),
              "-I" + os.path.join(coefficient_repartition_path, "include/talos"),
              "-I" + os.path.join(coefficient_repartition_path, "include/seldon")]

if ARGUMENTS["mpi"] == "yes":
    env.Append(CPPFLAGS = " -DWITH_MPI")
    swig_flags.append("-DWITH_MPI")

if ARGUMENTS["netcdf"] == "yes":
    env.Append(CPPFLAGS = " -DWITH_NETCDF")
    swig_flags.append("-DWITH_NETCDF")

env.Replace(SWIGFLAGS = swig_flags)
env.Append(CPPPATH = [distutils.sysconfig.get_python_inc()])

env.Append(CPPPATH = [os.path.join(coefficient_repartition_path, "include/")])
env.Append(CPPPATH = [os.path.join(coefficient_repartition_path, "include/seldon/")])
env.Append(CPPPATH = [os.path.join(coefficient_repartition_path, "include/talos/")])
env.Append(CPPPATH = [os.path.join(coefficient_repartition_path, "include/ops/")])

env.Append(CPPPATH = ["/usr/include/lua5.1/"])

env.Replace(SHLIBPREFIX = "")

if not ARGUMENTS.has_key("line"):
    env.Replace(CXXCOMSTR = "[C++] $SOURCE")
    env.Replace(LINKCOMSTR = "[Linking] $TARGET")
    env.Replace(CONFIGURELOG = "./.scons.log")
    env.Replace(SHCXXCOMSTR = "[Shared C++] $SOURCE")
    env.Replace(SHLINKCOMSTR = "[Shared linking] $TARGET")
    env.Replace(SWIGCOMSTR = "[SWIG] $TARGET")

if os.environ.has_key("LD_LIBRARY_PATH"):
    env.Append(LIBPATH = os.environ["LD_LIBRARY_PATH"].split(":"))
if os.environ.has_key("LIBRARY_PATH"):
    env.Append(LIBPATH = os.environ["LIBRARY_PATH"].split(":"))
if os.environ.has_key("CPATH"):
    env.Append(CPPPATH = os.environ["CPATH"].split(":"))
if os.environ.has_key("CPLUS_INCLUDE_PATH"):
    env.Append(CPPPATH = os.environ["CPLUS_INCLUDE_PATH"].split(":"))

conf = Configure(env)

library_list = ["dl", "lua", "lua5.1"]

if ARGUMENTS["mpi"] == "yes":
    library_list.append("mpi")
    library_list.append("mpi_cxx")

if ARGUMENTS["netcdf"] == "yes":
    library_list.append("netcdf")
    library_list.append("netcdf_c++")

for library in library_list:
    if conf.CheckLib(library):
        env.Append(LINKFLAGS = "-l" + library)

if ARGUMENTS["mpi"] == "yes":
    shared_library = "python/_coefficient_repartition_mpi_core.so"
else:
    shared_library = "python/_coefficient_repartition_core.so"

env.SharedLibrary(os.path.join(coefficient_repartition_path, shared_library),
                  [os.path.join(coefficient_repartition_path, "CoefficientRepartition.cpp"),
                   os.path.join(coefficient_repartition_path, "coefficient_repartition.i")])

env.Alias(["swig"], os.path.join(coefficient_repartition_path, shared_library))

target_list = glob.glob("*.cpp")
if "CoefficientRepartition.cpp" in target_list:
    target_list.remove("CoefficientRepartition.cpp")

for filename in target_list:
    env.Program(filename[:-4], [filename])
