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