# http://www.boost.org/libs/python/doc/v2/configuration.html
phaser_boost_python_max_bases = 30

import libtbx.load_env
import sys, os
Import("env_base", "env_etc")
phaser_dist = libtbx.env.dist_path("phaser")
phaser_top = env_etc.norm_join(phaser_dist, "..")
phaser_dev = env_etc.norm_join(phaser_dist, "src/dev")
phaser_version = env_etc.norm_join(phaser_dist, "Version.cc")
if (os.path.isfile(phaser_version)):
  os.remove(phaser_version)
import time
fileout = open(phaser_version,"w")
fileout.write("#include <phaser/Version.h>\n")
fileout.write("#include <phaser/io/Output.h>\n")
fileout.write("namespace phaser {\n")
fileout.write("std::string Output::version_date()\n")
fileout.write("{ return \"" + time.asctime(time.localtime()) + "\"; }\n")
fileout.write("std::string Output::version_number()\n")
if (os.path.isdir(phaser_dev)):
  fileout.write("{ return PHASER_DEVELOPMENT; }\n")
else:
  fileout.write("{ return PHASER_RELEASE; }\n")
fileout.write("} //phaser \n")
fileout.close();
class empty: pass
phaser_env_etc = empty()
cxxflags = env_etc.cxxflags_base
if (os.path.isdir(phaser_dev)):
  print "Compiling development version of phaser"
  phaser_env_etc.common_libs = [
    "phaserrun",
    "phasersrc",
    "phaserdev",
    "phaserio",
    "phaserkey",
    "phaserlib",
    "cmtz",
    "cctbx",
  ]
  phaser_common_includes = [
    ".",
    phaser_top,
    env_etc.libtbx_include,
    env_etc.cctbx_include,
    env_etc.scitbx_include,
    env_etc.boost_include,
    env_etc.ccp4io_include,
  ]
  phaser_env_etc.common_libpath = [
    "#lib",
  ]
else:
  print "Compiling distributed version of phaser"
  phaser_env_etc.common_libs = [
    "phaserrun",
    "phasersrc",
    "phaserio",
    "phaserkey",
    "phaserlib",
    "phaserpatch",
    "cmtz",
    "cctbx",
  ]
  phaser_common_includes = [
    phaser_top,
    env_etc.libtbx_include,
    env_etc.cctbx_include,
    env_etc.scitbx_include,
    env_etc.boost_include,
    env_etc.ccp4io_include,
  ]
  phaser_env_etc.common_libpath = [
    "#lib",
  ]
phaser_env = env_base.Copy()
phaser_env.Replace(
CXXFLAGS=cxxflags, #+["-pg"],
LIBS=phaser_env_etc.common_libs + env_etc.libm,
LIBPATH=phaser_env_etc.common_libpath,
  )
if (sys.platform == "win32"):
  phaser_env.Append(CCFLAGS=env_etc.ccp4io_defines)
  phaser_env.Append(CXXFLAGS=env_etc.ccp4io_defines)
env_etc.include_registry.append(
  env=phaser_env,
  paths=phaser_common_includes)
exe = phaser_env.Program(
  target="#exe/phaser",
  source="run/main.cc")
libtbx.env.write_dispatcher_in_bin(
  source_file=exe[0].get_abspath(),
  target_file="phaser")
Export("phaser_env", "phaser_env_etc")
SConscript("lib/SConscript")
SConscript("src/SConscript")
SConscript("run/SConscript")
SConscript("io/SConscript")
SConscript("keywords/SConscript")
if (os.path.isdir(phaser_dev)):
  SConscript("src/dev/SConscript")
else:
  SConscript("src/patch/SConscript")
if (not env_etc.no_boost_python):
  #COOK BOOK FOR MAKING BOOST-PYTHON MODULE
  Import("env_no_includes_boost_python_ext") #from libtbx
  patched_shcxxflags = []
  for item in env_no_includes_boost_python_ext["SHCXXFLAGS"]:
    if (item.startswith("-DBOOST_PYTHON_MAX_BASES=")):
      patched_shcxxflags.append("-DBOOST_PYTHON_MAX_BASES=%d" %
        phaser_boost_python_max_bases)
    else:
      patched_shcxxflags.append(item)
  env_phaser_boost_python_ext = env_no_includes_boost_python_ext.Copy(
    SHCXXFLAGS=patched_shcxxflags)
  env_phaser_boost_python_ext.Prepend(SHCXXFLAGS=["-DBOOST_PYTHON_MAX_ARITY=21"])
  env_etc.include_registry.append(
    env=env_phaser_boost_python_ext,
    paths=phaser_common_includes+[env_etc.python_include]) #from libtbx
  Export("env_phaser_boost_python_ext")
  SConscript("boost_python/SConscript")
