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 }();