ffi 1.11.2-java → 1.13.1-java
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.appveyor.yml +30 -0
- data/.github/workflows/ci.yml +64 -0
- data/.gitignore +25 -0
- data/.gitmodules +4 -0
- data/.travis.yml +58 -0
- data/.yardopts +5 -0
- data/CHANGELOG.md +75 -0
- data/Gemfile +17 -0
- data/LICENSE.SPECS +22 -0
- data/README.md +10 -1
- data/Rakefile +24 -43
- data/ffi.gemspec +43 -0
- data/lib/ffi.rb +28 -0
- data/lib/ffi/autopointer.rb +203 -0
- data/lib/ffi/buffer.rb +4 -0
- data/lib/ffi/callback.rb +4 -0
- data/lib/ffi/data_converter.rb +67 -0
- data/lib/ffi/enum.rb +296 -0
- data/lib/ffi/errno.rb +43 -0
- data/lib/ffi/ffi.rb +46 -0
- data/lib/ffi/io.rb +62 -0
- data/lib/ffi/library.rb +592 -0
- data/lib/ffi/managedstruct.rb +84 -0
- data/lib/ffi/memorypointer.rb +1 -0
- data/lib/ffi/platform.rb +179 -0
- data/lib/ffi/platform/aarch64-freebsd/types.conf +128 -0
- data/lib/ffi/platform/aarch64-freebsd12/types.conf +128 -0
- data/lib/ffi/platform/aarch64-linux/types.conf +104 -0
- data/lib/ffi/platform/arm-freebsd/types.conf +152 -0
- data/lib/ffi/platform/arm-freebsd12/types.conf +152 -0
- data/lib/ffi/platform/arm-linux/types.conf +132 -0
- data/lib/ffi/platform/i386-cygwin/types.conf +3 -0
- data/lib/ffi/platform/i386-darwin/types.conf +100 -0
- data/lib/ffi/platform/i386-freebsd/types.conf +152 -0
- data/lib/ffi/platform/i386-freebsd12/types.conf +152 -0
- data/lib/ffi/platform/i386-gnu/types.conf +107 -0
- data/lib/ffi/platform/i386-linux/types.conf +103 -0
- data/lib/ffi/platform/i386-netbsd/types.conf +126 -0
- data/lib/ffi/platform/i386-openbsd/types.conf +128 -0
- data/lib/ffi/platform/i386-solaris/types.conf +122 -0
- data/lib/ffi/platform/i386-windows/types.conf +52 -0
- data/lib/ffi/platform/ia64-linux/types.conf +104 -0
- data/lib/ffi/platform/mips-linux/types.conf +102 -0
- data/lib/ffi/platform/mips64-linux/types.conf +104 -0
- data/lib/ffi/platform/mips64el-linux/types.conf +104 -0
- data/lib/ffi/platform/mipsel-linux/types.conf +102 -0
- data/lib/ffi/platform/mipsisa32r6-linux/types.conf +102 -0
- data/lib/ffi/platform/mipsisa32r6el-linux/types.conf +102 -0
- data/lib/ffi/platform/mipsisa64r6-linux/types.conf +104 -0
- data/lib/ffi/platform/mipsisa64r6el-linux/types.conf +104 -0
- data/lib/ffi/platform/powerpc-aix/types.conf +180 -0
- data/lib/ffi/platform/powerpc-darwin/types.conf +100 -0
- data/lib/ffi/platform/powerpc-linux/types.conf +130 -0
- data/lib/ffi/platform/powerpc-openbsd/types.conf +156 -0
- data/lib/ffi/platform/powerpc64-linux/types.conf +104 -0
- data/lib/ffi/platform/s390-linux/types.conf +102 -0
- data/lib/ffi/platform/s390x-linux/types.conf +102 -0
- data/lib/ffi/platform/sparc-linux/types.conf +102 -0
- data/lib/ffi/platform/sparc-solaris/types.conf +128 -0
- data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
- data/lib/ffi/platform/sparcv9-openbsd/types.conf +156 -0
- data/lib/ffi/platform/sparcv9-solaris/types.conf +128 -0
- data/lib/ffi/platform/x86_64-cygwin/types.conf +3 -0
- data/lib/ffi/platform/x86_64-darwin/types.conf +130 -0
- data/lib/ffi/platform/x86_64-dragonflybsd/types.conf +130 -0
- data/lib/ffi/platform/x86_64-freebsd/types.conf +128 -0
- data/lib/ffi/platform/x86_64-freebsd12/types.conf +158 -0
- data/lib/ffi/platform/x86_64-linux/types.conf +132 -0
- data/lib/ffi/platform/x86_64-netbsd/types.conf +128 -0
- data/lib/ffi/platform/x86_64-openbsd/types.conf +134 -0
- data/lib/ffi/platform/x86_64-solaris/types.conf +122 -0
- data/lib/ffi/platform/x86_64-windows/types.conf +52 -0
- data/lib/ffi/pointer.rb +167 -0
- data/lib/ffi/struct.rb +316 -0
- data/lib/ffi/struct_by_reference.rb +72 -0
- data/lib/ffi/struct_layout.rb +96 -0
- data/lib/ffi/struct_layout_builder.rb +227 -0
- data/lib/ffi/tools/const_generator.rb +230 -0
- data/lib/ffi/tools/generator.rb +105 -0
- data/lib/ffi/tools/generator_task.rb +32 -0
- data/lib/ffi/tools/struct_generator.rb +194 -0
- data/lib/ffi/tools/types_generator.rb +137 -0
- data/lib/ffi/types.rb +194 -0
- data/lib/ffi/union.rb +43 -0
- data/lib/ffi/variadic.rb +78 -0
- data/lib/ffi/version.rb +3 -0
- data/samples/getlogin.rb +8 -0
- data/samples/getpid.rb +8 -0
- data/samples/gettimeofday.rb +18 -0
- data/samples/hello.rb +8 -0
- data/samples/inotify.rb +60 -0
- data/samples/pty.rb +75 -0
- data/samples/qsort.rb +20 -0
- metadata +197 -8
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0b4cf52339590329a4627d1b19275578319167dd6ac9a747a5fcd158cfb6ff53
|
|
4
|
+
data.tar.gz: 58d7284dacb51a11f881361e69995d5427a9bf974966956914a2dd09ce281d14
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7f6215d78e87dbe977f8105b99c47bfa220ac9aa0360fa639051253be82dfab2b0eaf415c046f5e42de8a4fd0a681360ae7c448fa457b41cc1450c6c1535414d
|
|
7
|
+
data.tar.gz: cdb6ec888c9fe7904bf05c51b8870041772e33cb2eca83cddc60b77ab945c984de0ed0ffb9fd8b3203476eea2e6daefda84fc0e7c3eb61c16c5567e1acf2b6b0
|
checksums.yaml.gz.sig
ADDED
|
Binary file
|
data.tar.gz.sig
ADDED
|
Binary file
|
data/.appveyor.yml
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
install:
|
|
2
|
+
- SET PATH=C:\Ruby%RUBYVER%\bin;%PATH%
|
|
3
|
+
- SET RAKEOPT=-rdevkit
|
|
4
|
+
- ps: |
|
|
5
|
+
if ($env:RUBYVER -like "*head*") {
|
|
6
|
+
$(new-object net.webclient).DownloadFile("https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-$env:RUBYVER.exe", "$pwd/ruby-setup.exe")
|
|
7
|
+
cmd /c ruby-setup.exe /verysilent /dir=C:/Ruby$env:RUBYVER
|
|
8
|
+
}
|
|
9
|
+
- ridk version
|
|
10
|
+
- gem --version
|
|
11
|
+
- gem install bundler --quiet --no-document
|
|
12
|
+
- bundle install
|
|
13
|
+
# Update to libffi-3.3 since Appveyor version fails on LongDouble specs
|
|
14
|
+
- ridk exec pacman --sync --refresh --needed --noconfirm mingw-w64-x86_64-libffi mingw-w64-i686-libffi
|
|
15
|
+
build: off
|
|
16
|
+
build_script:
|
|
17
|
+
- bundle exec rake libffi compile -- %EXTCONFOPTS% || bundle exec rake compile -- %EXTCONFOPTS%
|
|
18
|
+
test_script:
|
|
19
|
+
- bundle exec rake test
|
|
20
|
+
- bundle exec rake types_conf && git --no-pager diff
|
|
21
|
+
environment:
|
|
22
|
+
matrix:
|
|
23
|
+
- RUBYVER: "head-x64"
|
|
24
|
+
EXTCONFOPTS: "--disable-system-libffi"
|
|
25
|
+
- RUBYVER: 24
|
|
26
|
+
EXTCONFOPTS: "--disable-system-libffi"
|
|
27
|
+
- RUBYVER: 25-x64
|
|
28
|
+
EXTCONFOPTS: "--enable-system-libffi"
|
|
29
|
+
- RUBYVER: 26
|
|
30
|
+
EXTCONFOPTS: "--enable-system-libffi"
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
on: [push, pull_request]
|
|
3
|
+
jobs:
|
|
4
|
+
system-libffi:
|
|
5
|
+
# Run on latest MRI with explicit selection of system or builtin libffi
|
|
6
|
+
strategy:
|
|
7
|
+
fail-fast: false
|
|
8
|
+
matrix:
|
|
9
|
+
os: [ ubuntu, macos, windows ]
|
|
10
|
+
extconfopts: [ --disable-system-libffi, --enable-system-libffi ]
|
|
11
|
+
runs-on: ${{ matrix.os }}-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v2
|
|
14
|
+
- uses: ruby/setup-ruby@v1
|
|
15
|
+
with:
|
|
16
|
+
ruby-version: 2.7
|
|
17
|
+
|
|
18
|
+
- run: brew install automake libffi pkg-config
|
|
19
|
+
if: matrix.os == 'macos'
|
|
20
|
+
- run: ridk exec pacman --sync --refresh --needed --noconfirm mingw-w64-x86_64-libffi
|
|
21
|
+
if: matrix.os == 'windows' && matrix.extconfopts == '--enable-system-libffi'
|
|
22
|
+
|
|
23
|
+
- run: bundle install
|
|
24
|
+
- run: bundle exec rake libffi
|
|
25
|
+
- run: bundle exec rake compile -- ${{ matrix.extconfopts }}
|
|
26
|
+
env:
|
|
27
|
+
# work around misconfiguration of libffi on MacOS with homebrew
|
|
28
|
+
PKG_CONFIG_PATH: ${{ env.PKG_CONFIG_PATH }}:/usr/local/opt/libffi/lib/pkgconfig
|
|
29
|
+
- run: bundle exec rake test
|
|
30
|
+
- run: bundle exec rake types_conf && git --no-pager diff
|
|
31
|
+
|
|
32
|
+
specs:
|
|
33
|
+
# Run all specs on all ruby implementations
|
|
34
|
+
# Use automatic libffi selection on MRI
|
|
35
|
+
strategy:
|
|
36
|
+
fail-fast: false
|
|
37
|
+
matrix:
|
|
38
|
+
os: [ ubuntu, macos, windows ]
|
|
39
|
+
ruby: [ 2.3, 2.4, 2.5, 2.6, 2.7, ruby-head, truffleruby-head ]
|
|
40
|
+
exclude:
|
|
41
|
+
- os: windows
|
|
42
|
+
ruby: truffleruby-head
|
|
43
|
+
- os: windows
|
|
44
|
+
ruby: 2.3 # compilation fails
|
|
45
|
+
runs-on: ${{ matrix.os }}-latest
|
|
46
|
+
steps:
|
|
47
|
+
- uses: actions/checkout@v2
|
|
48
|
+
- uses: ruby/setup-ruby@v1
|
|
49
|
+
with:
|
|
50
|
+
ruby-version: ${{ matrix.ruby }}
|
|
51
|
+
|
|
52
|
+
- run: brew install automake
|
|
53
|
+
if: matrix.os == 'macos'
|
|
54
|
+
|
|
55
|
+
- run: bundle install
|
|
56
|
+
- run: bundle exec rake libffi
|
|
57
|
+
- run: bundle exec rake compile
|
|
58
|
+
|
|
59
|
+
- run: bundle exec rake test
|
|
60
|
+
|
|
61
|
+
- run: bundle exec rake bench:all
|
|
62
|
+
if: matrix.ruby != 'truffleruby-head'
|
|
63
|
+
env:
|
|
64
|
+
ITER: 10
|
data/.gitignore
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
doc/
|
|
2
|
+
bin/
|
|
3
|
+
.yardoc
|
|
4
|
+
*.orig
|
|
5
|
+
nbproject/private
|
|
6
|
+
pkg
|
|
7
|
+
*.orig
|
|
8
|
+
*.rej
|
|
9
|
+
*.patch
|
|
10
|
+
*.diff
|
|
11
|
+
build
|
|
12
|
+
*.so
|
|
13
|
+
*.[oa]
|
|
14
|
+
core
|
|
15
|
+
lib/ffi/types.conf
|
|
16
|
+
lib/ffi_c.bundle
|
|
17
|
+
lib/ffi_c.so
|
|
18
|
+
vendor
|
|
19
|
+
.bundle
|
|
20
|
+
Gemfile.lock
|
|
21
|
+
types_log
|
|
22
|
+
*.gem
|
|
23
|
+
embed-test.log
|
|
24
|
+
spec/ffi/embed-test/ext/Makefile
|
|
25
|
+
spec/ffi/embed-test/ext/embed_test.bundle
|
data/.gitmodules
ADDED
data/.travis.yml
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
dist: trusty
|
|
2
|
+
group: beta
|
|
3
|
+
language: ruby
|
|
4
|
+
git:
|
|
5
|
+
submodules: false
|
|
6
|
+
|
|
7
|
+
script:
|
|
8
|
+
- bundle exec rake libffi
|
|
9
|
+
- bundle exec rake compile
|
|
10
|
+
- bundle exec rake test
|
|
11
|
+
- |
|
|
12
|
+
if [[ $(ruby -v) != *truffleruby* ]]; then
|
|
13
|
+
ITER=10 bundle exec rake bench:all
|
|
14
|
+
fi
|
|
15
|
+
- bundle exec rake types_conf && git --no-pager diff
|
|
16
|
+
os:
|
|
17
|
+
- linux
|
|
18
|
+
- osx
|
|
19
|
+
rvm:
|
|
20
|
+
- 2.3.8
|
|
21
|
+
- 2.4.6
|
|
22
|
+
- 2.5.5
|
|
23
|
+
- 2.6.5
|
|
24
|
+
- 2.7.0
|
|
25
|
+
- ruby-head
|
|
26
|
+
- truffleruby-head
|
|
27
|
+
|
|
28
|
+
env:
|
|
29
|
+
- CC=gcc
|
|
30
|
+
- CC=clang
|
|
31
|
+
matrix:
|
|
32
|
+
allow_failures:
|
|
33
|
+
- os: osx
|
|
34
|
+
rvm: ruby-head
|
|
35
|
+
- os: osx
|
|
36
|
+
rvm: 2.3.8
|
|
37
|
+
- os: linux
|
|
38
|
+
rvm: ruby-head
|
|
39
|
+
include:
|
|
40
|
+
- name: powerpc
|
|
41
|
+
language: generic
|
|
42
|
+
before_install: |
|
|
43
|
+
docker run --rm --privileged multiarch/qemu-user-static:register --reset &&
|
|
44
|
+
docker build --rm -t ffi-powerpc -f spec/env/Dockerfile.powerpc .
|
|
45
|
+
script: |
|
|
46
|
+
docker run --rm -t -v `pwd`:/ffi ffi-powerpc
|
|
47
|
+
- name: armhf
|
|
48
|
+
language: generic
|
|
49
|
+
before_install: |
|
|
50
|
+
docker run --rm --privileged multiarch/qemu-user-static:register --reset &&
|
|
51
|
+
docker build --rm -t ffi-armhf -f spec/env/Dockerfile.armhf .
|
|
52
|
+
script: |
|
|
53
|
+
docker run --rm -t -v `pwd`:/ffi ffi-armhf
|
|
54
|
+
exclude:
|
|
55
|
+
- os: osx
|
|
56
|
+
rvm: truffleruby-head
|
|
57
|
+
after_failure:
|
|
58
|
+
- "find build -name mkmf.log | xargs cat"
|
data/.yardopts
ADDED
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,78 @@
|
|
|
1
|
+
1.13.1 / 2020-06-09
|
|
2
|
+
-------------------
|
|
3
|
+
|
|
4
|
+
Changed:
|
|
5
|
+
* Revert use of `ucrtbase.dll` as default C library on Windows-MINGW.
|
|
6
|
+
`ucrtbase.dll` is still used on MSWIN target. #790
|
|
7
|
+
* Test for `ffi_prep_closure_loc()` to make sure we can use this function.
|
|
8
|
+
This fixes incorrect use of system libffi on MacOS Mojave (10.14). #787
|
|
9
|
+
* Update types.conf on x86_64-dragonflybsd
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
1.13.0 / 2020-06-01
|
|
13
|
+
-------------------
|
|
14
|
+
|
|
15
|
+
Added:
|
|
16
|
+
* Add TruffleRuby support. Almost all specs are running on TruffleRuby and succeed. #768
|
|
17
|
+
* Add ruby source files to the java gem. This allows to ship the Ruby library code per platform java gem and add it as a default gem to JRuby. #763
|
|
18
|
+
* Add FFI::Platform::LONG_DOUBLE_SIZE
|
|
19
|
+
* Add bounds checks for writing to an inline char[] . #756
|
|
20
|
+
* Add long double as callback return value. #771
|
|
21
|
+
* Update type definitions and add types from stdint.h and stddef.h on i386-windows, x86_64-windows, x86_64-darwin, x86_64-linux, arm-linux, powerpc-linux. #749
|
|
22
|
+
* Add new type definitions for powerpc-openbsd and sparcv9-openbsd. #775, #778
|
|
23
|
+
|
|
24
|
+
Changed:
|
|
25
|
+
* Raise required ruby version to >= 2.3.
|
|
26
|
+
* Lots of cleanups and improvements in library, specs and benchmarks.
|
|
27
|
+
* Fix a lot of compiler warnings at the C-extension
|
|
28
|
+
* Fix several install issues on MacOS:
|
|
29
|
+
* Look for libffi in SDK paths, since recent versions of macOS removed it from `/usr/include` . #757
|
|
30
|
+
* Fix error `ld: library not found for -lgcc_s.10.4`
|
|
31
|
+
* Don't built for i386 architecture as it is deprecated
|
|
32
|
+
* Several fixes for MSVC build on Windows. #779
|
|
33
|
+
* Use `ucrtbase.dll` as default C library on Windows instead of old `msvcrt.dll`. #779
|
|
34
|
+
* Update builtin libffi to fix a Powerpc issue with parameters of type long
|
|
35
|
+
* Allow unmodified sourcing of (the ruby code of) this gem in JRuby and TruffleRuby as a default gem. #747
|
|
36
|
+
* Improve check to detect if a module has a #find_type method suitable for FFI. This fixes compatibility with stdlib `mkmf` . #776
|
|
37
|
+
|
|
38
|
+
Removed:
|
|
39
|
+
* Reject callback with `:string` return type at definition, because it didn't work so far and is not save to use. #751, #782
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
1.12.2 / 2020-02-01
|
|
43
|
+
-------------------
|
|
44
|
+
|
|
45
|
+
* Fix possible segfault at FFI::Struct#[] and []= after GC.compact . #742
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
1.12.1 / 2020-01-14
|
|
49
|
+
-------------------
|
|
50
|
+
|
|
51
|
+
Added:
|
|
52
|
+
* Add binary gem support for ruby-2.7 on Windows
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
1.12.0 / 2020-01-14
|
|
56
|
+
-------------------
|
|
57
|
+
|
|
58
|
+
Added:
|
|
59
|
+
* FFI::VERSION is defined as part of `require 'ffi'` now.
|
|
60
|
+
It is no longer necessary to `require 'ffi/version'` .
|
|
61
|
+
|
|
62
|
+
Changed:
|
|
63
|
+
* Update libffi to latest master.
|
|
64
|
+
|
|
65
|
+
Deprecated:
|
|
66
|
+
* Overwriting struct layouts is now warned and will be disallowed in ffi-2.0. #734, #735
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
1.11.3 / 2019-11-25
|
|
70
|
+
-------------------
|
|
71
|
+
|
|
72
|
+
Removed:
|
|
73
|
+
* Remove support for tainted objects which cause deprecation warnings in ruby-2.7. #730
|
|
74
|
+
|
|
75
|
+
|
|
1
76
|
1.11.2 / 2019-11-11
|
|
2
77
|
-------------------
|
|
3
78
|
|
data/Gemfile
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
|
+
|
|
3
|
+
group :development do
|
|
4
|
+
gem 'rake', '~> 13.0'
|
|
5
|
+
gem 'rake-compiler', '~> 1.0.3'
|
|
6
|
+
gem 'rake-compiler-dock', '~> 1.0'
|
|
7
|
+
gem 'rspec', '~> 3.0'
|
|
8
|
+
# irb is a dependency of rubygems-tasks 0.2.5.
|
|
9
|
+
# irb versions > 1.1.1 depend on reline,
|
|
10
|
+
# which sometimes causes 'bundle install' to fail on Ruby <= 2.4: https://github.com/rubygems/rubygems/issues/3463
|
|
11
|
+
gem 'rubygems-tasks', '>= 0.2', '< 0.2.5', :require => 'rubygems/tasks'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
group :doc do
|
|
15
|
+
gem 'kramdown'
|
|
16
|
+
gem 'yard', '~> 0.9'
|
|
17
|
+
end
|
data/LICENSE.SPECS
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Copyright (c) 2008-2012 Ruby-FFI contributors
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person
|
|
4
|
+
obtaining a copy of this software and associated documentation
|
|
5
|
+
files (the "Software"), to deal in the Software without
|
|
6
|
+
restriction, including without limitation the rights to use,
|
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
copies of the Software, and to permit persons to whom the
|
|
9
|
+
Software is furnished to do so, subject to the following
|
|
10
|
+
conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be
|
|
13
|
+
included in all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
17
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
19
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
20
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
21
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
|
@@ -38,10 +38,19 @@ For less minimalistic and more examples you may look at:
|
|
|
38
38
|
|
|
39
39
|
## Requirements
|
|
40
40
|
|
|
41
|
-
When installing the gem on CRuby (MRI)
|
|
41
|
+
When installing the gem on CRuby (MRI), you will need:
|
|
42
42
|
* A C compiler (e.g., Xcode on macOS, `gcc` or `clang` on everything else)
|
|
43
|
+
Optionally (speeds up installation):
|
|
43
44
|
* The `libffi` library and development headers - this is commonly in the `libffi-dev` or `libffi-devel` packages
|
|
44
45
|
|
|
46
|
+
The ffi gem comes with a builtin libffi version, which is used, when the system libffi library is not available or too old.
|
|
47
|
+
Use of the system libffi can be enforced by:
|
|
48
|
+
```
|
|
49
|
+
gem install ffi -- --enable-system-libffi # to install the gem manually
|
|
50
|
+
bundle config build.ffi --enable-system-libffi # for bundle install
|
|
51
|
+
```
|
|
52
|
+
or prevented by `--disable-system-libffi`.
|
|
53
|
+
|
|
45
54
|
On Linux systems running with [PaX](https://en.wikipedia.org/wiki/PaX) (Gentoo, Alpine, etc.), FFI may trigger `mprotect` errors. You may need to disable [mprotect](https://en.wikibooks.org/wiki/Grsecurity/Appendix/Grsecurity_and_PaX_Configuration_Options#Restrict_mprotect.28.29) for ruby (`paxctl -m [/path/to/ruby]`) for the time being until a solution is found.
|
|
46
55
|
|
|
47
56
|
On FreeBSD systems pkgconf must be installed for the gem to be able to compile using clang. Install either via packages `pkg install pkgconf` or from ports via `devel/pkgconf`.
|
data/Rakefile
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require 'rubygems/tasks'
|
|
2
2
|
require 'rbconfig'
|
|
3
3
|
require 'rake/clean'
|
|
4
|
-
|
|
4
|
+
require_relative "lib/ffi/version"
|
|
5
5
|
|
|
6
6
|
require 'date'
|
|
7
7
|
require 'fileutils'
|
|
@@ -9,10 +9,6 @@ require 'rbconfig'
|
|
|
9
9
|
require 'rspec/core/rake_task'
|
|
10
10
|
require 'rubygems/package_task'
|
|
11
11
|
|
|
12
|
-
def java?
|
|
13
|
-
/java/ === RUBY_PLATFORM
|
|
14
|
-
end
|
|
15
|
-
|
|
16
12
|
BUILD_DIR = "build"
|
|
17
13
|
BUILD_EXT_DIR = File.join(BUILD_DIR, "#{RbConfig::CONFIG['arch']}", 'ffi_c', RUBY_VERSION)
|
|
18
14
|
|
|
@@ -20,17 +16,8 @@ def gem_spec
|
|
|
20
16
|
@gem_spec ||= Gem::Specification.load('ffi.gemspec')
|
|
21
17
|
end
|
|
22
18
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
RSpec::Core::RakeTask.new(:spec) do |config|
|
|
26
|
-
config.rspec_opts = YAML.load_file 'spec/spec.opts'
|
|
27
|
-
end
|
|
28
|
-
else
|
|
29
|
-
RSpec::Core::RakeTask.new(:spec => :compile) do |config|
|
|
30
|
-
config.rspec_opts = YAML.load_file 'spec/spec.opts'
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
TEST_DEPS.unshift :compile
|
|
19
|
+
RSpec::Core::RakeTask.new(:spec => :compile) do |config|
|
|
20
|
+
config.rspec_opts = YAML.load_file 'spec/spec.opts'
|
|
34
21
|
end
|
|
35
22
|
|
|
36
23
|
desc "Build all packages"
|
|
@@ -58,37 +45,29 @@ task :test => [ :spec ]
|
|
|
58
45
|
|
|
59
46
|
namespace :bench do
|
|
60
47
|
ITER = ENV['ITER'] ? ENV['ITER'].to_i : 100000
|
|
61
|
-
|
|
62
|
-
bench_files = Dir["bench/bench_*.rb"].reject { |f| f == "bench/bench_helper.rb" }
|
|
48
|
+
bench_files = Dir["bench/bench_*.rb"].sort.reject { |f| f == "bench/bench_helper.rb" }
|
|
63
49
|
bench_files.each do |bench|
|
|
64
|
-
task File.basename(bench, ".rb")[6..-1] =>
|
|
65
|
-
sh %{#{Gem.ruby} #{
|
|
50
|
+
task File.basename(bench, ".rb")[6..-1] => :compile do
|
|
51
|
+
sh %{#{Gem.ruby} #{bench} #{ITER}}
|
|
66
52
|
end
|
|
67
53
|
end
|
|
68
|
-
task :all =>
|
|
54
|
+
task :all => :compile do
|
|
69
55
|
bench_files.each do |bench|
|
|
70
|
-
sh %{#{Gem.ruby} #{
|
|
56
|
+
sh %{#{Gem.ruby} #{bench}}
|
|
71
57
|
end
|
|
72
58
|
end
|
|
73
59
|
end
|
|
74
60
|
|
|
75
|
-
task 'spec:run' =>
|
|
76
|
-
task 'spec:specdoc' =>
|
|
61
|
+
task 'spec:run' => :compile
|
|
62
|
+
task 'spec:specdoc' => :compile
|
|
77
63
|
|
|
78
64
|
task :default => :spec
|
|
79
65
|
|
|
80
66
|
namespace 'java' do
|
|
81
67
|
|
|
82
|
-
java_gem_spec =
|
|
83
|
-
s.
|
|
84
|
-
s.
|
|
85
|
-
s.author = gem_spec.author
|
|
86
|
-
s.email = gem_spec.email
|
|
87
|
-
s.homepage = gem_spec.homepage
|
|
88
|
-
s.summary = gem_spec.summary
|
|
89
|
-
s.description = gem_spec.description
|
|
90
|
-
s.files = %w(LICENSE COPYING README.md CHANGELOG.md Rakefile)
|
|
91
|
-
s.license = gem_spec.license
|
|
68
|
+
java_gem_spec = gem_spec.dup.tap do |s|
|
|
69
|
+
s.files.reject! { |f| File.fnmatch?("ext/*", f) }
|
|
70
|
+
s.extensions = []
|
|
92
71
|
s.platform = 'java'
|
|
93
72
|
end
|
|
94
73
|
|
|
@@ -101,7 +80,7 @@ end
|
|
|
101
80
|
|
|
102
81
|
task 'gem:java' => 'java:gem'
|
|
103
82
|
|
|
104
|
-
|
|
83
|
+
if RUBY_ENGINE == 'ruby' || RUBY_ENGINE == 'rbx'
|
|
105
84
|
require 'rake/extensiontask'
|
|
106
85
|
Rake::ExtensionTask.new('ffi_c', gem_spec) do |ext|
|
|
107
86
|
ext.name = 'ffi_c' # indicate the name of the extension.
|
|
@@ -124,13 +103,17 @@ unless java?
|
|
|
124
103
|
sh "x86_64-w64-mingw32-strip -S build/x64-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/ffi_c.so"
|
|
125
104
|
end
|
|
126
105
|
end
|
|
106
|
+
else
|
|
107
|
+
task :compile do
|
|
108
|
+
STDERR.puts "Nothing to compile on #{RUBY_ENGINE}"
|
|
109
|
+
end
|
|
127
110
|
end
|
|
128
111
|
|
|
129
112
|
desc "build a windows gem without all the ceremony"
|
|
130
113
|
task "gem:windows" do
|
|
131
114
|
require "rake_compiler_dock"
|
|
132
115
|
sh "bundle package"
|
|
133
|
-
RakeCompilerDock.sh "sudo apt-get update && sudo apt-get install -y libltdl-dev && bundle --local && rake cross native gem MAKE='nice make -j`nproc`'"
|
|
116
|
+
RakeCompilerDock.sh "sudo apt-get update && sudo apt-get install -y libltdl-dev && bundle --local && rake cross native gem MAKE='nice make -j`nproc`' RUBY_CC_VERSION=${RUBY_CC_VERSION/:2.2.2/}"
|
|
134
117
|
end
|
|
135
118
|
|
|
136
119
|
directory "ext/ffi_c/libffi"
|
|
@@ -158,16 +141,15 @@ end.each do |f|
|
|
|
158
141
|
end
|
|
159
142
|
end
|
|
160
143
|
|
|
161
|
-
|
|
162
|
-
require 'ffi/platform'
|
|
144
|
+
require_relative "lib/ffi/platform"
|
|
163
145
|
types_conf = File.expand_path(File.join(FFI::Platform::CONF_DIR, 'types.conf'))
|
|
164
146
|
logfile = File.join(File.dirname(__FILE__), 'types_log')
|
|
165
147
|
|
|
166
|
-
|
|
148
|
+
task types_conf do |task|
|
|
167
149
|
require 'fileutils'
|
|
168
|
-
|
|
150
|
+
require_relative "lib/ffi/tools/types_generator"
|
|
169
151
|
options = {}
|
|
170
|
-
FileUtils.mkdir_p(File.dirname(task.name),
|
|
152
|
+
FileUtils.mkdir_p(File.dirname(task.name), mode: 0755 )
|
|
171
153
|
File.open(task.name, File::CREAT|File::TRUNC|File::RDWR, 0644) do |f|
|
|
172
154
|
f.puts FFI::TypesGenerator.generate(options)
|
|
173
155
|
end
|
|
@@ -177,8 +159,7 @@ file types_conf => File.join("lib", "ffi", "version.rb") do |task|
|
|
|
177
159
|
end
|
|
178
160
|
|
|
179
161
|
desc "Create or update type information for platform #{FFI::Platform::NAME}"
|
|
180
|
-
task :types_conf => types_conf
|
|
181
|
-
end
|
|
162
|
+
task :types_conf => types_conf
|
|
182
163
|
|
|
183
164
|
Gem::Tasks.new do |t|
|
|
184
165
|
t.scm.tag.format = '%s'
|