ffi 1.1.6.pre2 → 1.2.0.dev

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ffi might be problematic. Click here for more details.

@@ -1,102 +0,0 @@
1
- ruby-ffi
2
- http://wiki.github.com/ffi/ffi
3
-
4
- == DESCRIPTION:
5
-
6
- Ruby-FFI is a ruby extension for programmatically loading dynamic
7
- libraries, binding functions within them, and calling those functions
8
- from Ruby code. Moreover, a Ruby-FFI extension works without changes
9
- on Ruby and JRuby. Discover why should you write your next extension
10
- using Ruby-FFI here[http://wiki.github.com/ffi/ffi/why-use-ffi].
11
-
12
- == FEATURES/PROBLEMS:
13
-
14
- * It has a very intuitive DSL
15
- * It supports all C native types
16
- * It supports C structs (also nested), enums and global variables
17
- * It supports callbacks
18
- * It has smart methods to handle memory management of pointers and structs
19
-
20
- == SYNOPSIS:
21
-
22
- require 'ffi'
23
-
24
- module MyLib
25
- extend FFI::Library
26
- ffi_lib 'c'
27
- attach_function :puts, [ :string ], :int
28
- end
29
-
30
- MyLib.puts 'Hello, World using libc!'
31
-
32
- For less minimalistic and more sane examples you may look at:
33
-
34
- * the samples/ folder
35
- * the examples on the wiki[http://wiki.github.com/ffi/ffi]
36
- * the projects using FFI listed on this page[http://wiki.github.com/ffi/ffi/projects-using-ffi]
37
-
38
- == REQUIREMENTS:
39
-
40
- * You need a sane building environment in order to compile the extension.
41
-
42
- == DOWNLOAD/INSTALL:
43
-
44
- From rubyforge:
45
-
46
- [sudo] gem install ffi
47
-
48
- or from the git repository on github:
49
-
50
- git clone git://github.com/ffi/ffi.git
51
- cd ffi
52
- rake gem:install
53
-
54
- == LICENSE:
55
-
56
- See LICENSE file.
57
-
58
- == CREDITS
59
-
60
- The following people have submitted code, bug reports, or otherwide contributed to the success of this project:
61
-
62
- Alban Peignier <alban.peignier@free.fr>
63
- Aman Gupta <aman@tmm1.net>
64
- Andrea Fazzi <andrea.fazzi@alcacoop.it>
65
- Andreas Niederl <rico32@gmx.net>
66
- Andrew Cholakian <andrew@andrewvc.com>
67
- Antonio Terceiro <terceiro@softwarelivre.org>
68
- Brian Candler <B.Candler@pobox.com>
69
- Brian D. Burns <burns180@gmail.com>
70
- Bryan Kearney <bkearney@redhat.com>
71
- Charlie Savage <cfis@zerista.com>
72
- Chikanaga Tomoyuki <nagachika00@gmail.com>
73
- Hongli Lai <hongli@phusion.nl>
74
- Ian MacLeod <ian@nevir.net>
75
- Jake Douglas <jake@shiftedlabs.com>
76
- Jean-Dominique Morani <jdmorani@mac.com>
77
- Jeremy Hinegardner <jeremy@hinegardner.org>
78
- Jesús García Sáez <blaxter@gmail.com>
79
- Joe Khoobyar <joe@ankhcraft.com>
80
- Jurij Smakov <jurij@wooyd.org>
81
- KISHIMOTO, Makoto <ksmakoto@dd.iij4u.or.jp>
82
- Kim Burgestrand <kim@burgestrand.se>
83
- Lars Kanis <kanis@comcard.de>
84
- Luc Heinrich <luc@honk-honk.com>
85
- Luis Lavena <luislavena@gmail.com>
86
- Matijs van Zuijlen <matijs@matijs.net>
87
- Matthew King <automatthew@gmail.com>
88
- Mike Dalessio <mike.dalessio@gmail.com>
89
- NARUSE, Yui <naruse@airemix.jp>
90
- Park Heesob <phasis@gmail.com>
91
- Shin Yee <shinyee@speedgocomputing.com>
92
- Stephen Bannasch <stephen.bannasch@gmail.com>
93
- Suraj N. Kurapati <sunaku@gmail.com>
94
- Sylvain Daubert <sylvain.daubert@laposte.net>
95
- Victor Costan
96
- beoran@gmail.com
97
- ctide <christide@christide.com>
98
- emboss <Martin.Bosslet@googlemail.com>
99
- hobophobe <unusualtears@gmail.com>
100
- meh <meh@paranoici.org>
101
- postmodern <postmodern.mod3@gmail.com>
102
- wycats@gmail.com <wycats@gmail.com>
data/gen/log DELETED
@@ -1 +0,0 @@
1
- /Users/wayne/src/ruby-ffi/lib/ffi/platform/x86_64-darwin/types.conf
@@ -1,80 +0,0 @@
1
-
2
- begin
3
- require 'bones/smtp_tls'
4
- rescue LoadError
5
- require 'net/smtp'
6
- end
7
- require 'time'
8
-
9
- namespace :ann do
10
-
11
- # A prerequisites task that all other tasks depend upon
12
- task :prereqs
13
-
14
- file PROJ.ann.file do
15
- ann = PROJ.ann
16
- puts "Generating #{ann.file}"
17
- File.open(ann.file,'w') do |fd|
18
- fd.puts("#{PROJ.name} version #{PROJ.version}")
19
- fd.puts(" by #{Array(PROJ.authors).first}") if PROJ.authors
20
- fd.puts(" #{PROJ.url}") if PROJ.url.valid?
21
- fd.puts(" (the \"#{PROJ.release_name}\" release)") if PROJ.release_name
22
- fd.puts
23
- fd.puts("== DESCRIPTION")
24
- fd.puts
25
- fd.puts(PROJ.description)
26
- fd.puts
27
- fd.puts(PROJ.changes.sub(%r/^.*$/, '== CHANGES'))
28
- fd.puts
29
- ann.paragraphs.each do |p|
30
- fd.puts "== #{p.upcase}"
31
- fd.puts
32
- fd.puts paragraphs_of(PROJ.readme_file, p).join("\n\n")
33
- fd.puts
34
- end
35
- fd.puts ann.text if ann.text
36
- end
37
- end
38
-
39
- desc "Create an announcement file"
40
- task :announcement => ['ann:prereqs', PROJ.ann.file]
41
-
42
- desc "Send an email announcement"
43
- task :email => ['ann:prereqs', PROJ.ann.file] do
44
- ann = PROJ.ann
45
- from = ann.email[:from] || Array(PROJ.authors).first || PROJ.email
46
- to = Array(ann.email[:to])
47
-
48
- ### build a mail header for RFC 822
49
- rfc822msg = "From: #{from}\n"
50
- rfc822msg << "To: #{to.join(',')}\n"
51
- rfc822msg << "Subject: [ANN] #{PROJ.name} #{PROJ.version}"
52
- rfc822msg << " (#{PROJ.release_name})" if PROJ.release_name
53
- rfc822msg << "\n"
54
- rfc822msg << "Date: #{Time.new.rfc822}\n"
55
- rfc822msg << "Message-Id: "
56
- rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{ann.email[:domain]}>\n\n"
57
- rfc822msg << File.read(ann.file)
58
-
59
- params = [:server, :port, :domain, :acct, :passwd, :authtype].map do |key|
60
- ann.email[key]
61
- end
62
-
63
- params[3] = (PROJ.ann.email[:from] || PROJ.email) if params[3].nil?
64
-
65
- if params[4].nil?
66
- STDOUT.write "Please enter your e-mail password (#{params[3]}): "
67
- params[4] = STDIN.gets.chomp
68
- end
69
-
70
- ### send email
71
- Net::SMTP.start(*params) {|smtp| smtp.sendmail(rfc822msg, from, to)}
72
- end
73
- end # namespace :ann
74
-
75
- desc 'Alias to ann:announcement'
76
- task :ann => 'ann:announcement'
77
-
78
- CLOBBER << PROJ.ann.file
79
-
80
- # EOF
@@ -1,32 +0,0 @@
1
- spec = Gem::Specification.new do |s|
2
- s.name = PROJ.name
3
- s.version = PROJ.version
4
- s.platform = Gem::Platform::RUBY
5
- s.extra_rdoc_files = ["README.rdoc", "LICENSE"]
6
- s.summary = PROJ.summary
7
- s.description = PROJ.description
8
- s.authors = Array(PROJ.authors)
9
- s.email = PROJ.email
10
- s.homepage = Array(PROJ.url).first
11
- s.rubyforge_project = PROJ.rubyforge.name
12
- s.extensions = %w(ext/ffi_c/extconf.rb gen/Rakefile)
13
- s.require_path = 'lib'
14
- s.files = PROJ.gem.files
15
- s.add_dependency *PROJ.gem.dependencies.flatten unless PROJ.gem.dependencies.empty?
16
- PROJ.gem.extras.each do |msg, val|
17
- case val
18
- when Proc
19
- val.call(s.send(msg))
20
- else
21
- s.send "#{msg}=", val
22
- end
23
- end
24
- end
25
-
26
- Rake::ExtensionTask.new('ffi_c', spec) do |ext|
27
- ext.name = 'ffi_c' # indicate the name of the extension.
28
- # ext.lib_dir = BUILD_DIR # put binaries into this folder.
29
- ext.tmp_dir = BUILD_DIR # temporary folder used during compilation.
30
- ext.cross_compile = true # enable cross compilation (requires cross compile toolchain)
31
- ext.cross_platform = ['i386-mingw32'] # forces the Windows platform instead of the default one
32
- end if USE_RAKE_COMPILER
@@ -1,199 +0,0 @@
1
-
2
- require 'find'
3
- require 'rake/packagetask'
4
- require 'rubygems/user_interaction'
5
- require 'rubygems/builder'
6
-
7
- module Bones
8
- class GemPackageTask < Rake::PackageTask
9
- # Ruby GEM spec containing the metadata for this package. The
10
- # name, version and package_files are automatically determined
11
- # from the GEM spec and don't need to be explicitly provided.
12
- #
13
- attr_accessor :gem_spec
14
-
15
- # Tasks from the Bones gem directory
16
- attr_reader :bones_files
17
-
18
- # Create a GEM Package task library. Automatically define the gem
19
- # if a block is given. If no block is supplied, then +define+
20
- # needs to be called to define the task.
21
- #
22
- def initialize(gem_spec)
23
- init(gem_spec)
24
- yield self if block_given?
25
- define if block_given?
26
- end
27
-
28
- # Initialization tasks without the "yield self" or define
29
- # operations.
30
- #
31
- def init(gem)
32
- super(gem.name, gem.version)
33
- @gem_spec = gem
34
- @package_files += gem_spec.files if gem_spec.files
35
- @bones_files = []
36
-
37
- local_setup = File.join(Dir.pwd, %w[tasks setup.rb])
38
- if !test(?e, local_setup)
39
- Dir.glob(::Bones.path(%w[lib bones tasks *])).each {|fn| bones_files << fn}
40
- end
41
- end
42
-
43
- # Create the Rake tasks and actions specified by this
44
- # GemPackageTask. (+define+ is automatically called if a block is
45
- # given to +new+).
46
- #
47
- def define
48
- super
49
- task :prereqs
50
- task :package => ['gem:prereqs', "#{package_dir_path}/#{gem_file}"]
51
- file "#{package_dir_path}/#{gem_file}" => [package_dir_path] + package_files + bones_files do
52
- when_writing("Creating GEM") {
53
- chdir(package_dir_path) do
54
- Gem::Builder.new(gem_spec).build
55
- verbose(true) {
56
- mv gem_file, "../#{gem_file}"
57
- }
58
- end
59
- }
60
- end
61
-
62
- file package_dir_path => bones_files do
63
- mkdir_p package_dir rescue nil
64
-
65
- gem_spec.files = (gem_spec.files +
66
- bones_files.map {|fn| File.join('tasks', File.basename(fn))}).sort
67
-
68
- bones_files.each do |fn|
69
- base_fn = File.join('tasks', File.basename(fn))
70
- f = File.join(package_dir_path, base_fn)
71
- fdir = File.dirname(f)
72
- mkdir_p(fdir) if !File.exist?(fdir)
73
- if File.directory?(fn)
74
- mkdir_p(f)
75
- else
76
- raise "file name conflict for '#{base_fn}' (conflicts with '#{fn}')" if test(?e, f)
77
- safe_ln(fn, f)
78
- end
79
- end
80
- end
81
- end
82
-
83
- def gem_file
84
- if @gem_spec.platform == Gem::Platform::RUBY
85
- "#{package_name}.gem"
86
- else
87
- "#{package_name}-#{@gem_spec.platform}.gem"
88
- end
89
- end
90
- end # class GemPackageTask
91
- end # module Bones
92
-
93
- namespace :gem do
94
-
95
- PROJ.gem._spec = Gem::Specification.new do |s|
96
- s.name = PROJ.name
97
- s.version = PROJ.version
98
- s.summary = PROJ.summary
99
- s.authors = Array(PROJ.authors)
100
- s.email = PROJ.email
101
- s.homepage = Array(PROJ.url).first
102
- s.rubyforge_project = PROJ.rubyforge.name
103
-
104
- s.description = PROJ.description
105
-
106
- PROJ.gem.dependencies.each do |dep|
107
- s.add_dependency(*dep)
108
- end
109
-
110
- PROJ.gem.development_dependencies.each do |dep|
111
- s.add_development_dependency(*dep)
112
- end
113
-
114
- s.files = PROJ.gem.files
115
- s.executables = PROJ.gem.executables.map {|fn| File.basename(fn)}
116
- s.extensions = PROJ.gem.files.grep %r/extconf\.rb$/
117
-
118
- s.bindir = 'bin'
119
- dirs = Dir["{#{PROJ.libs.join(',')}}"]
120
- s.require_paths = dirs unless dirs.empty?
121
-
122
- incl = Regexp.new(PROJ.rdoc.include.join('|'))
123
- excl = PROJ.rdoc.exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
124
- excl = Regexp.new(excl.join('|'))
125
- rdoc_files = PROJ.gem.files.find_all do |fn|
126
- case fn
127
- when excl; false
128
- when incl; true
129
- else false end
130
- end
131
- s.rdoc_options = PROJ.rdoc.opts + ['--main', PROJ.rdoc.main]
132
- s.extra_rdoc_files = rdoc_files
133
-
134
- if test ?f, PROJ.test.file
135
- s.test_file = PROJ.test.file
136
- else
137
- s.test_files = PROJ.test.files.to_a
138
- end
139
-
140
- # Do any extra stuff the user wants
141
- PROJ.gem.extras.each do |msg, val|
142
- case val
143
- when Proc
144
- val.call(s.send(msg))
145
- else
146
- s.send "#{msg}=", val
147
- end
148
- end
149
- end # Gem::Specification.new
150
-
151
- Bones::GemPackageTask.new(PROJ.gem._spec) do |pkg|
152
- pkg.need_tar = PROJ.gem.need_tar
153
- pkg.need_zip = PROJ.gem.need_zip
154
- end
155
-
156
- desc 'Show information about the gem'
157
- task :debug => 'gem:prereqs' do
158
- puts PROJ.gem._spec.to_ruby
159
- end
160
-
161
- desc 'Write the gemspec '
162
- task :spec => 'gem:prereqs' do
163
- File.open("#{PROJ.name}.gemspec", 'w') do |f|
164
- f.write PROJ.gem._spec.to_ruby
165
- end
166
- end
167
-
168
- desc 'Install the gem'
169
- task :install => [:clobber, 'gem:package'] do
170
- sh "#{SUDO} #{GEM} install --local pkg/#{PROJ.gem._spec.full_name}"
171
-
172
- # use this version of the command for rubygems > 1.0.0
173
- #sh "#{SUDO} #{GEM} install --no-update-sources pkg/#{PROJ.gem._spec.full_name}"
174
- end
175
-
176
- desc 'Uninstall the gem'
177
- task :uninstall do
178
- installed_list = Gem.source_index.find_name(PROJ.name)
179
- if installed_list and installed_list.collect { |s| s.version.to_s}.include?(PROJ.version) then
180
- sh "#{SUDO} #{GEM} uninstall --version '#{PROJ.version}' --ignore-dependencies --executables #{PROJ.name}"
181
- end
182
- end
183
-
184
- desc 'Reinstall the gem'
185
- task :reinstall => [:uninstall, :install]
186
-
187
- desc 'Cleanup the gem'
188
- task :cleanup do
189
- sh "#{SUDO} #{GEM} cleanup #{PROJ.gem._spec.name}"
190
- end
191
- end # namespace :gem
192
-
193
- desc 'Alias to gem:package'
194
- task :gem => 'gem:package'
195
-
196
- task :clobber => 'gem:clobber_package'
197
- remove_desc_for_task 'gem:clobber_package'
198
-
199
- # EOF
@@ -1,41 +0,0 @@
1
-
2
- if HAVE_GIT
3
-
4
- namespace :git do
5
-
6
- # A prerequisites task that all other tasks depend upon
7
- task :prereqs
8
-
9
- desc 'Show tags from the Git repository'
10
- task :show_tags => 'git:prereqs' do |t|
11
- puts %x/git tag/
12
- end
13
-
14
- desc 'Create a new tag in the Git repository'
15
- task :create_tag => 'git:prereqs' do |t|
16
- v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
17
- abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
18
-
19
- # tag = "%s-%s" % [PROJ.name, PROJ.version]
20
- tag = "%s" % [ PROJ.version ]
21
- msg = "Creating tag for #{PROJ.name} version #{PROJ.version}"
22
-
23
- puts "Creating Git tag '#{tag}'"
24
- unless system "git tag -a -m '#{msg}' #{tag}"
25
- abort "Tag creation failed"
26
- end
27
-
28
- # if %x/git remote/ =~ %r/^origin\s*$/
29
- # unless system "git push origin #{tag}"
30
- # abort "Could not push tag to remote Git repository"
31
- # end
32
- # end
33
- end
34
-
35
- end # namespace :git
36
-
37
- #task 'gem:release' => 'git:create_tag'
38
-
39
- end # if HAVE_GIT
40
-
41
- # EOF