1 /**
2     C Configuration
3 
4     Copyright:
5         Copyright © 2005-2009, Sean Kelly.
6         Copyright © 2025, Kitsunebi Games
7         Copyright © 2025, Inochi2D Project
8     
9     License:   $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
10     Authors:   Sean Kelly, Alex Rønne Petersen, Luna Nielsen
11 */
12 module nulib.posix.ccfg;
13 
14 version(GNU) {
15     import gcc.builtins;
16 
17     alias c_long = __builtin_clong;
18     alias c_ulong = __builtin_culong;
19 
20     enum __c_long : __builtin_clong;
21     enum __c_ulong : __builtin_culong;
22 
23     alias cpp_long = __c_long;
24     alias cpp_ulong = __c_ulong;
25 
26     enum __c_longlong : __builtin_clonglong;
27     enum __c_ulonglong : __builtin_culonglong;
28 
29     alias cpp_longlong = __c_longlong;
30     alias cpp_ulonglong = __c_ulonglong;
31 } else version(Windows) {
32     enum __c_long : int;
33     enum __c_ulong : uint;
34 
35     alias c_long = int;
36     alias c_ulong = uint;
37 
38     alias cpp_long = __c_long;
39     alias cpp_ulong = __c_ulong;
40 
41     alias cpp_longlong = long;
42     alias cpp_ulonglong = ulong;
43 } else version(Posix) {
44     static if ((void*).sizeof > int.sizeof) {
45         enum __c_longlong : long;
46         enum __c_ulonglong : ulong;
47 
48         alias c_long = long;
49         alias c_ulong = ulong;
50 
51         alias cpp_long = long;
52         alias cpp_ulong = ulong;
53 
54         alias cpp_longlong = __c_longlong;
55         alias cpp_ulonglong = __c_ulonglong;
56     } else {
57         enum __c_long : int;
58         enum __c_ulong : uint;
59 
60         alias c_long = int;
61         alias c_ulong = uint;
62 
63         alias cpp_long = __c_long;
64         alias cpp_ulong = __c_ulong;
65 
66         alias cpp_longlong = long;
67         alias cpp_ulonglong = ulong;
68     }
69 } else version (WASI) {
70     static if ((void*).sizeof > int.sizeof) {
71         enum __c_longlong : long;
72         enum __c_ulonglong : ulong;
73 
74         alias c_long = long;
75         alias c_ulong = ulong;
76 
77         alias cpp_long = long;
78         alias cpp_ulong = ulong;
79 
80         alias cpp_longlong = __c_longlong;
81         alias cpp_ulonglong = __c_ulonglong;
82     } else {
83         enum __c_long : int;
84         enum __c_ulong : uint;
85 
86         alias c_long = int;
87         alias c_ulong = uint;
88 
89         alias cpp_long = __c_long;
90         alias cpp_ulong = __c_ulong;
91 
92         alias cpp_longlong = long;
93         alias cpp_ulonglong = ulong;
94     }
95 }