rgem2rpm 1.2.0 → 1.3.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/conf/template.spec +41 -41
- data/lib/rgem2rpm/converter.rb +127 -121
- data/rgem2rpm.gemspec +2 -2
- metadata +3 -3
data/conf/template.spec
CHANGED
@@ -1,41 +1,41 @@
|
|
1
|
-
%define __os_install_post \
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
%{nil}
|
7
|
-
|
8
|
-
%define distnum %{expand:%%(/usr/lib/rpm/redhat/dist.sh --distnum)}
|
9
|
-
%define disttype %{expand:%%(/usr/lib/rpm/redhat/dist.sh --disttype)}
|
10
|
-
%define name <%=name%>
|
11
|
-
%define version <%=version%>
|
12
|
-
%define release <%=rpm_release%>.%{disttype}%{distnum}
|
13
|
-
|
14
|
-
Name: %{name}
|
15
|
-
Version: %{version}
|
16
|
-
Release: %{release}
|
17
|
-
License: See <%=homepage%>
|
18
|
-
Summary: <%=summary%>
|
19
|
-
Group: <%=rpm_group%>
|
20
|
-
Source: %{name}-%{version}.tar.gz
|
21
|
-
Prefix: <%=os_install_dir%>
|
22
|
-
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
|
23
|
-
<%="BuildArch: noarch" if rpm_no_arch%>
|
24
|
-
<%="Requires: #{requires}" unless requires.nil?%>
|
25
|
-
%description
|
26
|
-
<%=description%>
|
27
|
-
|
28
|
-
%prep
|
29
|
-
%setup -q
|
30
|
-
|
31
|
-
%install
|
32
|
-
<%=rpm_install%>
|
33
|
-
|
34
|
-
<%="%post\n#{rpm_post}" unless rpm_post.nil?%>
|
35
|
-
|
36
|
-
%postun
|
37
|
-
rm -rf %{prefix}/gems/%{name}-%{version}
|
38
|
-
|
39
|
-
%files
|
40
|
-
%defattr(-,<%=os_user%>,<%=os_group%>)
|
41
|
-
<%=files%>
|
1
|
+
%define __os_install_post \
|
2
|
+
/usr/lib/rpm/brp-compress \
|
3
|
+
%{!?__debug_package:/usr/lib/rpm/brp-strip %{__strip}} \
|
4
|
+
/usr/lib/rpm/brp-strip-static-archive %{__strip} \
|
5
|
+
/usr/lib/rpm/brp-strip-comment-note %{__strip} %{__objdump} \
|
6
|
+
%{nil}
|
7
|
+
|
8
|
+
%define distnum %{expand:%%(/usr/lib/rpm/redhat/dist.sh --distnum)}
|
9
|
+
%define disttype %{expand:%%(/usr/lib/rpm/redhat/dist.sh --disttype)}
|
10
|
+
%define name <%=name%>
|
11
|
+
%define version <%=version%>
|
12
|
+
%define release <%=rpm_release%>.%{disttype}%{distnum}
|
13
|
+
|
14
|
+
Name: %{name}
|
15
|
+
Version: %{version}
|
16
|
+
Release: %{release}
|
17
|
+
License: See <%=homepage%>
|
18
|
+
Summary: <%=summary%>
|
19
|
+
Group: <%=rpm_group%>
|
20
|
+
Source: %{name}-%{version}.tar.gz
|
21
|
+
Prefix: <%=os_install_dir%>
|
22
|
+
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
|
23
|
+
<%="BuildArch: noarch" if rpm_no_arch%>
|
24
|
+
<%="Requires: #{requires}" unless requires.nil?%>
|
25
|
+
%description
|
26
|
+
<%=description%>
|
27
|
+
|
28
|
+
%prep
|
29
|
+
%setup -q
|
30
|
+
|
31
|
+
%install
|
32
|
+
<%=rpm_install%>
|
33
|
+
|
34
|
+
<%="%post\n#{rpm_post}" unless rpm_post.nil?%>
|
35
|
+
|
36
|
+
%postun
|
37
|
+
rm -rf %{prefix}/gems/%{name}-%{version}
|
38
|
+
|
39
|
+
%files
|
40
|
+
%defattr(-,<%=os_user%>,<%=os_group%>)
|
41
|
+
<%=files%>
|
data/lib/rgem2rpm/converter.rb
CHANGED
@@ -33,11 +33,11 @@ class RGem2Rpm::Converter < Gem::Installer
|
|
33
33
|
# load spec
|
34
34
|
self.spec
|
35
35
|
# initialize temp dir
|
36
|
-
@rpm_tmp_dir = "#{@rpm_top_dir}/tmp/#{
|
36
|
+
@rpm_tmp_dir = "#{@rpm_top_dir}/tmp/#{full_name}"
|
37
37
|
# initialize unpack dir
|
38
|
-
@rpm_unpack_dir = "#{@rpm_tmp_dir}/#{
|
38
|
+
@rpm_unpack_dir = "#{@rpm_tmp_dir}/#{full_name}"
|
39
39
|
# initialize gemspec filename
|
40
|
-
@gemspec_filename = "#{@rpm_tmp_dir}/#{
|
40
|
+
@gemspec_filename = "#{@rpm_tmp_dir}/#{full_name}.gemspec"
|
41
41
|
# initialize bin dir
|
42
42
|
@bin_dir = "#{@rpm_tmp_dir}/bin"
|
43
43
|
# create rpm build environment
|
@@ -46,13 +46,19 @@ class RGem2Rpm::Converter < Gem::Installer
|
|
46
46
|
|
47
47
|
# return gem name
|
48
48
|
def name
|
49
|
-
@spec.name
|
49
|
+
name = "rubygems-#{@spec.name}"
|
50
|
+
name = "#{name}-#{@spec.platform}" unless @spec.platform.nil?
|
51
|
+
name
|
50
52
|
end
|
51
53
|
|
52
54
|
# return gem version
|
53
55
|
def version
|
54
56
|
@spec.version
|
55
57
|
end
|
58
|
+
|
59
|
+
def full_name
|
60
|
+
"#{name}-#{version}"
|
61
|
+
end
|
56
62
|
|
57
63
|
# return rpm release
|
58
64
|
def rpm_release
|
@@ -162,97 +168,97 @@ class RGem2Rpm::Converter < Gem::Installer
|
|
162
168
|
end
|
163
169
|
|
164
170
|
private
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
171
|
+
##
|
172
|
+
# Get list of files generated during build operation
|
173
|
+
def generate_file_list
|
174
|
+
# check if gem has native extensions
|
175
|
+
if @spec.extensions.empty?
|
176
|
+
# use gemspec file list
|
177
|
+
@file_list = @spec.files
|
178
|
+
else
|
179
|
+
# initialize build files array
|
180
|
+
build_files = Array.new
|
181
|
+
# get required path
|
182
|
+
first_element = @spec.require_paths.first
|
183
|
+
require_path = if first_element.kind_of? Array then first_element.join("/") else first_element end
|
184
|
+
# start building make command
|
185
|
+
Dir.chdir("#{@rpm_tmp_dir}/#{full_name}/#{require_path}") do |path|
|
186
|
+
Dir.glob("**/*") do |file|
|
187
|
+
build_files << "#{require_path}/#{file}" unless File.directory?("#{path}/#{file}")
|
188
|
+
end
|
182
189
|
end
|
190
|
+
# include build files in the list of files
|
191
|
+
@file_list = @spec.files + build_files
|
192
|
+
# delete duplicate values
|
193
|
+
@file_list.uniq!
|
183
194
|
end
|
184
|
-
# include build files in the list of files
|
185
|
-
@file_list = @spec.files + build_files
|
186
|
-
# delete duplicate values
|
187
|
-
@file_list.uniq!
|
188
195
|
end
|
189
|
-
end
|
190
196
|
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
197
|
+
##
|
198
|
+
# Create install string.
|
199
|
+
def generate_install
|
200
|
+
files_str = StringIO.new
|
201
|
+
install_str = StringIO.new
|
202
|
+
install_str << "rm -rf %{buildroot}\n"
|
203
|
+
install_str << "mkdir -p %{buildroot}%{prefix}/bin\n"
|
204
|
+
install_str << "mkdir -p %{buildroot}%{prefix}/specifications\n"
|
205
|
+
install_str << "mkdir -p %{buildroot}%{prefix}/gems/%{name}-%{version}\n"
|
206
|
+
install_str << "install -p -m 644 %{name}-%{version}.gemspec %{buildroot}%{prefix}/specifications"
|
207
|
+
files_str << "%{prefix}/specifications/%{name}-%{version}.gemspec"
|
208
|
+
# get files list
|
209
|
+
@file_list.each { |file|
|
210
|
+
if File.file? "#{@rpm_unpack_dir}/#{file}"
|
211
|
+
install_str << "\ninstall -p -D -m 644 %{name}-%{version}/\"#{file}\" %{buildroot}%{prefix}/gems/%{name}-%{version}/\"#{file}\""
|
212
|
+
files_str << "\n\"%{prefix}/gems/%{name}-%{version}/#{file}\""
|
213
|
+
elsif File.directory? "#{@rpm_unpack_dir}/#{file}"
|
214
|
+
install_str << "\nmkdir -p %{buildroot}%{prefix}/gems/%{name}-%{version}/\"#{file}\""
|
215
|
+
end
|
216
|
+
}
|
217
|
+
# get executable file list
|
218
|
+
@spec.executables.each { |file|
|
219
|
+
install_str << "\ninstall -p -m 0755 bin/#{file} %{buildroot}%{prefix}/bin"
|
220
|
+
files_str << "\n%{prefix}/bin/#{file}"
|
221
|
+
}
|
222
|
+
@rpm_install = install_str.string
|
223
|
+
@files = files_str.string
|
224
|
+
end
|
219
225
|
|
220
|
-
|
221
|
-
|
226
|
+
def generate_bin
|
227
|
+
return if @spec.executables.nil? or @spec.executables.empty?
|
222
228
|
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
229
|
+
# If the user has asked for the gem to be installed in a directory that is
|
230
|
+
# the system gem directory, then use the system bin directory, else create
|
231
|
+
# (or use) a new bin dir under the gem_home.
|
232
|
+
bindir = @bin_dir ? @bin_dir : Gem.bindir(@gem_home)
|
227
233
|
|
228
|
-
|
229
|
-
|
234
|
+
Dir.mkdir bindir unless File.exist? bindir
|
235
|
+
raise Gem::FilePermissionError.new(bindir) unless File.writable? bindir
|
230
236
|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
+
@spec.executables.each do |filename|
|
238
|
+
filename.untaint
|
239
|
+
bin_path = File.expand_path "#{@spec.bindir}/#{filename}", @gem_dir
|
240
|
+
if File.exist?(bin_path)
|
241
|
+
mode = File.stat(bin_path).mode | 0111
|
242
|
+
File.chmod mode, bin_path
|
243
|
+
end
|
244
|
+
generate_bin_script filename, bindir
|
237
245
|
end
|
238
|
-
generate_bin_script filename, bindir
|
239
246
|
end
|
240
|
-
end
|
241
247
|
|
242
|
-
|
243
|
-
|
244
|
-
|
248
|
+
def generate_bin_script(filename, bindir)
|
249
|
+
@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}"
|
250
|
+
bin_script_path = File.join bindir, formatted_program_filename(filename)
|
245
251
|
|
246
|
-
|
247
|
-
|
252
|
+
File.open bin_script_path, 'wb', 0755 do |file|
|
253
|
+
file.print app_script_text(filename)
|
254
|
+
end
|
248
255
|
end
|
249
|
-
end
|
250
256
|
|
251
|
-
|
252
|
-
|
257
|
+
##
|
258
|
+
# Return the text for an application file.
|
253
259
|
|
254
|
-
|
255
|
-
|
260
|
+
def app_script_text(bin_file_name)
|
261
|
+
<<-TEXT
|
256
262
|
#
|
257
263
|
# This file was generated by RubyGems.
|
258
264
|
#
|
@@ -272,52 +278,52 @@ end
|
|
272
278
|
gem '#{@spec.name}', version
|
273
279
|
load Gem.bin_path('#{@spec.name}', '#{bin_file_name}', version)
|
274
280
|
TEXT
|
275
|
-
|
281
|
+
end
|
276
282
|
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
283
|
+
def build_clean
|
284
|
+
# clean each build
|
285
|
+
@spec.extensions.each do |extension|
|
286
|
+
Dir.chdir(File.dirname("#{@rpm_tmp_dir}/#{full_name}/#{extension}")) do |path|
|
287
|
+
# delete intermediate build files
|
288
|
+
system "make clean"
|
289
|
+
# delete makefile
|
290
|
+
FileUtils.rm_rf("#{path}/Makefile")
|
291
|
+
end
|
285
292
|
end
|
286
293
|
end
|
287
|
-
end
|
288
294
|
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
295
|
+
def create_rpm_env
|
296
|
+
FileUtils.mkdir_p "#{@rpm_top_dir}/SPECS" unless File.exists?("#{@rpm_top_dir}/SPECS")
|
297
|
+
FileUtils.mkdir_p "#{@rpm_top_dir}/BUILD" unless File.exists?("#{@rpm_top_dir}/BUILD")
|
298
|
+
FileUtils.mkdir_p "#{@rpm_top_dir}/RPMS" unless File.exists?("#{@rpm_top_dir}/RPMS")
|
299
|
+
FileUtils.mkdir_p "#{@rpm_top_dir}/SRPMS" unless File.exists?("#{@rpm_top_dir}/SRPMS")
|
300
|
+
FileUtils.mkdir_p "#{@rpm_top_dir}/SOURCES" unless File.exists?("#{@rpm_top_dir}/SOURCES")
|
301
|
+
end
|
296
302
|
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
303
|
+
def write_rpm_spec_from_template
|
304
|
+
template = ERB.new(File.read(@spec_template))
|
305
|
+
# write rpm spec file file
|
306
|
+
rpmspec_filename = "#{@rpm_top_dir}/SPECS/#{full_name}.spec"
|
307
|
+
File.open(rpmspec_filename, 'w') {|f|
|
308
|
+
f.write(template.result(binding))
|
309
|
+
}
|
310
|
+
end
|
305
311
|
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
312
|
+
def create_rpm_source(orig)
|
313
|
+
# create tar.gz source file
|
314
|
+
tgz = Zlib::GzipWriter.new(File.open("#{@rpm_top_dir}/SOURCES/#{full_name}.tar.gz", 'wb'))
|
315
|
+
# Warning: tgz will be closed!
|
316
|
+
FileUtils.cd "#{orig}"
|
317
|
+
Minitar.pack("#{full_name}", tgz)
|
318
|
+
FileUtils.cd "#{@rpm_top_dir}"
|
319
|
+
end
|
314
320
|
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
321
|
+
def rpmbuild
|
322
|
+
# define rpm build args
|
323
|
+
options = "-bb --rmspec --rmsource"
|
324
|
+
define = "--define \"_topdir #{@rpm_top_dir}\" --define \"_tmppath #{@rpm_top_dir}/tmp\""
|
325
|
+
specfile = "#{@rpm_top_dir}/SPECS/#{full_name}.spec"
|
326
|
+
# create rpm
|
327
|
+
system "rpmbuild #{options} #{define} #{specfile}"
|
328
|
+
end
|
323
329
|
end
|
data/rgem2rpm.gemspec
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{rgem2rpm}
|
3
|
-
s.version = "1.
|
3
|
+
s.version = "1.3.0"
|
4
4
|
s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
|
5
5
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.4.2") if s.respond_to?(:required_rubygems_version=)
|
6
|
-
s.date = %q{
|
6
|
+
s.date = %q{2012-01-19}
|
7
7
|
s.authors = ["Joao Peixoto"]
|
8
8
|
s.email = %q{peixoto.joao@gmail.com}
|
9
9
|
s.summary = %q{Convert ruby gems into rpm}
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: rgem2rpm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.
|
5
|
+
version: 1.3.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Joao Peixoto
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date:
|
13
|
+
date: 2012-01-19 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: minitar
|
@@ -63,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
63
|
requirements: []
|
64
64
|
|
65
65
|
rubyforge_project:
|
66
|
-
rubygems_version: 1.8.
|
66
|
+
rubygems_version: 1.8.15
|
67
67
|
signing_key:
|
68
68
|
specification_version: 3
|
69
69
|
summary: Convert ruby gems into rpm
|