1 /+
2 +            Copyright 2022 – 2023 Aya Partridge
3 +          Copyright 2018 - 2022 Michael D. Parker
4 + Distributed under the Boost Software License, Version 1.0.
5 +     (See accompanying file LICENSE_1_0.txt or copy at
6 +           http://www.boost.org/LICENSE_1_0.txt)
7 +/
8 module bindbc.sdl.config;
9 
10 import sdl.version_: SDL_version, SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL;
11 
12 enum SDLSupport: SDL_version{
13 	noLibrary   = SDL_version(0,0,0),
14 	badLibrary  = SDL_version(0,0,255),
15 	v2_0_0      = SDL_version(2,0,0),
16 	v2_0_1      = SDL_version(2,0,1),
17 	v2_0_2      = SDL_version(2,0,2),
18 	v2_0_3      = SDL_version(2,0,3),
19 	v2_0_4      = SDL_version(2,0,4),
20 	v2_0_5      = SDL_version(2,0,5),
21 	v2_0_6      = SDL_version(2,0,6),
22 	v2_0_7      = SDL_version(2,0,7),
23 	v2_0_8      = SDL_version(2,0,8),
24 	v2_0_9      = SDL_version(2,0,9),
25 	v2_0_10     = SDL_version(2,0,10),
26 	v2_0_12     = SDL_version(2,0,12),
27 	v2_0_14     = SDL_version(2,0,14),
28 	v2_0_16     = SDL_version(2,0,16),
29 	v2_0_18     = SDL_version(2,0,18),
30 	v2_0_20     = SDL_version(2,0,20),
31 	v2_0_22     = SDL_version(2,0,22),
32 	v2_24       = SDL_version(2,24,0),
33 	v2_26       = SDL_version(2,26,0),
34 	
35 	deprecated("Please use `v2_0_0` instead")  sdl200  = SDL_version(2,0,0),
36 	deprecated("Please use `v2_0_1` instead")  sdl201  = SDL_version(2,0,1),
37 	deprecated("Please use `v2_0_2` instead")  sdl202  = SDL_version(2,0,2),
38 	deprecated("Please use `v2_0_3` instead")  sdl203  = SDL_version(2,0,3),
39 	deprecated("Please use `v2_0_4` instead")  sdl204  = SDL_version(2,0,4),
40 	deprecated("Please use `v2_0_5` instead")  sdl205  = SDL_version(2,0,5),
41 	deprecated("Please use `v2_0_6` instead")  sdl206  = SDL_version(2,0,6),
42 	deprecated("Please use `v2_0_7` instead")  sdl207  = SDL_version(2,0,7),
43 	deprecated("Please use `v2_0_8` instead")  sdl208  = SDL_version(2,0,8),
44 	deprecated("Please use `v2_0_9` instead")  sdl209  = SDL_version(2,0,9),
45 	deprecated("Please use `v2_0_10` instead") sdl2010 = SDL_version(2,0,10),
46 	deprecated("Please use `v2_0_12` instead") sdl2012 = SDL_version(2,0,12),
47 	deprecated("Please use `v2_0_14` instead") sdl2014 = SDL_version(2,0,14),
48 	deprecated("Please use `v2_0_16` instead") sdl2016 = SDL_version(2,0,16),
49 	deprecated("Please use `v2_0_18` instead") sdl2018 = SDL_version(2,0,18),
50 	deprecated("Please use `v2_0_20` instead") sdl2020 = SDL_version(2,0,20),
51 	deprecated("Please use `v2_0_22` instead") sdl2022 = SDL_version(2,0,22),
52 }
53 
54 enum staticBinding = (){
55 	version(BindBC_Static)       return true;
56 	else version(BindSDL_Static) return true;
57 	else return false;
58 }();
59 
60 enum sdlSupport = (){
61 	version(SDL_2_26)      return SDLSupport.v2_26;
62 	else version(SDL_2_24) return SDLSupport.v2_24;
63 	else version(SDL_2022) return SDLSupport.v2_0_22;
64 	else version(SDL_2020) return SDLSupport.v2_0_20;
65 	else version(SDL_2018) return SDLSupport.v2_0_18;
66 	else version(SDL_2016) return SDLSupport.v2_0_16;
67 	else version(SDL_2014) return SDLSupport.v2_0_14;
68 	else version(SDL_2012) return SDLSupport.v2_0_12;
69 	else version(SDL_2010) return SDLSupport.v2_0_10;
70 	else version(SDL_209)  return SDLSupport.v2_0_9;
71 	else version(SDL_208)  return SDLSupport.v2_0_8;
72 	else version(SDL_207)  return SDLSupport.v2_0_7;
73 	else version(SDL_206)  return SDLSupport.v2_0_6;
74 	else version(SDL_205)  return SDLSupport.v2_0_5;
75 	else version(SDL_204)  return SDLSupport.v2_0_4;
76 	else version(SDL_203)  return SDLSupport.v2_0_3;
77 	else version(SDL_202)  return SDLSupport.v2_0_2;
78 	else version(SDL_201)  return SDLSupport.v2_0_1;
79 	else                   return SDLSupport.v2_0_0;
80 }();
81 
82 enum bindSDLImage = (){
83 	version(SDL_Image){ pragma(msg, "`SDL_Image` is deprecated. If you want the earliest supported version of SDL Image then please use version `SDL_Image_200`, otherwise you can safely remove it from your version list"); return true; }
84 	else version(SDL_Image_200) return true;
85 	else version(SDL_Image_201) return true;
86 	else version(SDL_Image_202) return true;
87 	else version(SDL_Image_203) return true;
88 	else version(SDL_Image_204) return true;
89 	else version(SDL_Image_205) return true;
90 	else version(SDL_Image_2_6) return true;
91 	else return false;
92 }();
93 
94 enum bindSDLMixer = (){
95 	version(SDL_Mixer){ pragma(msg, "`SDL_Mixer` is deprecated. If you want the earliest supported version of SDL Mixer then please use version `SDL_Mixer_200`, otherwise you can safely remove it from your version list"); return true; }
96 	else version(SDL_Mixer_200) return true;
97 	else version(SDL_Mixer_201) return true;
98 	else version(SDL_Mixer_202) return true;
99 	else version(SDL_Mixer_204) return true;
100 	else version(SDL_Mixer_260){ pragma(msg, "`SDL_Mixer_260` is deprecated. Please use version `SDL_Mixer_2_6` instead"); return true; }
101 	else version(SDL_Mixer_2_6) return true;
102 	else return false;
103 }();
104 
105 enum bindSDLNet = (){
106 	version(SDL_Net){ pragma(msg, "`SDL_Net` is deprecated. If you want the earliest supported version of SDL Net then please use version `SDL_Net_200`, otherwise you can safely remove it from your version list"); return true; }
107 	else version(SDL_Net_200) return true;
108 	else version(SDL_Net_201) return true;
109 	else version(SDL_Net_2_2) return true;
110 	else return false;
111 }();
112 
113 enum bindSDLTTF = (){
114 	version(SDL_TTF){ pragma(msg, "`SDL_TTF` is deprecated. If you want the earliest supported version of SDL TTF then please use version `SDL_TTF_2012`, otherwise you can safely remove it from your version list"); return true; }
115 	else version(SDL_TTF_2012) return true;
116 	else version(SDL_TTF_2013) return true;
117 	else version(SDL_TTF_2014) return true;
118 	else version(SDL_TTF_2015) return true;
119 	else version(SDL_TTF_2018) return true;
120 	else version(SDL_TTF_2_20) return true;
121 	else return false;
122 }();
123 
124 //NOTE: everything below here will be moved to BindBC-Common in the future
125 
126 version(WebAssembly){
127 	alias c_long  = long;
128 	alias c_ulong = ulong;
129 	
130 	alias va_list = void*;
131 }else{
132 	public import core.stdc.config: c_long, c_ulong;
133 	public import core.stdc.stdarg: va_list;
134 }
135 
136 static if((){
137 	version(Posix)     return true;
138 	else version(WASI) return true;
139 	else return false;
140 }()){
141 	alias wchar_t = dchar;
142 }else static if((){
143 	version(Windows)    return true;
144 	else version(WinRT) return true;
145 	else return false;
146 }()){
147 	alias wchar_t = wchar;
148 }else static assert(0, "`sizeof(wchar_t)` is not known on this platform. Please add it to bindbc/sdl/config.d");
149 
150 deprecated("This template will be moved to another library in the future") enum expandEnum(EnumType, string fqnEnumType = EnumType.stringof) = () nothrow pure @safe{
151 	string expandEnum;
152 	foreach(m;__traits(allMembers, EnumType)){
153 		expandEnum ~= `alias `~m~` = `~fqnEnumType~`.`~m~`;`;
154 	}
155 	return expandEnum;
156 }();