import intf_libs = libangelscript%lib{angelscript}

# One lib per angelscript/* subdirectory.
# autowrapper is header-only with a standalone generator - excluded.
#
addons =
for d: angelscript/dir{* -autowrapper}
{
  n   = $name($d)
  tgt = angelscript-$n

  ./: lib{$tgt}: libul{$tgt}: angelscript/$n/{hxx cxx}{**} $intf_libs

  libs{$tgt}: def{$tgt}: include = ($cxx.target.system == 'win32-msvc')
  def{$tgt}: libul{$tgt}

  addons += lib{$tgt}
}

./: lib{angelscript-autowrapper}: libul{angelscript-autowrapper}: \
                              angelscript/autowrapper/{hxx cxx}{** -generator/*} $intf_libs

libs{angelscript-autowrapper}: def{angelscript-autowrapper}: include = ($cxx.target.system == 'win32-msvc')
def{angelscript-autowrapper}: libul{angelscript-autowrapper}

addons += lib{angelscript-autowrapper}

# Generator - produces aswrappedcall.h (written to stdout).
#
./: exe{angelscript-generateheader}: angelscript/autowrapper/generator/{hxx cxx}{**}

# Inter-addon prerequisites.
#
lib{angelscript-scriptdictionary}: lib{angelscript-scriptarray}
lib{angelscript-scriptfile}:       lib{angelscript-scriptarray} lib{angelscript-datetime}
lib{angelscript-scriptstdstring}:  lib{angelscript-scriptarray}

# Aggregate - composes all individual addon libs.
#
./: lib{angelscript-addon}: $intf_libs $addons

# Build options.
#
src_pfx_src = [dir_path] $src_root/src

cxx.poptions =+ "-I$src_pfx_src"

for d: angelscript/dir{*}
{
  n   = $name($d)
  tgt = angelscript-$n

  lib{$tgt}:
  {
    cxx.export.poptions   = "-I$src_pfx_src" "-I$src_pfx_src/angelscript"
    cxx.export.libs       = $intf_libs
    cxx.pkgconfig.include = include/ include/angelscript/
  }

  if $version.pre_release
    lib{$tgt}: bin.lib.version = "-$version.project_id"
  else
    lib{$tgt}: bin.lib.version = "-$version.major.$version.minor"
}

if ($cxx.target.system == 'mingw32')
{
  cxx.loptions += -Wl,--export-all-symbols
  lib{angelscript-scriptsocket angelscript-addon}: cxx.libs += -lws2_32
}
elif ($cxx.target.class == 'windows')
  lib{angelscript-scriptsocket angelscript-addon}: cxx.libs += ws2_32.lib

# ISO-8859-1 sources: suppress UTF-8 charset warning on MSVC.
#
if ($cxx.id == 'msvc')
  angelscript/scriptstdstring/obj{scriptstdstring scriptstdstring_utils}: \
    cxx.poptions += /wd4828

# locale_t/newlocale/uselocale may (sometimes) require _GNU_SOURCE with
# libstdc++.
#
if ($cxx.stdlib == 'libstdc++')
  angelscript/scriptstdstring/obj{scriptstdstring}: \
    cxx.poptions += -D_GNU_SOURCE

switch $cxx.id: path.match
{
  case 'gcc' | 'clang*'
    cxx.coptions += -Wno-extra \
                    -Wno-pedantic \
                    -Wno-invalid-utf8 \
                    ($cxx.target.class == 'macos' ? -Wno-deprecated-declarations :)
}

# Export options.
#
lib{angelscript-addon}:
{
  cxx.export.poptions   = "-I$src_pfx_src" "-I$src_pfx_src/angelscript"
  cxx.export.libs       = $intf_libs $addons
  cxx.pkgconfig.include = include/ include/angelscript/
}

lib{angelscript-scriptdictionary}:
{
  cxx.export.libs += lib{angelscript-scriptarray}
}
lib{angelscript-scriptfile}:
{
  cxx.export.libs += lib{angelscript-scriptarray} lib{angelscript-datetime}
}
lib{angelscript-scriptstdstring}:
{
  cxx.export.libs += lib{angelscript-scriptarray}
}

# For pre-releases use the complete version to make sure they cannot
# be used in place of another pre-release or the final version. See
# the version module for details on the version.* variable values.
#
if $version.pre_release
  lib{angelscript-addon}: bin.lib.version = "-$version.project_id"
else
  lib{angelscript-addon}: bin.lib.version = "-$version.major.$version.minor"

# Install recreating subdirectories.
#
{hxx}{*}:
{
  install         = include/
  install.subdirs = true
}
