rgem2rpm 1.0.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.
- data/Rakefile +4 -0
- data/bin/rgem2rpm +21 -0
- data/conf/template.spec +34 -0
- data/lib/rgem2rpm.rb +11 -0
- data/lib/rgem2rpm/argumentparse.rb +77 -0
- data/lib/rgem2rpm/converter.rb +310 -0
- data/lib/rgem2rpm/ext.rb +12 -0
- data/lib/rgem2rpm/ext/builder.rb +23 -0
- data/lib/rgem2rpm/ext/configure_builder.rb +20 -0
- data/lib/rgem2rpm/ext/ext_conf_builder.rb +17 -0
- data/lib/rgem2rpm/ext/rake_builder.rb +32 -0
- data/lib/rgem2rpm/version.rb +3 -0
- data/rgem2rpm.gemspec +30 -0
- metadata +76 -0
data/Rakefile
ADDED
data/bin/rgem2rpm
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env jruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
# set rgem2rpm path
|
5
|
+
rgem2rpm_path = File.expand_path('../../lib', __FILE__)
|
6
|
+
$:.unshift(rgem2rpm_path)
|
7
|
+
require 'rgem2rpm'
|
8
|
+
|
9
|
+
begin
|
10
|
+
# parse arguments
|
11
|
+
options_parse = RGem2Rpm::ArgumentParse.parse(ARGV)
|
12
|
+
# check arguments
|
13
|
+
raise "Missing argument: gemfilename" unless ARGV.size == 1
|
14
|
+
# initialize gem2rpm
|
15
|
+
gem2rpm = RGem2Rpm::Converter.new options_parse, ARGV[0]
|
16
|
+
# build rpm
|
17
|
+
gem2rpm.create_rpm
|
18
|
+
rescue => e
|
19
|
+
puts e.message
|
20
|
+
exit
|
21
|
+
end
|
data/conf/template.spec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
%define distnum %{expand:%%(/usr/lib/rpm/redhat/dist.sh --distnum)}
|
2
|
+
%define disttype %{expand:%%(/usr/lib/rpm/redhat/dist.sh --disttype)}
|
3
|
+
%define name <%=name%>
|
4
|
+
%define version <%=version%>
|
5
|
+
%define release <%=rpm_release%>.%{disttype}%{distnum}
|
6
|
+
|
7
|
+
Name: %{name}
|
8
|
+
Version: %{version}
|
9
|
+
Release: %{release}
|
10
|
+
License: See <%=homepage%>
|
11
|
+
Summary: <%=summary%>
|
12
|
+
Group: <%=rpm_group%>
|
13
|
+
Source: %{name}-%{version}.tar.gz
|
14
|
+
Prefix: <%=os_install_dir%>
|
15
|
+
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
|
16
|
+
<%="BuildArch: noarch" if rpm_no_arch%>
|
17
|
+
<%="Requires: #{requires}" unless requires.nil?%>
|
18
|
+
%description
|
19
|
+
<%=description%>
|
20
|
+
|
21
|
+
%prep
|
22
|
+
%setup -q
|
23
|
+
|
24
|
+
%install
|
25
|
+
<%=rpm_install%>
|
26
|
+
|
27
|
+
<%="%post\n#{rpm_post}" unless rpm_post.nil?%>
|
28
|
+
|
29
|
+
%postun
|
30
|
+
rm -rf %{prefix}/gems/%{name}-%{version}
|
31
|
+
|
32
|
+
%files
|
33
|
+
%defattr(-,<%=os_user%>,<%=os_group%>)
|
34
|
+
<%=files%>
|
data/lib/rgem2rpm.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# initialize module RGem2Rpm
|
2
|
+
module RGem2Rpm; end
|
3
|
+
|
4
|
+
require 'rgem2rpm/argumentparse'
|
5
|
+
require 'rgem2rpm/converter'
|
6
|
+
require 'rgem2rpm/version'
|
7
|
+
require 'rgem2rpm/ext'
|
8
|
+
require 'rgem2rpm/ext/builder'
|
9
|
+
require 'rgem2rpm/ext/configure_builder'
|
10
|
+
require 'rgem2rpm/ext/ext_conf_builder'
|
11
|
+
require 'rgem2rpm/ext/rake_builder'
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
class RGem2Rpm::ArgumentParse
|
5
|
+
#
|
6
|
+
# Return a structure describing the options.
|
7
|
+
#
|
8
|
+
def self.parse(args)
|
9
|
+
# The options specified on the command line will be collected in *options*.
|
10
|
+
# We set default values here.
|
11
|
+
options = OpenStruct.new
|
12
|
+
options.spec_template = File.expand_path('../../../conf/template.spec', __FILE__)
|
13
|
+
options.rpm_release = '1'
|
14
|
+
options.rpm_group = 'Ruby/Gems'
|
15
|
+
options.os_user = 'root'
|
16
|
+
options.os_group = 'root'
|
17
|
+
options.os_install_dir = '/opt/ruby'
|
18
|
+
|
19
|
+
opts = OptionParser.new do |opt|
|
20
|
+
opt.banner = "Usage: rgem2rpm [options] [gemfilename]"
|
21
|
+
opt.separator "options:"
|
22
|
+
|
23
|
+
# Template argument
|
24
|
+
opt.on("--template SPECTEMPLATE", "Define new rpm spec template.") do |spec_template|
|
25
|
+
options.spec_template = spec_template
|
26
|
+
end
|
27
|
+
|
28
|
+
# Release name
|
29
|
+
opt.on("--release RPMRELEASE", "Define rpm spec release.") do |rpm_release|
|
30
|
+
options.rpm_release = rpm_release
|
31
|
+
end
|
32
|
+
|
33
|
+
# rpm group
|
34
|
+
opt.on("--rpmgroup RPMGROUPNAME", "Define rpm spec group.") do |rpm_group|
|
35
|
+
options.rpm_group = rpm_group
|
36
|
+
end
|
37
|
+
|
38
|
+
# operating system install user
|
39
|
+
opt.on("--osuser USERNAME", "Define rpm spec os install user.") do |os_user|
|
40
|
+
options.os_user = os_user
|
41
|
+
end
|
42
|
+
|
43
|
+
# operating system install group
|
44
|
+
opt.on("--osgroup GROUPNAME", "Define rpm spec os install group.") do |os_group|
|
45
|
+
options.os_group = os_group
|
46
|
+
end
|
47
|
+
|
48
|
+
# operating system install dir
|
49
|
+
opt.on("--osinstalldir INSTALLDIR", "Define rpm spec os install directory.") do |os_install_dir|
|
50
|
+
options.os_install_dir = os_install_dir
|
51
|
+
end
|
52
|
+
|
53
|
+
# No argument, shows at tail. This will print an options summary.
|
54
|
+
# Try it and see!
|
55
|
+
opt.on_tail("--help", "Show this message.") do
|
56
|
+
puts opt
|
57
|
+
exit
|
58
|
+
end
|
59
|
+
|
60
|
+
# Another typical switch to print the version.
|
61
|
+
opt.on_tail("--version", "Show version.") do
|
62
|
+
puts RGem2Rpm::VERSION
|
63
|
+
exit
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
begin
|
68
|
+
# parse options
|
69
|
+
opts.parse!(args)
|
70
|
+
# return options
|
71
|
+
options
|
72
|
+
rescue => e
|
73
|
+
puts e.message
|
74
|
+
exit
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,310 @@
|
|
1
|
+
require 'rubygems/installer'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'zlib'
|
4
|
+
require 'archive/tar/minitar'
|
5
|
+
require 'erb'
|
6
|
+
require 'rgem2rpm/ext'
|
7
|
+
include Archive::Tar
|
8
|
+
|
9
|
+
class RGem2Rpm::Converter < Gem::Installer
|
10
|
+
##
|
11
|
+
# Constructs an Installer instance that will install the gem located at
|
12
|
+
# +gem+. +options+ is a Hash with the following keys:
|
13
|
+
#
|
14
|
+
# :rpm_top_dir:: path used by rpmbuild to generate rpms
|
15
|
+
def initialize(options_parse, gem)
|
16
|
+
# set spectemplate
|
17
|
+
@spec_template = options_parse.spec_template
|
18
|
+
# set rpm release
|
19
|
+
@rpm_release = options_parse.rpm_release
|
20
|
+
# set rpm group
|
21
|
+
@rpm_group = options_parse.rpm_group
|
22
|
+
# set rpm no arch
|
23
|
+
@rpm_no_arch = true
|
24
|
+
# set os user
|
25
|
+
@os_user = options_parse.os_user
|
26
|
+
# set os group
|
27
|
+
@os_group = options_parse.os_group
|
28
|
+
# set os installation dir
|
29
|
+
@os_install_dir = options_parse.os_install_dir
|
30
|
+
# initialize rpm_top_dir
|
31
|
+
@rpm_top_dir = "#{Dir.pwd}/rpmbuild"
|
32
|
+
# set defaul options
|
33
|
+
super(gem)
|
34
|
+
# initialize temp dir
|
35
|
+
@rpm_tmp_dir = "#{@rpm_top_dir}/tmp/#{@spec.full_name}"
|
36
|
+
# initialize unpack dir
|
37
|
+
@rpm_unpack_dir = "#{@rpm_tmp_dir}/#{@spec.full_name}"
|
38
|
+
# initialize gemspec filename
|
39
|
+
@gemspec_filename = "#{@rpm_tmp_dir}/#{@spec.full_name}.gemspec"
|
40
|
+
# initialize bin dir
|
41
|
+
@bin_dir = "#{@rpm_tmp_dir}/bin"
|
42
|
+
# create rpm build environment
|
43
|
+
create_rpm_env
|
44
|
+
end
|
45
|
+
|
46
|
+
# return gem name
|
47
|
+
def name
|
48
|
+
@spec.name
|
49
|
+
end
|
50
|
+
|
51
|
+
# return gem version
|
52
|
+
def version
|
53
|
+
@spec.version
|
54
|
+
end
|
55
|
+
|
56
|
+
# return rpm release
|
57
|
+
def rpm_release
|
58
|
+
@rpm_release
|
59
|
+
end
|
60
|
+
|
61
|
+
# return rpm group
|
62
|
+
def rpm_group
|
63
|
+
@rpm_group
|
64
|
+
end
|
65
|
+
|
66
|
+
# return rpm no arch value
|
67
|
+
def rpm_no_arch
|
68
|
+
@rpm_no_arch
|
69
|
+
end
|
70
|
+
|
71
|
+
# return os installation user
|
72
|
+
def os_user
|
73
|
+
@os_user
|
74
|
+
end
|
75
|
+
|
76
|
+
# return os installation group
|
77
|
+
def os_group
|
78
|
+
@os_group
|
79
|
+
end
|
80
|
+
|
81
|
+
# return os installation group
|
82
|
+
def os_install_dir
|
83
|
+
@os_install_dir
|
84
|
+
end
|
85
|
+
|
86
|
+
# return gem homepage
|
87
|
+
def homepage
|
88
|
+
@spec.homepage
|
89
|
+
end
|
90
|
+
|
91
|
+
# return summary
|
92
|
+
def summary
|
93
|
+
@spec.summary
|
94
|
+
end
|
95
|
+
|
96
|
+
# return rpm install bin
|
97
|
+
def rpm_install
|
98
|
+
@rpm_install
|
99
|
+
end
|
100
|
+
|
101
|
+
# return rpm post
|
102
|
+
def rpm_post
|
103
|
+
@rpm_post
|
104
|
+
end
|
105
|
+
|
106
|
+
##
|
107
|
+
# Converts gem into rpm using rpmbuild command
|
108
|
+
def create_rpm
|
109
|
+
# unpack gem software
|
110
|
+
unpack @rpm_unpack_dir
|
111
|
+
# generate install
|
112
|
+
generate_install
|
113
|
+
# generate post install
|
114
|
+
generate_post
|
115
|
+
# generate executable files
|
116
|
+
generate_bin
|
117
|
+
# create gemspec file
|
118
|
+
File.open(@gemspec_filename, 'w') { |f|
|
119
|
+
f.write(@spec.to_ruby)
|
120
|
+
}
|
121
|
+
# create rpm spec file
|
122
|
+
write_rpm_spec_from_template
|
123
|
+
# create rpm source file
|
124
|
+
create_rpm_source("#{@rpm_top_dir}/tmp")
|
125
|
+
# create rpm
|
126
|
+
rpmbuild
|
127
|
+
# clean temp directory
|
128
|
+
FileUtils.rm_rf "#{@rpm_tmp_dir}"
|
129
|
+
end
|
130
|
+
|
131
|
+
# return gem runtime dependencies
|
132
|
+
def requires
|
133
|
+
req_str = StringIO.new
|
134
|
+
# get ruby dependency
|
135
|
+
req_str << "ruby #{@spec.required_ruby_version || ">= 0" }"
|
136
|
+
# get rubygems dependency
|
137
|
+
req_str << ", rubygems #{@spec.required_rubygems_version}" unless @spec.required_rubygems_version.nil?
|
138
|
+
# get runtime dependencies
|
139
|
+
req_str << ", #{@spec.runtime_dependencies.join(', ').gsub(', runtime', '').gsub(')', '').gsub('(', '').gsub('~>', '>=')}" unless @spec.runtime_dependencies.empty?
|
140
|
+
# return string with dependencies
|
141
|
+
return req_str.string
|
142
|
+
end
|
143
|
+
|
144
|
+
# return gem description
|
145
|
+
def description
|
146
|
+
@spec.description
|
147
|
+
end
|
148
|
+
|
149
|
+
# return gem files
|
150
|
+
def files
|
151
|
+
@files
|
152
|
+
end
|
153
|
+
|
154
|
+
private
|
155
|
+
##
|
156
|
+
# Create install string.
|
157
|
+
def generate_install
|
158
|
+
files_str = StringIO.new
|
159
|
+
install_str = StringIO.new
|
160
|
+
install_str << "rm -rf %{buildroot}\n"
|
161
|
+
install_str << "mkdir -p %{buildroot}%{prefix}/bin\n"
|
162
|
+
install_str << "mkdir -p %{buildroot}%{prefix}/specifications\n"
|
163
|
+
install_str << "mkdir -p %{buildroot}%{prefix}/gems/%{name}-%{version}\n"
|
164
|
+
install_str << "install -p -m 644 %{name}-%{version}.gemspec %{buildroot}%{prefix}/specifications"
|
165
|
+
files_str << "%{prefix}/specifications/%{name}-%{version}.gemspec"
|
166
|
+
# get files list
|
167
|
+
@spec.files.each { |file|
|
168
|
+
if File.file? "#{@rpm_unpack_dir}/#{file}"
|
169
|
+
install_str << "\ninstall -p -D -m 644 %{name}-%{version}/#{file} %{buildroot}%{prefix}/gems/%{name}-%{version}/#{file}"
|
170
|
+
files_str << "\n%{prefix}/gems/%{name}-%{version}/#{file}"
|
171
|
+
elsif File.directory? "#{@rpm_unpack_dir}/#{file}"
|
172
|
+
install_str << "\nmkdir -p %{buildroot}%{prefix}/gems/%{name}-%{version}/#{file}"
|
173
|
+
end
|
174
|
+
}
|
175
|
+
# get executable file list
|
176
|
+
@spec.executables.each { |file|
|
177
|
+
install_str << "\ninstall -p -m 0755 bin/#{file} %{buildroot}%{prefix}/bin"
|
178
|
+
files_str << "\n%{prefix}/bin/#{file}"
|
179
|
+
}
|
180
|
+
@rpm_install = install_str.string
|
181
|
+
@files = files_str.string
|
182
|
+
end
|
183
|
+
|
184
|
+
##
|
185
|
+
# Builds extensions. Valid types of extensions are extconf.rb files,
|
186
|
+
# configure scripts and rakefiles or mkrf_conf files.
|
187
|
+
def generate_post
|
188
|
+
return if @spec.extensions.empty?
|
189
|
+
@rpm_post = "echo \"Building native extensions. This could take a while...\"\n"
|
190
|
+
# initialize make command string
|
191
|
+
build_cmd = StringIO.new
|
192
|
+
# start building make command
|
193
|
+
dest_path = File.join @os_install_dir, "gems", "#{name}-#{version}", @spec.require_paths.first
|
194
|
+
ran_rake = false # only run rake once
|
195
|
+
|
196
|
+
@spec.extensions.each do |extension|
|
197
|
+
break if ran_rake
|
198
|
+
|
199
|
+
builder = case extension
|
200
|
+
when /extconf/ then
|
201
|
+
RGem2Rpm::Ext::ExtConfBuilder
|
202
|
+
when /configure/ then
|
203
|
+
RGem2Rpm::Ext::ConfigureBuilder
|
204
|
+
when /rakefile/i, /mkrf_conf/i then
|
205
|
+
ran_rake = true
|
206
|
+
RGem2Rpm::Ext::RakeBuilder
|
207
|
+
else
|
208
|
+
nil
|
209
|
+
end
|
210
|
+
# get build
|
211
|
+
build_cmd << builder.build(extension, dest_path)
|
212
|
+
end
|
213
|
+
# set rpm no arch to false
|
214
|
+
@rpm_no_arch = false
|
215
|
+
# return set post install
|
216
|
+
@rpm_post = "#{@rpm_post}#{build_cmd.string}"
|
217
|
+
end
|
218
|
+
|
219
|
+
def generate_bin
|
220
|
+
return if @spec.executables.nil? or @spec.executables.empty?
|
221
|
+
|
222
|
+
# If the user has asked for the gem to be installed in a directory that is
|
223
|
+
# the system gem directory, then use the system bin directory, else create
|
224
|
+
# (or use) a new bin dir under the gem_home.
|
225
|
+
bindir = @bin_dir ? @bin_dir : Gem.bindir(@gem_home)
|
226
|
+
|
227
|
+
Dir.mkdir bindir unless File.exist? bindir
|
228
|
+
raise Gem::FilePermissionError.new(bindir) unless File.writable? bindir
|
229
|
+
|
230
|
+
@spec.executables.each do |filename|
|
231
|
+
filename.untaint
|
232
|
+
bin_path = File.expand_path "#{@spec.bindir}/#{filename}", @gem_dir
|
233
|
+
if File.exist?(bin_path)
|
234
|
+
mode = File.stat(bin_path).mode | 0111
|
235
|
+
File.chmod mode, bin_path
|
236
|
+
end
|
237
|
+
generate_bin_script filename, bindir
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
def generate_bin_script(filename, bindir)
|
242
|
+
@rpm_install = "#{@rpm_install}\nsed -i \"1i $(if (ruby -v 1>/dev/null 2>&1); then echo '\#\!/usr/bin/env ruby'; else echo '\#\!/usr/bin/env jruby'; fi;)\" %{buildroot}%{prefix}/bin/#{filename}"
|
243
|
+
bin_script_path = File.join bindir, formatted_program_filename(filename)
|
244
|
+
|
245
|
+
File.open bin_script_path, 'wb', 0755 do |file|
|
246
|
+
file.print app_script_text(filename)
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
##
|
251
|
+
# Return the text for an application file.
|
252
|
+
|
253
|
+
def app_script_text(bin_file_name)
|
254
|
+
<<-TEXT
|
255
|
+
#
|
256
|
+
# This file was generated by RubyGems.
|
257
|
+
#
|
258
|
+
# The application '#{@spec.name}' is installed as part of a gem, and
|
259
|
+
# this file is here to facilitate running it.
|
260
|
+
#
|
261
|
+
|
262
|
+
require 'rubygems'
|
263
|
+
|
264
|
+
version = "#{Gem::Requirement.default}"
|
265
|
+
|
266
|
+
if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
|
267
|
+
version = $1
|
268
|
+
ARGV.shift
|
269
|
+
end
|
270
|
+
|
271
|
+
gem '#{@spec.name}', version
|
272
|
+
load Gem.bin_path('#{@spec.name}', '#{bin_file_name}', version)
|
273
|
+
TEXT
|
274
|
+
end
|
275
|
+
|
276
|
+
def create_rpm_env
|
277
|
+
FileUtils.mkdir_p "#{@rpm_top_dir}/SPECS" unless File.exists?("#{@rpm_top_dir}/SPECS")
|
278
|
+
FileUtils.mkdir_p "#{@rpm_top_dir}/BUILD" unless File.exists?("#{@rpm_top_dir}/BUILD")
|
279
|
+
FileUtils.mkdir_p "#{@rpm_top_dir}/RPMS" unless File.exists?("#{@rpm_top_dir}/RPMS")
|
280
|
+
FileUtils.mkdir_p "#{@rpm_top_dir}/SRPMS" unless File.exists?("#{@rpm_top_dir}/SRPMS")
|
281
|
+
FileUtils.mkdir_p "#{@rpm_top_dir}/SOURCES" unless File.exists?("#{@rpm_top_dir}/SOURCES")
|
282
|
+
end
|
283
|
+
|
284
|
+
def write_rpm_spec_from_template
|
285
|
+
template = ERB.new(File.read(@spec_template))
|
286
|
+
# write rpm spec file file
|
287
|
+
rpmspec_filename = "#{@rpm_top_dir}/SPECS/#{@spec.name}-#{@spec.version}.spec"
|
288
|
+
File.open(rpmspec_filename, 'w') {|f|
|
289
|
+
f.write(template.result(binding))
|
290
|
+
}
|
291
|
+
end
|
292
|
+
|
293
|
+
def create_rpm_source(orig)
|
294
|
+
# create tar.gz source file
|
295
|
+
tgz = Zlib::GzipWriter.new(File.open("#{@rpm_top_dir}/SOURCES/#{@spec.name}-#{@spec.version}.tar.gz", 'wb'))
|
296
|
+
# Warning: tgz will be closed!
|
297
|
+
FileUtils.cd "#{orig}"
|
298
|
+
Minitar.pack("#{@spec.name}-#{@spec.version}", tgz)
|
299
|
+
FileUtils.cd "#{@rpm_top_dir}"
|
300
|
+
end
|
301
|
+
|
302
|
+
def rpmbuild
|
303
|
+
# define rpm build args
|
304
|
+
options = "-bb --rmspec --rmsource"
|
305
|
+
define = "--define \"_topdir #{@rpm_top_dir}\" --define \"_tmppath #{@rpm_top_dir}/tmp\""
|
306
|
+
specfile = "#{@rpm_top_dir}/SPECS/#{@spec.name}-#{@spec.version}.spec"
|
307
|
+
# create rpm
|
308
|
+
system "rpmbuild #{options} #{define} #{specfile}"
|
309
|
+
end
|
310
|
+
end
|
data/lib/rgem2rpm/ext.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
##
|
4
|
+
# Classes for building C extensions live here.
|
5
|
+
|
6
|
+
module RGem2Rpm::Ext; end
|
7
|
+
|
8
|
+
require 'rubygems/ext/builder'
|
9
|
+
require 'rubygems/ext/configure_builder'
|
10
|
+
require 'rubygems/ext/ext_conf_builder'
|
11
|
+
require 'rubygems/ext/rake_builder'
|
12
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rubygems/ext/builder'
|
2
|
+
|
3
|
+
class RGem2Rpm::Ext::Builder < Gem::Ext::Builder
|
4
|
+
|
5
|
+
def self.make_str(dest_path)
|
6
|
+
# create make command strings
|
7
|
+
make = StringIO.new
|
8
|
+
# change makefile variables
|
9
|
+
make << "sed -i 's/RUBYARCHDIR\s*=\s*\$[^$]*/RUBYARCHDIR = #{dest_path.gsub(/\//, '\/')}/g' Makefile\n"
|
10
|
+
make << "sed -i 's/RUBYLIBDIR\s*=\s*\$[^$]*/RUBYLIBDIR = #{dest_path.gsub(/\//, '\/')}/g' Makefile\n"
|
11
|
+
make << "make #{redirector}\n"
|
12
|
+
# create make command strings
|
13
|
+
make << "make install #{redirector}"
|
14
|
+
# return make string
|
15
|
+
return make.string
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.redirector
|
19
|
+
'2>&1'
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'rgem2rpm/ext/builder'
|
2
|
+
|
3
|
+
class RGem2Rpm::Ext::ConfigureBuilder < RGem2Rpm::Ext::Builder
|
4
|
+
|
5
|
+
def self.build(extension, dest_path)
|
6
|
+
# create make string
|
7
|
+
build = StringIO.new
|
8
|
+
unless File.exist?('Makefile') then
|
9
|
+
build << "sh ./configure --prefix=#{dest_path}"
|
10
|
+
build << " #{Gem::Command.build_args.join ' '}" unless Gem::Command.build_args.empty?
|
11
|
+
build << "\n"
|
12
|
+
end
|
13
|
+
# get make commands
|
14
|
+
build << make_str(dest_past)
|
15
|
+
# return make string
|
16
|
+
return build.string
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rgem2rpm/ext/builder'
|
2
|
+
|
3
|
+
class RGem2Rpm::Ext::ExtConfBuilder < RGem2Rpm::Ext::Builder
|
4
|
+
|
5
|
+
def self.build(extension, dest_path)
|
6
|
+
# create build string
|
7
|
+
build = StringIO.new
|
8
|
+
build << "cd %{prefix}/gems/%{name}-%{version}/#{File.dirname extension}\n"
|
9
|
+
build << "#{File.basename Gem.ruby} #{File.basename extension}"
|
10
|
+
build << " #{Gem::Command.build_args.join ' '}" unless Gem::Command.build_args.empty?
|
11
|
+
build << " #{redirector}\n"
|
12
|
+
# get make commands
|
13
|
+
build << make_str(dest_path)
|
14
|
+
return build.string
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'rgem2rpm/ext/builder'
|
2
|
+
|
3
|
+
class RGem2Rpm::Ext::RakeBuilder < RGem2Rpm::Ext::Builder
|
4
|
+
|
5
|
+
def self.build(extension, dest_path)
|
6
|
+
# create build string
|
7
|
+
build = StringIO.new
|
8
|
+
if File.basename(extension) =~ /mkrf_conf/i then
|
9
|
+
build << "#{File.basename Gem.ruby} #{extension}"
|
10
|
+
build << " #{Gem::Command.build_args.join " "}" unless Gem::Command.build_args.empty?
|
11
|
+
build << "\n"
|
12
|
+
end
|
13
|
+
|
14
|
+
# Deal with possible spaces in the path, e.g. C:/Program Files
|
15
|
+
dest_path = '"' + dest_path + '"' if dest_path.include?(' ')
|
16
|
+
|
17
|
+
rake = ENV['rake']
|
18
|
+
|
19
|
+
rake ||= begin
|
20
|
+
"\"#{File.basename Gem.ruby}\" -rubygems #{Gem.bin_path('rake')}"
|
21
|
+
rescue Gem::Exception
|
22
|
+
end
|
23
|
+
|
24
|
+
rake ||= Gem.default_exec_format % 'rake'
|
25
|
+
|
26
|
+
build << "#{rake} RUBYARCHDIR=#{dest_path} RUBYLIBDIR=#{dest_path}" # ENV is frozen
|
27
|
+
# return build string
|
28
|
+
return build.string
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
data/rgem2rpm.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = %q{rgem2rpm}
|
3
|
+
s.version = "1.0.0"
|
4
|
+
s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
|
5
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.4.2") if s.respond_to?(:required_rubygems_version=)
|
6
|
+
s.date = %q{2011-04-26}
|
7
|
+
s.authors = ["Joao Peixoto"]
|
8
|
+
s.email = %q{peixoto.joao@gmail.com}
|
9
|
+
s.summary = %q{Convert ruby gems into rpm}
|
10
|
+
s.homepage = %q{https://github.com/jppeixoto/rgem2rpm}
|
11
|
+
s.description = %q{Application that enables conversion of rubygems to rpms.}
|
12
|
+
s.platform = Gem::Platform::RUBY
|
13
|
+
s.bindir = 'bin'
|
14
|
+
s.executables = 'rgem2rpm'
|
15
|
+
s.files = ["Rakefile",
|
16
|
+
"bin/rgem2rpm",
|
17
|
+
"rgem2rpm.gemspec",
|
18
|
+
"lib/rgem2rpm.rb",
|
19
|
+
"lib/rgem2rpm/argumentparse.rb",
|
20
|
+
"lib/rgem2rpm/converter.rb",
|
21
|
+
"lib/rgem2rpm/ext.rb",
|
22
|
+
"lib/rgem2rpm/version.rb",
|
23
|
+
"lib/rgem2rpm/ext/builder.rb",
|
24
|
+
"lib/rgem2rpm/ext/configure_builder.rb",
|
25
|
+
"lib/rgem2rpm/ext/ext_conf_builder.rb",
|
26
|
+
"lib/rgem2rpm/ext/rake_builder.rb",
|
27
|
+
"conf/template.spec"]
|
28
|
+
s.has_rdoc = false
|
29
|
+
s.add_dependency 'minitar', '>= 0.5.3'
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rgem2rpm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 1.0.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Joao Peixoto
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-04-26 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: minitar
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.5.3
|
24
|
+
type: :runtime
|
25
|
+
version_requirements: *id001
|
26
|
+
description: Application that enables conversion of rubygems to rpms.
|
27
|
+
email: peixoto.joao@gmail.com
|
28
|
+
executables:
|
29
|
+
- rgem2rpm
|
30
|
+
extensions: []
|
31
|
+
|
32
|
+
extra_rdoc_files: []
|
33
|
+
|
34
|
+
files:
|
35
|
+
- Rakefile
|
36
|
+
- bin/rgem2rpm
|
37
|
+
- rgem2rpm.gemspec
|
38
|
+
- lib/rgem2rpm.rb
|
39
|
+
- lib/rgem2rpm/argumentparse.rb
|
40
|
+
- lib/rgem2rpm/converter.rb
|
41
|
+
- lib/rgem2rpm/ext.rb
|
42
|
+
- lib/rgem2rpm/version.rb
|
43
|
+
- lib/rgem2rpm/ext/builder.rb
|
44
|
+
- lib/rgem2rpm/ext/configure_builder.rb
|
45
|
+
- lib/rgem2rpm/ext/ext_conf_builder.rb
|
46
|
+
- lib/rgem2rpm/ext/rake_builder.rb
|
47
|
+
- conf/template.spec
|
48
|
+
homepage: https://github.com/jppeixoto/rgem2rpm
|
49
|
+
licenses: []
|
50
|
+
|
51
|
+
post_install_message:
|
52
|
+
rdoc_options: []
|
53
|
+
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.8.6
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 1.4.2
|
68
|
+
requirements: []
|
69
|
+
|
70
|
+
rubyforge_project:
|
71
|
+
rubygems_version: 1.7.2
|
72
|
+
signing_key:
|
73
|
+
specification_version: 3
|
74
|
+
summary: Convert ruby gems into rpm
|
75
|
+
test_files: []
|
76
|
+
|