import libtbx.load_env
import os
Import("env_base", "env_etc")

env_etc.cctbx_dist = libtbx.env.dist_path("cctbx")
env_etc.cctbx_include = os.path.dirname(env_etc.cctbx_dist)
env_etc.cctbx_common_includes = [
  env_etc.libtbx_include,
  env_etc.cctbx_include,
  env_etc.scitbx_include,
  env_etc.chiltbx_include,
  env_etc.omptbx_include,
  env_etc.boost_include,
]

env = env_base.Clone(
  SHLINKFLAGS=env_etc.shlinkflags)
env_etc.include_registry.append(
  env=env,
  paths=env_etc.cctbx_common_includes)
envlm = env.Clone(
  LIBS=env_etc.libm
)

lib_cctbx_sources = [
  "eltbx/basic.cpp",
  "eltbx/xray_scattering/it1992.cpp",
  "eltbx/xray_scattering/wk1995.cpp",
  "eltbx/xray_scattering/n_gaussian_raw.cpp",
  "eltbx/xray_scattering/n_gaussian.cpp",
  "eltbx/fp_fdp.cpp",
  "eltbx/henke.cpp",
  "eltbx/henke_tables_01_12.cpp",
  "eltbx/henke_tables_13_24.cpp",
  "eltbx/henke_tables_25_36.cpp",
  "eltbx/henke_tables_37_48.cpp",
  "eltbx/henke_tables_49_60.cpp",
  "eltbx/henke_tables_61_72.cpp",
  "eltbx/henke_tables_73_84.cpp",
  "eltbx/henke_tables_85_92.cpp",
  "eltbx/icsd_radii.cpp",
  "eltbx/covalent_radii.cpp",
  "eltbx/neutron.cpp",
  "eltbx/sasaki.cpp",
  "eltbx/sasaki_tables_01_12.cpp",
  "eltbx/sasaki_tables_13_24.cpp",
  "eltbx/sasaki_tables_25_36.cpp",
  "eltbx/sasaki_tables_37_48.cpp",
  "eltbx/sasaki_tables_49_60.cpp",
  "eltbx/sasaki_tables_61_72.cpp",
  "eltbx/sasaki_tables_73_82.cpp",
  "eltbx/tiny_pse.cpp",
  "eltbx/wavelengths.cpp",

  "miller/asu.cpp",
  "miller/bins.cpp",
  "miller/index_generator.cpp",
  "miller/index_span.cpp",
  "miller/match_bijvoet_mates.cpp",
  "miller/match_indices.cpp",
  "miller/sym_equiv.cpp",

  "sgtbx/bricks.cpp",
  "sgtbx/change_of_basis_op.cpp",
  "sgtbx/find_affine.cpp",
  "sgtbx/group_codes.cpp",
  "sgtbx/hall_in.cpp",
  "sgtbx/lattice_tr.cpp",
  "sgtbx/lattice_symmetry.cpp",
  "sgtbx/miller.cpp",
  "sgtbx/reciprocal_space_asu.cpp",
  "sgtbx/reciprocal_space_ref_asu.cpp",
  "sgtbx/rot_mx.cpp",
  "sgtbx/rot_mx_info.cpp",
  "sgtbx/row_echelon_solve.cpp",
  "sgtbx/rt_mx.cpp",
  "sgtbx/select_generators.cpp",
  "sgtbx/seminvariant.cpp",
  "sgtbx/site_symmetry.cpp",
  "sgtbx/space_group.cpp",
  "sgtbx/space_group_type.cpp",
  "sgtbx/symbols.cpp",
  "sgtbx/tensor_rank_2.cpp",
  "sgtbx/tr_group.cpp",
  "sgtbx/tr_vec.cpp",
  "sgtbx/utils.cpp",
  "sgtbx/wyckoff.cpp",
  "sgtbx/reference_settings/hall_symbol_table.cpp",
  "sgtbx/reference_settings/matrix_group_code_table.cpp",
  "sgtbx/reference_settings/normalizer.cpp",
  "sgtbx/reference_settings/wyckoff.cpp",

  "uctbx/uctbx.cpp",
  "uctbx/spoil_optimization.cpp",
  "uctbx/crystal_orientation.cpp",
]
if (env_etc.static_libraries): builder = envlm.StaticLibrary
else:                          builder = envlm.SharedLibrary
builder(
  target="#lib/cctbx",
  source=lib_cctbx_sources)

SConscript("examples/SConscript")

if (not env_etc.no_boost_python):
  Import("env_no_includes_boost_python_ext")

  env_cctbx_boost_python_ext = env_no_includes_boost_python_ext.Clone()
  env_cctbx_boost_python_ext.Prepend(LIBS=["scitbx_boost_python"])
  env_etc.include_registry.append(
    env=env_cctbx_boost_python_ext,
    paths=env_etc.cctbx_common_includes + [env_etc.python_include])
  Export("env_cctbx_boost_python_ext")

  SConscript("math/boost_python/SConscript")
  SConscript("array_family/boost_python/SConscript")
  SConscript("eltbx/boost_python/SConscript")
  SConscript("uctbx/boost_python/SConscript")
  SConscript("sgtbx/boost_python/SConscript")
  SConscript("adptbx/boost_python/SConscript")
  SConscript("miller/boost_python/SConscript")
  SConscript("xray/boost_python/SConscript")
  SConscript("maptbx/boost_python/SConscript")
  SConscript("masks/boost_python/SConscript")
  SConscript("translation_search/boost_python/SConscript")
  SConscript("dmtbx/boost_python/SConscript")
  SConscript("boost_python/SConscript")
  SConscript("crystal/SConscript")
  SConscript("geometry_restraints/SConscript")
  SConscript("geometry/boost_python/SConscript")
  SConscript("covariance/boost_python/SConscript")
  SConscript("adp_restraints/SConscript")
  SConscript("symmetry_search/boost_python/SConscript")
  SConscript("xray/observations/boost_python/SConscript")

SConscript("sgtbx/direct_space_asu/proto/SConscript")
SConscript("math/SConscript")

