ffi 1.15.5 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +118 -0
  4. data/Gemfile +10 -3
  5. data/README.md +4 -3
  6. data/Rakefile +25 -10
  7. data/ext/ffi_c/AbstractMemory.c +99 -74
  8. data/ext/ffi_c/AbstractMemory.h +3 -2
  9. data/ext/ffi_c/ArrayType.c +51 -15
  10. data/ext/ffi_c/ArrayType.h +1 -0
  11. data/ext/ffi_c/Buffer.c +90 -33
  12. data/ext/ffi_c/Call.c +29 -12
  13. data/ext/ffi_c/Call.h +3 -2
  14. data/ext/ffi_c/DynamicLibrary.c +90 -27
  15. data/ext/ffi_c/Function.c +244 -98
  16. data/ext/ffi_c/Function.h +1 -0
  17. data/ext/ffi_c/FunctionInfo.c +81 -25
  18. data/ext/ffi_c/LastError.c +29 -11
  19. data/ext/ffi_c/MappedType.c +66 -23
  20. data/ext/ffi_c/MappedType.h +0 -2
  21. data/ext/ffi_c/MemoryPointer.c +36 -9
  22. data/ext/ffi_c/MethodHandle.c +3 -1
  23. data/ext/ffi_c/Pointer.c +82 -40
  24. data/ext/ffi_c/Pointer.h +1 -0
  25. data/ext/ffi_c/Struct.c +166 -84
  26. data/ext/ffi_c/Struct.h +7 -4
  27. data/ext/ffi_c/StructByValue.c +48 -16
  28. data/ext/ffi_c/StructLayout.c +130 -61
  29. data/ext/ffi_c/Type.c +120 -51
  30. data/ext/ffi_c/Type.h +3 -1
  31. data/ext/ffi_c/Types.c +8 -2
  32. data/ext/ffi_c/Types.h +0 -1
  33. data/ext/ffi_c/Variadic.c +71 -26
  34. data/ext/ffi_c/compat.h +22 -22
  35. data/ext/ffi_c/extconf.rb +19 -2
  36. data/ext/ffi_c/ffi.c +4 -0
  37. data/ext/ffi_c/libffi/.allow-ai-service +0 -0
  38. data/ext/ffi_c/libffi/.appveyor/site.exp +16 -0
  39. data/ext/ffi_c/libffi/.appveyor/unix-noexec.exp +7 -0
  40. data/ext/ffi_c/libffi/.appveyor.yml +27 -9
  41. data/ext/ffi_c/libffi/.ci/build-cross-in-container.sh +18 -0
  42. data/ext/ffi_c/libffi/{.travis → .ci}/build-in-container.sh +4 -6
  43. data/ext/ffi_c/libffi/.ci/build.sh +124 -0
  44. data/ext/ffi_c/libffi/{.travis → .ci}/install.sh +14 -7
  45. data/ext/ffi_c/libffi/.ci/msvs-detect +1103 -0
  46. data/ext/ffi_c/libffi/{.travis → .ci}/site.exp +5 -3
  47. data/ext/ffi_c/libffi/.circleci/config.yml +156 -0
  48. data/ext/ffi_c/libffi/.github/workflows/build.yml +479 -0
  49. data/ext/ffi_c/libffi/.github/workflows/emscripten.yml +172 -0
  50. data/ext/ffi_c/libffi/.gitignore +10 -2
  51. data/ext/ffi_c/libffi/LICENSE +1 -1
  52. data/ext/ffi_c/libffi/Makefile.am +12 -5
  53. data/ext/ffi_c/libffi/Makefile.in +118 -51
  54. data/ext/ffi_c/libffi/README.md +150 -105
  55. data/ext/ffi_c/libffi/acinclude.m4 +10 -112
  56. data/ext/ffi_c/libffi/compile +348 -0
  57. data/ext/ffi_c/libffi/config.guess +623 -556
  58. data/ext/ffi_c/libffi/config.sub +75 -34
  59. data/ext/ffi_c/libffi/configure +4571 -3830
  60. data/ext/ffi_c/libffi/configure.ac +64 -28
  61. data/ext/ffi_c/libffi/configure.host +26 -7
  62. data/ext/ffi_c/libffi/doc/Makefile.in +9 -6
  63. data/ext/ffi_c/libffi/doc/libffi.texi +82 -33
  64. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  65. data/ext/ffi_c/libffi/fficonfig.h.in +12 -47
  66. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +163 -52
  67. data/ext/ffi_c/libffi/include/Makefile.am +1 -1
  68. data/ext/ffi_c/libffi/include/Makefile.in +10 -9
  69. data/ext/ffi_c/libffi/include/ffi.h.in +55 -60
  70. data/ext/ffi_c/libffi/include/ffi_cfi.h +21 -0
  71. data/ext/ffi_c/libffi/include/ffi_common.h +33 -2
  72. data/ext/ffi_c/libffi/include/tramp.h +45 -0
  73. data/ext/ffi_c/libffi/install-sh +92 -69
  74. data/ext/ffi_c/libffi/libffi.map.in +5 -0
  75. data/ext/ffi_c/libffi/libtool-version +2 -2
  76. data/ext/ffi_c/libffi/ltmain.sh +518 -333
  77. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +18 -14
  78. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +108 -72
  79. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +76 -45
  80. data/ext/ffi_c/libffi/m4/ax_prepend_flag.m4 +51 -0
  81. data/ext/ffi_c/libffi/man/Makefile.in +9 -6
  82. data/ext/ffi_c/libffi/missing +1 -1
  83. data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/ffi.h +2 -2
  84. data/ext/ffi_c/libffi/msvcc.sh +1 -1
  85. data/ext/ffi_c/libffi/src/aarch64/ffi.c +172 -55
  86. data/ext/ffi_c/libffi/src/aarch64/internal.h +32 -0
  87. data/ext/ffi_c/libffi/src/aarch64/sysv.S +331 -87
  88. data/ext/ffi_c/libffi/src/arc/arcompact.S +169 -94
  89. data/ext/ffi_c/libffi/src/arc/ffi.c +325 -148
  90. data/ext/ffi_c/libffi/src/arc/ffitarget.h +14 -0
  91. data/ext/ffi_c/libffi/src/arm/ffi.c +62 -17
  92. data/ext/ffi_c/libffi/src/arm/ffitarget.h +3 -3
  93. data/ext/ffi_c/libffi/src/arm/internal.h +10 -0
  94. data/ext/ffi_c/libffi/src/arm/sysv.S +113 -42
  95. data/ext/ffi_c/libffi/src/closures.c +136 -50
  96. data/ext/ffi_c/libffi/src/debug.c +2 -2
  97. data/ext/ffi_c/libffi/src/dlmalloc.c +6 -1
  98. data/ext/ffi_c/libffi/src/ia64/ffi.c +12 -0
  99. data/ext/ffi_c/libffi/src/ia64/unix.S +20 -2
  100. data/ext/ffi_c/libffi/src/loongarch64/ffi.c +624 -0
  101. data/ext/ffi_c/libffi/src/loongarch64/ffitarget.h +82 -0
  102. data/ext/ffi_c/libffi/src/loongarch64/sysv.S +327 -0
  103. data/ext/ffi_c/libffi/src/m32r/ffi.c +31 -14
  104. data/ext/ffi_c/libffi/src/mips/ffi.c +250 -67
  105. data/ext/ffi_c/libffi/src/mips/ffitarget.h +7 -0
  106. data/ext/ffi_c/libffi/src/mips/n32.S +193 -33
  107. data/ext/ffi_c/libffi/src/mips/o32.S +61 -4
  108. data/ext/ffi_c/libffi/src/moxie/ffi.c +47 -22
  109. data/ext/ffi_c/libffi/src/or1k/ffi.c +25 -12
  110. data/ext/ffi_c/libffi/src/pa/ffi.c +32 -33
  111. data/ext/ffi_c/libffi/src/pa/ffi64.c +614 -0
  112. data/ext/ffi_c/libffi/src/pa/ffitarget.h +22 -8
  113. data/ext/ffi_c/libffi/src/pa/hpux32.S +83 -36
  114. data/ext/ffi_c/libffi/src/pa/hpux64.S +681 -0
  115. data/ext/ffi_c/libffi/src/pa/linux.S +82 -35
  116. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +36 -24
  117. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +1 -1
  118. data/ext/ffi_c/libffi/src/powerpc/linux64.S +2 -0
  119. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +2 -0
  120. data/ext/ffi_c/libffi/src/powerpc/t-aix +5 -0
  121. data/ext/ffi_c/libffi/src/prep_cif.c +22 -2
  122. data/ext/ffi_c/libffi/src/riscv/ffi.c +37 -4
  123. data/ext/ffi_c/libffi/src/sparc/ffi64.c +23 -1
  124. data/ext/ffi_c/libffi/src/tramp.c +716 -0
  125. data/ext/ffi_c/libffi/src/types.c +4 -6
  126. data/ext/ffi_c/libffi/src/wasm32/ffi.c +947 -0
  127. data/ext/ffi_c/libffi/src/wasm32/ffitarget.h +62 -0
  128. data/ext/ffi_c/libffi/src/x86/ffi.c +99 -37
  129. data/ext/ffi_c/libffi/src/x86/ffi64.c +67 -12
  130. data/ext/ffi_c/libffi/src/x86/ffitarget.h +9 -5
  131. data/ext/ffi_c/libffi/src/x86/ffiw64.c +44 -1
  132. data/ext/ffi_c/libffi/src/x86/internal.h +14 -0
  133. data/ext/ffi_c/libffi/src/x86/internal64.h +14 -0
  134. data/ext/ffi_c/libffi/src/x86/sysv.S +172 -38
  135. data/ext/ffi_c/libffi/src/x86/sysv_intel.S +91 -88
  136. data/ext/ffi_c/libffi/src/x86/unix64.S +96 -6
  137. data/ext/ffi_c/libffi/src/x86/win64.S +20 -7
  138. data/ext/ffi_c/libffi/src/xtensa/ffi.c +16 -8
  139. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +4 -0
  140. data/ext/ffi_c/libffi/src/xtensa/sysv.S +26 -16
  141. data/ext/ffi_c/libffi/testsuite/Makefile.am +79 -114
  142. data/ext/ffi_c/libffi/testsuite/Makefile.in +89 -121
  143. data/ext/ffi_c/libffi/testsuite/emscripten/build-tests.sh +54 -0
  144. data/ext/ffi_c/libffi/testsuite/emscripten/build.sh +63 -0
  145. data/ext/ffi_c/libffi/testsuite/emscripten/conftest.py +86 -0
  146. data/ext/ffi_c/libffi/testsuite/emscripten/node-tests.sh +48 -0
  147. data/ext/ffi_c/libffi/testsuite/emscripten/test.html +7 -0
  148. data/ext/ffi_c/libffi/testsuite/emscripten/test_libffi.py +51 -0
  149. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +43 -21
  150. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +2 -2
  151. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +1 -0
  152. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +5 -1
  153. data/ext/ffi_c/libffi/testsuite/libffi.call/bpo_38748.c +41 -0
  154. data/ext/ffi_c/libffi/testsuite/libffi.call/callback.c +99 -0
  155. data/ext/ffi_c/libffi/testsuite/libffi.call/callback2.c +108 -0
  156. data/ext/ffi_c/libffi/testsuite/libffi.call/callback3.c +114 -0
  157. data/ext/ffi_c/libffi/testsuite/libffi.call/callback4.c +119 -0
  158. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +28 -3
  159. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +3 -0
  160. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +5 -0
  161. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +4 -0
  162. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +4 -0
  163. data/ext/ffi_c/libffi/testsuite/libffi.call/s55.c +60 -0
  164. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +8 -9
  165. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +2 -2
  166. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +2 -2
  167. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +2 -2
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +1 -1
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_2.c +63 -0
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3.c +65 -0
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3f.c +65 -0
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4.c +67 -0
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4f.c +67 -0
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_big.c +93 -0
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_small.c +61 -0
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_2H.c +63 -0
  177. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_8H.c +90 -0
  178. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +1 -119
  179. data/ext/ffi_c/libffi/testsuite/libffi.call/va_2.c +220 -0
  180. data/ext/ffi_c/libffi/testsuite/libffi.call/va_3.c +154 -0
  181. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +13 -0
  182. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +11 -0
  183. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +15 -0
  184. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn0.c +3 -2
  185. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn1.c +2 -0
  186. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn2.c +2 -0
  187. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn3.c +21 -1
  188. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn4.c +2 -0
  189. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn5.c +2 -0
  190. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn6.c +2 -0
  191. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_loc_fn0.c +7 -6
  192. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_simple.c +6 -0
  193. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_12byte.c +18 -0
  194. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_16byte.c +22 -0
  195. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_18byte.c +24 -0
  196. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_19byte.c +29 -0
  197. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_1_1byte.c +4 -0
  198. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte.c +19 -1
  199. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte1.c +21 -1
  200. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_24byte.c +35 -3
  201. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_2byte.c +13 -0
  202. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3_1byte.c +19 -0
  203. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte1.c +13 -0
  204. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte2.c +13 -0
  205. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3float.c +18 -0
  206. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4_1byte.c +22 -0
  207. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4byte.c +13 -0
  208. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5_1_byte.c +29 -1
  209. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5byte.c +19 -1
  210. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_64byte.c +24 -0
  211. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6_1_byte.c +28 -1
  212. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6byte.c +24 -2
  213. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7_1_byte.c +39 -1
  214. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7byte.c +25 -1
  215. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_8byte.c +14 -0
  216. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte1.c +14 -1
  217. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte2.c +14 -2
  218. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_double.c +19 -1
  219. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_float.c +19 -1
  220. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble.c +20 -1
  221. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split.c +40 -25
  222. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split2.c +40 -3
  223. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_pointer.c +19 -1
  224. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint16.c +18 -1
  225. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint32.c +18 -3
  226. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint64.c +18 -1
  227. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint16.c +18 -1
  228. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint32.c +19 -1
  229. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint64.c +19 -1
  230. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_dbls_struct.c +3 -1
  231. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double_va.c +9 -1
  232. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_float.c +4 -0
  233. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble.c +11 -1
  234. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble_va.c +22 -3
  235. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_schar.c +5 -1
  236. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshort.c +6 -1
  237. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshortchar.c +9 -1
  238. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_uchar.c +9 -1
  239. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushort.c +6 -2
  240. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushortchar.c +9 -1
  241. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer.c +5 -0
  242. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer_stack.c +10 -0
  243. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_schar.c +3 -0
  244. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sint.c +2 -0
  245. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sshort.c +3 -0
  246. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_struct_va1.c +11 -0
  247. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uchar.c +3 -0
  248. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint.c +4 -0
  249. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint_va.c +4 -0
  250. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulong_va.c +4 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulonglong.c +2 -0
  252. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ushort.c +3 -0
  253. data/ext/ffi_c/libffi/testsuite/libffi.closures/ffitest.h +1 -138
  254. data/ext/ffi_c/libffi/testsuite/libffi.closures/huge_struct.c +21 -21
  255. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct.c +32 -9
  256. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct1.c +1 -1
  257. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct10.c +12 -0
  258. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct11.c +21 -5
  259. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct12.c +86 -0
  260. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct13.c +115 -0
  261. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct2.c +10 -1
  262. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct3.c +10 -1
  263. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct4.c +9 -0
  264. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct5.c +9 -0
  265. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct6.c +11 -0
  266. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct7.c +9 -0
  267. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct8.c +11 -0
  268. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct9.c +11 -0
  269. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs1.c +86 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs2.c +102 -0
  271. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs3.c +101 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium.c +1 -1
  273. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium2.c +1 -1
  274. data/ext/ffi_c/libffi/testsuite/libffi.closures/testclosure.c +6 -1
  275. data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest.cc +2 -1
  276. data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest_ffi_call.cc +1 -0
  277. data/ext/ffi_c/libffi.bsd.mk +2 -2
  278. data/ext/ffi_c/libffi.darwin.mk +2 -2
  279. data/ext/ffi_c/libffi.gnu.mk +2 -2
  280. data/ext/ffi_c/rbffi.h +1 -1
  281. data/ffi.gemspec +3 -3
  282. data/lib/ffi/autopointer.rb +8 -31
  283. data/lib/ffi/compat.rb +43 -0
  284. data/lib/ffi/data_converter.rb +2 -2
  285. data/lib/ffi/dynamic_library.rb +118 -0
  286. data/lib/ffi/enum.rb +18 -12
  287. data/lib/ffi/ffi.rb +3 -0
  288. data/lib/ffi/function.rb +71 -0
  289. data/lib/ffi/io.rb +2 -2
  290. data/lib/ffi/library.rb +72 -88
  291. data/lib/ffi/library_path.rb +109 -0
  292. data/lib/ffi/managedstruct.rb +1 -1
  293. data/lib/ffi/platform/aarch64-linux/types.conf +74 -3
  294. data/lib/ffi/platform/aarch64-windows/types.conf +52 -0
  295. data/lib/ffi/platform/hppa1.1-linux/types.conf +178 -0
  296. data/lib/ffi/platform/hppa2.0-linux/types.conf +178 -0
  297. data/lib/ffi/platform/loongarch64-linux/types.conf +141 -0
  298. data/lib/ffi/platform/sw_64-linux/types.conf +141 -0
  299. data/lib/ffi/platform.rb +15 -13
  300. data/lib/ffi/pointer.rb +6 -6
  301. data/lib/ffi/struct.rb +6 -5
  302. data/lib/ffi/struct_layout.rb +3 -3
  303. data/lib/ffi/struct_layout_builder.rb +9 -9
  304. data/lib/ffi/types.rb +65 -37
  305. data/lib/ffi/variadic.rb +19 -8
  306. data/lib/ffi/version.rb +1 -1
  307. data/samples/hello_ractor.rb +11 -0
  308. data/samples/qsort_ractor.rb +28 -0
  309. data/sig/ffi/abstract_memory.rbs +165 -0
  310. data/sig/ffi/auto_pointer.rbs +27 -0
  311. data/sig/ffi/buffer.rbs +18 -0
  312. data/sig/ffi/data_converter.rbs +10 -0
  313. data/sig/ffi/dynamic_library.rbs +9 -0
  314. data/sig/ffi/enum.rbs +38 -0
  315. data/sig/ffi/function.rbs +39 -0
  316. data/sig/ffi/library.rbs +42 -0
  317. data/sig/ffi/native_type.rbs +86 -0
  318. data/sig/ffi/pointer.rbs +42 -0
  319. data/sig/ffi/struct.rbs +76 -0
  320. data/sig/ffi/struct_by_reference.rbs +11 -0
  321. data/sig/ffi/struct_by_value.rbs +7 -0
  322. data/sig/ffi/struct_layout.rbs +9 -0
  323. data/sig/ffi/struct_layout_builder.rbs +5 -0
  324. data/sig/ffi/type.rbs +39 -0
  325. data/sig/ffi.rbs +26 -0
  326. data.tar.gz.sig +0 -0
  327. metadata +122 -28
  328. metadata.gz.sig +1 -0
  329. data/ext/ffi_c/libffi/.travis/build-cross-in-container.sh +0 -14
  330. data/ext/ffi_c/libffi/.travis/build.sh +0 -142
  331. data/ext/ffi_c/libffi/.travis.yml +0 -83
  332. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uchar_va.c +0 -44
  333. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ushort_va.c +0 -44
  334. /data/ext/ffi_c/libffi/{.travis → .ci}/ar-lib +0 -0
  335. /data/ext/ffi_c/libffi/{.travis → .ci}/bfin-sim.exp +0 -0
  336. /data/ext/ffi_c/libffi/{.travis → .ci}/compile +0 -0
  337. /data/ext/ffi_c/libffi/{.travis → .ci}/m32r-sim.exp +0 -0
  338. /data/ext/ffi_c/libffi/{.travis → .ci}/moxie-sim.exp +0 -0
  339. /data/ext/ffi_c/libffi/{.travis → .ci}/or1k-sim.exp +0 -0
  340. /data/ext/ffi_c/libffi/{.travis → .ci}/powerpc-eabisim.exp +0 -0
  341. /data/ext/ffi_c/libffi/{.travis → .ci}/wine-sim.exp +0 -0
  342. /data/ext/ffi_c/libffi/testsuite/libffi.call/{pyobjc-tc.c → pyobjc_tc.c} +0 -0
  343. /data/lib/ffi/platform/{sparc64-linux → sparcv9-linux}/types.conf +0 -0
@@ -1,6 +1,7 @@
1
1
  /* -----------------------------------------------------------------*-C-*-
2
- libffi @VERSION@ - Copyright (c) 2011, 2014, 2019 Anthony Green
3
- - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc.
2
+ libffi @VERSION@
3
+ - Copyright (c) 2011, 2014, 2019, 2021, 2022, 2024 Anthony Green
4
+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc.
4
5
 
5
6
  Permission is hereby granted, free of charge, to any person
6
7
  obtaining a copy of this software and associated documentation
@@ -55,6 +56,31 @@ extern "C" {
55
56
 
56
57
  /* ---- System configuration information --------------------------------- */
57
58
 
59
+ /* If these change, update src/mips/ffitarget.h. */
60
+ #define FFI_TYPE_VOID 0
61
+ #define FFI_TYPE_INT 1
62
+ #define FFI_TYPE_FLOAT 2
63
+ #define FFI_TYPE_DOUBLE 3
64
+ #if @HAVE_LONG_DOUBLE@
65
+ #define FFI_TYPE_LONGDOUBLE 4
66
+ #else
67
+ #define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE
68
+ #endif
69
+ #define FFI_TYPE_UINT8 5
70
+ #define FFI_TYPE_SINT8 6
71
+ #define FFI_TYPE_UINT16 7
72
+ #define FFI_TYPE_SINT16 8
73
+ #define FFI_TYPE_UINT32 9
74
+ #define FFI_TYPE_SINT32 10
75
+ #define FFI_TYPE_UINT64 11
76
+ #define FFI_TYPE_SINT64 12
77
+ #define FFI_TYPE_STRUCT 13
78
+ #define FFI_TYPE_POINTER 14
79
+ #define FFI_TYPE_COMPLEX 15
80
+
81
+ /* This should always refer to the last type code (for sanity checks). */
82
+ #define FFI_TYPE_LAST FFI_TYPE_COMPLEX
83
+
58
84
  #include <ffitarget.h>
59
85
 
60
86
  #ifndef LIBFFI_ASM
@@ -114,13 +140,11 @@ typedef struct _ffi_type
114
140
  when using the static version of the library.
115
141
  Besides, as a workaround, they can define FFI_BUILDING if they
116
142
  *know* they are going to link with the static library. */
117
- #if defined _MSC_VER
143
+ #if defined _MSC_VER && !defined(FFI_STATIC_BUILD)
118
144
  # if defined FFI_BUILDING_DLL /* Building libffi.DLL with msvcc.sh */
119
145
  # define FFI_API __declspec(dllexport)
120
- # elif !defined FFI_BUILDING /* Importing libffi.DLL */
146
+ # else /* Importing libffi.DLL */
121
147
  # define FFI_API __declspec(dllimport)
122
- # else /* Building/linking static library */
123
- # define FFI_API
124
148
  # endif
125
149
  #else
126
150
  # define FFI_API
@@ -196,28 +220,20 @@ FFI_EXTERN ffi_type ffi_type_sint64;
196
220
  FFI_EXTERN ffi_type ffi_type_float;
197
221
  FFI_EXTERN ffi_type ffi_type_double;
198
222
  FFI_EXTERN ffi_type ffi_type_pointer;
199
-
200
- #if @HAVE_LONG_DOUBLE@
201
223
  FFI_EXTERN ffi_type ffi_type_longdouble;
202
- #else
203
- #define ffi_type_longdouble ffi_type_double
204
- #endif
205
224
 
206
225
  #ifdef FFI_TARGET_HAS_COMPLEX_TYPE
207
226
  FFI_EXTERN ffi_type ffi_type_complex_float;
208
227
  FFI_EXTERN ffi_type ffi_type_complex_double;
209
- #if @HAVE_LONG_DOUBLE@
210
228
  FFI_EXTERN ffi_type ffi_type_complex_longdouble;
211
- #else
212
- #define ffi_type_complex_longdouble ffi_type_complex_double
213
- #endif
214
229
  #endif
215
230
  #endif /* LIBFFI_HIDE_BASIC_TYPES */
216
231
 
217
232
  typedef enum {
218
233
  FFI_OK = 0,
219
234
  FFI_BAD_TYPEDEF,
220
- FFI_BAD_ABI
235
+ FFI_BAD_ABI,
236
+ FFI_BAD_ARGTYPE
221
237
  } ffi_status;
222
238
 
223
239
  typedef struct {
@@ -269,7 +285,7 @@ typedef ffi_raw ffi_java_raw;
269
285
  #endif
270
286
 
271
287
 
272
- FFI_API
288
+ FFI_API
273
289
  void ffi_raw_call (ffi_cif *cif,
274
290
  void (*fn)(void),
275
291
  void *rvalue,
@@ -310,11 +326,17 @@ typedef struct {
310
326
  void *trampoline_table;
311
327
  void *trampoline_table_entry;
312
328
  #else
313
- char tramp[FFI_TRAMPOLINE_SIZE];
329
+ union {
330
+ char tramp[FFI_TRAMPOLINE_SIZE];
331
+ void *ftramp;
332
+ };
314
333
  #endif
315
334
  ffi_cif *cif;
316
335
  void (*fun)(ffi_cif*,void*,void**,void*);
317
336
  void *user_data;
337
+ #if defined(_MSC_VER) && defined(_M_IX86)
338
+ void *padding;
339
+ #endif
318
340
  } ffi_closure
319
341
  #ifdef __GNUC__
320
342
  __attribute__((aligned (8)))
@@ -330,14 +352,6 @@ typedef struct {
330
352
  FFI_API void *ffi_closure_alloc (size_t size, void **code);
331
353
  FFI_API void ffi_closure_free (void *);
332
354
 
333
- #if defined(PA_LINUX) || defined(PA_HPUX)
334
- #define FFI_CLOSURE_PTR(X) ((void *)((unsigned int)(X) | 2))
335
- #define FFI_RESTORE_PTR(X) ((void *)((unsigned int)(X) & ~3))
336
- #else
337
- #define FFI_CLOSURE_PTR(X) (X)
338
- #define FFI_RESTORE_PTR(X) (X)
339
- #endif
340
-
341
355
  FFI_API ffi_status
342
356
  ffi_prep_closure (ffi_closure*,
343
357
  ffi_cif *,
@@ -355,7 +369,7 @@ ffi_prep_closure_loc (ffi_closure*,
355
369
  ffi_cif *,
356
370
  void (*fun)(ffi_cif*,void*,void**,void*),
357
371
  void *user_data,
358
- void*codeloc);
372
+ void *codeloc);
359
373
 
360
374
  #ifdef __sgi
361
375
  # pragma pack 8
@@ -371,9 +385,9 @@ typedef struct {
371
385
 
372
386
  #if !FFI_NATIVE_RAW_API
373
387
 
374
- /* If this is enabled, then a raw closure has the same layout
375
- as a regular closure. We use this to install an intermediate
376
- handler to do the transaltion, void** -> ffi_raw*. */
388
+ /* If this is enabled, then a raw closure has the same layout
389
+ as a regular closure. We use this to install an intermediate
390
+ handler to do the translation, void** -> ffi_raw*. */
377
391
 
378
392
  void (*translate_args)(ffi_cif*,void*,void**,void*);
379
393
  void *this_closure;
@@ -397,8 +411,8 @@ typedef struct {
397
411
 
398
412
  #if !FFI_NATIVE_RAW_API
399
413
 
400
- /* If this is enabled, then a raw closure has the same layout
401
- as a regular closure. We use this to install an intermediate
414
+ /* If this is enabled, then a raw closure has the same layout
415
+ as a regular closure. We use this to install an intermediate
402
416
  handler to do the translation, void** -> ffi_raw*. */
403
417
 
404
418
  void (*translate_args)(ffi_cif*,void*,void**,void*);
@@ -441,7 +455,7 @@ ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*,
441
455
 
442
456
  #endif /* FFI_CLOSURES */
443
457
 
444
- #if FFI_GO_CLOSURES
458
+ #ifdef FFI_GO_CLOSURES
445
459
 
446
460
  typedef struct {
447
461
  void *tramp;
@@ -459,7 +473,7 @@ FFI_API void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue,
459
473
 
460
474
  /* ---- Public interface definition -------------------------------------- */
461
475
 
462
- FFI_API
476
+ FFI_API
463
477
  ffi_status ffi_prep_cif(ffi_cif *cif,
464
478
  ffi_abi abi,
465
479
  unsigned int nargs,
@@ -484,38 +498,19 @@ FFI_API
484
498
  ffi_status ffi_get_struct_offsets (ffi_abi abi, ffi_type *struct_type,
485
499
  size_t *offsets);
486
500
 
487
- /* Useful for eliminating compiler warnings. */
501
+ /* Convert between closure and function pointers. */
502
+ #if defined(PA_LINUX) || defined(PA_HPUX)
503
+ #define FFI_FN(f) ((void (*)(void))((unsigned int)(f) | 2))
504
+ #define FFI_CL(f) ((void *)((unsigned int)(f) & ~3))
505
+ #else
488
506
  #define FFI_FN(f) ((void (*)(void))f)
507
+ #define FFI_CL(f) ((void *)(f))
508
+ #endif
489
509
 
490
510
  /* ---- Definitions shared with assembly code ---------------------------- */
491
511
 
492
512
  #endif
493
513
 
494
- /* If these change, update src/mips/ffitarget.h. */
495
- #define FFI_TYPE_VOID 0
496
- #define FFI_TYPE_INT 1
497
- #define FFI_TYPE_FLOAT 2
498
- #define FFI_TYPE_DOUBLE 3
499
- #if @HAVE_LONG_DOUBLE@
500
- #define FFI_TYPE_LONGDOUBLE 4
501
- #else
502
- #define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE
503
- #endif
504
- #define FFI_TYPE_UINT8 5
505
- #define FFI_TYPE_SINT8 6
506
- #define FFI_TYPE_UINT16 7
507
- #define FFI_TYPE_SINT16 8
508
- #define FFI_TYPE_UINT32 9
509
- #define FFI_TYPE_SINT32 10
510
- #define FFI_TYPE_UINT64 11
511
- #define FFI_TYPE_SINT64 12
512
- #define FFI_TYPE_STRUCT 13
513
- #define FFI_TYPE_POINTER 14
514
- #define FFI_TYPE_COMPLEX 15
515
-
516
- /* This should always refer to the last type code (for sanity checks). */
517
- #define FFI_TYPE_LAST FFI_TYPE_COMPLEX
518
-
519
514
  #ifdef __cplusplus
520
515
  }
521
516
  #endif
@@ -2,6 +2,27 @@
2
2
  ffi_cfi.h - Copyright (c) 2014 Red Hat, Inc.
3
3
 
4
4
  Conditionally assemble cfi directives. Only necessary for building libffi.
5
+
6
+ Permission is hereby granted, free of charge, to any person
7
+ obtaining a copy of this software and associated documentation
8
+ files (the ``Software''), to deal in the Software without
9
+ restriction, including without limitation the rights to use, copy,
10
+ modify, merge, publish, distribute, sublicense, and/or sell copies
11
+ of the Software, and to permit persons to whom the Software is
12
+ furnished to do so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24
+ DEALINGS IN THE SOFTWARE.
25
+
5
26
  ----------------------------------------------------------------------- */
6
27
 
7
28
  #ifndef FFI_CFI_H
@@ -5,6 +5,27 @@
5
5
 
6
6
  Common internal definitions and macros. Only necessary for building
7
7
  libffi.
8
+
9
+ Permission is hereby granted, free of charge, to any person
10
+ obtaining a copy of this software and associated documentation
11
+ files (the ``Software''), to deal in the Software without
12
+ restriction, including without limitation the rights to use, copy,
13
+ modify, merge, publish, distribute, sublicense, and/or sell copies
14
+ of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be
18
+ included in all copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
21
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
25
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27
+ DEALINGS IN THE SOFTWARE.
28
+
8
29
  ----------------------------------------------------------------------- */
9
30
 
10
31
  #ifndef FFI_COMMON_H
@@ -28,8 +49,10 @@ extern "C" {
28
49
  # endif
29
50
  # endif
30
51
  # define MAYBE_UNUSED __attribute__((__unused__))
52
+ # define NORETURN __attribute__((__noreturn__))
31
53
  #else
32
54
  # define MAYBE_UNUSED
55
+ # define NORETURN
33
56
  # if HAVE_ALLOCA_H
34
57
  # include <alloca.h>
35
58
  # else
@@ -61,9 +84,9 @@ char *alloca ();
61
84
  #endif
62
85
 
63
86
  #ifdef FFI_DEBUG
64
- void ffi_assert(char *expr, char *file, int line);
87
+ NORETURN void ffi_assert(const char *expr, const char *file, int line);
65
88
  void ffi_stop_here(void);
66
- void ffi_type_test(ffi_type *a, char *file, int line);
89
+ void ffi_type_test(ffi_type *a, const char *file, int line);
67
90
 
68
91
  #define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__))
69
92
  #define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l)))
@@ -103,6 +126,14 @@ ffi_status ffi_prep_cif_core(ffi_cif *cif,
103
126
  some targets. */
104
127
  void *ffi_data_to_code_pointer (void *data) FFI_HIDDEN;
105
128
 
129
+ /* The arch code calls this to determine if a given closure has a
130
+ static trampoline. */
131
+ int ffi_tramp_is_present (void *closure) FFI_HIDDEN;
132
+
133
+ /* Return a file descriptor of a temporary zero-sized file in a
134
+ writable and executable filesystem. */
135
+ int open_temp_exec_file(void) FFI_HIDDEN;
136
+
106
137
  /* Extended cif, used in callback from assembly routine */
107
138
  typedef struct
108
139
  {
@@ -0,0 +1,45 @@
1
+ /* -----------------------------------------------------------------------
2
+ ffi_tramp.h - Copyright (C) 2021 Microsoft, Inc.
3
+
4
+ Static trampoline definitions.
5
+
6
+ Permission is hereby granted, free of charge, to any person
7
+ obtaining a copy of this software and associated documentation
8
+ files (the ``Software''), to deal in the Software without
9
+ restriction, including without limitation the rights to use, copy,
10
+ modify, merge, publish, distribute, sublicense, and/or sell copies
11
+ of the Software, and to permit persons to whom the Software is
12
+ furnished to do so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24
+ DEALINGS IN THE SOFTWARE.
25
+
26
+ ----------------------------------------------------------------------- */
27
+
28
+ #ifndef FFI_TRAMP_H
29
+ #define FFI_TRAMP_H
30
+
31
+ #ifdef __cplusplus
32
+ extern "C" {
33
+ #endif
34
+
35
+ int ffi_tramp_is_supported(void);
36
+ void *ffi_tramp_alloc (int flags);
37
+ void ffi_tramp_set_parms (void *tramp, void *data, void *code);
38
+ void *ffi_tramp_get_addr (void *tramp);
39
+ void ffi_tramp_free (void *tramp);
40
+
41
+ #ifdef __cplusplus
42
+ }
43
+ #endif
44
+
45
+ #endif /* FFI_TRAMP_H */
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
  # install - install a program, script, or datafile
3
3
 
4
- scriptversion=2018-03-11.20; # UTC
4
+ scriptversion=2020-11-14.01; # UTC
5
5
 
6
6
  # This originates from X11R5 (mit/util/scripts/install.sh), which was
7
7
  # later released in X11R6 (xc/config/util/install.sh) with the
@@ -69,6 +69,11 @@ posix_mkdir=
69
69
  # Desired mode of installed file.
70
70
  mode=0755
71
71
 
72
+ # Create dirs (including intermediate dirs) using mode 755.
73
+ # This is like GNU 'install' as of coreutils 8.32 (2020).
74
+ mkdir_umask=22
75
+
76
+ backupsuffix=
72
77
  chgrpcmd=
73
78
  chmodcmd=$chmodprog
74
79
  chowncmd=
@@ -99,18 +104,28 @@ Options:
99
104
  --version display version info and exit.
100
105
 
101
106
  -c (ignored)
102
- -C install only if different (preserve the last data modification time)
107
+ -C install only if different (preserve data modification time)
103
108
  -d create directories instead of installing files.
104
109
  -g GROUP $chgrpprog installed files to GROUP.
105
110
  -m MODE $chmodprog installed files to MODE.
106
111
  -o USER $chownprog installed files to USER.
112
+ -p pass -p to $cpprog.
107
113
  -s $stripprog installed files.
114
+ -S SUFFIX attempt to back up existing files, with suffix SUFFIX.
108
115
  -t DIRECTORY install into DIRECTORY.
109
116
  -T report an error if DSTFILE is a directory.
110
117
 
111
118
  Environment variables override the default commands:
112
119
  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
113
120
  RMPROG STRIPPROG
121
+
122
+ By default, rm is invoked with -f; when overridden with RMPROG,
123
+ it's up to you to specify -f if you want it.
124
+
125
+ If -S is not specified, no backups are attempted.
126
+
127
+ Email bug reports to bug-automake@gnu.org.
128
+ Automake home page: https://www.gnu.org/software/automake/
114
129
  "
115
130
 
116
131
  while test $# -ne 0; do
@@ -137,8 +152,13 @@ while test $# -ne 0; do
137
152
  -o) chowncmd="$chownprog $2"
138
153
  shift;;
139
154
 
155
+ -p) cpprog="$cpprog -p";;
156
+
140
157
  -s) stripcmd=$stripprog;;
141
158
 
159
+ -S) backupsuffix="$2"
160
+ shift;;
161
+
142
162
  -t)
143
163
  is_target_a_directory=always
144
164
  dst_arg=$2
@@ -255,6 +275,10 @@ do
255
275
  dstdir=$dst
256
276
  test -d "$dstdir"
257
277
  dstdir_status=$?
278
+ # Don't chown directories that already exist.
279
+ if test $dstdir_status = 0; then
280
+ chowncmd=""
281
+ fi
258
282
  else
259
283
 
260
284
  # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
@@ -301,22 +325,6 @@ do
301
325
  if test $dstdir_status != 0; then
302
326
  case $posix_mkdir in
303
327
  '')
304
- # Create intermediate dirs using mode 755 as modified by the umask.
305
- # This is like FreeBSD 'install' as of 1997-10-28.
306
- umask=`umask`
307
- case $stripcmd.$umask in
308
- # Optimize common cases.
309
- *[2367][2367]) mkdir_umask=$umask;;
310
- .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
311
-
312
- *[0-7])
313
- mkdir_umask=`expr $umask + 22 \
314
- - $umask % 100 % 40 + $umask % 20 \
315
- - $umask % 10 % 4 + $umask % 2
316
- `;;
317
- *) mkdir_umask=$umask,go-w;;
318
- esac
319
-
320
328
  # With -d, create the new directory with the user-specified mode.
321
329
  # Otherwise, rely on $mkdir_umask.
322
330
  if test -n "$dir_arg"; then
@@ -326,52 +334,49 @@ do
326
334
  fi
327
335
 
328
336
  posix_mkdir=false
329
- case $umask in
330
- *[123567][0-7][0-7])
331
- # POSIX mkdir -p sets u+wx bits regardless of umask, which
332
- # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
333
- ;;
334
- *)
335
- # Note that $RANDOM variable is not portable (e.g. dash); Use it
336
- # here however when possible just to lower collision chance.
337
- tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
338
-
339
- trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
340
-
341
- # Because "mkdir -p" follows existing symlinks and we likely work
342
- # directly in world-writeable /tmp, make sure that the '$tmpdir'
343
- # directory is successfully created first before we actually test
344
- # 'mkdir -p' feature.
345
- if (umask $mkdir_umask &&
346
- $mkdirprog $mkdir_mode "$tmpdir" &&
347
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
348
- then
349
- if test -z "$dir_arg" || {
350
- # Check for POSIX incompatibilities with -m.
351
- # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
352
- # other-writable bit of parent directory when it shouldn't.
353
- # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
354
- test_tmpdir="$tmpdir/a"
355
- ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
356
- case $ls_ld_tmpdir in
357
- d????-?r-*) different_mode=700;;
358
- d????-?--*) different_mode=755;;
359
- *) false;;
360
- esac &&
361
- $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
362
- ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
363
- test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
364
- }
365
- }
366
- then posix_mkdir=:
367
- fi
368
- rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
369
- else
370
- # Remove any dirs left behind by ancient mkdir implementations.
371
- rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
372
- fi
373
- trap '' 0;;
374
- esac;;
337
+ # The $RANDOM variable is not portable (e.g., dash). Use it
338
+ # here however when possible just to lower collision chance.
339
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
340
+
341
+ trap '
342
+ ret=$?
343
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
344
+ exit $ret
345
+ ' 0
346
+
347
+ # Because "mkdir -p" follows existing symlinks and we likely work
348
+ # directly in world-writeable /tmp, make sure that the '$tmpdir'
349
+ # directory is successfully created first before we actually test
350
+ # 'mkdir -p'.
351
+ if (umask $mkdir_umask &&
352
+ $mkdirprog $mkdir_mode "$tmpdir" &&
353
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
354
+ then
355
+ if test -z "$dir_arg" || {
356
+ # Check for POSIX incompatibilities with -m.
357
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
358
+ # other-writable bit of parent directory when it shouldn't.
359
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
360
+ test_tmpdir="$tmpdir/a"
361
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
362
+ case $ls_ld_tmpdir in
363
+ d????-?r-*) different_mode=700;;
364
+ d????-?--*) different_mode=755;;
365
+ *) false;;
366
+ esac &&
367
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
368
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
369
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
370
+ }
371
+ }
372
+ then posix_mkdir=:
373
+ fi
374
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
375
+ else
376
+ # Remove any dirs left behind by ancient mkdir implementations.
377
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
378
+ fi
379
+ trap '' 0;;
375
380
  esac
376
381
 
377
382
  if
@@ -382,7 +387,7 @@ do
382
387
  then :
383
388
  else
384
389
 
385
- # The umask is ridiculous, or mkdir does not conform to POSIX,
390
+ # mkdir does not conform to POSIX,
386
391
  # or it failed possibly due to a race condition. Create the
387
392
  # directory the slow way, step by step, checking for races as we go.
388
393
 
@@ -411,7 +416,7 @@ do
411
416
  prefixes=
412
417
  else
413
418
  if $posix_mkdir; then
414
- (umask=$mkdir_umask &&
419
+ (umask $mkdir_umask &&
415
420
  $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
416
421
  # Don't fail if two instances are running concurrently.
417
422
  test -d "$prefix" || exit 1
@@ -451,7 +456,18 @@ do
451
456
  trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
452
457
 
453
458
  # Copy the file name to the temp name.
454
- (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
459
+ (umask $cp_umask &&
460
+ { test -z "$stripcmd" || {
461
+ # Create $dsttmp read-write so that cp doesn't create it read-only,
462
+ # which would cause strip to fail.
463
+ if test -z "$doit"; then
464
+ : >"$dsttmp" # No need to fork-exec 'touch'.
465
+ else
466
+ $doit touch "$dsttmp"
467
+ fi
468
+ }
469
+ } &&
470
+ $doit_exec $cpprog "$src" "$dsttmp") &&
455
471
 
456
472
  # and set any options; do chmod last to preserve setuid bits.
457
473
  #
@@ -477,6 +493,13 @@ do
477
493
  then
478
494
  rm -f "$dsttmp"
479
495
  else
496
+ # If $backupsuffix is set, and the file being installed
497
+ # already exists, attempt a backup. Don't worry if it fails,
498
+ # e.g., if mv doesn't support -f.
499
+ if test -n "$backupsuffix" && test -f "$dst"; then
500
+ $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
501
+ fi
502
+
480
503
  # Rename the file to the real destination.
481
504
  $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
482
505
 
@@ -491,9 +514,9 @@ do
491
514
  # file should still install successfully.
492
515
  {
493
516
  test ! -f "$dst" ||
494
- $doit $rmcmd -f "$dst" 2>/dev/null ||
517
+ $doit $rmcmd "$dst" 2>/dev/null ||
495
518
  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
496
- { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
519
+ { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
497
520
  } ||
498
521
  { echo "$0: cannot unlink or rename $dst" >&2
499
522
  (exit 1); exit 1
@@ -33,7 +33,10 @@ LIBFFI_BASE_8.0 {
33
33
  ffi_raw_to_ptrarray;
34
34
  ffi_raw_size;
35
35
 
36
+ #if !FFI_NATIVE_RAW_API
36
37
  ffi_java_raw_call;
38
+ #endif
39
+
37
40
  ffi_java_ptrarray_to_raw;
38
41
  ffi_java_raw_to_ptrarray;
39
42
  ffi_java_raw_size;
@@ -62,8 +65,10 @@ LIBFFI_CLOSURE_8.0 {
62
65
  ffi_prep_closure_loc;
63
66
  ffi_prep_raw_closure;
64
67
  ffi_prep_raw_closure_loc;
68
+ #if !FFI_NATIVE_RAW_API
65
69
  ffi_prep_java_raw_closure;
66
70
  ffi_prep_java_raw_closure_loc;
71
+ #endif
67
72
  } LIBFFI_BASE_8.0;
68
73
  #endif
69
74
 
@@ -5,7 +5,7 @@
5
5
  #
6
6
  # Here are a set of rules to help you update your library version
7
7
  # information:
8
- #
8
+ #
9
9
  # 1. Start with version information of `0:0:0' for each libtool library.
10
10
  #
11
11
  # 2. Update the version information only immediately before a public
@@ -26,4 +26,4 @@
26
26
  # release, then set age to 0.
27
27
  #
28
28
  # CURRENT:REVISION:AGE
29
- 9:0:1
29
+ 9:4:1