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    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