Fr0sT.Brutal 900 Posted August 10, 2020 Include files for checking compiler versions and capabilities. Useful for developers of libs/components that have to support multiple compilers. https://github.com/Fr0sT-Brutal/Delphi_Compilers Additionally, there are files for checking current compiler settings, some cross-compiler and cross-platform defines and cross-compiler declarations. 2 Share this post Link to post
Stefan Glienke 2002 Posted August 10, 2020 (edited) The general hints in the readme are very valuable (and made me revisit some of my ifdef checks) - apart from that it reminds me a bit of https://xkcd.com/927/ Yes, jedi.inc is long and unwieldy at times but it got everything commonly needed - in case it does not - wouldn't it be wiser to add that instead of rolling a new thing? Apart from that the prefix CAPS is kinda misleading imo - why not go with the HAS_ or SUPPORTS_ prefixes? Oh a note on your comment for bitness checking - the example does not entirely match what you describe, it specifically checks for x64 - so x86 and arm would go in the else. Bitness checks would be CPU32BITS and CPU64BITS or whats also common to check SizeOf(Pointer) = 4 for 32bit. Historically the checks are rather for x86 specifically to implement something using asm and then pure pascal in else. Edited August 10, 2020 by Stefan Glienke 2 Share this post Link to post
Bill Meyer 337 Posted August 10, 2020 17 minutes ago, Stefan Glienke said: The general hints in the readme are very valuable (and made me revisit some of my ifdef checks) - apart from that it reminds me a bit of https://xkcd.com/927/ As a former colleague was fond of saying, the nice thing about standards is that we have so many from which to choose. 1 Share this post Link to post
Fr0sT.Brutal 900 Posted August 11, 2020 15 hours ago, Stefan Glienke said: The general hints in the readme are very valuable (and made me revisit some of my ifdef checks) I'm glad to help 🙂 15 hours ago, Stefan Glienke said: Yes, jedi.inc is long and unwieldy at times but it got everything commonly needed - in case it does not - wouldn't it be wiser to add that instead of rolling a new thing? Well, I've never used JEDI as is right because of its monsterosity. Moreover their basic define system has the critical weakness - it must be updated for every new compiler version; and it's DAMN long while I wanted short and universal solution. 15 hours ago, Stefan Glienke said: Apart from that the prefix CAPS is kinda misleading imo - why not go with the HAS_ or SUPPORTS_ prefixes? Caps are compiler capabilities... I don't remember why I called them so. SUPPORTS is longer but acceptable as well, agreed. 15 hours ago, Stefan Glienke said: Oh a note on your comment for bitness checking - the example does not entirely match what you describe, it specifically checks for x64 - so x86 and arm would go in the else. Bitness checks would be CPU32BITS and CPU64BITS or whats also common to check SizeOf(Pointer) = 4 for 32bit. Historically the checks are rather for x86 specifically to implement something using asm and then pure pascal in else. You're right, that was previous, quite weak, sample. I already changed it to check for 64 and 32 bitness explicitly. Oh and there's another bug indeed - I used "X" letter in defines which means Intel arch. In fact, it was meant to be CPU32/64 (FPC-style) which are defined for Delphi in XPlatformCompat.inc file. Share this post Link to post
Stefan Glienke 2002 Posted August 11, 2020 8 minutes ago, Fr0sT.Brutal said: critical weakness - it must be updated for every new compiler version No, it's upwards compatible - an unknown version identifies as latest known one including all feature defines Share this post Link to post
Fr0sT.Brutal 900 Posted August 11, 2020 7 minutes ago, Stefan Glienke said: No, it's upwards compatible - an unknown version identifies as latest known one including all feature defines Likely it is. I looked at that file and got lost in these loooong nested defines so won't argue Share this post Link to post