intf_libs = # Interface dependencies.
impl_libs = # Implementation dependencies.
import intf_libs += \
  libcpptrace%lib{cpptrace}

if ($config.libassert.use_fmt)
  import intf_libs += fmt%lib{fmt}

if ($config.libassert.use_magic_enum)
  import intf_libs += magic_enum%lib{magic_enum}

# Public headers.
#
pub = [dir_path] ../include/

include $pub

pub_hdrs = $($pub/ pub_hdrs)

lib{assert}: $pub/{$pub_hdrs}

# Private headers and sources as well as dependencies.
#
lib{assert}: libassert/{hxx ixx txx cxx mxx}{**} $impl_libs $intf_libs

# Build options.
#
out_pfx_inc = [dir_path] $out_root/include/
src_pfx_inc = [dir_path] $src_root/include/
out_pfx_src = [dir_path] $out_root/src/libassert
src_pfx_src = [dir_path] $src_root/src/libassert

poptions +=     ($config.libassert.use_fmt        ? -DLIBASSERT_USE_FMT:) \
                ($config.libassert.use_magic_enum ? -DLIBASSERT_USE_MAGIC_ENUM:) \
                ($config.libassert.no_std_format  ? -DLIBASSERT_NO_STD_FORMAT:) \
                ($config.libassert.build_testing  ? -DLIBASSERT_BUILD_TESTING:)

cxx.poptions =+ "-I$out_pfx_src" "-I$src_pfx_src" \
                "-I$out_pfx_inc" "-I$src_pfx_inc" \
                $poptions

obja{**}: cxx.poptions += -DLIBASSERT_STATIC_DEFINE
objs{**}: cxx.poptions += -Dlibassert_lib_EXPORTS

# Export options.
#
lib{assert}:
{
  cxx.export.poptions = "-I$out_pfx_inc" "-I$src_pfx_inc" \
                        $poptions \
                        ($config.libassert.build_testing  ? "-I$src_pfx_src" :)
  cxx.export.libs = $intf_libs
}

liba{assert}: cxx.export.poptions =+ -DLIBASSERT_STATIC_DEFINE

# 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{assert}: bin.lib.version = "-$version.project_id"
else
  lib{assert}: bin.lib.version = "-$version.major.$version.minor"

# Don't install private headers (except for testing).
#
libassert/{hxx ixx txx}{*}:
{
  install = ($config.libassert.build_testing ? include/libassert/internal/: false)
  install.subdirs = true
}

# Make sure private headers installed into libassert/internal/ can
# also be included without the directory prefixes (for tests).
#
lib{assert}: cxx.pkgconfig.include = include/ \
             ($config.libassert.build_testing ? include/libassert/internal/ :)

# Install module interfaces.
#
mxx{*}:
{
  install         = include/libassert/
  install.subdirs = false
}
