[ModuleMap] Add more module entries to cover some non modular headers
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Fri, 21 Oct 2016 03:14:27 +0000 (03:14 +0000)
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Fri, 21 Oct 2016 03:14:27 +0000 (03:14 +0000)
These modules are necessary on Darwin to allow modules with
'no_undeclared_includes' (introduced in clang r284797) to work properly
while using libc++ headers.

Patch extracted from a suggested module.modulemap from Richard Smith!

llvm-svn: 284801

libcxx/include/module.modulemap

index 3fb7428..b966423 100644 (file)
@@ -3,6 +3,348 @@ module std [system] {
   // 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++.
+
+  // 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 *
+    }
+    // <fenv.h> provided by C library.
+    // <float.h> provided by compiler or C library.
+    module inttypes_h {
+      header "inttypes.h"
+      export stdint_h
+/*
+      export_macros
+        PRId8, PRId16, PRId32, PRId64, PRIdFAST8, PRIdFAST16, PRIdFAST32, PRIdFAST64, PRIdLEAST8, PRIdLEAST16, PRIdLEAST32, PRIdLEAST64, PRIdMAX, PRIdPTR,
+        PRIi8, PRIi16, PRIi32, PRIi64, PRIiFAST8, PRIiFAST16, PRIiFAST32, PRIiFAST64, PRIiLEAST8, PRIiLEAST16, PRIiLEAST32, PRIiLEAST64, PRIiMAX, PRIiPTR,
+        PRIo8, PRIo16, PRIo32, PRIo64, PRIoFAST8, PRIoFAST16, PRIoFAST32, PRIoFAST64, PRIoLEAST8, PRIoLEAST16, PRIoLEAST32, PRIoLEAST64, PRIoMAX, PRIoPTR,
+        PRIu8, PRIu16, PRIu32, PRIu64, PRIuFAST8, PRIuFAST16, PRIuFAST32, PRIuFAST64, PRIuLEAST8, PRIuLEAST16, PRIuLEAST32, PRIuLEAST64, PRIuMAX, PRIuPTR,
+        PRIx8, PRIx16, PRIx32, PRIx64, PRIxFAST8, PRIxFAST16, PRIxFAST32, PRIxFAST64, PRIxLEAST8, PRIxLEAST16, PRIxLEAST32, PRIxLEAST64, PRIxMAX, PRIxPTR,
+        PRIX8, PRIX16, PRIX32, PRIX64, PRIXFAST8, PRIXFAST16, PRIXFAST32, PRIXFAST64, PRIXLEAST8, PRIXLEAST16, PRIXLEAST32, PRIXLEAST64, PRIXMAX, PRIXPTR,
+        SCNd8, SCNd16, SCNd32, SCNd64, SCNdFAST8, SCNdFAST16, SCNdFAST32, SCNdFAST64, SCNdLEAST8, SCNdLEAST16, SCNdLEAST32, SCNdLEAST64, SCNdMAX, SCNdPTR,
+        SCNi8, SCNi16, SCNi32, SCNi64, SCNiFAST8, SCNiFAST16, SCNiFAST32, SCNiFAST64, SCNiLEAST8, SCNiLEAST16, SCNiLEAST32, SCNiLEAST64, SCNiMAX, SCNiPTR,
+        SCNo8, SCNo16, SCNo32, SCNo64, SCNoFAST8, SCNoFAST16, SCNoFAST32, SCNoFAST64, SCNoLEAST8, SCNoLEAST16, SCNoLEAST32, SCNoLEAST64, SCNoMAX, SCNoPTR,
+        SCNu8, SCNu16, SCNu32, SCNu64, SCNuFAST8, SCNuFAST16, SCNuFAST32, SCNuFAST64, SCNuLEAST8, SCNuLEAST16, SCNuLEAST32, SCNuLEAST64, SCNuMAX, SCNuPTR,
+        SCNx8, SCNx16, SCNx32, SCNx64, SCNxFAST8, SCNxFAST16, SCNxFAST32, SCNxFAST64, SCNxLEAST8, SCNxLEAST16, SCNxLEAST32, SCNxLEAST64, SCNxMAX, SCNxPTR,
+        SCNX8, SCNX16, SCNX32, SCNX64, SCNXFAST8, SCNXFAST16, SCNXFAST32, SCNXFAST64, SCNXLEAST8, SCNXLEAST16, SCNXLEAST32, SCNXLEAST64, SCNXMAX, SCNXPTR
+*/
+      export *
+    }
+    // <iso646.h> provided by compiler.
+    // <limits.h> provided by compiler or C library.
+    // <locale.h> provided by C library.
+    module math_h {
+      header "math.h"
+/*
+      export_macros FP_FAST_FMA, FP_FAST_FMAF, FP_FAST_FMAL, FP_ILOGBO, FP_ILOGBNAN,
+                    FP_INFINITE, FP_NAN, FP_NORMAL, FP_SUBNORMAL, FP_ZERO,
+                    HUGE_VAL, HUGE_VALF, HUGE_VALL, INFINITY, NAN,
+                    MATH_ERRNO, MATH_ERREXCEPT, math_errhandling
+*/
+      export *
+    }
+    module setjmp_h {
+      header "setjmp.h"
+/*
+      export_macros setjmp
+*/
+      export *
+    }
+    // FIXME: <stdalign.h> is missing.
+    // <signal.h> provided by C library.
+    // <stdarg.h> provided by compiler.
+    // <stdbool.h> provided by compiler.
+    module stddef_h {
+      // <stddef.h>'s __need_* macros require textual inclusion.
+      textual header "stddef.h"
+    }
+    // <stdint.h> provided by compiler or C library.
+    module stdio_h {
+      // <stdio.h>'s __need_* macros require textual inclusion.
+      textual header "stdio.h"
+/*
+      export_macros BUFSIZ, EOF, FILENAME_MAX, FOPEN_MAX, L_tmpnam, NULL,
+                    SEEK_CUR, SEEK_END, SEEK_SET, TMP_MAX, _IOFBF, _IOLBF,
+                    stdin, stdout, stderr
+*/
+      export *
+    }
+    module stdlib_h {
+      // <stdlib.h>'s __need_* macros require textual inclusion.
+      textual header "stdlib.h"
+/*
+      export_macros RAND_MAX
+*/
+      export *
+    }
+    module string_h {
+      header "string.h"
+/*
+      export_macros NULL
+*/
+      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_macros NULL, WCHAR_MAX, WCHAR_MIN, WEOF
+*/
+      export *
+    }
+    module wctype_h {
+      header "wctype.h"
+/*
+      export_macros WEOF
+*/
+      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_macros    ECONNREFUSED, EIO,          ENODEV,      ENOTEMPTY,       ERANGE,
+        E2BIG,         ECONNRESET,   EISCONN,      ENOENT,      ENOTRECOVERABLE, EROFS,
+        EACCES,        EDEADLK,      EISDIR,       ENOEXEC,     ENOTSOCK,        ESPIPE,
+        EADDRINUSE,    EDESTADDRREQ, ELOOP,        ENOLCK,      ENOTSUP,         ESRCH,
+        EADDRNOTAVAIL, EDOM,         EMFILE,       ENOLINK,     ENOTTY,          ETIME,
+        EAFNOSUPPORT,  EEXIST,       EMLINK,       ENOMEM,      ENXIO,           ETIMEDOUT,
+        EAGAIN,        EFAULT,       EMSGSIZE,     ENOMSG,      EOPNOTSUPP,      ETXTBSY,
+        EALREADY,      EFBIG,        ENAMETOOLONG, ENOPROTOOPT, EOVERFLOW,       EWOULDBLOCK,
+        EBADF,         EHOSTUNREACH, ENETDOWN,     ENOSPC,      EOWNERDEAD,      EXDEV,
+        EBADMSG,       EIDRM,        ENETRESET,    ENOSR,       EPERM,           errno,
+        EBUSY,         EILSEQ,       ENETUNREACH,  ENOSTR,      EPIPE,
+        ECANCELED,     EINPROGRESS,  ENFILE,       ENOSYS,      EPROTO,
+        ECHILD,        EINTR,        ENOBUFS,      ENOTCONN,    EPROTONOSUPPORT,
+        ECONNABORTED,  EINVAL,       ENODATA,      ENOTDIR,     EPROTOTYPE
+*/
+      export *
+    }
+    module cfenv {
+      header "cfenv"
+/*
+      export_macros FE_ALL_EXCEPT, FE_DIVBYZERO, FE_INEXACT, FE_INVALID, FE_OVERFLOW,
+                    FE_UNDERFLOW, FE_DOWNWARD, FE_TONEAREST, FE_TOWARDZERO, FE_UPWARD,
+                    FE_DFL_ENV
+*/
+      export *
+    }
+    module cfloat {
+      header "cfloat"
+/*
+      export_macros FLT_EVAL_METHOD, FLT_RADIX, FLT_ROUNDS,
+                    FLT_DIG, FLT_EPSILON, FLT_MANT_DIG,
+                    FLT_MAX, FLT_MAX_10_EXP, FLT_MAX_EXP,
+                    FLT_MIN, FLT_MIN_10_EXP, FLT_MIN_EXP,
+                    DBL_DIG, DBL_EPSILON, DBL_MANT_DIG,
+                    DBL_MAX, DBL_MAX_10_EXP, DBL_MAX_EXP,
+                    DBL_MIN, DBL_MIN_10_EXP, DBL_MIN_EXP,
+                    LDBL_DIG, LDBL_EPSILON, LDBL_MANT_DIG,
+                    LDBL_MAX, LDBL_MAX_10_EXP, LDBL_MAX_EXP,
+                    LDBL_MIN, LDBL_MIN_10_EXP, LDBL_MIN_EXP
+*/
+      export *
+    }
+    module cinttypes {
+      header "cinttypes"
+      export cstdint
+/*
+      export_macros
+        PRId8, PRId16, PRId32, PRId64, PRIdFAST8, PRIdFAST16, PRIdFAST32, PRIdFAST64, PRIdLEAST8, PRIdLEAST16, PRIdLEAST32, PRIdLEAST64, PRIdMAX, PRIdPTR,
+        PRIi8, PRIi16, PRIi32, PRIi64, PRIiFAST8, PRIiFAST16, PRIiFAST32, PRIiFAST64, PRIiLEAST8, PRIiLEAST16, PRIiLEAST32, PRIiLEAST64, PRIiMAX, PRIiPTR,
+        PRIo8, PRIo16, PRIo32, PRIo64, PRIoFAST8, PRIoFAST16, PRIoFAST32, PRIoFAST64, PRIoLEAST8, PRIoLEAST16, PRIoLEAST32, PRIoLEAST64, PRIoMAX, PRIoPTR,
+        PRIu8, PRIu16, PRIu32, PRIu64, PRIuFAST8, PRIuFAST16, PRIuFAST32, PRIuFAST64, PRIuLEAST8, PRIuLEAST16, PRIuLEAST32, PRIuLEAST64, PRIuMAX, PRIuPTR,
+        PRIx8, PRIx16, PRIx32, PRIx64, PRIxFAST8, PRIxFAST16, PRIxFAST32, PRIxFAST64, PRIxLEAST8, PRIxLEAST16, PRIxLEAST32, PRIxLEAST64, PRIxMAX, PRIxPTR,
+        PRIX8, PRIX16, PRIX32, PRIX64, PRIXFAST8, PRIXFAST16, PRIXFAST32, PRIXFAST64, PRIXLEAST8, PRIXLEAST16, PRIXLEAST32, PRIXLEAST64, PRIXMAX, PRIXPTR,
+        SCNd8, SCNd16, SCNd32, SCNd64, SCNdFAST8, SCNdFAST16, SCNdFAST32, SCNdFAST64, SCNdLEAST8, SCNdLEAST16, SCNdLEAST32, SCNdLEAST64, SCNdMAX, SCNdPTR,
+        SCNi8, SCNi16, SCNi32, SCNi64, SCNiFAST8, SCNiFAST16, SCNiFAST32, SCNiFAST64, SCNiLEAST8, SCNiLEAST16, SCNiLEAST32, SCNiLEAST64, SCNiMAX, SCNiPTR,
+        SCNo8, SCNo16, SCNo32, SCNo64, SCNoFAST8, SCNoFAST16, SCNoFAST32, SCNoFAST64, SCNoLEAST8, SCNoLEAST16, SCNoLEAST32, SCNoLEAST64, SCNoMAX, SCNoPTR,
+        SCNu8, SCNu16, SCNu32, SCNu64, SCNuFAST8, SCNuFAST16, SCNuFAST32, SCNuFAST64, SCNuLEAST8, SCNuLEAST16, SCNuLEAST32, SCNuLEAST64, SCNuMAX, SCNuPTR,
+        SCNx8, SCNx16, SCNx32, SCNx64, SCNxFAST8, SCNxFAST16, SCNxFAST32, SCNxFAST64, SCNxLEAST8, SCNxLEAST16, SCNxLEAST32, SCNxLEAST64, SCNxMAX, SCNxPTR,
+        SCNX8, SCNX16, SCNX32, SCNX64, SCNXFAST8, SCNXFAST16, SCNXFAST32, SCNXFAST64, SCNXLEAST8, SCNXLEAST16, SCNXLEAST32, SCNXLEAST64, SCNXMAX, SCNXPTR
+*/
+      export *
+    }
+    module ciso646 {
+      header "ciso646"
+      export *
+    }
+    module climits {
+      header "climits"
+/*
+      export_macros CHAR_BIT,  CHAR_MIN,  CHAR_MAX,
+                    SCHAR_MIN, SCHAR_MAX, UCHAR_MAX,
+                    SHRT_MIN,  SHRT_MAX,  USHRT_MAX,
+                    INT_MIN,   INT_MAX,   UINT_MAX,
+                    LONG_MIN,  LONG_MAX,  ULONG_MAX,
+                    LLONG_MIN, LLONG_MAX, ULLONG_MAX,
+                    MB_LEN_MAX
+*/
+      export *
+    }
+    module clocale {
+      header "clocale"
+/*
+      export_macros LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME, NULL
+*/
+      export *
+    }
+    module cmath {
+      header "cmath"
+/*
+      export_macros FP_FAST_FMA, FP_FAST_FMAF, FP_FAST_FMAL, FP_ILOGBO, FP_ILOGBNAN,
+                    FP_INFINITE, FP_NAN, FP_NORMAL, FP_SUBNORMAL, FP_ZERO,
+                    HUGE_VAL, HUGE_VALF, HUGE_VALL, INFINITY, NAN,
+                    MATH_ERRNO, MATH_ERREXCEPT, math_errhandling
+*/
+      export *
+    }
+    module csetjmp {
+      header "csetjmp"
+/*
+      export_macros setjmp
+*/
+      export *
+    }
+    module csignal {
+      header "csignal"
+/*
+      export_macros SIGABRT, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERM,
+                    SIG_DFL, SIG_IGN, SIG_ERR
+*/
+      export *
+    }
+    // FIXME: <cstdalign> is missing.
+    module cstdarg {
+      header "cstdarg"
+/*
+      export_macros va_arg, va_start, va_end, va_copy
+*/
+      export *
+    }
+    module cstdbool {
+      header "cstdbool"
+/*
+      export_macros __bool_true_false_are_defined
+*/
+      export *
+    }
+    module cstddef {
+      header "cstddef"
+/*
+      export_macros NULL, offsetof
+*/
+      export *
+    }
+    module cstdint {
+      header "cstdint"
+/*
+      export_macros
+        INT_8_MIN, INT_8_MAX, UINT_8_MAX, INT_16_MIN, INT_16_MAX, UINT_16_MAX,
+        INT_32_MIN, INT_32_MAX, UINT_32_MAX, INT_64_MIN, INT_64_MAX, UINT_64_MAX,
+        INT_FAST8_MIN, INT_FAST8_MAX, UINT_FAST8_MAX, INT_FAST16_MIN, INT_FAST16_MAX, UINT_FAST16_MAX,
+        INT_FAST32_MIN, INT_FAST32_MAX, UINT_FAST32_MAX, INT_FAST64_MIN, INT_FAST64_MAX, UINT_FAST64_MAX,
+        INT_LEAST8_MIN, INT_LEAST8_MAX, UINT_LEAST8_MAX, INT_LEAST16_MIN, INT_LEAST16_MAX, UINT_LEAST16_MAX,
+        INT_LEAST32_MIN, INT_LEAST32_MAX, UINT_LEAST32_MAX, INT_LEAST64_MIN, INT_LEAST64_MAX, UINT_LEAST64_MAX,
+        INT_MAX_MIN, INT_MAX_MAX, UINT_MAX_MAX, INT_PTR_MIN, INT_PTR_MAX, UINT_PTR_MAX,
+        PTRDIFF_MIN, PTRDIFF_MAX, SIG_ATOMIC_MIN, SIG_ATOMIC_MAX, WCHAR_MIN, WCHAR_MAX, WINT_MIN, WINT_MAX,
+        SIZE_MAX
+*/
+      export *
+    }
+    module cstdio {
+      header "cstdio"
+/*
+      export_macros BUFSIZ, EOF, FILENAME_MAX, FOPEN_MAX, L_tmpnam, NULL,
+                    SEEK_CUR, SEEK_END, SEEK_SET, TMP_MAX, _IOFBF, _IOLBF,
+                    stdin, stdout, stderr
+*/
+      export *
+    }
+    module cstdlib {
+      header "cstdlib"
+/*
+      export_macros RAND_MAX
+*/
+      export *
+    }
+    module cstring {
+      header "cstring"
+/*
+      export_macros NULL
+*/
+      export *
+    }
+    module ctgmath {
+      header "ctgmath"
+      export ccomplex
+      export cmath
+      export *
+    }
+    module ctime {
+      header "ctime"
+/*
+      export_macros NULL, CLOCKS_PER_SEC
+*/
+      export *
+    }
+    // FIXME: <cuchar> is missing.
+    module cwchar {
+      header "cwchar"
+/*
+      export_macros NULL, WCHAR_MAX, WCHAR_MIN, WEOF
+*/
+      export *
+    }
+    module cwctype {
+      header "cwctype"
+/*
+      export_macros WEOF
+*/
+      export *
+    }
+  }
+
   module algorithm {
     header "algorithm"
     export initializer_list