method-attribute.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /*
  2. Copyright 1999 ImageMagick Studio LLC, a non-profit organization
  3. dedicated to making software imaging solutions freely available.
  4. You may not use this file except in compliance with the License. You may
  5. obtain a copy of the License at
  6. https://imagemagick.org/script/license.php
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. MagickCore method attributes.
  13. */
  14. #ifndef MAGICKCORE_METHOD_ATTRIBUTE_H
  15. #define MAGICKCORE_METHOD_ATTRIBUTE_H
  16. #if defined(__cplusplus) || defined(c_plusplus)
  17. extern "C" {
  18. #endif
  19. #if defined(__BORLANDC__) && defined(_DLL)
  20. # define _MAGICKDLL_
  21. # define _MAGICKLIB_
  22. # define MAGICKCORE_MODULES_SUPPORT
  23. # undef MAGICKCORE_BUILD_MODULES
  24. #endif
  25. #if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(__CYGWIN__)
  26. # define MagickPrivate
  27. # if defined(_MT) && defined(_DLL) && !defined(_MAGICKDLL_) && !defined(_LIB)
  28. # define _MAGICKDLL_
  29. # endif
  30. # if defined(_MAGICKDLL_)
  31. # if defined(_VISUALC_)
  32. # pragma warning( disable: 4273 ) /* Disable the dll linkage warnings */
  33. # endif
  34. # if !defined(_MAGICKLIB_)
  35. # if defined(__clang__) || defined(__GNUC__)
  36. # define MagickExport __attribute__ ((dllimport))
  37. # else
  38. # define MagickExport __declspec(dllimport)
  39. # endif
  40. # else
  41. # if defined(__clang__) || defined(__GNUC__)
  42. # define MagickExport __attribute__ ((dllexport))
  43. # else
  44. # define MagickExport __declspec(dllexport)
  45. # endif
  46. # endif
  47. # else
  48. # define MagickExport
  49. # endif
  50. # if defined(_DLL) && !defined(_LIB)
  51. # if defined(__clang__) || defined(__GNUC__)
  52. # define ModuleExport __attribute__ ((dllexport))
  53. # else
  54. # define ModuleExport __declspec(dllexport)
  55. # endif
  56. # else
  57. # define ModuleExport
  58. # endif
  59. # if defined(_VISUALC_)
  60. # pragma warning(disable : 4018)
  61. # pragma warning(disable : 4068)
  62. # pragma warning(disable : 4244)
  63. # pragma warning(disable : 4142)
  64. # pragma warning(disable : 4800)
  65. # pragma warning(disable : 4786)
  66. # pragma warning(disable : 4996)
  67. # endif
  68. #else
  69. # if defined(__clang__) || (__GNUC__ >= 4)
  70. # define MagickExport __attribute__ ((visibility ("default")))
  71. # define MagickPrivate __attribute__ ((visibility ("hidden")))
  72. # else
  73. # define MagickExport
  74. # define MagickPrivate
  75. # endif
  76. # define ModuleExport MagickExport
  77. #endif
  78. #define MagickCoreSignature 0xabacadabUL
  79. #define MagickSignature MagickCoreSignature
  80. #if !defined(MaxTextExtent)
  81. # define MaxTextExtent 4096 /* always >= max(4096,PATH_MAX) */
  82. #endif
  83. #define MagickTimeExtent 26
  84. #if defined(MAGICKCORE_HAVE___ATTRIBUTE__)
  85. # define magick_aligned(x,y) x __attribute__((aligned(y)))
  86. # define magick_attribute __attribute__
  87. # define magick_unused(x) magick_unused_ ## x __attribute__((unused))
  88. # define magick_unreferenced(x) /* nothing */
  89. #elif defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(__CYGWIN__)
  90. # define magick_aligned(x,y) __declspec(align(y)) x
  91. # define magick_attribute(x) /* nothing */
  92. # define magick_unused(x) x
  93. # define magick_unreferenced(x) (x)
  94. #else
  95. # define magick_aligned(x,y) /* nothing */
  96. # define magick_attribute(x) /* nothing */
  97. # define magick_unused(x) x
  98. # define magick_unreferenced(x) /* nothing */
  99. #endif
  100. #if !defined(__clang__) && (defined(__GNUC__) && (__GNUC__) > 4)
  101. # define magick_alloc_size(x) __attribute__((__alloc_size__(x)))
  102. # define magick_alloc_sizes(x,y) __attribute__((__alloc_size__(x,y)))
  103. # define magick_fallthrough __attribute__((fallthrough))
  104. #else
  105. # define magick_alloc_size(x) /* nothing */
  106. # define magick_alloc_sizes(x,y) /* nothing */
  107. # define magick_fallthrough /* nothing */
  108. #endif
  109. #if defined(__clang__) || (defined(__GNUC__) && (__GNUC__) > 4)
  110. # define magick_cold_spot __attribute__((__cold__))
  111. # define magick_hot_spot __attribute__((__hot__))
  112. #else
  113. # define magick_cold_spot
  114. # define magick_hot_spot
  115. #endif
  116. #if defined(__cplusplus) || defined(c_plusplus)
  117. }
  118. #endif
  119. #endif