Home | History | Annotate | Download | only in include
      1 // define the module for __config outside of the top level 'std' module
      2 // since __config may be included from C headers which may create an
      3 // include cycle.
      4 module std_config [system] [extern_c] {
      5     header "__config"
      6 }
      7 
      8 module std [system] {
      9   export std_config
     10   // FIXME: The standard does not require that each of these submodules
     11   // re-exports its imported modules. We should provide an alternative form of
     12   // export that issues a warning if a name from the submodule is used, and
     13   // use that to provide a 'strict mode' for libc++.
     14 
     15   // Deprecated C-compatibility headers. These can all be included from within
     16   // an 'extern "C"' context.
     17   module depr [extern_c] {
     18     // <assert.h> provided by C library.
     19     module ctype_h {
     20       header "ctype.h"
     21       export *
     22     }
     23     module errno_h {
     24       header "errno.h"
     25       export *
     26     }
     27     // <fenv.h> provided by C library.
     28     // <float.h> provided by compiler or C library.
     29     module inttypes_h {
     30       header "inttypes.h"
     31       export stdint_h
     32       export *
     33     }
     34     // <iso646.h> provided by compiler.
     35     // <limits.h> provided by compiler or C library.
     36     module locale_h {
     37       header "locale.h"
     38       export *
     39     }
     40     module math_h {
     41       header "math.h"
     42       export *
     43     }
     44     module setjmp_h {
     45       header "setjmp.h"
     46       export *
     47     }
     48     // FIXME: <stdalign.h> is missing.
     49     // <signal.h> provided by C library.
     50     // <stdarg.h> provided by compiler.
     51     // <stdbool.h> provided by compiler.
     52     module stddef_h {
     53       // <stddef.h>'s __need_* macros require textual inclusion.
     54       textual header "stddef.h"
     55     }
     56     module stdint_h {
     57       header "stdint.h"
     58       export *
     59       // FIXME: This module only exists on OS X and for some reason the
     60       // wildcard above doesn't export it.
     61       export Darwin.C.stdint
     62     }
     63     module stdio_h {
     64       // <stdio.h>'s __need_* macros require textual inclusion.
     65       textual header "stdio.h"
     66       export *
     67       export Darwin.C.stdio
     68     }
     69     module stdlib_h {
     70       // <stdlib.h>'s __need_* macros require textual inclusion.
     71       textual header "stdlib.h"
     72       export *
     73     }
     74     module string_h {
     75       header "string.h"
     76       export *
     77     }
     78     // FIXME: <uchar.h> is missing.
     79     // <time.h> provided by C library.
     80     module wchar_h {
     81       // <wchar.h>'s __need_* macros require textual inclusion.
     82       textual header "wchar.h"
     83       export *
     84     }
     85     module wctype_h {
     86       header "wctype.h"
     87       export *
     88     }
     89   }
     90 
     91   // <complex.h> and <tgmath.h> are not C headers in any real sense, do not
     92   // allow their use in extern "C" contexts.
     93   module complex_h {
     94     header "complex.h"
     95     export ccomplex
     96     export *
     97   }
     98   module tgmath_h {
     99     header "tgmath.h"
    100     export ccomplex
    101     export cmath
    102     export *
    103   }
    104 
    105   // C compatibility headers.
    106   module compat {
    107     module cassert {
    108       // <cassert>'s use of NDEBUG requires textual inclusion.
    109       textual header "cassert"
    110     }
    111     module ccomplex {
    112       header "ccomplex"
    113       export complex
    114       export *
    115     }
    116     module cctype {
    117       header "cctype"
    118       export *
    119     }
    120     module cerrno {
    121       header "cerrno"
    122       export *
    123     }
    124     module cfenv {
    125       header "cfenv"
    126       export *
    127     }
    128     module cfloat {
    129       header "cfloat"
    130       export *
    131     }
    132     module cinttypes {
    133       header "cinttypes"
    134       export cstdint
    135       export *
    136     }
    137     module ciso646 {
    138       header "ciso646"
    139       export *
    140     }
    141     module climits {
    142       header "climits"
    143       export *
    144     }
    145     module clocale {
    146       header "clocale"
    147       export *
    148     }
    149     module cmath {
    150       header "cmath"
    151       export *
    152     }
    153     module csetjmp {
    154       header "csetjmp"
    155       export *
    156     }
    157     module csignal {
    158       header "csignal"
    159       export *
    160     }
    161     // FIXME: <cstdalign> is missing.
    162     module cstdarg {
    163       header "cstdarg"
    164       export *
    165     }
    166     module cstdbool {
    167       header "cstdbool"
    168       export *
    169     }
    170     module cstddef {
    171       header "cstddef"
    172       export *
    173     }
    174     module cstdint {
    175       header "cstdint"
    176       export depr.stdint_h
    177       export *
    178     }
    179     module cstdio {
    180       header "cstdio"
    181       export *
    182     }
    183     module cstdlib {
    184       header "cstdlib"
    185       export *
    186     }
    187     module cstring {
    188       header "cstring"
    189       export *
    190     }
    191     module ctgmath {
    192       header "ctgmath"
    193       export ccomplex
    194       export cmath
    195       export *
    196     }
    197     module ctime {
    198       header "ctime"
    199       export *
    200     }
    201     // FIXME: <cuchar> is missing.
    202     module cwchar {
    203       header "cwchar"
    204       export depr.stdio_h
    205       export *
    206     }
    207     module cwctype {
    208       header "cwctype"
    209       export *
    210     }
    211   }
    212 
    213   module algorithm {
    214     header "algorithm"
    215     export initializer_list
    216     export *
    217   }
    218   module any {
    219     header "any"
    220     export *
    221   }
    222   module array {
    223     header "array"
    224     export initializer_list
    225     export *
    226   }
    227   module atomic {
    228     header "atomic"
    229     export *
    230   }
    231   module bit {
    232     header "bit"
    233     export *
    234   }
    235   module bitset {
    236     header "bitset"
    237     export string
    238     export iosfwd
    239     export *
    240   }
    241   // No submodule for cassert. It fundamentally needs repeated, textual inclusion.
    242   module charconv {
    243     header "charconv"
    244     export *
    245   }
    246   module chrono {
    247     header "chrono"
    248     export *
    249   }
    250   module codecvt {
    251     header "codecvt"
    252     export *
    253   }
    254   module compare {
    255     header "compare"
    256     export *
    257   }
    258   module complex {
    259     header "complex"
    260     export *
    261   }
    262   module condition_variable {
    263     header "condition_variable"
    264     export *
    265   }
    266   module deque {
    267     header "deque"
    268     export initializer_list
    269     export *
    270   }
    271   module exception {
    272     header "exception"
    273     export *
    274   }
    275   module filesystem {
    276     header "filesystem"
    277     export *
    278   }
    279   module forward_list {
    280     header "forward_list"
    281     export initializer_list
    282     export *
    283   }
    284   module fstream {
    285     header "fstream"
    286     export *
    287   }
    288   module functional {
    289     header "functional"
    290     export *
    291   }
    292   module future {
    293     header "future"
    294     export *
    295   }
    296   module initializer_list {
    297     header "initializer_list"
    298     export *
    299   }
    300   module iomanip {
    301     header "iomanip"
    302     export *
    303   }
    304   module ios {
    305     header "ios"
    306     export iosfwd
    307     export *
    308   }
    309   module iosfwd {
    310     header "iosfwd"
    311     export *
    312   }
    313   module iostream {
    314     header "iostream"
    315     export ios
    316     export streambuf
    317     export istream
    318     export ostream
    319     export *
    320   }
    321   module istream {
    322     header "istream"
    323     // FIXME: should re-export ios, streambuf?
    324     export *
    325   }
    326   module iterator {
    327     header "iterator"
    328     export *
    329   }
    330   module limits {
    331     header "limits"
    332     export *
    333   }
    334   module list {
    335     header "list"
    336     export initializer_list
    337     export *
    338   }
    339   module locale {
    340     header "locale"
    341     export *
    342   }
    343   module map {
    344     header "map"
    345     export initializer_list
    346     export *
    347   }
    348   module memory {
    349     header "memory"
    350     export *
    351   }
    352   module mutex {
    353     header "mutex"
    354     export *
    355   }
    356   module new {
    357     header "new"
    358     export *
    359   }
    360   module numeric {
    361     header "numeric"
    362     export *
    363   }
    364   module optional {
    365     header "optional"
    366     export *
    367   }
    368   module ostream {
    369     header "ostream"
    370     // FIXME: should re-export ios, streambuf?
    371     export *
    372   }
    373   module queue {
    374     header "queue"
    375     export initializer_list
    376     export *
    377   }
    378   module random {
    379     header "random"
    380     export initializer_list
    381     export *
    382   }
    383   module ratio {
    384     header "ratio"
    385     export *
    386   }
    387   module regex {
    388     header "regex"
    389     export initializer_list
    390     export *
    391   }
    392   module scoped_allocator {
    393     header "scoped_allocator"
    394     export *
    395   }
    396   module set {
    397     header "set"
    398     export initializer_list
    399     export *
    400   }
    401   module sstream {
    402     header "sstream"
    403     // FIXME: should re-export istream, ostream, ios, streambuf, string?
    404     export *
    405   }
    406   module stack {
    407     header "stack"
    408     export initializer_list
    409     export *
    410   }
    411   module stdexcept {
    412     header "stdexcept"
    413     export *
    414   }
    415   module streambuf {
    416     header "streambuf"
    417     export *
    418   }
    419   module string {
    420     header "string"
    421     export initializer_list
    422     export string_view
    423     export __string
    424     export *
    425   }
    426   module string_view {
    427     header "string_view"
    428     export initializer_list
    429     export __string
    430     export *
    431   }
    432   module strstream {
    433     header "strstream"
    434     export *
    435   }
    436   module system_error {
    437     header "system_error"
    438     export *
    439   }
    440   module thread {
    441     header "thread"
    442     export *
    443   }
    444   module tuple {
    445     header "tuple"
    446     export *
    447   }
    448   module type_traits {
    449     header "type_traits"
    450     export *
    451   }
    452   module typeindex {
    453     header "typeindex"
    454     export *
    455   }
    456   module typeinfo {
    457     header "typeinfo"
    458     export *
    459   }
    460   module unordered_map {
    461     header "unordered_map"
    462     export initializer_list
    463     export *
    464   }
    465   module unordered_set {
    466     header "unordered_set"
    467     export initializer_list
    468     export *
    469   }
    470   module utility {
    471     header "utility"
    472     export initializer_list
    473     export *
    474   }
    475   module valarray {
    476     header "valarray"
    477     export initializer_list
    478     export *
    479   }
    480   module variant {
    481     header "variant"
    482     export *
    483   }
    484   module vector {
    485     header "vector"
    486     export initializer_list
    487     export *
    488   }
    489   module version {
    490     header "version"
    491     export *
    492   }
    493 
    494   // FIXME: These should be private.
    495   module __bit_reference { header "__bit_reference" export * }
    496   module __debug { header "__debug" export * }
    497   module __errc { header "__errc" export * }
    498   module __functional_base { header "__functional_base" export * }
    499   module __hash_table { header "__hash_table" export * }
    500   module __locale { header "__locale" export * }
    501   module __mutex_base { header "__mutex_base" export * }
    502   module __split_buffer { header "__split_buffer" export * }
    503   module __sso_allocator { header "__sso_allocator" export * }
    504   module __std_stream { header "__std_stream" export * }
    505   module __string { header "__string" export * }
    506   module __tree { header "__tree" export * }
    507   module __tuple { header "__tuple" export * }
    508   module __undef_macros { header "__undef_macros" export * }
    509   module __node_handle { header "__node_handle" export * }
    510 
    511   module experimental {
    512     requires cplusplus11
    513 
    514     module algorithm {
    515       header "experimental/algorithm"
    516       export *
    517     }
    518      module coroutine {
    519       requires coroutines
    520       header "experimental/coroutine"
    521       export *
    522     }
    523     module deque {
    524       header "experimental/deque"
    525       export *
    526     }
    527     module filesystem {
    528       header "experimental/filesystem"
    529       export *
    530     }
    531     module forward_list {
    532       header "experimental/forward_list"
    533       export *
    534     }
    535     module functional {
    536       header "experimental/functional"
    537       export *
    538     }
    539     module iterator {
    540       header "experimental/iterator"
    541       export *
    542     }
    543     module list {
    544       header "experimental/list"
    545       export *
    546     }
    547     module map {
    548       header "experimental/map"
    549       export *
    550     }
    551     module memory_resource {
    552       header "experimental/memory_resource"
    553       export *
    554     }
    555     module propagate_const {
    556       header "experimental/propagate_const"
    557       export *
    558     }
    559     module regex {
    560       header "experimental/regex"
    561       export *
    562     }
    563     module simd {
    564       header "experimental/simd"
    565       export *
    566     }
    567     module set {
    568       header "experimental/set"
    569       export *
    570     }
    571     module span {
    572       header "span"
    573       export *
    574     }
    575     module string {
    576       header "experimental/string"
    577       export *
    578     }
    579     module type_traits {
    580       header "experimental/type_traits"
    581       export *
    582     }
    583     module unordered_map {
    584       header "experimental/unordered_map"
    585       export *
    586     }
    587     module unordered_set {
    588       header "experimental/unordered_set"
    589       export *
    590     }
    591     module utility {
    592       header "experimental/utility"
    593       export *
    594     }
    595     module vector {
    596       header "experimental/vector"
    597       export *
    598     }
    599     // FIXME these should be private
    600     module __memory {
    601       header "experimental/__memory"
    602       export *
    603     }
    604   } // end experimental
    605 }
    606