xref: /aosp_15_r20/external/fmtlib/src/fmt.cc (revision 5c90c05cd622c0a81b57953a4d343e0e489f2e08)
1*5c90c05cSAndroid Build Coastguard Worker module;
2*5c90c05cSAndroid Build Coastguard Worker 
3*5c90c05cSAndroid Build Coastguard Worker #ifdef _MSVC_LANG
4*5c90c05cSAndroid Build Coastguard Worker #  define FMT_CPLUSPLUS _MSVC_LANG
5*5c90c05cSAndroid Build Coastguard Worker #else
6*5c90c05cSAndroid Build Coastguard Worker #  define FMT_CPLUSPLUS __cplusplus
7*5c90c05cSAndroid Build Coastguard Worker #endif
8*5c90c05cSAndroid Build Coastguard Worker 
9*5c90c05cSAndroid Build Coastguard Worker // Put all implementation-provided headers into the global module fragment
10*5c90c05cSAndroid Build Coastguard Worker // to prevent attachment to this module.
11*5c90c05cSAndroid Build Coastguard Worker #ifndef FMT_IMPORT_STD
12*5c90c05cSAndroid Build Coastguard Worker #  include <algorithm>
13*5c90c05cSAndroid Build Coastguard Worker #  include <bitset>
14*5c90c05cSAndroid Build Coastguard Worker #  include <chrono>
15*5c90c05cSAndroid Build Coastguard Worker #  include <cmath>
16*5c90c05cSAndroid Build Coastguard Worker #  include <complex>
17*5c90c05cSAndroid Build Coastguard Worker #  include <cstddef>
18*5c90c05cSAndroid Build Coastguard Worker #  include <cstdint>
19*5c90c05cSAndroid Build Coastguard Worker #  include <cstdio>
20*5c90c05cSAndroid Build Coastguard Worker #  include <cstdlib>
21*5c90c05cSAndroid Build Coastguard Worker #  include <cstring>
22*5c90c05cSAndroid Build Coastguard Worker #  include <ctime>
23*5c90c05cSAndroid Build Coastguard Worker #  include <exception>
24*5c90c05cSAndroid Build Coastguard Worker #  if FMT_CPLUSPLUS > 202002L
25*5c90c05cSAndroid Build Coastguard Worker #    include <expected>
26*5c90c05cSAndroid Build Coastguard Worker #  endif
27*5c90c05cSAndroid Build Coastguard Worker #  include <filesystem>
28*5c90c05cSAndroid Build Coastguard Worker #  include <fstream>
29*5c90c05cSAndroid Build Coastguard Worker #  include <functional>
30*5c90c05cSAndroid Build Coastguard Worker #  include <iterator>
31*5c90c05cSAndroid Build Coastguard Worker #  include <limits>
32*5c90c05cSAndroid Build Coastguard Worker #  include <locale>
33*5c90c05cSAndroid Build Coastguard Worker #  include <memory>
34*5c90c05cSAndroid Build Coastguard Worker #  include <optional>
35*5c90c05cSAndroid Build Coastguard Worker #  include <ostream>
36*5c90c05cSAndroid Build Coastguard Worker #  include <source_location>
37*5c90c05cSAndroid Build Coastguard Worker #  include <stdexcept>
38*5c90c05cSAndroid Build Coastguard Worker #  include <string>
39*5c90c05cSAndroid Build Coastguard Worker #  include <string_view>
40*5c90c05cSAndroid Build Coastguard Worker #  include <system_error>
41*5c90c05cSAndroid Build Coastguard Worker #  include <thread>
42*5c90c05cSAndroid Build Coastguard Worker #  include <type_traits>
43*5c90c05cSAndroid Build Coastguard Worker #  include <typeinfo>
44*5c90c05cSAndroid Build Coastguard Worker #  include <utility>
45*5c90c05cSAndroid Build Coastguard Worker #  include <variant>
46*5c90c05cSAndroid Build Coastguard Worker #  include <vector>
47*5c90c05cSAndroid Build Coastguard Worker #else
48*5c90c05cSAndroid Build Coastguard Worker #  include <limits.h>
49*5c90c05cSAndroid Build Coastguard Worker #  include <stdint.h>
50*5c90c05cSAndroid Build Coastguard Worker #  include <stdio.h>
51*5c90c05cSAndroid Build Coastguard Worker #  include <time.h>
52*5c90c05cSAndroid Build Coastguard Worker #endif
53*5c90c05cSAndroid Build Coastguard Worker #include <cerrno>
54*5c90c05cSAndroid Build Coastguard Worker #include <climits>
55*5c90c05cSAndroid Build Coastguard Worker #include <version>
56*5c90c05cSAndroid Build Coastguard Worker 
57*5c90c05cSAndroid Build Coastguard Worker #if __has_include(<cxxabi.h>)
58*5c90c05cSAndroid Build Coastguard Worker #  include <cxxabi.h>
59*5c90c05cSAndroid Build Coastguard Worker #endif
60*5c90c05cSAndroid Build Coastguard Worker #if defined(_MSC_VER) || defined(__MINGW32__)
61*5c90c05cSAndroid Build Coastguard Worker #  include <intrin.h>
62*5c90c05cSAndroid Build Coastguard Worker #endif
63*5c90c05cSAndroid Build Coastguard Worker #if defined __APPLE__ || defined(__FreeBSD__)
64*5c90c05cSAndroid Build Coastguard Worker #  include <xlocale.h>
65*5c90c05cSAndroid Build Coastguard Worker #endif
66*5c90c05cSAndroid Build Coastguard Worker #if __has_include(<winapifamily.h>)
67*5c90c05cSAndroid Build Coastguard Worker #  include <winapifamily.h>
68*5c90c05cSAndroid Build Coastguard Worker #endif
69*5c90c05cSAndroid Build Coastguard Worker #if (__has_include(<fcntl.h>) || defined(__APPLE__) || \
70*5c90c05cSAndroid Build Coastguard Worker      defined(__linux__)) &&                            \
71*5c90c05cSAndroid Build Coastguard Worker     (!defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP))
72*5c90c05cSAndroid Build Coastguard Worker #  include <fcntl.h>
73*5c90c05cSAndroid Build Coastguard Worker #  include <sys/stat.h>
74*5c90c05cSAndroid Build Coastguard Worker #  include <sys/types.h>
75*5c90c05cSAndroid Build Coastguard Worker #  ifndef _WIN32
76*5c90c05cSAndroid Build Coastguard Worker #    include <unistd.h>
77*5c90c05cSAndroid Build Coastguard Worker #  else
78*5c90c05cSAndroid Build Coastguard Worker #    include <io.h>
79*5c90c05cSAndroid Build Coastguard Worker #  endif
80*5c90c05cSAndroid Build Coastguard Worker #endif
81*5c90c05cSAndroid Build Coastguard Worker #ifdef _WIN32
82*5c90c05cSAndroid Build Coastguard Worker #  if defined(__GLIBCXX__)
83*5c90c05cSAndroid Build Coastguard Worker #    include <ext/stdio_filebuf.h>
84*5c90c05cSAndroid Build Coastguard Worker #    include <ext/stdio_sync_filebuf.h>
85*5c90c05cSAndroid Build Coastguard Worker #  endif
86*5c90c05cSAndroid Build Coastguard Worker #  define WIN32_LEAN_AND_MEAN
87*5c90c05cSAndroid Build Coastguard Worker #  include <windows.h>
88*5c90c05cSAndroid Build Coastguard Worker #endif
89*5c90c05cSAndroid Build Coastguard Worker 
90*5c90c05cSAndroid Build Coastguard Worker export module fmt;
91*5c90c05cSAndroid Build Coastguard Worker 
92*5c90c05cSAndroid Build Coastguard Worker #ifdef FMT_IMPORT_STD
93*5c90c05cSAndroid Build Coastguard Worker import std;
94*5c90c05cSAndroid Build Coastguard Worker #endif
95*5c90c05cSAndroid Build Coastguard Worker 
96*5c90c05cSAndroid Build Coastguard Worker #define FMT_EXPORT export
97*5c90c05cSAndroid Build Coastguard Worker #define FMT_BEGIN_EXPORT export {
98*5c90c05cSAndroid Build Coastguard Worker #define FMT_END_EXPORT }
99*5c90c05cSAndroid Build Coastguard Worker 
100*5c90c05cSAndroid Build Coastguard Worker // If you define FMT_ATTACH_TO_GLOBAL_MODULE
101*5c90c05cSAndroid Build Coastguard Worker //  - all declarations are detached from module 'fmt'
102*5c90c05cSAndroid Build Coastguard Worker //  - the module behaves like a traditional static library, too
103*5c90c05cSAndroid Build Coastguard Worker //  - all library symbols are mangled traditionally
104*5c90c05cSAndroid Build Coastguard Worker //  - you can mix TUs with either importing or #including the {fmt} API
105*5c90c05cSAndroid Build Coastguard Worker #ifdef FMT_ATTACH_TO_GLOBAL_MODULE
106*5c90c05cSAndroid Build Coastguard Worker extern "C++" {
107*5c90c05cSAndroid Build Coastguard Worker #endif
108*5c90c05cSAndroid Build Coastguard Worker 
109*5c90c05cSAndroid Build Coastguard Worker #ifndef FMT_OS
110*5c90c05cSAndroid Build Coastguard Worker #  define FMT_OS 1
111*5c90c05cSAndroid Build Coastguard Worker #endif
112*5c90c05cSAndroid Build Coastguard Worker 
113*5c90c05cSAndroid Build Coastguard Worker // All library-provided declarations and definitions must be in the module
114*5c90c05cSAndroid Build Coastguard Worker // purview to be exported.
115*5c90c05cSAndroid Build Coastguard Worker #include "fmt/args.h"
116*5c90c05cSAndroid Build Coastguard Worker #include "fmt/chrono.h"
117*5c90c05cSAndroid Build Coastguard Worker #include "fmt/color.h"
118*5c90c05cSAndroid Build Coastguard Worker #include "fmt/compile.h"
119*5c90c05cSAndroid Build Coastguard Worker #include "fmt/format.h"
120*5c90c05cSAndroid Build Coastguard Worker #if FMT_OS
121*5c90c05cSAndroid Build Coastguard Worker #  include "fmt/os.h"
122*5c90c05cSAndroid Build Coastguard Worker #endif
123*5c90c05cSAndroid Build Coastguard Worker #include "fmt/ostream.h"
124*5c90c05cSAndroid Build Coastguard Worker #include "fmt/printf.h"
125*5c90c05cSAndroid Build Coastguard Worker #include "fmt/ranges.h"
126*5c90c05cSAndroid Build Coastguard Worker #include "fmt/std.h"
127*5c90c05cSAndroid Build Coastguard Worker #include "fmt/xchar.h"
128*5c90c05cSAndroid Build Coastguard Worker 
129*5c90c05cSAndroid Build Coastguard Worker #ifdef FMT_ATTACH_TO_GLOBAL_MODULE
130*5c90c05cSAndroid Build Coastguard Worker }
131*5c90c05cSAndroid Build Coastguard Worker #endif
132*5c90c05cSAndroid Build Coastguard Worker 
133*5c90c05cSAndroid Build Coastguard Worker // gcc doesn't yet implement private module fragments
134*5c90c05cSAndroid Build Coastguard Worker #if !FMT_GCC_VERSION
135*5c90c05cSAndroid Build Coastguard Worker module :private;
136*5c90c05cSAndroid Build Coastguard Worker #endif
137*5c90c05cSAndroid Build Coastguard Worker 
138*5c90c05cSAndroid Build Coastguard Worker #ifdef FMT_ATTACH_TO_GLOBAL_MODULE
139*5c90c05cSAndroid Build Coastguard Worker extern "C++" {
140*5c90c05cSAndroid Build Coastguard Worker #endif
141*5c90c05cSAndroid Build Coastguard Worker 
142*5c90c05cSAndroid Build Coastguard Worker #if FMT_HAS_INCLUDE("format.cc")
143*5c90c05cSAndroid Build Coastguard Worker #  include "format.cc"
144*5c90c05cSAndroid Build Coastguard Worker #endif
145*5c90c05cSAndroid Build Coastguard Worker #if FMT_OS && FMT_HAS_INCLUDE("os.cc")
146*5c90c05cSAndroid Build Coastguard Worker #  include "os.cc"
147*5c90c05cSAndroid Build Coastguard Worker #endif
148*5c90c05cSAndroid Build Coastguard Worker 
149*5c90c05cSAndroid Build Coastguard Worker #ifdef FMT_ATTACH_TO_GLOBAL_MODULE
150*5c90c05cSAndroid Build Coastguard Worker }
151*5c90c05cSAndroid Build Coastguard Worker #endif
152