2016-12-08 14:37:41 +08:00
|
|
|
// define the module for __config outside of the top level 'std' module
|
|
|
|
// since __config may be included from C headers which may create an
|
|
|
|
// include cycle.
|
|
|
|
module std_config [system] [extern_c] {
|
|
|
|
header "__config"
|
|
|
|
}
|
|
|
|
|
2014-05-21 08:33:49 +08:00
|
|
|
module std [system] {
|
2016-12-08 14:37:41 +08:00
|
|
|
export std_config
|
2014-05-21 08:33:49 +08:00
|
|
|
// FIXME: The standard does not require that each of these submodules
|
|
|
|
// re-exports its imported modules. We should provide an alternative form of
|
|
|
|
// export that issues a warning if a name from the submodule is used, and
|
|
|
|
// use that to provide a 'strict mode' for libc++.
|
2016-10-21 11:14:27 +08:00
|
|
|
|
|
|
|
// Deprecated C-compatibility headers. These can all be included from within
|
|
|
|
// an 'extern "C"' context.
|
|
|
|
module depr [extern_c] {
|
|
|
|
// <assert.h> provided by C library.
|
|
|
|
module ctype_h {
|
|
|
|
header "ctype.h"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module errno_h {
|
|
|
|
header "errno.h"
|
|
|
|
export *
|
|
|
|
}
|
2019-02-12 07:47:19 +08:00
|
|
|
module fenv_h {
|
|
|
|
header "fenv.h"
|
|
|
|
export *
|
|
|
|
}
|
2016-10-21 11:14:27 +08:00
|
|
|
// <float.h> provided by compiler or C library.
|
|
|
|
module inttypes_h {
|
|
|
|
header "inttypes.h"
|
|
|
|
export stdint_h
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
// <iso646.h> provided by compiler.
|
|
|
|
// <limits.h> provided by compiler or C library.
|
2016-11-19 09:14:15 +08:00
|
|
|
module locale_h {
|
|
|
|
header "locale.h"
|
|
|
|
export *
|
|
|
|
}
|
2016-10-21 11:14:27 +08:00
|
|
|
module math_h {
|
|
|
|
header "math.h"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module setjmp_h {
|
|
|
|
header "setjmp.h"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
// FIXME: <stdalign.h> is missing.
|
|
|
|
// <signal.h> provided by C library.
|
|
|
|
// <stdarg.h> provided by compiler.
|
2016-12-06 17:48:32 +08:00
|
|
|
// <stdbool.h> provided by compiler.
|
2016-10-21 11:14:27 +08:00
|
|
|
module stddef_h {
|
|
|
|
// <stddef.h>'s __need_* macros require textual inclusion.
|
|
|
|
textual header "stddef.h"
|
|
|
|
}
|
2016-11-23 04:05:19 +08:00
|
|
|
module stdint_h {
|
|
|
|
header "stdint.h"
|
|
|
|
export *
|
|
|
|
// FIXME: This module only exists on OS X and for some reason the
|
|
|
|
// wildcard above doesn't export it.
|
|
|
|
export Darwin.C.stdint
|
|
|
|
}
|
2016-10-21 11:14:27 +08:00
|
|
|
module stdio_h {
|
|
|
|
// <stdio.h>'s __need_* macros require textual inclusion.
|
|
|
|
textual header "stdio.h"
|
|
|
|
export *
|
2016-12-06 15:40:46 +08:00
|
|
|
export Darwin.C.stdio
|
2016-10-21 11:14:27 +08:00
|
|
|
}
|
|
|
|
module stdlib_h {
|
|
|
|
// <stdlib.h>'s __need_* macros require textual inclusion.
|
|
|
|
textual header "stdlib.h"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module string_h {
|
|
|
|
header "string.h"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
// FIXME: <uchar.h> is missing.
|
|
|
|
// <time.h> provided by C library.
|
|
|
|
module wchar_h {
|
|
|
|
// <wchar.h>'s __need_* macros require textual inclusion.
|
|
|
|
textual header "wchar.h"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module wctype_h {
|
|
|
|
header "wctype.h"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// <complex.h> and <tgmath.h> are not C headers in any real sense, do not
|
|
|
|
// allow their use in extern "C" contexts.
|
|
|
|
module complex_h {
|
|
|
|
header "complex.h"
|
|
|
|
export ccomplex
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module tgmath_h {
|
|
|
|
header "tgmath.h"
|
|
|
|
export ccomplex
|
|
|
|
export cmath
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
|
|
|
|
// C compatibility headers.
|
|
|
|
module compat {
|
|
|
|
module cassert {
|
|
|
|
// <cassert>'s use of NDEBUG requires textual inclusion.
|
|
|
|
textual header "cassert"
|
|
|
|
}
|
|
|
|
module ccomplex {
|
|
|
|
header "ccomplex"
|
|
|
|
export complex
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module cctype {
|
|
|
|
header "cctype"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module cerrno {
|
|
|
|
header "cerrno"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module cfenv {
|
|
|
|
header "cfenv"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module cfloat {
|
|
|
|
header "cfloat"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module cinttypes {
|
|
|
|
header "cinttypes"
|
|
|
|
export cstdint
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module ciso646 {
|
|
|
|
header "ciso646"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module climits {
|
|
|
|
header "climits"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module clocale {
|
|
|
|
header "clocale"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module cmath {
|
|
|
|
header "cmath"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module csetjmp {
|
|
|
|
header "csetjmp"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module csignal {
|
|
|
|
header "csignal"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
// FIXME: <cstdalign> is missing.
|
|
|
|
module cstdarg {
|
|
|
|
header "cstdarg"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module cstdbool {
|
|
|
|
header "cstdbool"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module cstddef {
|
|
|
|
header "cstddef"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module cstdint {
|
|
|
|
header "cstdint"
|
2016-11-23 04:05:19 +08:00
|
|
|
export depr.stdint_h
|
2016-10-21 11:14:27 +08:00
|
|
|
export *
|
|
|
|
}
|
|
|
|
module cstdio {
|
|
|
|
header "cstdio"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module cstdlib {
|
|
|
|
header "cstdlib"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module cstring {
|
|
|
|
header "cstring"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module ctgmath {
|
|
|
|
header "ctgmath"
|
|
|
|
export ccomplex
|
|
|
|
export cmath
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module ctime {
|
|
|
|
header "ctime"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
// FIXME: <cuchar> is missing.
|
|
|
|
module cwchar {
|
|
|
|
header "cwchar"
|
2016-12-06 15:40:46 +08:00
|
|
|
export depr.stdio_h
|
2016-10-21 11:14:27 +08:00
|
|
|
export *
|
|
|
|
}
|
|
|
|
module cwctype {
|
|
|
|
header "cwctype"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-05-21 08:33:49 +08:00
|
|
|
module algorithm {
|
|
|
|
header "algorithm"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
2016-12-06 07:33:19 +08:00
|
|
|
module any {
|
|
|
|
header "any"
|
|
|
|
export *
|
|
|
|
}
|
2014-05-21 08:33:49 +08:00
|
|
|
module array {
|
|
|
|
header "array"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module atomic {
|
|
|
|
header "atomic"
|
|
|
|
export *
|
|
|
|
}
|
2018-08-18 00:07:48 +08:00
|
|
|
module bit {
|
|
|
|
header "bit"
|
|
|
|
export *
|
|
|
|
}
|
2014-05-21 08:33:49 +08:00
|
|
|
module bitset {
|
|
|
|
header "bitset"
|
|
|
|
export string
|
|
|
|
export iosfwd
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
// No submodule for cassert. It fundamentally needs repeated, textual inclusion.
|
2018-08-01 10:38:30 +08:00
|
|
|
module charconv {
|
|
|
|
header "charconv"
|
|
|
|
export *
|
|
|
|
}
|
2014-05-21 08:33:49 +08:00
|
|
|
module chrono {
|
|
|
|
header "chrono"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module codecvt {
|
|
|
|
header "codecvt"
|
|
|
|
export *
|
|
|
|
}
|
2018-04-07 05:37:23 +08:00
|
|
|
module compare {
|
|
|
|
header "compare"
|
|
|
|
export *
|
|
|
|
}
|
2014-05-21 08:33:49 +08:00
|
|
|
module complex {
|
|
|
|
header "complex"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module condition_variable {
|
|
|
|
header "condition_variable"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module deque {
|
|
|
|
header "deque"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module exception {
|
|
|
|
header "exception"
|
|
|
|
export *
|
|
|
|
}
|
2019-08-06 02:29:14 +08:00
|
|
|
module execution {
|
|
|
|
header "execution"
|
|
|
|
export *
|
|
|
|
}
|
Implement <filesystem>
This patch implements the <filesystem> header and uses that
to provide <experimental/filesystem>.
Unlike other standard headers, the symbols needed for <filesystem>
have not yet been placed in libc++.so. Instead they live in the
new libc++fs.a library. Users of filesystem are required to link this
library. (Also note that libc++experimental no longer contains the
definition of <experimental/filesystem>, which now requires linking libc++fs).
The reason for keeping <filesystem> out of the dylib for now is that
it's still somewhat experimental, and the possibility of requiring an
ABI breaking change is very real. In the future the symbols will likely
be moved into the dylib, or the dylib will be made to link libc++fs automagically).
Note that moving the symbols out of libc++experimental may break user builds
until they update to -lc++fs. This should be OK, because the experimental
library provides no stability guarantees. However, I plan on looking into
ways we can force libc++experimental to automagically link libc++fs.
In order to use a single implementation and set of tests for <filesystem>, it
has been placed in a special `__fs` namespace. This namespace is inline in
C++17 onward, but not before that. As such implementation is available
in C++11 onward, but no filesystem namespace is present "directly", and
as such name conflicts shouldn't occur in C++11 or C++14.
llvm-svn: 338093
2018-07-27 11:07:09 +08:00
|
|
|
module filesystem {
|
|
|
|
header "filesystem"
|
|
|
|
export *
|
|
|
|
}
|
2014-05-21 08:33:49 +08:00
|
|
|
module forward_list {
|
|
|
|
header "forward_list"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module fstream {
|
|
|
|
header "fstream"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module functional {
|
|
|
|
header "functional"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module future {
|
|
|
|
header "future"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module initializer_list {
|
|
|
|
header "initializer_list"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module iomanip {
|
|
|
|
header "iomanip"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module ios {
|
|
|
|
header "ios"
|
|
|
|
export iosfwd
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module iosfwd {
|
|
|
|
header "iosfwd"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module iostream {
|
|
|
|
header "iostream"
|
|
|
|
export ios
|
|
|
|
export streambuf
|
|
|
|
export istream
|
|
|
|
export ostream
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module istream {
|
|
|
|
header "istream"
|
|
|
|
// FIXME: should re-export ios, streambuf?
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module iterator {
|
|
|
|
header "iterator"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module limits {
|
|
|
|
header "limits"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module list {
|
|
|
|
header "list"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module locale {
|
|
|
|
header "locale"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module map {
|
|
|
|
header "map"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module memory {
|
|
|
|
header "memory"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module mutex {
|
|
|
|
header "mutex"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module new {
|
|
|
|
header "new"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module numeric {
|
|
|
|
header "numeric"
|
|
|
|
export *
|
|
|
|
}
|
2016-12-06 07:33:19 +08:00
|
|
|
module optional {
|
|
|
|
header "optional"
|
|
|
|
export *
|
|
|
|
}
|
2014-05-21 08:33:49 +08:00
|
|
|
module ostream {
|
|
|
|
header "ostream"
|
|
|
|
// FIXME: should re-export ios, streambuf?
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module queue {
|
|
|
|
header "queue"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module random {
|
|
|
|
header "random"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module ratio {
|
|
|
|
header "ratio"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module regex {
|
|
|
|
header "regex"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module scoped_allocator {
|
|
|
|
header "scoped_allocator"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module set {
|
|
|
|
header "set"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module sstream {
|
|
|
|
header "sstream"
|
|
|
|
// FIXME: should re-export istream, ostream, ios, streambuf, string?
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module stack {
|
|
|
|
header "stack"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module stdexcept {
|
|
|
|
header "stdexcept"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module streambuf {
|
|
|
|
header "streambuf"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module string {
|
|
|
|
header "string"
|
|
|
|
export initializer_list
|
2016-12-06 07:53:23 +08:00
|
|
|
export string_view
|
|
|
|
export __string
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module string_view {
|
|
|
|
header "string_view"
|
|
|
|
export initializer_list
|
|
|
|
export __string
|
2014-05-21 08:33:49 +08:00
|
|
|
export *
|
|
|
|
}
|
|
|
|
module strstream {
|
|
|
|
header "strstream"
|
2016-12-06 07:16:07 +08:00
|
|
|
export *
|
2014-05-21 08:33:49 +08:00
|
|
|
}
|
|
|
|
module system_error {
|
|
|
|
header "system_error"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module thread {
|
|
|
|
header "thread"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module tuple {
|
|
|
|
header "tuple"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module type_traits {
|
|
|
|
header "type_traits"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module typeindex {
|
|
|
|
header "typeindex"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module typeinfo {
|
|
|
|
header "typeinfo"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module unordered_map {
|
|
|
|
header "unordered_map"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module unordered_set {
|
|
|
|
header "unordered_set"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module utility {
|
|
|
|
header "utility"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module valarray {
|
|
|
|
header "valarray"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
2016-12-06 07:33:19 +08:00
|
|
|
module variant {
|
|
|
|
header "variant"
|
|
|
|
export *
|
|
|
|
}
|
2014-05-21 08:33:49 +08:00
|
|
|
module vector {
|
|
|
|
header "vector"
|
|
|
|
export initializer_list
|
|
|
|
export *
|
|
|
|
}
|
2018-04-04 12:21:54 +08:00
|
|
|
module version {
|
|
|
|
header "version"
|
|
|
|
export *
|
|
|
|
}
|
2014-05-21 08:33:49 +08:00
|
|
|
|
|
|
|
// FIXME: These should be private.
|
|
|
|
module __bit_reference { header "__bit_reference" export * }
|
|
|
|
module __debug { header "__debug" export * }
|
2018-07-03 11:25:10 +08:00
|
|
|
module __errc { header "__errc" export * }
|
2014-05-21 08:33:49 +08:00
|
|
|
module __functional_base { header "__functional_base" export * }
|
|
|
|
module __hash_table { header "__hash_table" export * }
|
|
|
|
module __locale { header "__locale" export * }
|
|
|
|
module __mutex_base { header "__mutex_base" export * }
|
|
|
|
module __split_buffer { header "__split_buffer" export * }
|
|
|
|
module __sso_allocator { header "__sso_allocator" export * }
|
|
|
|
module __std_stream { header "__std_stream" export * }
|
2016-12-06 07:53:23 +08:00
|
|
|
module __string { header "__string" export * }
|
2014-05-21 08:33:49 +08:00
|
|
|
module __tree { header "__tree" export * }
|
|
|
|
module __tuple { header "__tuple" export * }
|
2017-06-01 06:07:49 +08:00
|
|
|
module __undef_macros { header "__undef_macros" export * }
|
2018-08-01 09:33:38 +08:00
|
|
|
module __node_handle { header "__node_handle" export * }
|
2016-12-06 07:55:34 +08:00
|
|
|
|
|
|
|
module experimental {
|
2016-12-06 09:34:24 +08:00
|
|
|
requires cplusplus11
|
|
|
|
|
2016-12-06 07:55:34 +08:00
|
|
|
module algorithm {
|
|
|
|
header "experimental/algorithm"
|
|
|
|
export *
|
|
|
|
}
|
2017-05-26 07:39:29 +08:00
|
|
|
module coroutine {
|
2017-05-30 07:17:28 +08:00
|
|
|
requires coroutines
|
2017-05-26 07:39:29 +08:00
|
|
|
header "experimental/coroutine"
|
|
|
|
export *
|
|
|
|
}
|
2016-12-06 07:55:34 +08:00
|
|
|
module deque {
|
|
|
|
header "experimental/deque"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module filesystem {
|
|
|
|
header "experimental/filesystem"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module forward_list {
|
|
|
|
header "experimental/forward_list"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module functional {
|
|
|
|
header "experimental/functional"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module iterator {
|
|
|
|
header "experimental/iterator"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module list {
|
|
|
|
header "experimental/list"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module map {
|
|
|
|
header "experimental/map"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module memory_resource {
|
|
|
|
header "experimental/memory_resource"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module propagate_const {
|
|
|
|
header "experimental/propagate_const"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module regex {
|
|
|
|
header "experimental/regex"
|
|
|
|
export *
|
|
|
|
}
|
2018-04-24 05:54:06 +08:00
|
|
|
module simd {
|
|
|
|
header "experimental/simd"
|
|
|
|
export *
|
|
|
|
}
|
2016-12-06 07:55:34 +08:00
|
|
|
module set {
|
|
|
|
header "experimental/set"
|
|
|
|
export *
|
|
|
|
}
|
2018-07-24 11:01:02 +08:00
|
|
|
module span {
|
|
|
|
header "span"
|
|
|
|
export *
|
|
|
|
}
|
2016-12-06 07:55:34 +08:00
|
|
|
module string {
|
|
|
|
header "experimental/string"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module type_traits {
|
|
|
|
header "experimental/type_traits"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module unordered_map {
|
|
|
|
header "experimental/unordered_map"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module unordered_set {
|
|
|
|
header "experimental/unordered_set"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module utility {
|
|
|
|
header "experimental/utility"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
module vector {
|
|
|
|
header "experimental/vector"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
// FIXME these should be private
|
|
|
|
module __memory {
|
|
|
|
header "experimental/__memory"
|
|
|
|
export *
|
|
|
|
}
|
|
|
|
} // end experimental
|
2014-05-21 08:33:49 +08:00
|
|
|
}
|