remogatto-ffi 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (324) hide show
  1. data/LICENSE +51 -0
  2. data/README.rdoc +69 -0
  3. data/Rakefile +144 -0
  4. data/ext/ffi_c/AbstractMemory.c +489 -0
  5. data/ext/ffi_c/AbstractMemory.h +160 -0
  6. data/ext/ffi_c/ArrayType.c +129 -0
  7. data/ext/ffi_c/ArrayType.h +58 -0
  8. data/ext/ffi_c/AutoPointer.c +61 -0
  9. data/ext/ffi_c/AutoPointer.h +18 -0
  10. data/ext/ffi_c/Buffer.c +187 -0
  11. data/ext/ffi_c/Call.c +431 -0
  12. data/ext/ffi_c/Call.h +77 -0
  13. data/ext/ffi_c/DynamicLibrary.c +216 -0
  14. data/ext/ffi_c/DynamicLibrary.h +22 -0
  15. data/ext/ffi_c/Function.c +498 -0
  16. data/ext/ffi_c/Function.h +73 -0
  17. data/ext/ffi_c/FunctionInfo.c +213 -0
  18. data/ext/ffi_c/LastError.c +159 -0
  19. data/ext/ffi_c/LastError.h +18 -0
  20. data/ext/ffi_c/MemoryPointer.c +178 -0
  21. data/ext/ffi_c/MemoryPointer.h +20 -0
  22. data/ext/ffi_c/MethodHandle.c +356 -0
  23. data/ext/ffi_c/MethodHandle.h +53 -0
  24. data/ext/ffi_c/Platform.c +59 -0
  25. data/ext/ffi_c/Platform.h +16 -0
  26. data/ext/ffi_c/Pointer.c +217 -0
  27. data/ext/ffi_c/Pointer.h +49 -0
  28. data/ext/ffi_c/Struct.c +770 -0
  29. data/ext/ffi_c/Struct.h +80 -0
  30. data/ext/ffi_c/StructByValue.c +140 -0
  31. data/ext/ffi_c/StructByValue.h +53 -0
  32. data/ext/ffi_c/StructLayout.c +450 -0
  33. data/ext/ffi_c/Type.c +329 -0
  34. data/ext/ffi_c/Type.h +57 -0
  35. data/ext/ffi_c/Types.c +103 -0
  36. data/ext/ffi_c/Types.h +85 -0
  37. data/ext/ffi_c/Variadic.c +260 -0
  38. data/ext/ffi_c/compat.h +72 -0
  39. data/ext/ffi_c/endian.h +40 -0
  40. data/ext/ffi_c/extconf.rb +34 -0
  41. data/ext/ffi_c/ffi.c +80 -0
  42. data/ext/ffi_c/libffi.bsd.mk +34 -0
  43. data/ext/ffi_c/libffi.darwin.mk +75 -0
  44. data/ext/ffi_c/libffi.gnu.mk +29 -0
  45. data/ext/ffi_c/libffi.mk +13 -0
  46. data/ext/ffi_c/libffi/ChangeLog +3243 -0
  47. data/ext/ffi_c/libffi/ChangeLog.libffi +347 -0
  48. data/ext/ffi_c/libffi/ChangeLog.libgcj +40 -0
  49. data/ext/ffi_c/libffi/ChangeLog.v1 +764 -0
  50. data/ext/ffi_c/libffi/LICENSE +21 -0
  51. data/ext/ffi_c/libffi/Makefile.am +177 -0
  52. data/ext/ffi_c/libffi/Makefile.in +1640 -0
  53. data/ext/ffi_c/libffi/README +328 -0
  54. data/ext/ffi_c/libffi/TODO +1 -0
  55. data/ext/ffi_c/libffi/acinclude.m4 +92 -0
  56. data/ext/ffi_c/libffi/aclocal.m4 +7516 -0
  57. data/ext/ffi_c/libffi/compile +142 -0
  58. data/ext/ffi_c/libffi/config.guess +1516 -0
  59. data/ext/ffi_c/libffi/config.sub +1626 -0
  60. data/ext/ffi_c/libffi/configure +24414 -0
  61. data/ext/ffi_c/libffi/configure.ac +365 -0
  62. data/ext/ffi_c/libffi/configure.host +11 -0
  63. data/ext/ffi_c/libffi/depcomp +584 -0
  64. data/ext/ffi_c/libffi/doc/libffi.info +533 -0
  65. data/ext/ffi_c/libffi/doc/libffi.texi +541 -0
  66. data/ext/ffi_c/libffi/doc/stamp-vti +4 -0
  67. data/ext/ffi_c/libffi/doc/version.texi +4 -0
  68. data/ext/ffi_c/libffi/fficonfig.h.in +160 -0
  69. data/ext/ffi_c/libffi/include/Makefile.am +9 -0
  70. data/ext/ffi_c/libffi/include/Makefile.in +422 -0
  71. data/ext/ffi_c/libffi/include/ffi.h.in +393 -0
  72. data/ext/ffi_c/libffi/include/ffi_common.h +98 -0
  73. data/ext/ffi_c/libffi/install-sh +323 -0
  74. data/ext/ffi_c/libffi/libffi.pc.in +10 -0
  75. data/ext/ffi_c/libffi/libtool-version +29 -0
  76. data/ext/ffi_c/libffi/ltcf-c.sh +861 -0
  77. data/ext/ffi_c/libffi/ltcf-cxx.sh +1069 -0
  78. data/ext/ffi_c/libffi/ltcf-gcj.sh +700 -0
  79. data/ext/ffi_c/libffi/ltconfig +2862 -0
  80. data/ext/ffi_c/libffi/ltmain.sh +6930 -0
  81. data/ext/ffi_c/libffi/man/Makefile.am +8 -0
  82. data/ext/ffi_c/libffi/man/Makefile.in +395 -0
  83. data/ext/ffi_c/libffi/man/ffi.3 +31 -0
  84. data/ext/ffi_c/libffi/man/ffi_call.3 +103 -0
  85. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +66 -0
  86. data/ext/ffi_c/libffi/mdate-sh +201 -0
  87. data/ext/ffi_c/libffi/missing +353 -0
  88. data/ext/ffi_c/libffi/mkinstalldirs +158 -0
  89. data/ext/ffi_c/libffi/src/alpha/ffi.c +284 -0
  90. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +48 -0
  91. data/ext/ffi_c/libffi/src/alpha/osf.S +366 -0
  92. data/ext/ffi_c/libffi/src/arm/ffi.c +309 -0
  93. data/ext/ffi_c/libffi/src/arm/ffitarget.h +49 -0
  94. data/ext/ffi_c/libffi/src/arm/sysv.S +299 -0
  95. data/ext/ffi_c/libffi/src/closures.c +596 -0
  96. data/ext/ffi_c/libffi/src/cris/ffi.c +383 -0
  97. data/ext/ffi_c/libffi/src/cris/ffitarget.h +51 -0
  98. data/ext/ffi_c/libffi/src/cris/sysv.S +215 -0
  99. data/ext/ffi_c/libffi/src/debug.c +59 -0
  100. data/ext/ffi_c/libffi/src/dlmalloc.c +5099 -0
  101. data/ext/ffi_c/libffi/src/frv/eabi.S +128 -0
  102. data/ext/ffi_c/libffi/src/frv/ffi.c +292 -0
  103. data/ext/ffi_c/libffi/src/frv/ffitarget.h +61 -0
  104. data/ext/ffi_c/libffi/src/ia64/ffi.c +580 -0
  105. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +50 -0
  106. data/ext/ffi_c/libffi/src/ia64/ia64_flags.h +40 -0
  107. data/ext/ffi_c/libffi/src/ia64/unix.S +560 -0
  108. data/ext/ffi_c/libffi/src/java_raw_api.c +359 -0
  109. data/ext/ffi_c/libffi/src/m32r/ffi.c +232 -0
  110. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +48 -0
  111. data/ext/ffi_c/libffi/src/m32r/sysv.S +121 -0
  112. data/ext/ffi_c/libffi/src/m68k/ffi.c +278 -0
  113. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +49 -0
  114. data/ext/ffi_c/libffi/src/m68k/sysv.S +234 -0
  115. data/ext/ffi_c/libffi/src/mips/ffi.c +926 -0
  116. data/ext/ffi_c/libffi/src/mips/ffitarget.h +202 -0
  117. data/ext/ffi_c/libffi/src/mips/n32.S +534 -0
  118. data/ext/ffi_c/libffi/src/mips/o32.S +381 -0
  119. data/ext/ffi_c/libffi/src/pa/ffi.c +709 -0
  120. data/ext/ffi_c/libffi/src/pa/ffitarget.h +77 -0
  121. data/ext/ffi_c/libffi/src/pa/hpux32.S +368 -0
  122. data/ext/ffi_c/libffi/src/pa/linux.S +357 -0
  123. data/ext/ffi_c/libffi/src/powerpc/aix.S +225 -0
  124. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +247 -0
  125. data/ext/ffi_c/libffi/src/powerpc/asm.h +125 -0
  126. data/ext/ffi_c/libffi/src/powerpc/darwin.S +245 -0
  127. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +317 -0
  128. data/ext/ffi_c/libffi/src/powerpc/ffi.c +1429 -0
  129. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +800 -0
  130. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +118 -0
  131. data/ext/ffi_c/libffi/src/powerpc/linux64.S +187 -0
  132. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +236 -0
  133. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +327 -0
  134. data/ext/ffi_c/libffi/src/powerpc/sysv.S +230 -0
  135. data/ext/ffi_c/libffi/src/prep_cif.c +174 -0
  136. data/ext/ffi_c/libffi/src/raw_api.c +254 -0
  137. data/ext/ffi_c/libffi/src/s390/ffi.c +780 -0
  138. data/ext/ffi_c/libffi/src/s390/ffitarget.h +60 -0
  139. data/ext/ffi_c/libffi/src/s390/sysv.S +434 -0
  140. data/ext/ffi_c/libffi/src/sh/ffi.c +716 -0
  141. data/ext/ffi_c/libffi/src/sh/ffitarget.h +49 -0
  142. data/ext/ffi_c/libffi/src/sh/sysv.S +850 -0
  143. data/ext/ffi_c/libffi/src/sh64/ffi.c +453 -0
  144. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +53 -0
  145. data/ext/ffi_c/libffi/src/sh64/sysv.S +530 -0
  146. data/ext/ffi_c/libffi/src/sparc/ffi.c +610 -0
  147. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +66 -0
  148. data/ext/ffi_c/libffi/src/sparc/v8.S +272 -0
  149. data/ext/ffi_c/libffi/src/sparc/v9.S +307 -0
  150. data/ext/ffi_c/libffi/src/types.c +77 -0
  151. data/ext/ffi_c/libffi/src/x86/darwin.S +443 -0
  152. data/ext/ffi_c/libffi/src/x86/darwin64.S +416 -0
  153. data/ext/ffi_c/libffi/src/x86/ffi.c +475 -0
  154. data/ext/ffi_c/libffi/src/x86/ffi64.c +572 -0
  155. data/ext/ffi_c/libffi/src/x86/ffitarget.h +90 -0
  156. data/ext/ffi_c/libffi/src/x86/freebsd.S +458 -0
  157. data/ext/ffi_c/libffi/src/x86/sysv.S +437 -0
  158. data/ext/ffi_c/libffi/src/x86/unix64.S +418 -0
  159. data/ext/ffi_c/libffi/src/x86/win32.S +391 -0
  160. data/ext/ffi_c/libffi/testsuite/Makefile.am +71 -0
  161. data/ext/ffi_c/libffi/testsuite/Makefile.in +447 -0
  162. data/ext/ffi_c/libffi/testsuite/config/default.exp +1 -0
  163. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +289 -0
  164. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +263 -0
  165. data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +45 -0
  166. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +36 -0
  167. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +97 -0
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +89 -0
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +89 -0
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +90 -0
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +97 -0
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +99 -0
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +98 -0
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c +72 -0
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +102 -0
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +103 -0
  177. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +104 -0
  178. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +110 -0
  179. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +97 -0
  180. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +99 -0
  181. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +101 -0
  182. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +121 -0
  183. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +98 -0
  184. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +103 -0
  185. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +98 -0
  186. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +98 -0
  187. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +106 -0
  188. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +98 -0
  189. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +117 -0
  190. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +106 -0
  191. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +132 -0
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +121 -0
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +107 -0
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +125 -0
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +105 -0
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +96 -0
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +98 -0
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +99 -0
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +101 -0
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +99 -0
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +100 -0
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +101 -0
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +99 -0
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +99 -0
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +99 -0
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +99 -0
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +99 -0
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +100 -0
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +51 -0
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +51 -0
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +82 -0
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +82 -0
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +94 -0
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +99 -0
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +82 -0
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +94 -0
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +52 -0
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +50 -0
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +50 -0
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +50 -0
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +51 -0
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +54 -0
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +51 -0
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +86 -0
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +59 -0
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +58 -0
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +57 -0
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +72 -0
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +62 -0
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +69 -0
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +63 -0
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +53 -0
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +160 -0
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +169 -0
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +141 -0
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +118 -0
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +119 -0
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +119 -0
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +120 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +139 -0
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +119 -0
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +139 -0
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +139 -0
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +98 -0
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +59 -0
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +35 -0
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +35 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +36 -0
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +49 -0
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +42 -0
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +34 -0
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +41 -0
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +42 -0
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +36 -0
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +38 -0
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +38 -0
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +38 -0
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +44 -0
  262. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +44 -0
  263. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +65 -0
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +67 -0
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +59 -0
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +63 -0
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +65 -0
  268. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +64 -0
  269. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +74 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +80 -0
  271. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +67 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +86 -0
  273. data/ext/ffi_c/libffi/testsuite/libffi.special/special.exp +38 -0
  274. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc +123 -0
  275. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc +53 -0
  276. data/ext/ffi_c/libffi/texinfo.tex +7482 -0
  277. data/ext/ffi_c/rbffi.h +26 -0
  278. data/gen/Rakefile +12 -0
  279. data/lib/ffi.rb +11 -0
  280. data/lib/ffi/autopointer.rb +61 -0
  281. data/lib/ffi/buffer.rb +0 -0
  282. data/lib/ffi/callback.rb +10 -0
  283. data/lib/ffi/enum.rb +78 -0
  284. data/lib/ffi/errno.rb +8 -0
  285. data/lib/ffi/ffi.rb +99 -0
  286. data/lib/ffi/io.rb +21 -0
  287. data/lib/ffi/library.rb +218 -0
  288. data/lib/ffi/managedstruct.rb +55 -0
  289. data/lib/ffi/memorypointer.rb +73 -0
  290. data/lib/ffi/platform.rb +78 -0
  291. data/lib/ffi/pointer.rb +119 -0
  292. data/lib/ffi/struct.rb +164 -0
  293. data/lib/ffi/tools/const_generator.rb +177 -0
  294. data/lib/ffi/tools/generator.rb +58 -0
  295. data/lib/ffi/tools/generator_task.rb +35 -0
  296. data/lib/ffi/tools/struct_generator.rb +194 -0
  297. data/lib/ffi/tools/types_generator.rb +123 -0
  298. data/lib/ffi/types.rb +153 -0
  299. data/lib/ffi/union.rb +12 -0
  300. data/lib/ffi/variadic.rb +25 -0
  301. data/spec/ffi/bool_spec.rb +24 -0
  302. data/spec/ffi/buffer_spec.rb +202 -0
  303. data/spec/ffi/callback_spec.rb +591 -0
  304. data/spec/ffi/enum_spec.rb +164 -0
  305. data/spec/ffi/errno_spec.rb +13 -0
  306. data/spec/ffi/function_spec.rb +47 -0
  307. data/spec/ffi/library_spec.rb +144 -0
  308. data/spec/ffi/managed_struct_spec.rb +56 -0
  309. data/spec/ffi/number_spec.rb +231 -0
  310. data/spec/ffi/pointer_spec.rb +195 -0
  311. data/spec/ffi/rbx/attach_function_spec.rb +27 -0
  312. data/spec/ffi/rbx/memory_pointer_spec.rb +102 -0
  313. data/spec/ffi/rbx/spec_helper.rb +1 -0
  314. data/spec/ffi/rbx/struct_spec.rb +13 -0
  315. data/spec/ffi/spec_helper.rb +17 -0
  316. data/spec/ffi/string_spec.rb +103 -0
  317. data/spec/ffi/struct_callback_spec.rb +62 -0
  318. data/spec/ffi/struct_initialize_spec.rb +30 -0
  319. data/spec/ffi/struct_spec.rb +529 -0
  320. data/spec/ffi/typedef_spec.rb +48 -0
  321. data/spec/ffi/union_spec.rb +60 -0
  322. data/spec/ffi/variadic_spec.rb +84 -0
  323. data/spec/spec.opts +4 -0
  324. metadata +432 -0
@@ -0,0 +1,700 @@
1
+ #### This script is meant to be sourced by ltconfig.
2
+
3
+ # ltcf-gcj.sh - Create a GCJ compiler specific configuration
4
+ #
5
+ # Copyright (C) 1996-1999, 2000, 2001, 2003 Free Software Foundation, Inc.
6
+ # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
7
+ #
8
+ # Original GCJ support by:
9
+ # Alexandre Oliva <oliva@lsd.ic.unicamp.br>
10
+ #
11
+ # This file is free software; you can redistribute it and/or modify it
12
+ # under the terms of the GNU General Public License as published by
13
+ # the Free Software Foundation; either version 2 of the License, or
14
+ # (at your option) any later version.
15
+ #
16
+ # This program is distributed in the hope that it will be useful, but
17
+ # WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19
+ # General Public License for more details.
20
+ #
21
+ # You should have received a copy of the GNU General Public License
22
+ # along with this program; if not, write to the Free Software
23
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24
+ #
25
+ # As a special exception to the GNU General Public License, if you
26
+ # distribute this file as part of a program that contains a
27
+ # configuration script generated by Autoconf, you may include it under
28
+ # the same distribution terms that you use for the rest of that program.
29
+
30
+
31
+ # Source file extension for Java test sources.
32
+ ac_ext=java
33
+
34
+ # Object file extension for compiled Java test sources.
35
+ objext=o
36
+
37
+ # Code to be used in simple compile tests
38
+ lt_simple_compile_test_code="class foo {}"
39
+
40
+ # Code to be used in simple link tests
41
+ lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }'
42
+
43
+ ## Linker Characteristics
44
+ case $host_os in
45
+ cygwin* | mingw*)
46
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
47
+ # When not using gcc, we currently assume that we are using
48
+ # Microsoft Visual C++.
49
+ if test "$with_gcc" != yes; then
50
+ with_gnu_ld=no
51
+ fi
52
+ ;;
53
+
54
+ esac
55
+
56
+ ld_shlibs=yes
57
+ if test "$with_gnu_ld" = yes; then
58
+ # If archive_cmds runs LD, not CC, wlarc should be empty
59
+ wlarc='${wl}'
60
+
61
+ # See if GNU ld supports shared libraries.
62
+ case $host_os in
63
+ aix3* | aix4* | aix5*)
64
+ # On AIX/PPC, the GNU linker is very broken
65
+ if test "$host_cpu" != ia64; then
66
+ ld_shlibs=no
67
+ cat <<EOF 1>&2
68
+
69
+ *** Warning: the GNU linker, at least up to release 2.9.1, is reported
70
+ *** to be unable to reliably create shared libraries on AIX.
71
+ *** Therefore, libtool is disabling shared libraries support. If you
72
+ *** really care for shared libraries, you may want to modify your PATH
73
+ *** so that a non-GNU linker is found, and then restart.
74
+
75
+ EOF
76
+ fi
77
+ ;;
78
+
79
+ amigaos*)
80
+ archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
81
+ hardcode_libdir_flag_spec='-L$libdir'
82
+ hardcode_minus_L=yes
83
+
84
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
85
+ # that the semantics of dynamic libraries on AmigaOS, at least up
86
+ # to version 4, is to share data among multiple programs linked
87
+ # with the same dynamic library. Since this doesn't match the
88
+ # behavior of shared libraries on other platforms, we can use
89
+ # them.
90
+ ld_shlibs=no
91
+ ;;
92
+
93
+ beos*)
94
+ if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
95
+ allow_undefined_flag=unsupported
96
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
97
+ # support --undefined. This deserves some investigation. FIXME
98
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
99
+ else
100
+ ld_shlibs=no
101
+ fi
102
+ ;;
103
+
104
+ cygwin* | mingw*)
105
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
106
+ # no search path for DLLs.
107
+ hardcode_libdir_flag_spec='-L$libdir'
108
+ allow_undefined_flag=unsupported
109
+ always_export_symbols=yes
110
+
111
+ extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
112
+ sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //; p; }" -e d < $0 > $output_objdir/impgen.c~
113
+ test -f $output_objdir/impgen.exe || (cd $output_objdir && \
114
+ if test "x$BUILD_CC" != "x" ; then $BUILD_CC -o impgen impgen.c ; \
115
+ else $CC -o impgen impgen.c ; fi)~
116
+ $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
117
+
118
+ old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
119
+
120
+ # cygwin and mingw dlls have different entry points and sets of symbols
121
+ # to exclude.
122
+ # FIXME: what about values for MSVC?
123
+ dll_entry=__cygwin_dll_entry@12
124
+ dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~
125
+ case $host_os in
126
+ mingw*)
127
+ # mingw values
128
+ dll_entry=_DllMainCRTStartup@12
129
+ dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~
130
+ ;;
131
+ esac
132
+
133
+ # mingw and cygwin differ, and it's simplest to just exclude the union
134
+ # of the two symbol sets.
135
+ dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12
136
+
137
+ # recent cygwin and mingw systems supply a stub DllMain which the user
138
+ # can override, but on older systems we have to supply one (in ltdll.c)
139
+ if test "x$lt_cv_need_dllmain" = "xyes"; then
140
+ ltdll_obj='$output_objdir/$soname-ltdll.'"$objext "
141
+ ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $output_objdir/$soname-ltdll.c~
142
+ test -f $output_objdir/$soname-ltdll.$objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
143
+ else
144
+ ltdll_obj=
145
+ ltdll_cmds=
146
+ fi
147
+
148
+ # Extract the symbol export list from an `--export-all' def file,
149
+ # then regenerate the def file from the symbol export list, so that
150
+ # the compiled dll only exports the symbol export list.
151
+ # Be careful not to strip the DATA tag left be newer dlltools.
152
+ export_symbols_cmds="$ltdll_cmds"'
153
+ $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
154
+ sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
155
+
156
+ # If the export-symbols file already is a .def file (1st line
157
+ # is EXPORTS), use it as is.
158
+ # If DATA tags from a recent dlltool are present, honour them!
159
+ archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
160
+ cp $export_symbols $output_objdir/$soname-def;
161
+ else
162
+ echo EXPORTS > $output_objdir/$soname-def;
163
+ _lt_hint=1;
164
+ cat $export_symbols | while read symbol; do
165
+ set dummy \$symbol;
166
+ case \[$]# in
167
+ 2) echo " \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
168
+ *) echo " \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;;
169
+ esac;
170
+ _lt_hint=`expr 1 + \$_lt_hint`;
171
+ done;
172
+ fi~
173
+ '"$ltdll_cmds"'
174
+ $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
175
+ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
176
+ $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
177
+ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
178
+ $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
179
+ ;;
180
+
181
+ netbsd* | knetbsd*-gnu)
182
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
183
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
184
+ wlarc=
185
+ else
186
+ archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
187
+ archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
188
+ fi
189
+ ;;
190
+
191
+ solaris* | sysv5*)
192
+ if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
193
+ ld_shlibs=no
194
+ cat <<EOF 1>&2
195
+
196
+ *** Warning: The releases 2.8.* of the GNU linker cannot reliably
197
+ *** create shared libraries on Solaris systems. Therefore, libtool
198
+ *** is disabling shared libraries support. We urge you to upgrade GNU
199
+ *** binutils to release 2.9.1 or newer. Another option is to modify
200
+ *** your PATH or compiler configuration so that the native linker is
201
+ *** used, and then restart.
202
+
203
+ EOF
204
+ elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
205
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
206
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
207
+ else
208
+ ld_shlibs=no
209
+ fi
210
+ ;;
211
+
212
+ sunos4*)
213
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
214
+ wlarc=
215
+ hardcode_direct=yes
216
+ hardcode_shlibpath_var=no
217
+ ;;
218
+
219
+ *)
220
+ if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
221
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
222
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
223
+ else
224
+ ld_shlibs=no
225
+ fi
226
+ ;;
227
+ esac
228
+
229
+ if test "$ld_shlibs" = yes; then
230
+ runpath_var=LD_RUN_PATH
231
+ hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
232
+ export_dynamic_flag_spec='${wl}--export-dynamic'
233
+ case $host_os in
234
+ cygwin* | mingw*)
235
+ # dlltool doesn't understand --whole-archive et. al.
236
+ whole_archive_flag_spec=
237
+ ;;
238
+ *)
239
+ # ancient GNU ld didn't support --whole-archive et. al.
240
+ if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
241
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
242
+ else
243
+ whole_archive_flag_spec=
244
+ fi
245
+ ;;
246
+ esac
247
+ fi
248
+ else
249
+ # PORTME fill in a description of your system's linker (not GNU ld)
250
+ case $host_os in
251
+ aix3*)
252
+ allow_undefined_flag=unsupported
253
+ always_export_symbols=yes
254
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
255
+ # Note: this linker hardcodes the directories in LIBPATH if there
256
+ # are no directories specified by -L.
257
+ hardcode_minus_L=yes
258
+ if test "$with_gcc" = yes && test -z "$link_static_flag"; then
259
+ # Neither direct hardcoding nor static linking is supported with a
260
+ # broken collect2.
261
+ hardcode_direct=unsupported
262
+ fi
263
+ ;;
264
+
265
+ aix4* | aix5*)
266
+ hardcode_direct=yes
267
+ hardcode_libdir_separator=':'
268
+ link_all_deplibs=yes
269
+ # When large executables or shared objects are built, AIX ld can
270
+ # have problems creating the table of contents. If linking a library
271
+ # or program results in "error TOC overflow" add -mminimal-toc to
272
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
273
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
274
+ if test "$with_gcc" = yes; then
275
+ case $host_os in aix4.[012]|aix4.[012].*)
276
+ # We only want to do this on AIX 4.2 and lower, the check
277
+ # below for broken collect2 doesn't work under 4.3+
278
+ collect2name=`${CC} -print-prog-name=collect2`
279
+ if test -f "$collect2name" && \
280
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
281
+ then
282
+ # We have reworked collect2
283
+ hardcode_direct=yes
284
+ else
285
+ # We have old collect2
286
+ hardcode_direct=unsupported
287
+ # It fails to find uninstalled libraries when the uninstalled
288
+ # path is not listed in the libpath. Setting hardcode_minus_L
289
+ # to unsupported forces relinking
290
+ hardcode_minus_L=yes
291
+ hardcode_libdir_flag_spec='-L$libdir'
292
+ hardcode_libdir_separator=
293
+ fi
294
+ esac
295
+ shared_flag='-shared'
296
+ else
297
+ # not using gcc
298
+ if test "$host_cpu" = ia64; then
299
+ shared_flag='${wl}-G'
300
+ else
301
+ shared_flag='${wl}-bM:SRE'
302
+ fi
303
+ fi
304
+
305
+ if test "$host_cpu" = ia64; then
306
+ # On IA64, the linker does run time linking by default, so we don't
307
+ # have to do anything special.
308
+ aix_use_runtimelinking=no
309
+ if test $with_gnu_ld = no; then
310
+ exp_sym_flag='-Bexport'
311
+ no_entry_flag=""
312
+ fi
313
+ else
314
+ # Test if we are trying to use run time linking, or normal AIX style linking.
315
+ # If -brtl is somewhere in LDFLAGS, we need to do run time linking.
316
+ aix_use_runtimelinking=no
317
+ for ld_flag in $LDFLAGS; do
318
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl" ); then
319
+ aix_use_runtimelinking=yes
320
+ break
321
+ fi
322
+ done
323
+ exp_sym_flag='-bexport'
324
+ no_entry_flag='-bnoentry'
325
+ fi
326
+ # -bexpall does not export symbols beginning with underscore (_)
327
+ always_export_symbols=yes
328
+ if test "$aix_use_runtimelinking" = yes; then
329
+ # Warning - without using the other run time loading flags (-brtl), -berok will
330
+ # link without error, but may produce a broken library.
331
+ allow_undefined_flag=' ${wl}-berok'
332
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
333
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
334
+ else
335
+ if test "$host_cpu" = ia64; then
336
+ if test $with_gnu_ld = no; then
337
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
338
+ allow_undefined_flag="-z nodefs"
339
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
340
+ fi
341
+ else
342
+ allow_undefined_flag=' ${wl}-berok'
343
+ # -bexpall does not export symbols beginning with underscore (_)
344
+ always_export_symbols=yes
345
+ # Exported symbols can be pulled into shared objects from archives
346
+ whole_archive_flag_spec=' '
347
+ build_libtool_need_lc=yes
348
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
349
+ # This is similar to how AIX traditionally builds it's shared libraries.
350
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
351
+ fi
352
+ fi
353
+ ;;
354
+
355
+ amigaos*)
356
+ archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
357
+ hardcode_libdir_flag_spec='-L$libdir'
358
+ hardcode_minus_L=yes
359
+ # see comment about different semantics on the GNU ld section
360
+ ld_shlibs=no
361
+ ;;
362
+
363
+ cygwin* | mingw*)
364
+ # When not using gcc, we currently assume that we are using
365
+ # Microsoft Visual C++.
366
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
367
+ # no search path for DLLs.
368
+ hardcode_libdir_flag_spec=' '
369
+ allow_undefined_flag=unsupported
370
+ # Tell ltmain to make .lib files, not .a files.
371
+ libext=lib
372
+ # FIXME: Setting linknames here is a bad hack.
373
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
374
+ # The linker will automatically build a .lib file if we build a DLL.
375
+ old_archive_from_new_cmds='true'
376
+ # FIXME: Should let the user specify the lib program.
377
+ old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
378
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
379
+ ;;
380
+
381
+ darwin* | rhapsody*)
382
+ case "$host_os" in
383
+ rhapsody* | darwin1.[[012]])
384
+ allow_undefined_flag='-undefined suppress'
385
+ ;;
386
+ *) # Darwin 1.3 on
387
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
388
+ allow_undefined_flag='-flat_namespace -undefined suppress'
389
+ else
390
+ case ${MACOSX_DEPLOYMENT_TARGET} in
391
+ 10.[[012]])
392
+ allow_undefined_flag='-flat_namespace -undefined suppress'
393
+ ;;
394
+ 10.*)
395
+ allow_undefined_flag='-undefined dynamic_lookup'
396
+ ;;
397
+ esac
398
+ fi
399
+ ;;
400
+ esac
401
+ # Disable shared library build on OS-X older than 10.3.
402
+ case $host_os in
403
+ darwin[1-6]*)
404
+ can_build_shared=no
405
+ ;;
406
+ darwin7*)
407
+ can_build_shared=yes
408
+ ;;
409
+ esac
410
+ output_verbose_link_cmd='echo'
411
+ archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
412
+ module_cmds='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
413
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
414
+ archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
415
+ module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
416
+ hardcode_direct=no
417
+ hardcode_automatic=yes
418
+ hardcode_shlibpath_var=unsupported
419
+ whole_archive_flag_spec='-all_load $convenience'
420
+ link_all_deplibs=yes
421
+ ;;
422
+
423
+
424
+ freebsd1*)
425
+ ld_shlibs=no
426
+ ;;
427
+
428
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
429
+ # support. Future versions do this automatically, but an explicit c++rt0.o
430
+ # does not break anything, and helps significantly (at the cost of a little
431
+ # extra space).
432
+ freebsd2.2*)
433
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
434
+ hardcode_libdir_flag_spec='-R$libdir'
435
+ hardcode_direct=yes
436
+ hardcode_shlibpath_var=no
437
+ ;;
438
+
439
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
440
+ freebsd2*)
441
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
442
+ hardcode_direct=yes
443
+ hardcode_minus_L=yes
444
+ hardcode_shlibpath_var=no
445
+ ;;
446
+
447
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
448
+ freebsd* | kfreebsd*-gnu)
449
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
450
+ hardcode_libdir_flag_spec='-R$libdir'
451
+ hardcode_direct=yes
452
+ hardcode_shlibpath_var=no
453
+ ;;
454
+
455
+ hpux9* | hpux10* | hpux11*)
456
+ case $host_os in
457
+ hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
458
+ *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
459
+ esac
460
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
461
+ hardcode_libdir_separator=:
462
+ hardcode_direct=yes
463
+ hardcode_minus_L=yes # Not in the search PATH, but as the default
464
+ # location of the library.
465
+ export_dynamic_flag_spec='${wl}-E'
466
+ ;;
467
+
468
+ irix5* | irix6*)
469
+ if test "$with_gcc" = yes; then
470
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
471
+ else
472
+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
473
+ fi
474
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
475
+ hardcode_libdir_separator=:
476
+ link_all_deplibs=yes
477
+ ;;
478
+
479
+ netbsd* | knetbsd*-gnu)
480
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
481
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
482
+ else
483
+ archive_cmds='$LD -shared -nodefaultlibs -o $lib $libobjs $deplibs $linker_flags' # ELF
484
+ fi
485
+ hardcode_libdir_flag_spec='${wl}-R$libdir'
486
+ hardcode_direct=yes
487
+ hardcode_shlibpath_var=no
488
+ ;;
489
+
490
+ openbsd*)
491
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
492
+ hardcode_libdir_flag_spec='-R$libdir'
493
+ hardcode_direct=yes
494
+ hardcode_shlibpath_var=no
495
+ ;;
496
+
497
+ os2*)
498
+ hardcode_libdir_flag_spec='-L$libdir'
499
+ hardcode_minus_L=yes
500
+ allow_undefined_flag=unsupported
501
+ archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
502
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
503
+ ;;
504
+
505
+ osf3*)
506
+ if test "$with_gcc" = yes; then
507
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
508
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
509
+ else
510
+ allow_undefined_flag=' -expect_unresolved \*'
511
+ archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
512
+ fi
513
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
514
+ hardcode_libdir_separator=:
515
+ ;;
516
+
517
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
518
+ if test "$with_gcc" = yes; then
519
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
520
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
521
+ else
522
+ allow_undefined_flag=' -expect_unresolved \*'
523
+ archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
524
+ fi
525
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
526
+ hardcode_libdir_separator=:
527
+ ;;
528
+
529
+ sco3.2v5*)
530
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
531
+ hardcode_shlibpath_var=no
532
+ runpath_var=LD_RUN_PATH
533
+ hardcode_runpath_var=yes
534
+ ;;
535
+
536
+ solaris*)
537
+ no_undefined_flag=' ${wl}-z ${wl}defs'
538
+ archive_cmds='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
539
+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
540
+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
541
+
542
+ # Commands to make compiler produce verbose output that lists
543
+ # what "hidden" libraries, object files and flags are used when
544
+ # linking a shared library.
545
+ output_verbose_link_cmds="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | egrep \"\-L\""
546
+
547
+ hardcode_libdir_flag_spec='${wl}-R $wl$libdir'
548
+ hardcode_shlibpath_var=no
549
+ case $host_os in
550
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
551
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
552
+ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;;
553
+ esac
554
+ link_all_deplibs=yes
555
+ ;;
556
+
557
+ sunos4*)
558
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
559
+ hardcode_libdir_flag_spec='-L$libdir'
560
+ hardcode_direct=yes
561
+ hardcode_minus_L=yes
562
+ hardcode_shlibpath_var=no
563
+ ;;
564
+
565
+ sysv4)
566
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
567
+ runpath_var='LD_RUN_PATH'
568
+ hardcode_shlibpath_var=no
569
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
570
+ ;;
571
+
572
+ sysv4.3*)
573
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
574
+ hardcode_shlibpath_var=no
575
+ export_dynamic_flag_spec='-Bexport'
576
+ ;;
577
+
578
+ sysv5*)
579
+ no_undefined_flag=' -z text'
580
+ # $CC -shared without GNU ld will not create a library from C++
581
+ # object files and a static libstdc++, better avoid it by now
582
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
583
+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
584
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
585
+ hardcode_libdir_flag_spec=
586
+ hardcode_shlibpath_var=no
587
+ runpath_var='LD_RUN_PATH'
588
+ ;;
589
+
590
+ uts4*)
591
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
592
+ hardcode_libdir_flag_spec='-L$libdir'
593
+ hardcode_shlibpath_var=no
594
+ ;;
595
+
596
+ dgux*)
597
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
598
+ hardcode_libdir_flag_spec='-L$libdir'
599
+ hardcode_shlibpath_var=no
600
+ ;;
601
+
602
+ sysv4*MP*)
603
+ if test -d /usr/nec; then
604
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
605
+ hardcode_shlibpath_var=no
606
+ runpath_var=LD_RUN_PATH
607
+ hardcode_runpath_var=yes
608
+ ld_shlibs=yes
609
+ fi
610
+ ;;
611
+
612
+ sysv4.2uw2*)
613
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
614
+ hardcode_direct=yes
615
+ hardcode_minus_L=no
616
+ hardcode_shlibpath_var=no
617
+ hardcode_runpath_var=yes
618
+ runpath_var=LD_RUN_PATH
619
+ ;;
620
+
621
+ sysv5uw7* | unixware7*)
622
+ no_undefined_flag='${wl}-z ${wl}text'
623
+ if test "$GCC" = yes; then
624
+ archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
625
+ else
626
+ archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
627
+ fi
628
+ runpath_var='LD_RUN_PATH'
629
+ hardcode_shlibpath_var=no
630
+ ;;
631
+
632
+ *)
633
+ ld_shlibs=no
634
+ ;;
635
+ esac
636
+ fi
637
+
638
+ ## Compiler Characteristics: PIC flags, static flags, etc
639
+
640
+ # We don't use cached values here since only the C compiler
641
+ # characteristics should be cached.
642
+ ac_cv_prog_cc_pic=
643
+ ac_cv_prog_cc_shlib=
644
+ ac_cv_prog_cc_wl=
645
+ ac_cv_prog_cc_static=
646
+ ac_cv_prog_cc_no_builtin=
647
+ ac_cv_prog_cc_can_build_shared=$can_build_shared
648
+
649
+ ac_cv_prog_cc_wl='-Wl,'
650
+ ac_cv_prog_cc_static='-static'
651
+
652
+ case $host_os in
653
+ beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
654
+ # PIC is the default for these OSes.
655
+ ;;
656
+ aix*)
657
+ # Below there is a dirty hack to force normal static linking with -ldl
658
+ # The problem is because libdl dynamically linked with both libc and
659
+ # libC (AIX C++ library), which obviously doesn't included in libraries
660
+ # list by gcc. This cause undefined symbols with -static flags.
661
+ # This hack allows C programs to be linked with "-static -ldl", but
662
+ # we not sure about C++ programs.
663
+ ac_cv_prog_cc_static="$ac_cv_prog_cc_static ${ac_cv_prog_cc_wl}-lC"
664
+ ;;
665
+ *djgpp*)
666
+ # DJGPP does not suppot shared libraries at all
667
+ ac_cv_prog_cc_pic=
668
+ ;;
669
+ cygwin* | mingw* | os2*)
670
+ # This hack is so that the source file can tell whether it is being
671
+ # built for inclusion in a dll (and should export symbols for example).
672
+ ac_cv_prog_cc_pic='-DDLL_EXPORT'
673
+ ;;
674
+
675
+ darwin* | rhapsody*)
676
+ # PIC is the default on this platform
677
+ # Common symbols not allowed in MH_DYLIB files
678
+ ac_cv_prog_cc_pic='-fno-common'
679
+ ;;
680
+ amigaos*)
681
+ # FIXME: we need at least 68020 code to build shared libraries, but
682
+ # adding the `-m68020' flag to GCC prevents building anything better,
683
+ # like `-m68040'.
684
+ ac_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
685
+ ;;
686
+ sysv4*MP*)
687
+ if test -d /usr/nec; then
688
+ ac_cv_prog_cc_pic=-Kconform_pic
689
+ fi
690
+ ;;
691
+ *)
692
+ ac_cv_prog_cc_pic='-fPIC'
693
+ ;;
694
+ esac
695
+
696
+ # GCJ did not exist at the time GCC didn't implicitly link libc in.
697
+ need_lc=no
698
+
699
+ # All existing releases of GCJ support `-c -o'.
700
+ lt_cv_compiler_c_o=yes