llpreprocessor.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:7k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llpreprocessor.h
  3.  * @brief This file should be included in all Linden Lab files and
  4.  * should only contain special preprocessor directives
  5.  *
  6.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2001-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. #ifndef LLPREPROCESSOR_H
  34. #define LLPREPROCESSOR_H
  35. // Figure out endianness of platform
  36. #ifdef LL_LINUX
  37. #define __ENABLE_WSTRING
  38. #include <endian.h>
  39. #endif // LL_LINUX
  40. #if LL_SOLARIS
  41. #   ifdef  __sparc     // Since we're talking Solaris 10 and up, only 64 bit is supported.
  42. #      define LL_BIG_ENDIAN 1
  43. #      define LL_SOLARIS_ALIGNED_CPU 1     //  used to designate issues where SPARC alignment is addressed
  44. #      define LL_SOLARIS_NON_MESA_GL 1      //  The SPARC GL does not provide a MESA-based GL API
  45. #   endif
  46. #   include <sys/isa_defs.h> // ensure we know which end is up
  47. #endif // LL_SOLARIS
  48. #if (defined(LL_WINDOWS) || (defined(LL_LINUX) && (__BYTE_ORDER == __LITTLE_ENDIAN)) || (defined(LL_DARWIN) && defined(__LITTLE_ENDIAN__)) || (defined(LL_SOLARIS) && defined(__i386)))
  49. #define LL_LITTLE_ENDIAN 1
  50. #else
  51. #define LL_BIG_ENDIAN 1
  52. #endif
  53. // Per-compiler switches
  54. #ifdef __GNUC__
  55. #define LL_FORCE_INLINE inline __attribute__((always_inline))
  56. #else
  57. #define LL_FORCE_INLINE __forceinline
  58. #endif
  59. // Mark-up expressions with branch prediction hints.  Do NOT use
  60. // this with reckless abandon - it's an obfuscating micro-optimization
  61. // outside of inner loops or other places where you are OVERWHELMINGLY
  62. // sure which way an expression almost-always evaluates.
  63. #if __GNUC__ >= 3
  64. # define LL_LIKELY(EXPR) __builtin_expect (!!(EXPR), true)
  65. # define LL_UNLIKELY(EXPR) __builtin_expect (!!(EXPR), false)
  66. #else
  67. # define LL_LIKELY(EXPR) (EXPR)
  68. # define LL_UNLIKELY(EXPR) (EXPR)
  69. #endif
  70. // Figure out differences between compilers
  71. #if defined(__GNUC__)
  72. #define GCC_VERSION (__GNUC__ * 10000 
  73. + __GNUC_MINOR__ * 100 
  74. + __GNUC_PATCHLEVEL__)
  75. #ifndef LL_GNUC
  76. #define LL_GNUC 1
  77. #endif
  78. #elif defined(__MSVC_VER__) || defined(_MSC_VER)
  79. #ifndef LL_MSVC
  80. #define LL_MSVC 1
  81. #endif
  82. #if _MSC_VER < 1400
  83. #define LL_MSVC7 //Visual C++ 2003 or earlier
  84. #endif
  85. #endif
  86. // Deal with minor differences on Unixy OSes.
  87. #if LL_DARWIN || LL_LINUX
  88. // Different name, same functionality.
  89. #define stricmp strcasecmp
  90. #define strnicmp strncasecmp
  91. // Not sure why this is different, but...
  92. #ifndef MAX_PATH
  93. #define MAX_PATH PATH_MAX
  94. #endif // not MAX_PATH
  95. #endif
  96. // Static linking with apr on windows needs to be declared.
  97. #if LL_WINDOWS && !LL_COMMON_LINK_SHARED
  98. #ifndef APR_DECLARE_STATIC
  99. #define APR_DECLARE_STATIC // For APR on Windows
  100. #endif
  101. #ifndef APU_DECLARE_STATIC
  102. #define APU_DECLARE_STATIC // For APR util on Windows
  103. #endif
  104. #endif
  105. #if defined(LL_WINDOWS)
  106. #define BOOST_REGEX_NO_LIB 1
  107. #define CURL_STATICLIB 1
  108. #ifndef XML_STATIC
  109. #define XML_STATIC
  110. #endif
  111. #endif // LL_WINDOWS
  112. // Deal with VC6 problems
  113. #if LL_MSVC
  114. #pragma warning( 3      : 4701 ) // "local variable used without being initialized"  Treat this as level 3, not level 4.
  115. #pragma warning( 3      : 4702 ) // "unreachable code"  Treat this as level 3, not level 4.
  116. #pragma warning( 3      : 4189 ) // "local variable initialized but not referenced"  Treat this as level 3, not level 4.
  117. //#pragma warning( 3 : 4018 ) // "signed/unsigned mismatch"  Treat this as level 3, not level 4.
  118. #pragma warning( 3      :  4263 ) // 'function' : member function does not override any base class virtual member function
  119. #pragma warning( 3      :  4264 ) // "'virtual_function' : no override available for virtual member function from base 'class'; function is hidden"
  120. #pragma warning( 3       : 4265 ) // "class has virtual functions, but destructor is not virtual"
  121. #pragma warning( 3      :  4266 ) // 'function' : no override available for virtual member function from base 'type'; function is hidden
  122. #pragma warning (disable : 4180) // qualifier applied to function type has no meaning; ignored
  123. #pragma warning( disable : 4284 ) // silly MS warning deep inside their <map> include file
  124. #pragma warning( disable : 4503 ) // 'decorated name length exceeded, name was truncated'. Does not seem to affect compilation.
  125. #pragma warning( disable : 4800 ) // 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
  126. #pragma warning( disable : 4996 ) // warning: deprecated
  127. // Linker optimization with "extern template" generates these warnings
  128. #pragma warning( disable : 4231 ) // nonstandard extension used : 'extern' before template explicit instantiation
  129. #pragma warning( disable : 4506 )   // no definition for inline function
  130. // level 4 warnings that we need to disable:
  131. #pragma warning (disable : 4100) // unreferenced formal parameter
  132. #pragma warning (disable : 4127) // conditional expression is constant (e.g. while(1) )
  133. #pragma warning (disable : 4244) // possible loss of data on conversions
  134. #pragma warning (disable : 4396) // the inline specifier cannot be used when a friend declaration refers to a specialization of a function template
  135. #pragma warning (disable : 4512) // assignment operator could not be generated
  136. #pragma warning (disable : 4706) // assignment within conditional (even if((x = y)) )
  137. #pragma warning (disable : 4251) // member needs to have dll-interface to be used by clients of class
  138. #pragma warning (disable : 4275) // non dll-interface class used as base for dll-interface class
  139. #endif // LL_MSVC
  140. #if LL_WINDOWS
  141. #define LL_DLLEXPORT __declspec(dllexport)
  142. #define LL_DLLIMPORT __declspec(dllimport)
  143. #elif LL_LINUX
  144. #define LL_DLLEXPORT __attribute__ ((visibility("default")))
  145. #define LL_DLLIMPORT
  146. #else
  147. #define LL_DLLEXPORT
  148. #define LL_DLLIMPORT
  149. #endif // LL_WINDOWS
  150. #if LL_COMMON_LINK_SHARED
  151. // CMake automagically defines llcommon_EXPORTS only when building llcommon
  152. // sources, and only when llcommon is a shared library (i.e. when
  153. // LL_COMMON_LINK_SHARED). We must still test LL_COMMON_LINK_SHARED because
  154. // otherwise we can't distinguish between (non-llcommon source) and (llcommon
  155. // not shared).
  156. # if defined(llcommon_EXPORTS)
  157. #   define LL_COMMON_API LL_DLLEXPORT
  158. # else //llcommon_EXPORTS
  159. #   define LL_COMMON_API LL_DLLIMPORT
  160. # endif //llcommon_EXPORTS
  161. #else // LL_COMMON_LINK_SHARED
  162. # define LL_COMMON_API
  163. #endif // LL_COMMON_LINK_SHARED
  164. #endif // not LL_LINDEN_PREPROCESSOR_H