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.
- data/README.md +104 -0
- data/Rakefile +36 -43
- data/ext/ffi_c/AbstractMemory.c +22 -16
- data/ext/ffi_c/AbstractMemory.h +1 -1
- data/ext/ffi_c/Buffer.c +2 -2
- data/ext/ffi_c/Call.c +8 -6
- data/ext/ffi_c/ClosurePool.c +1 -1
- data/ext/ffi_c/DynamicLibrary.c +2 -2
- data/ext/ffi_c/Function.c +25 -26
- data/ext/ffi_c/Function.h +1 -1
- data/ext/ffi_c/MappedType.c +1 -0
- data/ext/ffi_c/MemoryPointer.c +8 -2
- data/ext/ffi_c/MethodHandle.c +1 -4
- data/ext/ffi_c/Pointer.c +1 -1
- data/ext/ffi_c/Struct.c +5 -5
- data/ext/ffi_c/StructByValue.c +1 -1
- data/ext/ffi_c/StructLayout.c +5 -5
- data/ext/ffi_c/Thread.c +2 -2
- data/ext/ffi_c/Type.c +3 -3
- data/ext/ffi_c/Types.c +2 -4
- data/ext/ffi_c/Types.h +5 -0
- data/ext/ffi_c/Variadic.c +2 -4
- data/ext/ffi_c/extconf.rb +6 -7
- data/ext/ffi_c/ffi.c +1 -1
- data/ext/ffi_c/libffi.darwin.mk +2 -2
- data/ext/ffi_c/libffi.mk +1 -1
- data/ext/ffi_c/rbffi_endian.h +1 -10
- data/spec/ffi/rbx/memory_pointer_spec.rb +0 -4
- metadata +107 -126
- data/README.rdoc +0 -102
- data/gen/log +0 -1
- data/tasks/ann.rake +0 -80
- data/tasks/extension.rake +0 -32
- data/tasks/gem.rake +0 -199
- data/tasks/git.rake +0 -41
- data/tasks/notes.rake +0 -27
- data/tasks/post_load.rake +0 -34
- data/tasks/rdoc.rake +0 -50
- data/tasks/rubyforge.rake +0 -55
- data/tasks/setup.rb +0 -301
- data/tasks/spec.rake +0 -54
- data/tasks/svn.rake +0 -47
- data/tasks/test.rake +0 -40
- data/tasks/yard.rake +0 -11
data/README.rdoc
DELETED
@@ -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
|
data/tasks/ann.rake
DELETED
@@ -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
|
data/tasks/extension.rake
DELETED
@@ -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
|
data/tasks/gem.rake
DELETED
@@ -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
|
data/tasks/git.rake
DELETED
@@ -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
|