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.
4module std_config [system] [extern_c] {
5    header "__config"
6}
7
8module 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 bitset {
232    header "bitset"
233    export string
234    export iosfwd
235    export *
236  }
237  // No submodule for cassert. It fundamentally needs repeated, textual inclusion.
238  module charconv {
239    header "charconv"
240    export *
241  }
242  module chrono {
243    header "chrono"
244    export *
245  }
246  module codecvt {
247    header "codecvt"
248    export *
249  }
250  module compare {
251    header "compare"
252    export *
253  }
254  module complex {
255    header "complex"
256    export *
257  }
258  module condition_variable {
259    header "condition_variable"
260    export *
261  }
262  module deque {
263    header "deque"
264    export initializer_list
265    export *
266  }
267  module exception {
268    header "exception"
269    export *
270  }
271  module filesystem {
272    header "filesystem"
273    export *
274  }
275  module forward_list {
276    header "forward_list"
277    export initializer_list
278    export *
279  }
280  module fstream {
281    header "fstream"
282    export *
283  }
284  module functional {
285    header "functional"
286    export *
287  }
288  module future {
289    header "future"
290    export *
291  }
292  module initializer_list {
293    header "initializer_list"
294    export *
295  }
296  module iomanip {
297    header "iomanip"
298    export *
299  }
300  module ios {
301    header "ios"
302    export iosfwd
303    export *
304  }
305  module iosfwd {
306    header "iosfwd"
307    export *
308  }
309  module iostream {
310    header "iostream"
311    export ios
312    export streambuf
313    export istream
314    export ostream
315    export *
316  }
317  module istream {
318    header "istream"
319    // FIXME: should re-export ios, streambuf?
320    export *
321  }
322  module iterator {
323    header "iterator"
324    export *
325  }
326  module limits {
327    header "limits"
328    export *
329  }
330  module list {
331    header "list"
332    export initializer_list
333    export *
334  }
335  module locale {
336    header "locale"
337    export *
338  }
339  module map {
340    header "map"
341    export initializer_list
342    export *
343  }
344  module memory {
345    header "memory"
346    export *
347  }
348  module mutex {
349    header "mutex"
350    export *
351  }
352  module new {
353    header "new"
354    export *
355  }
356  module numeric {
357    header "numeric"
358    export *
359  }
360  module optional {
361    header "optional"
362    export *
363  }
364  module ostream {
365    header "ostream"
366    // FIXME: should re-export ios, streambuf?
367    export *
368  }
369  module queue {
370    header "queue"
371    export initializer_list
372    export *
373  }
374  module random {
375    header "random"
376    export initializer_list
377    export *
378  }
379  module ratio {
380    header "ratio"
381    export *
382  }
383  module regex {
384    header "regex"
385    export initializer_list
386    export *
387  }
388  module scoped_allocator {
389    header "scoped_allocator"
390    export *
391  }
392  module set {
393    header "set"
394    export initializer_list
395    export *
396  }
397  module sstream {
398    header "sstream"
399    // FIXME: should re-export istream, ostream, ios, streambuf, string?
400    export *
401  }
402  module stack {
403    header "stack"
404    export initializer_list
405    export *
406  }
407  module stdexcept {
408    header "stdexcept"
409    export *
410  }
411  module streambuf {
412    header "streambuf"
413    export *
414  }
415  module string {
416    header "string"
417    export initializer_list
418    export string_view
419    export __string
420    export *
421  }
422  module string_view {
423    header "string_view"
424    export initializer_list
425    export __string
426    export *
427  }
428  module strstream {
429    header "strstream"
430    export *
431  }
432  module system_error {
433    header "system_error"
434    export *
435  }
436  module thread {
437    header "thread"
438    export *
439  }
440  module tuple {
441    header "tuple"
442    export *
443  }
444  module type_traits {
445    header "type_traits"
446    export *
447  }
448  module typeindex {
449    header "typeindex"
450    export *
451  }
452  module typeinfo {
453    header "typeinfo"
454    export *
455  }
456  module unordered_map {
457    header "unordered_map"
458    export initializer_list
459    export *
460  }
461  module unordered_set {
462    header "unordered_set"
463    export initializer_list
464    export *
465  }
466  module utility {
467    header "utility"
468    export initializer_list
469    export *
470  }
471  module valarray {
472    header "valarray"
473    export initializer_list
474    export *
475  }
476  module variant {
477    header "variant"
478    export *
479  }
480  module vector {
481    header "vector"
482    export initializer_list
483    export *
484  }
485  module version {
486    header "version"
487    export *
488  }
489
490  // FIXME: These should be private.
491  module __bit_reference { header "__bit_reference" export * }
492  module __debug { header "__debug" export * }
493  module __errc { header "__errc" export * }
494  module __functional_base { header "__functional_base" export * }
495  module __hash_table { header "__hash_table" export * }
496  module __locale { header "__locale" export * }
497  module __mutex_base { header "__mutex_base" export * }
498  module __split_buffer { header "__split_buffer" export * }
499  module __sso_allocator { header "__sso_allocator" export * }
500  module __std_stream { header "__std_stream" export * }
501  module __string { header "__string" export * }
502  module __tree { header "__tree" export * }
503  module __tuple { header "__tuple" export * }
504  module __undef_macros { header "__undef_macros" export * }
505  module __node_handle { header "__node_handle" export * }
506
507  module experimental {
508    requires cplusplus11
509
510    module algorithm {
511      header "experimental/algorithm"
512      export *
513    }
514     module coroutine {
515      requires coroutines
516      header "experimental/coroutine"
517      export *
518    }
519    module deque {
520      header "experimental/deque"
521      export *
522    }
523    module dynarray {
524      header "experimental/dynarray"
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