Date: Wed, 26 Jun 2019 12:34:31 +0200 From: Jan Beich <jbeich@FreeBSD.org> To: Gary Aitken <freebsd@dreamchaser.org> Cc: FreeBSD Mailing List <freebsd-ports@freebsd.org> Subject: Re: ifdef __linux__ / gtk issue; how to list defined symbols for cmake? Message-ID: <h88c-d494-wny@FreeBSD.org> In-Reply-To: <28e4d2b5-8596-7df7-5aac-7bf738058992@dreamchaser.org> (Gary Aitken's message of "Mon, 24 Jun 2019 21:55:42 -0600") References: <28e4d2b5-8596-7df7-5aac-7bf738058992@dreamchaser.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Gary Aitken <freebsd@dreamchaser.org> writes: > 1. Is there an easy way to get a list of all the __*__ symbols? # Works for GCC, Clang and some arcane compilers $ cc -dM -E -</dev/null # Clang being a cross-compiler can check other targets $ clang -target x86_64-apple-darwin18.2.0 -dM -E -</dev/null | fgrep -i -e unix -e apple #define __APPLE_CC__ 6000 #define __APPLE__ 1 $ clang -target armv7-unknown-freebsd12.0-gnueabihf -dM -E -</dev/null | fgrep -i neon #define __ARM_NEON 1 #define __ARM_NEON_FP 0x4 #define __ARM_NEON__ 1 > Where / how are these set up? Predefined macros are set by the compiler. Some are architecture-specific, some are OS-specific, some depend on flags, etc. https://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html For one, __FreeBSD__ is defined in /usr/src/contrib/llvm/tools/clang/lib/Basic/Targets/OSTargets.h /usr/src/contrib/gcc/config/freebsd-spec.h > Is there a way to list them at the start of compilation of each file > to check the appropriate ones are all defined in different subdirs > of the build tree? Unlikely without hacking the build glue to add a separate step for -dM -E. > If __linux__ is defined, is __unix__ also defined? If any of the > __*BSD__ syms are defined, is __unix__ also defined? __unix__ is defined on (m)any Unix-like system except macOS despite macOS being on of the few certified UNIX. Go figure. ;) https://sourceforge.net/p/predef/wiki/OperatingSystems/ > 3. What's the relationship between the _WIN32, __APPLE__, __unix__ type > syms in code and the WIN32, APPLE, UNIX, XCODE syms that I see in > some of the CMakeLists.txt files? CMake predefines some variables and even more are defined by cmake-modules(7). However, UNIX is defined on macOS unlike __unix__. What a rotten apple. ;) https://github.com/Kitware/CMake/blob/v3.14.5/Source/cmStateSnapshot.cxx#L298-L355 https://github.com/Kitware/CMake/blob/v3.14.5/Source/cmGlobalXCodeGenerator.cxx#L297-L298 > Are any/all of these case sensitive? Yep if the underlying programming language is case-sensitive. > How is CMAKE_SYSTEM_NAME, which may be "Linux" (on linux), related to > the above syms? See /usr/local/share/cmake/Modules/CMakeDetermineSystem.cmake > > 4. Suggestions on how to approach this? I'm inclined to change the > "#if defined(__linux__)" to "#if defined(__WXGTK__)" where appropriate > instead of adding > "|| defined(__FreeBSD__) || defined(__NetBSD__)..." etc. Probably OK but I don't have experience porting WX-based apps. Try to insert #error first to make sure __WXGTK__ is defined in all the places you're trying to use it. > Is there a "BSD" sym that encompasses the various bsd variants? AFAIK, "BSD" defined in <sys/param.h> is a vestige from when BSD was an actual Unix distribution developed by CSRG at UC Berkeley. As macOS and GNU/kFreeBSD also define "BSD" it's not very useful. https://svnweb.freebsd.org/csrg?view=revision&revision=24654 http://fxr.watson.org/fxr/source/bsd/sys/param.h?v=xnu-2050.18.24#L72
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?h88c-d494-wny>