intf_libs = # Interface dependencies.
impl_libs = # Implementation dependencies.
#import xxxx_libs += libhello%lib{hello}

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

include $pub

pub_hdrs = $($pub/ pub_hdrs)

lib{directx-headers}: libul{directx-headers}: $pub/{$pub_hdrs}

# Private headers and sources as well as dependencies.
#
libul{directx-headers}: {hxx ixx txx cxx}{**} $impl_libs $intf_libs

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

# 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/
src_pfx_src = [dir_path] $src_root/src/

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

# The .cpp includes "d3d12.h" without prefix (matches CMake PRIVATE include).
#
cxx.poptions =+ "-I$out_pfx_inc/directx" "-I$src_pfx_inc/directx"

# GCC -O3 -DNDEBUG: unknown planar formats hit assert(false) then S_OK without
# writing totalHeight.
#
if ($cxx.id == 'gcc')
  obj{d3dx12_property_format_table}: cxx.coptions += -Wno-maybe-uninitialized

# Upstream's d3d12.h uses anonymous structs in anonymous unions, a common
# Windows-header idiom that -pedantic flags as a Clang extension.
#
if ($cxx.id.type == 'clang')
  obj{d3dx12_property_format_table}: cxx.coptions += -Wno-nested-anon-types

if ($cxx.target.class != 'windows')
  cxx.poptions =+ "-I$out_pfx_inc/wsl/stubs" "-I$src_pfx_inc/wsl/stubs"

# upstream/CMakeLists.txt: MinGW RPC headers define old versions and conflict
# with D3D headers generated with newer MIDL.
#
if ($cxx.target.system == 'mingw32')
{
  cxx.poptions += -D__REQUIRED_RPCNDR_H_VERSION__=475
  cxx.loptions += -Wl,--export-all-symbols
}

# Export options.
#
lib{directx-headers}:
{
  cxx.export.poptions = "-I$out_pfx_inc" "-I$src_pfx_inc"
  cxx.export.libs = $intf_libs
}

if ($cxx.target.class != 'windows')
{
  lib{directx-headers}: \
    cxx.export.poptions += "-I$out_pfx_inc/wsl/stubs" "-I$src_pfx_inc/wsl/stubs"

  lib{directx-headers}: cxx.pkgconfig.include = include/ include/wsl/stubs/
}

if ($cxx.target.system == 'mingw32')
{
  # Export include/directx so consumers can use <d3d12.h> without the prefix,
  # matching the unprefixed access MSVC consumers get via the Windows SDK.
  # cxx.pkgconfig.include is required so the installed .pc keeps this path.
  #
  lib{directx-headers}: cxx.export.poptions += \
    -D__REQUIRED_RPCNDR_H_VERSION__=475 \
    "-I$out_pfx_inc/directx" "-I$src_pfx_inc/directx"

  lib{directx-headers}: cxx.pkgconfig.include = include/ include/directx/
}

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

# Don't install private headers.
#
{hxx ixx txx}{*}: install = false
