# libc & stl common headers should be resolved to either
# * system libc   (e.g. nothing in our repo)
# * system libc++ (e.g. nothing in our repo)
# * libcxx
# * musl
# or some combination of them depending on the build flags.

# We want musl to resolve itself without these sysincls, but its test must have them
- source_filter: "^(?!contrib/libs/musl).*|^contrib/libs/musl/tests"
  includes:
  - complex.h
  - ctype.h
  - errno.h
  - float.h
  - inttypes.h
  - limits.h
  - locale.h
  - math.h
  - setjmp.h
  - stdbool.h
  - stddef.h
  - stdint.h
  - stdio.h
  - stdlib.h
  - string.h
  - tgmath.h
  - wchar.h
  - wctype.h

- includes:
  - __config
  - __undef_macros
  - algorithm
  - any
  - array
  - atomic
  - bit
  - bitset
  - cassert
  - ccomplex
  - cctype
  - cerrno
  - cfenv
  - cfloat
  - charconv
  - chrono
  - cinttypes
  - ciso646
  - climits
  - clocale
  - cmath
  - codecvt
  - compare
  - complex
  - concepts
  - condition_variable
  - csetjmp
  - csignal
  - cstdarg
  - cstdbool
  - cstddef
  - cstdint
  - cstdio
  - cstdlib
  - cstring
  - ctgmath
  - ctime
  - cwchar
  - cwctype
  - cxxabi.h
  - deque
  - exception
  - filesystem
  - forward_list
  - fstream
  - functional
  - future
  - initializer_list
  - iomanip
  - ios
  - iosfwd
  - iostream
  - istream
  - iterator
  - limits
  - list
  - locale
  - map
  - memory
  - mutex
  - new
  - numeric
  - optional
  - ostream
  - queue
  - random
  - ratio
  - regex
  - scoped_allocator
  - set
  - shared_mutex
  - span
  - sstream
  - stack
  - stdexcept
  - streambuf
  - string
  - string_view
  - strstream
  - system_error
  - thread
  - tuple
  - typeindex
  - typeinfo
  - type_traits
  - unordered_map
  - unordered_set
  - use_ansi.h
  - utility
  - valarray
  - variant
  - vector
  - unwind.h:
    - contrib/libs/libunwind/include/unwind.h


# Though these are headers provided by libcxx, we do not want to allow them to be included.
# We are using non-existent filename to generate error instead, as there is no specific syntax for this case.
- includes:
  - ext/hash_map:                       DO_NOT_INCLUDE_NON_STANDARD_EXT_HASH_MAP
  - ext/hash_set:                       DO_NOT_INCLUDE_NON_STANDARD_EXT_HASH_SET
  - experimental/any:                   DO_NOT_INCLUDE_NON_STANDARD_EXPERIMENTAL_ANY
  - experimental/chrono:                DO_NOT_INCLUDE_NON_STANDARD_EXPERIMENTAL_CHRONO
  - experimental/numeric:               DO_NOT_INCLUDE_NON_STANDARD_EXPERIMENTAL_NUMERIC
  - experimental/optional:              DO_NOT_INCLUDE_NON_STANDARD_EXPERIMENTAL_OPTIONAL
  - experimental/ratio:                 DO_NOT_INCLUDE_NON_STANDARD_EXPERIMENTAL_RATIO
  - experimental/source_location:       DO_NOT_INCLUDE_NON_STANDARD_EXPERIMENTAL_SOURCE_LOCATION
  - experimental/string_view:           DO_NOT_INCLUDE_NON_STANDARD_EXPERIMENTAL_STRING_VIEW
  - experimental/system_error:          DO_NOT_INCLUDE_NON_STANDARD_EXPERIMENTAL_SYSTEM_ERROR
  - experimental/tuple:                 DO_NOT_INCLUDE_NON_STANDARD_EXPERIMENTAL_TUPLE

  # TODO: there is no <corouine> in system stl. Disable this include upon its appearance
  - experimental/coroutine