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,365 @@
1
+ dnl Process this with autoconf to create configure
2
+
3
+ AC_PREREQ(2.59)
4
+
5
+ AC_INIT([libffi], [3.0.6], [http://gcc.gnu.org/bugs.html])
6
+ AC_CONFIG_HEADERS([fficonfig.h])
7
+
8
+ AC_CANONICAL_SYSTEM
9
+ target_alias=${target_alias-$host_alias}
10
+
11
+ . ${srcdir}/configure.host
12
+
13
+ AM_INIT_AUTOMAKE
14
+
15
+ # The same as in boehm-gc and libstdc++. Have to borrow it from there.
16
+ # We must force CC to /not/ be precious variables; otherwise
17
+ # the wrong, non-multilib-adjusted value will be used in multilibs.
18
+ # As a side effect, we have to subst CFLAGS ourselves.
19
+
20
+ m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS])
21
+ m4_define([_AC_ARG_VAR_PRECIOUS],[])
22
+ AC_PROG_CC
23
+ m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
24
+
25
+ AC_SUBST(CFLAGS)
26
+
27
+ AM_PROG_AS
28
+ AM_PROG_CC_C_O
29
+ AC_PROG_LIBTOOL
30
+
31
+ AM_MAINTAINER_MODE
32
+
33
+ AC_CHECK_HEADERS(sys/mman.h)
34
+ AC_CHECK_FUNCS(mmap)
35
+ AC_FUNC_MMAP_BLACKLIST
36
+
37
+ dnl The -no-testsuite modules omit the test subdir.
38
+ AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite)
39
+
40
+ TARGETDIR="unknown"
41
+ case "$host" in
42
+ alpha*-*-*)
43
+ TARGET=ALPHA; TARGETDIR=alpha;
44
+ # Support 128-bit long double, changable via command-line switch.
45
+ HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)'
46
+ ;;
47
+
48
+ arm*-*-*)
49
+ TARGET=ARM; TARGETDIR=arm
50
+ ;;
51
+
52
+ amd64-*-freebsd*)
53
+ TARGET=X86_64; TARGETDIR=x86
54
+ ;;
55
+
56
+ cris-*-*)
57
+ TARGET=LIBFFI_CRIS; TARGETDIR=cris
58
+ ;;
59
+
60
+ frv-*-*)
61
+ TARGET=FRV; TARGETDIR=frv
62
+ ;;
63
+
64
+ hppa*-*-linux* | parisc*-*-linux*)
65
+ TARGET=PA_LINUX; TARGETDIR=pa
66
+ ;;
67
+ hppa*64-*-hpux*)
68
+ TARGET=PA64_HPUX; TARGETDIR=pa
69
+ ;;
70
+ hppa*-*-hpux*)
71
+ TARGET=PA_HPUX; TARGETDIR=pa
72
+ ;;
73
+
74
+ i386-*-freebsd* | i386-*-openbsd*)
75
+ TARGET=X86_FREEBSD; TARGETDIR=x86
76
+ ;;
77
+ i?86-win32* | i?86-*-cygwin* | i?86-*-mingw*)
78
+ TARGET=X86_WIN32; TARGETDIR=x86
79
+ ;;
80
+ i?86-*-darwin*)
81
+ TARGET=X86_DARWIN; TARGETDIR=x86
82
+ ;;
83
+ i?86-*-solaris2.1[[0-9]]*)
84
+ TARGET=X86_64; TARGETDIR=x86
85
+ ;;
86
+ i?86-*-*)
87
+ TARGET=X86; TARGETDIR=x86
88
+ ;;
89
+
90
+ ia64*-*-*)
91
+ TARGET=IA64; TARGETDIR=ia64
92
+ ;;
93
+
94
+ m32r*-*-*)
95
+ TARGET=M32R; TARGETDIR=m32r
96
+ ;;
97
+
98
+ m68k-*-*)
99
+ TARGET=M68K; TARGETDIR=m68k
100
+ ;;
101
+
102
+ mips-sgi-irix5.* | mips-sgi-irix6.*)
103
+ TARGET=MIPS; TARGETDIR=mips
104
+ ;;
105
+ mips*-*-linux*)
106
+ TARGET=MIPS; TARGETDIR=mips
107
+ ;;
108
+
109
+ powerpc*-*-linux* | powerpc-*-sysv*)
110
+ TARGET=POWERPC; TARGETDIR=powerpc
111
+ ;;
112
+ powerpc-*-beos*)
113
+ TARGET=POWERPC; TARGETDIR=powerpc
114
+ ;;
115
+ powerpc-*-darwin*)
116
+ TARGET=POWERPC_DARWIN; TARGETDIR=powerpc
117
+ ;;
118
+ powerpc-*-aix* | rs6000-*-aix*)
119
+ TARGET=POWERPC_AIX; TARGETDIR=powerpc
120
+ ;;
121
+ powerpc-*-freebsd*)
122
+ TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc
123
+ ;;
124
+ powerpc*-*-rtems*)
125
+ TARGET=POWERPC; TARGETDIR=powerpc
126
+ ;;
127
+
128
+ s390-*-* | s390x-*-*)
129
+ TARGET=S390; TARGETDIR=s390
130
+ ;;
131
+
132
+ sh-*-* | sh[[34]]*-*-*)
133
+ TARGET=SH; TARGETDIR=sh
134
+ ;;
135
+ sh64-*-* | sh5*-*-*)
136
+ TARGET=SH64; TARGETDIR=sh64
137
+ ;;
138
+
139
+ sparc*-*-*)
140
+ TARGET=SPARC; TARGETDIR=sparc
141
+ ;;
142
+
143
+ x86_64-*-darwin*)
144
+ TARGET=X86_DARWIN; TARGETDIR=x86
145
+ ;;
146
+ x86_64-*-cygwin* | x86_64-*-mingw*)
147
+ ;;
148
+ x86_64-*-*)
149
+ TARGET=X86_64; TARGETDIR=x86
150
+ ;;
151
+ esac
152
+
153
+ AC_SUBST(AM_RUNTESTFLAGS)
154
+
155
+ if test $TARGETDIR = unknown; then
156
+ AC_MSG_ERROR(["libffi has not been ported to $host."])
157
+ fi
158
+
159
+ AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
160
+ AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
161
+ AM_CONDITIONAL(X86, test x$TARGET = xX86)
162
+ AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD)
163
+ AM_CONDITIONAL(X86_WIN32, test x$TARGET = xX86_WIN32)
164
+ AM_CONDITIONAL(X86_DARWIN, test x$TARGET = xX86_DARWIN)
165
+ AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA)
166
+ AM_CONDITIONAL(IA64, test x$TARGET = xIA64)
167
+ AM_CONDITIONAL(M32R, test x$TARGET = xM32R)
168
+ AM_CONDITIONAL(M68K, test x$TARGET = xM68K)
169
+ AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
170
+ AM_CONDITIONAL(POWERPC_AIX, test x$TARGET = xPOWERPC_AIX)
171
+ AM_CONDITIONAL(POWERPC_DARWIN, test x$TARGET = xPOWERPC_DARWIN)
172
+ AM_CONDITIONAL(POWERPC_FREEBSD, test x$TARGET = xPOWERPC_FREEBSD)
173
+ AM_CONDITIONAL(ARM, test x$TARGET = xARM)
174
+ AM_CONDITIONAL(LIBFFI_CRIS, test x$TARGET = xLIBFFI_CRIS)
175
+ AM_CONDITIONAL(FRV, test x$TARGET = xFRV)
176
+ AM_CONDITIONAL(S390, test x$TARGET = xS390)
177
+ AM_CONDITIONAL(X86_64, test x$TARGET = xX86_64)
178
+ AM_CONDITIONAL(SH, test x$TARGET = xSH)
179
+ AM_CONDITIONAL(SH64, test x$TARGET = xSH64)
180
+ AM_CONDITIONAL(PA_LINUX, test x$TARGET = xPA_LINUX)
181
+ AM_CONDITIONAL(PA_HPUX, test x$TARGET = xPA_HPUX)
182
+ AM_CONDITIONAL(PA64_HPUX, test x$TARGET = xPA64_HPUX)
183
+
184
+ AC_HEADER_STDC
185
+ AC_CHECK_FUNCS(memcpy)
186
+ AC_FUNC_ALLOCA
187
+
188
+ AC_CHECK_SIZEOF(double)
189
+ AC_CHECK_SIZEOF(long double)
190
+
191
+ # Also AC_SUBST this variable for ffi.h.
192
+ if test -z "$HAVE_LONG_DOUBLE"; then
193
+ HAVE_LONG_DOUBLE=0
194
+ if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
195
+ if test $ac_cv_sizeof_long_double != 0; then
196
+ HAVE_LONG_DOUBLE=1
197
+ AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the long double type and it is bigger than a double])
198
+ fi
199
+ fi
200
+ fi
201
+ AC_SUBST(HAVE_LONG_DOUBLE)
202
+
203
+ AC_C_BIGENDIAN
204
+
205
+ AC_CACHE_CHECK([assembler .cfi pseudo-op support],
206
+ libffi_cv_as_cfi_pseudo_op, [
207
+ libffi_cv_as_cfi_pseudo_op=unknown
208
+ AC_TRY_COMPILE([asm (".cfi_startproc\n\t.cfi_endproc");],,
209
+ [libffi_cv_as_cfi_pseudo_op=yes],
210
+ [libffi_cv_as_cfi_pseudo_op=no])
211
+ ])
212
+ if test "x$libffi_cv_as_cfi_pseudo_op" = xyes; then
213
+ AC_DEFINE(HAVE_AS_CFI_PSEUDO_OP, 1,
214
+ [Define if your assembler supports .cfi_* directives.])
215
+ fi
216
+
217
+ if test x$TARGET = xSPARC; then
218
+ AC_CACHE_CHECK([assembler and linker support unaligned pc related relocs],
219
+ libffi_cv_as_sparc_ua_pcrel, [
220
+ save_CFLAGS="$CFLAGS"
221
+ save_LDFLAGS="$LDFLAGS"
222
+ CFLAGS="$CFLAGS -fpic"
223
+ LDFLAGS="$LDFLAGS -shared"
224
+ AC_TRY_LINK([asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text");],,
225
+ [libffi_cv_as_sparc_ua_pcrel=yes],
226
+ [libffi_cv_as_sparc_ua_pcrel=no])
227
+ CFLAGS="$save_CFLAGS"
228
+ LDFLAGS="$save_LDFLAGS"])
229
+ if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then
230
+ AC_DEFINE(HAVE_AS_SPARC_UA_PCREL, 1,
231
+ [Define if your assembler and linker support unaligned PC relative relocs.])
232
+ fi
233
+
234
+ AC_CACHE_CHECK([assembler .register pseudo-op support],
235
+ libffi_cv_as_register_pseudo_op, [
236
+ libffi_cv_as_register_pseudo_op=unknown
237
+ # Check if we have .register
238
+ AC_TRY_COMPILE([asm (".register %g2, #scratch");],,
239
+ [libffi_cv_as_register_pseudo_op=yes],
240
+ [libffi_cv_as_register_pseudo_op=no])
241
+ ])
242
+ if test "x$libffi_cv_as_register_pseudo_op" = xyes; then
243
+ AC_DEFINE(HAVE_AS_REGISTER_PSEUDO_OP, 1,
244
+ [Define if your assembler supports .register.])
245
+ fi
246
+ fi
247
+
248
+ AC_CACHE_CHECK([whether .eh_frame section should be read-only],
249
+ libffi_cv_ro_eh_frame, [
250
+ libffi_cv_ro_eh_frame=no
251
+ echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
252
+ if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
253
+ if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
254
+ libffi_cv_ro_eh_frame=yes
255
+ elif grep '.section.*eh_frame.*#alloc' conftest.c \
256
+ | grep -v '#write' > /dev/null; then
257
+ libffi_cv_ro_eh_frame=yes
258
+ fi
259
+ fi
260
+ rm -f conftest.*
261
+ ])
262
+ if test "x$libffi_cv_ro_eh_frame" = xyes; then
263
+ AC_DEFINE(HAVE_RO_EH_FRAME, 1,
264
+ [Define if .eh_frame sections should be read-only.])
265
+ AC_DEFINE(EH_FRAME_FLAGS, "a",
266
+ [Define to the flags needed for the .section .eh_frame directive.])
267
+ else
268
+ AC_DEFINE(EH_FRAME_FLAGS, "aw",
269
+ [Define to the flags needed for the .section .eh_frame directive.])
270
+ fi
271
+
272
+ AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
273
+ libffi_cv_hidden_visibility_attribute, [
274
+ echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c
275
+ libffi_cv_hidden_visibility_attribute=no
276
+ if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
277
+ if grep '\.hidden.*foo' conftest.s >/dev/null; then
278
+ libffi_cv_hidden_visibility_attribute=yes
279
+ fi
280
+ fi
281
+ rm -f conftest.*
282
+ ])
283
+ if test $libffi_cv_hidden_visibility_attribute = yes; then
284
+ AC_DEFINE(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE, 1,
285
+ [Define if __attribute__((visibility("hidden"))) is supported.])
286
+ fi
287
+
288
+ AH_BOTTOM([
289
+ #ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE
290
+ #ifdef LIBFFI_ASM
291
+ #define FFI_HIDDEN(name) .hidden name
292
+ #else
293
+ #define FFI_HIDDEN __attribute__ ((visibility ("hidden")))
294
+ #endif
295
+ #else
296
+ #ifdef LIBFFI_ASM
297
+ #define FFI_HIDDEN(name)
298
+ #else
299
+ #define FFI_HIDDEN
300
+ #endif
301
+ #endif
302
+ ])
303
+
304
+ AC_SUBST(TARGET)
305
+ AC_SUBST(TARGETDIR)
306
+
307
+ AC_SUBST(SHELL)
308
+
309
+ AC_ARG_ENABLE(debug,
310
+ [ --enable-debug debugging mode],
311
+ if test "$enable_debug" = "yes"; then
312
+ AC_DEFINE(FFI_DEBUG, 1, [Define this if you want extra debugging.])
313
+ fi)
314
+
315
+ AC_ARG_ENABLE(structs,
316
+ [ --disable-structs omit code for struct support],
317
+ if test "$enable_structs" = "no"; then
318
+ AC_DEFINE(FFI_NO_STRUCTS, 1, [Define this is you do not want support for aggregate types.])
319
+ fi)
320
+
321
+ AC_ARG_ENABLE(raw-api,
322
+ [ --disable-raw-api make the raw api unavailable],
323
+ if test "$enable_raw_api" = "no"; then
324
+ AC_DEFINE(FFI_NO_RAW_API, 1, [Define this is you do not want support for the raw API.])
325
+ fi)
326
+
327
+ AC_ARG_ENABLE(purify-safety,
328
+ [ --enable-purify-safety purify-safe mode],
329
+ if test "$enable_purify_safety" = "yes"; then
330
+ AC_DEFINE(USING_PURIFY, 1, [Define this if you are using Purify and want to suppress spurious messages.])
331
+ fi)
332
+
333
+ if test -n "$with_cross_host" &&
334
+ test x"$with_cross_host" != x"no"; then
335
+ toolexecdir='$(exec_prefix)/$(target_alias)'
336
+ toolexeclibdir='$(toolexecdir)/lib'
337
+ else
338
+ toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
339
+ toolexeclibdir='$(libdir)'
340
+ fi
341
+ multi_os_directory=`$CC -print-multi-os-directory`
342
+ case $multi_os_directory in
343
+ .) ;; # Avoid trailing /.
344
+ *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
345
+ esac
346
+ AC_SUBST(toolexecdir)
347
+ AC_SUBST(toolexeclibdir)
348
+
349
+ if test "${multilib}" = "yes"; then
350
+ multilib_arg="--enable-multilib"
351
+ else
352
+ multilib_arg=
353
+ fi
354
+
355
+ AC_CONFIG_COMMANDS(include, [test -d include || mkdir include])
356
+ AC_CONFIG_COMMANDS(src, [
357
+ test -d src || mkdir src
358
+ test -d src/$TARGETDIR || mkdir src/$TARGETDIR
359
+ ], [TARGETDIR="$TARGETDIR"])
360
+
361
+ AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h)
362
+
363
+ AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc)
364
+
365
+ AC_OUTPUT
@@ -0,0 +1,11 @@
1
+ # configure.host
2
+ #
3
+ # This shell script handles all host based configuration for libffi.
4
+ #
5
+
6
+ # THIS TABLE IS SORTED. KEEP IT THAT WAY.
7
+ case "${host}" in
8
+ frv*-elf)
9
+ LDFLAGS=`echo $LDFLAGS | sed "s/\-B[^ ]*libgloss\/frv\///"`\ -B`pwd`/../libgloss/frv/
10
+ ;;
11
+ esac
@@ -0,0 +1,584 @@
1
+ #! /bin/sh
2
+ # depcomp - compile a program generating dependencies as side-effects
3
+
4
+ scriptversion=2006-10-15.18
5
+
6
+ # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
7
+ # Foundation, Inc.
8
+
9
+ # This program is free software; you can redistribute it and/or modify
10
+ # it under the terms of the GNU General Public License as published by
11
+ # the Free Software Foundation; either version 2, or (at your option)
12
+ # any later version.
13
+
14
+ # This program is distributed in the hope that it will be useful,
15
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ # GNU General Public License for more details.
18
+
19
+ # You should have received a copy of the GNU General Public License
20
+ # along with this program; if not, write to the Free Software
21
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22
+ # 02110-1301, USA.
23
+
24
+ # As a special exception to the GNU General Public License, if you
25
+ # distribute this file as part of a program that contains a
26
+ # configuration script generated by Autoconf, you may include it under
27
+ # the same distribution terms that you use for the rest of that program.
28
+
29
+ # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
30
+
31
+ case $1 in
32
+ '')
33
+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
34
+ exit 1;
35
+ ;;
36
+ -h | --h*)
37
+ cat <<\EOF
38
+ Usage: depcomp [--help] [--version] PROGRAM [ARGS]
39
+
40
+ Run PROGRAMS ARGS to compile a file, generating dependencies
41
+ as side-effects.
42
+
43
+ Environment variables:
44
+ depmode Dependency tracking mode.
45
+ source Source file read by `PROGRAMS ARGS'.
46
+ object Object file output by `PROGRAMS ARGS'.
47
+ DEPDIR directory where to store dependencies.
48
+ depfile Dependency file to output.
49
+ tmpdepfile Temporary file to use when outputing dependencies.
50
+ libtool Whether libtool is used (yes/no).
51
+
52
+ Report bugs to <bug-automake@gnu.org>.
53
+ EOF
54
+ exit $?
55
+ ;;
56
+ -v | --v*)
57
+ echo "depcomp $scriptversion"
58
+ exit $?
59
+ ;;
60
+ esac
61
+
62
+ if test -z "$depmode" || test -z "$source" || test -z "$object"; then
63
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
64
+ exit 1
65
+ fi
66
+
67
+ # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
68
+ depfile=${depfile-`echo "$object" |
69
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
70
+ tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
71
+
72
+ rm -f "$tmpdepfile"
73
+
74
+ # Some modes work just like other modes, but use different flags. We
75
+ # parameterize here, but still list the modes in the big case below,
76
+ # to make depend.m4 easier to write. Note that we *cannot* use a case
77
+ # here, because this file can only contain one case statement.
78
+ if test "$depmode" = hp; then
79
+ # HP compiler uses -M and no extra arg.
80
+ gccflag=-M
81
+ depmode=gcc
82
+ fi
83
+
84
+ if test "$depmode" = dashXmstdout; then
85
+ # This is just like dashmstdout with a different argument.
86
+ dashmflag=-xM
87
+ depmode=dashmstdout
88
+ fi
89
+
90
+ case "$depmode" in
91
+ gcc3)
92
+ ## gcc 3 implements dependency tracking that does exactly what
93
+ ## we want. Yay! Note: for some reason libtool 1.4 doesn't like
94
+ ## it if -MD -MP comes after the -MF stuff. Hmm.
95
+ ## Unfortunately, FreeBSD c89 acceptance of flags depends upon
96
+ ## the command line argument order; so add the flags where they
97
+ ## appear in depend2.am. Note that the slowdown incurred here
98
+ ## affects only configure: in makefiles, %FASTDEP% shortcuts this.
99
+ for arg
100
+ do
101
+ case $arg in
102
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
103
+ *) set fnord "$@" "$arg" ;;
104
+ esac
105
+ shift # fnord
106
+ shift # $arg
107
+ done
108
+ "$@"
109
+ stat=$?
110
+ if test $stat -eq 0; then :
111
+ else
112
+ rm -f "$tmpdepfile"
113
+ exit $stat
114
+ fi
115
+ mv "$tmpdepfile" "$depfile"
116
+ ;;
117
+
118
+ gcc)
119
+ ## There are various ways to get dependency output from gcc. Here's
120
+ ## why we pick this rather obscure method:
121
+ ## - Don't want to use -MD because we'd like the dependencies to end
122
+ ## up in a subdir. Having to rename by hand is ugly.
123
+ ## (We might end up doing this anyway to support other compilers.)
124
+ ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
125
+ ## -MM, not -M (despite what the docs say).
126
+ ## - Using -M directly means running the compiler twice (even worse
127
+ ## than renaming).
128
+ if test -z "$gccflag"; then
129
+ gccflag=-MD,
130
+ fi
131
+ "$@" -Wp,"$gccflag$tmpdepfile"
132
+ stat=$?
133
+ if test $stat -eq 0; then :
134
+ else
135
+ rm -f "$tmpdepfile"
136
+ exit $stat
137
+ fi
138
+ rm -f "$depfile"
139
+ echo "$object : \\" > "$depfile"
140
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
141
+ ## The second -e expression handles DOS-style file names with drive letters.
142
+ sed -e 's/^[^:]*: / /' \
143
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
144
+ ## This next piece of magic avoids the `deleted header file' problem.
145
+ ## The problem is that when a header file which appears in a .P file
146
+ ## is deleted, the dependency causes make to die (because there is
147
+ ## typically no way to rebuild the header). We avoid this by adding
148
+ ## dummy dependencies for each header file. Too bad gcc doesn't do
149
+ ## this for us directly.
150
+ tr ' ' '
151
+ ' < "$tmpdepfile" |
152
+ ## Some versions of gcc put a space before the `:'. On the theory
153
+ ## that the space means something, we add a space to the output as
154
+ ## well.
155
+ ## Some versions of the HPUX 10.20 sed can't process this invocation
156
+ ## correctly. Breaking it into two sed invocations is a workaround.
157
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
158
+ rm -f "$tmpdepfile"
159
+ ;;
160
+
161
+ hp)
162
+ # This case exists only to let depend.m4 do its work. It works by
163
+ # looking at the text of this script. This case will never be run,
164
+ # since it is checked for above.
165
+ exit 1
166
+ ;;
167
+
168
+ sgi)
169
+ if test "$libtool" = yes; then
170
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
171
+ else
172
+ "$@" -MDupdate "$tmpdepfile"
173
+ fi
174
+ stat=$?
175
+ if test $stat -eq 0; then :
176
+ else
177
+ rm -f "$tmpdepfile"
178
+ exit $stat
179
+ fi
180
+ rm -f "$depfile"
181
+
182
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
183
+ echo "$object : \\" > "$depfile"
184
+
185
+ # Clip off the initial element (the dependent). Don't try to be
186
+ # clever and replace this with sed code, as IRIX sed won't handle
187
+ # lines with more than a fixed number of characters (4096 in
188
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
189
+ # the IRIX cc adds comments like `#:fec' to the end of the
190
+ # dependency line.
191
+ tr ' ' '
192
+ ' < "$tmpdepfile" \
193
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
194
+ tr '
195
+ ' ' ' >> $depfile
196
+ echo >> $depfile
197
+
198
+ # The second pass generates a dummy entry for each header file.
199
+ tr ' ' '
200
+ ' < "$tmpdepfile" \
201
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
202
+ >> $depfile
203
+ else
204
+ # The sourcefile does not contain any dependencies, so just
205
+ # store a dummy comment line, to avoid errors with the Makefile
206
+ # "include basename.Plo" scheme.
207
+ echo "#dummy" > "$depfile"
208
+ fi
209
+ rm -f "$tmpdepfile"
210
+ ;;
211
+
212
+ aix)
213
+ # The C for AIX Compiler uses -M and outputs the dependencies
214
+ # in a .u file. In older versions, this file always lives in the
215
+ # current directory. Also, the AIX compiler puts `$object:' at the
216
+ # start of each line; $object doesn't have directory information.
217
+ # Version 6 uses the directory in both cases.
218
+ stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
219
+ tmpdepfile="$stripped.u"
220
+ if test "$libtool" = yes; then
221
+ "$@" -Wc,-M
222
+ else
223
+ "$@" -M
224
+ fi
225
+ stat=$?
226
+
227
+ if test -f "$tmpdepfile"; then :
228
+ else
229
+ stripped=`echo "$stripped" | sed 's,^.*/,,'`
230
+ tmpdepfile="$stripped.u"
231
+ fi
232
+
233
+ if test $stat -eq 0; then :
234
+ else
235
+ rm -f "$tmpdepfile"
236
+ exit $stat
237
+ fi
238
+
239
+ if test -f "$tmpdepfile"; then
240
+ outname="$stripped.o"
241
+ # Each line is of the form `foo.o: dependent.h'.
242
+ # Do two passes, one to just change these to
243
+ # `$object: dependent.h' and one to simply `dependent.h:'.
244
+ sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
245
+ sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
246
+ else
247
+ # The sourcefile does not contain any dependencies, so just
248
+ # store a dummy comment line, to avoid errors with the Makefile
249
+ # "include basename.Plo" scheme.
250
+ echo "#dummy" > "$depfile"
251
+ fi
252
+ rm -f "$tmpdepfile"
253
+ ;;
254
+
255
+ icc)
256
+ # Intel's C compiler understands `-MD -MF file'. However on
257
+ # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
258
+ # ICC 7.0 will fill foo.d with something like
259
+ # foo.o: sub/foo.c
260
+ # foo.o: sub/foo.h
261
+ # which is wrong. We want:
262
+ # sub/foo.o: sub/foo.c
263
+ # sub/foo.o: sub/foo.h
264
+ # sub/foo.c:
265
+ # sub/foo.h:
266
+ # ICC 7.1 will output
267
+ # foo.o: sub/foo.c sub/foo.h
268
+ # and will wrap long lines using \ :
269
+ # foo.o: sub/foo.c ... \
270
+ # sub/foo.h ... \
271
+ # ...
272
+
273
+ "$@" -MD -MF "$tmpdepfile"
274
+ stat=$?
275
+ if test $stat -eq 0; then :
276
+ else
277
+ rm -f "$tmpdepfile"
278
+ exit $stat
279
+ fi
280
+ rm -f "$depfile"
281
+ # Each line is of the form `foo.o: dependent.h',
282
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
283
+ # Do two passes, one to just change these to
284
+ # `$object: dependent.h' and one to simply `dependent.h:'.
285
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
286
+ # Some versions of the HPUX 10.20 sed can't process this invocation
287
+ # correctly. Breaking it into two sed invocations is a workaround.
288
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
289
+ sed -e 's/$/ :/' >> "$depfile"
290
+ rm -f "$tmpdepfile"
291
+ ;;
292
+
293
+ hp2)
294
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
295
+ # compilers, which have integrated preprocessors. The correct option
296
+ # to use with these is +Maked; it writes dependencies to a file named
297
+ # 'foo.d', which lands next to the object file, wherever that
298
+ # happens to be.
299
+ # Much of this is similar to the tru64 case; see comments there.
300
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
301
+ test "x$dir" = "x$object" && dir=
302
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
303
+ if test "$libtool" = yes; then
304
+ tmpdepfile1=$dir$base.d
305
+ tmpdepfile2=$dir.libs/$base.d
306
+ "$@" -Wc,+Maked
307
+ else
308
+ tmpdepfile1=$dir$base.d
309
+ tmpdepfile2=$dir$base.d
310
+ "$@" +Maked
311
+ fi
312
+ stat=$?
313
+ if test $stat -eq 0; then :
314
+ else
315
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
316
+ exit $stat
317
+ fi
318
+
319
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
320
+ do
321
+ test -f "$tmpdepfile" && break
322
+ done
323
+ if test -f "$tmpdepfile"; then
324
+ sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
325
+ # Add `dependent.h:' lines.
326
+ sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
327
+ else
328
+ echo "#dummy" > "$depfile"
329
+ fi
330
+ rm -f "$tmpdepfile" "$tmpdepfile2"
331
+ ;;
332
+
333
+ tru64)
334
+ # The Tru64 compiler uses -MD to generate dependencies as a side
335
+ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
336
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
337
+ # dependencies in `foo.d' instead, so we check for that too.
338
+ # Subdirectories are respected.
339
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
340
+ test "x$dir" = "x$object" && dir=
341
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
342
+
343
+ if test "$libtool" = yes; then
344
+ # With Tru64 cc, shared objects can also be used to make a
345
+ # static library. This mechanism is used in libtool 1.4 series to
346
+ # handle both shared and static libraries in a single compilation.
347
+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
348
+ #
349
+ # With libtool 1.5 this exception was removed, and libtool now
350
+ # generates 2 separate objects for the 2 libraries. These two
351
+ # compilations output dependencies in $dir.libs/$base.o.d and
352
+ # in $dir$base.o.d. We have to check for both files, because
353
+ # one of the two compilations can be disabled. We should prefer
354
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
355
+ # automatically cleaned when .libs/ is deleted, while ignoring
356
+ # the former would cause a distcleancheck panic.
357
+ tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
358
+ tmpdepfile2=$dir$base.o.d # libtool 1.5
359
+ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
360
+ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
361
+ "$@" -Wc,-MD
362
+ else
363
+ tmpdepfile1=$dir$base.o.d
364
+ tmpdepfile2=$dir$base.d
365
+ tmpdepfile3=$dir$base.d
366
+ tmpdepfile4=$dir$base.d
367
+ "$@" -MD
368
+ fi
369
+
370
+ stat=$?
371
+ if test $stat -eq 0; then :
372
+ else
373
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
374
+ exit $stat
375
+ fi
376
+
377
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
378
+ do
379
+ test -f "$tmpdepfile" && break
380
+ done
381
+ if test -f "$tmpdepfile"; then
382
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
383
+ # That's a tab and a space in the [].
384
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
385
+ else
386
+ echo "#dummy" > "$depfile"
387
+ fi
388
+ rm -f "$tmpdepfile"
389
+ ;;
390
+
391
+ #nosideeffect)
392
+ # This comment above is used by automake to tell side-effect
393
+ # dependency tracking mechanisms from slower ones.
394
+
395
+ dashmstdout)
396
+ # Important note: in order to support this mode, a compiler *must*
397
+ # always write the preprocessed file to stdout, regardless of -o.
398
+ "$@" || exit $?
399
+
400
+ # Remove the call to Libtool.
401
+ if test "$libtool" = yes; then
402
+ while test $1 != '--mode=compile'; do
403
+ shift
404
+ done
405
+ shift
406
+ fi
407
+
408
+ # Remove `-o $object'.
409
+ IFS=" "
410
+ for arg
411
+ do
412
+ case $arg in
413
+ -o)
414
+ shift
415
+ ;;
416
+ $object)
417
+ shift
418
+ ;;
419
+ *)
420
+ set fnord "$@" "$arg"
421
+ shift # fnord
422
+ shift # $arg
423
+ ;;
424
+ esac
425
+ done
426
+
427
+ test -z "$dashmflag" && dashmflag=-M
428
+ # Require at least two characters before searching for `:'
429
+ # in the target name. This is to cope with DOS-style filenames:
430
+ # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
431
+ "$@" $dashmflag |
432
+ sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
433
+ rm -f "$depfile"
434
+ cat < "$tmpdepfile" > "$depfile"
435
+ tr ' ' '
436
+ ' < "$tmpdepfile" | \
437
+ ## Some versions of the HPUX 10.20 sed can't process this invocation
438
+ ## correctly. Breaking it into two sed invocations is a workaround.
439
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
440
+ rm -f "$tmpdepfile"
441
+ ;;
442
+
443
+ dashXmstdout)
444
+ # This case only exists to satisfy depend.m4. It is never actually
445
+ # run, as this mode is specially recognized in the preamble.
446
+ exit 1
447
+ ;;
448
+
449
+ makedepend)
450
+ "$@" || exit $?
451
+ # Remove any Libtool call
452
+ if test "$libtool" = yes; then
453
+ while test $1 != '--mode=compile'; do
454
+ shift
455
+ done
456
+ shift
457
+ fi
458
+ # X makedepend
459
+ shift
460
+ cleared=no
461
+ for arg in "$@"; do
462
+ case $cleared in
463
+ no)
464
+ set ""; shift
465
+ cleared=yes ;;
466
+ esac
467
+ case "$arg" in
468
+ -D*|-I*)
469
+ set fnord "$@" "$arg"; shift ;;
470
+ # Strip any option that makedepend may not understand. Remove
471
+ # the object too, otherwise makedepend will parse it as a source file.
472
+ -*|$object)
473
+ ;;
474
+ *)
475
+ set fnord "$@" "$arg"; shift ;;
476
+ esac
477
+ done
478
+ obj_suffix="`echo $object | sed 's/^.*\././'`"
479
+ touch "$tmpdepfile"
480
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
481
+ rm -f "$depfile"
482
+ cat < "$tmpdepfile" > "$depfile"
483
+ sed '1,2d' "$tmpdepfile" | tr ' ' '
484
+ ' | \
485
+ ## Some versions of the HPUX 10.20 sed can't process this invocation
486
+ ## correctly. Breaking it into two sed invocations is a workaround.
487
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
488
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
489
+ ;;
490
+
491
+ cpp)
492
+ # Important note: in order to support this mode, a compiler *must*
493
+ # always write the preprocessed file to stdout.
494
+ "$@" || exit $?
495
+
496
+ # Remove the call to Libtool.
497
+ if test "$libtool" = yes; then
498
+ while test $1 != '--mode=compile'; do
499
+ shift
500
+ done
501
+ shift
502
+ fi
503
+
504
+ # Remove `-o $object'.
505
+ IFS=" "
506
+ for arg
507
+ do
508
+ case $arg in
509
+ -o)
510
+ shift
511
+ ;;
512
+ $object)
513
+ shift
514
+ ;;
515
+ *)
516
+ set fnord "$@" "$arg"
517
+ shift # fnord
518
+ shift # $arg
519
+ ;;
520
+ esac
521
+ done
522
+
523
+ "$@" -E |
524
+ sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
525
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
526
+ sed '$ s: \\$::' > "$tmpdepfile"
527
+ rm -f "$depfile"
528
+ echo "$object : \\" > "$depfile"
529
+ cat < "$tmpdepfile" >> "$depfile"
530
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
531
+ rm -f "$tmpdepfile"
532
+ ;;
533
+
534
+ msvisualcpp)
535
+ # Important note: in order to support this mode, a compiler *must*
536
+ # always write the preprocessed file to stdout, regardless of -o,
537
+ # because we must use -o when running libtool.
538
+ "$@" || exit $?
539
+ IFS=" "
540
+ for arg
541
+ do
542
+ case "$arg" in
543
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
544
+ set fnord "$@"
545
+ shift
546
+ shift
547
+ ;;
548
+ *)
549
+ set fnord "$@" "$arg"
550
+ shift
551
+ shift
552
+ ;;
553
+ esac
554
+ done
555
+ "$@" -E |
556
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
557
+ rm -f "$depfile"
558
+ echo "$object : \\" > "$depfile"
559
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
560
+ echo " " >> "$depfile"
561
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
562
+ rm -f "$tmpdepfile"
563
+ ;;
564
+
565
+ none)
566
+ exec "$@"
567
+ ;;
568
+
569
+ *)
570
+ echo "Unknown depmode $depmode" 1>&2
571
+ exit 1
572
+ ;;
573
+ esac
574
+
575
+ exit 0
576
+
577
+ # Local Variables:
578
+ # mode: shell-script
579
+ # sh-indentation: 2
580
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
581
+ # time-stamp-start: "scriptversion="
582
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
583
+ # time-stamp-end: "$"
584
+ # End: