#pragma once #if !defined(MIJIN_DETECT_HPP_INCLUDED) #define MIJIN_DETECT_HPP_INCLUDED 1 namespace mijin { // // public defines // #if !defined(__has_include) #define __has_include(x) (false) #endif #define MIJIN_OS_UNKNOWN 0 #define MIJIN_OS_LINUX 1 #define MIJIN_OS_WINDOWS 2 #define MIJIN_OS_OSX 3 #if !defined(MIJIN_TARGET_OS) #if defined(__linux__) #define MIJIN_TARGET_OS MIJIN_OS_LINUX #elif defined(_WIN32) #define MIJIN_TARGET_OS MIJIN_OS_WINDOWS #else // TODO: macos #define MIJIN_TARGET_OS MIJIN_OS_UNKNOWN #endif #endif #define MIJIN_COMPILER_UNKNOWN 0 #define MIJIN_COMPILER_GCC 1 #define MIJIN_COMPILER_CLANG 2 #define MIJIN_COMPILER_MSVC 3 #if !defined(MIJIN_COMPILER) #if defined(__clang__) #define MIJIN_COMPILER MIJIN_COMPILER_CLANG #elif defined(__GNUC__) #define MIJIN_COMPILER MIJIN_COMPILER_GCC #elif defined(_MSC_VER) #define MIJIN_COMPILER MIJIN_COMPILER_MSVC #else #define MIJIN_COMPILER MIJIN_COMPILER_UNKNOWN #endif #endif #define MIJIN_STDLIB_UNKNOWN 0 #define MIJIN_STDLIB_GLIBC 1 #if !defined(MIJIN_STDLIB) #if __has_include() #include #endif #if defined(__GLIBC__) #define MIJIN_STDLIB MIJIN_STDLIB_GLIBC #else #define MIJIN_STDLIB MIJIN_STDLIB_UNKNOWN #endif #endif #if !defined(MIJIN_RTTI) #if MIJIN_COMPILER == MIJIN_COMPILER_GCC #if defined(__GXX_RTTI) #define MIJIN_RTTI 1 #else #define MIJIN_RTTI 0 #endif #elif MIJIN_COMPILER == MIJIN_COMPILER_CLANG #define MIJIN_RTTI (__has_feature(cxx_rtti)) #elif MIJIN_COMPILER == MIJIN_COMPILER_MSVC #if defined(_CPPRTTI) #define MIJIN_RTTI 1 #else #define MIJIN_RTTI 0 #endif #else #define MIJIN_RTTI 0 #endif #endif // // public constants // // // public types // // // public functions // } // namespace mijin #endif // !defined(MIJIN_DETECT_HPP_INCLUDED)