rgem2rpm 1.0.1 → 1.1.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.
@@ -3,7 +3,6 @@ require 'fileutils'
3
3
  require 'zlib'
4
4
  require 'archive/tar/minitar'
5
5
  require 'erb'
6
- require 'rgem2rpm/ext'
7
6
  include Archive::Tar
8
7
 
9
8
  class RGem2Rpm::Converter < Gem::Installer
@@ -108,10 +107,19 @@ class RGem2Rpm::Converter < Gem::Installer
108
107
  def create_rpm
109
108
  # unpack gem software
110
109
  unpack @rpm_unpack_dir
110
+ # check if gem has extensions
111
+ unless @spec.extensions.empty?
112
+ # set rpm arch
113
+ @rpm_no_arch = false
114
+ # build extensions
115
+ build_extensions
116
+ # clean build
117
+ build_clean
118
+ end
119
+ # create file list with build files
120
+ generate_file_list
111
121
  # generate install
112
122
  generate_install
113
- # generate post install
114
- #generate_post
115
123
  # generate executable files
116
124
  generate_bin
117
125
  # create gemspec file
@@ -152,6 +160,32 @@ class RGem2Rpm::Converter < Gem::Installer
152
160
  end
153
161
 
154
162
  private
163
+ ##
164
+ # Get list of files generated during build operation
165
+ def generate_file_list
166
+ # check if gem has native extensions
167
+ if @spec.extensions.empty?
168
+ # use gemspec file list
169
+ @file_list = @spec.files
170
+ else
171
+ # initialize build files array
172
+ build_files = Array.new
173
+ # get required path
174
+ first_element = @spec.require_paths.first
175
+ require_path = if first_element.kind_of? Array then first_element.join("/") else first_element end
176
+ # start building make command
177
+ Dir.chdir("#{@rpm_tmp_dir}/#{@spec.full_name}/#{require_path}") do |path|
178
+ Dir.glob("**/*") do |file|
179
+ build_files << "#{require_path}/#{file}" unless File.directory?("#{path}/#{file}")
180
+ end
181
+ end
182
+ # include build files in the list of files
183
+ @file_list = @spec.files + build_files
184
+ # delete duplicate values
185
+ @file_list.uniq!
186
+ end
187
+ end
188
+
155
189
  ##
156
190
  # Create install string.
157
191
  def generate_install
@@ -164,7 +198,7 @@ class RGem2Rpm::Converter < Gem::Installer
164
198
  install_str << "install -p -m 644 %{name}-%{version}.gemspec %{buildroot}%{prefix}/specifications"
165
199
  files_str << "%{prefix}/specifications/%{name}-%{version}.gemspec"
166
200
  # get files list
167
- @spec.files.each { |file|
201
+ @file_list.each { |file|
168
202
  if File.file? "#{@rpm_unpack_dir}/#{file}"
169
203
  install_str << "\ninstall -p -D -m 644 %{name}-%{version}/\"#{file}\" %{buildroot}%{prefix}/gems/%{name}-%{version}/\"#{file}\""
170
204
  files_str << "\n\"%{prefix}/gems/%{name}-%{version}/#{file}\""
@@ -181,41 +215,6 @@ class RGem2Rpm::Converter < Gem::Installer
181
215
  @files = files_str.string
182
216
  end
183
217
 
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
218
  def generate_bin
220
219
  return if @spec.executables.nil? or @spec.executables.empty?
221
220
 
@@ -273,6 +272,18 @@ load Gem.bin_path('#{@spec.name}', '#{bin_file_name}', version)
273
272
  TEXT
274
273
  end
275
274
 
275
+ def build_clean
276
+ # clean each build
277
+ @spec.extensions.each do |extension|
278
+ Dir.chdir(File.dirname("#{@rpm_tmp_dir}/#{@spec.full_name}/#{extension}")) do |path|
279
+ # delete intermediate build files
280
+ system "make clean"
281
+ # delete makefile
282
+ FileUtils.rm_rf("#{path}/Makefile")
283
+ end
284
+ end
285
+ end
286
+
276
287
  def create_rpm_env
277
288
  FileUtils.mkdir_p "#{@rpm_top_dir}/SPECS" unless File.exists?("#{@rpm_top_dir}/SPECS")
278
289
  FileUtils.mkdir_p "#{@rpm_top_dir}/BUILD" unless File.exists?("#{@rpm_top_dir}/BUILD")
@@ -1,3 +1,3 @@
1
1
  module RGem2Rpm
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
  end
data/lib/rgem2rpm.rb CHANGED
@@ -4,8 +4,3 @@ module RGem2Rpm; end
4
4
  require 'rgem2rpm/argumentparse'
5
5
  require 'rgem2rpm/converter'
6
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'
data/rgem2rpm.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{rgem2rpm}
3
- s.version = "1.0.1"
3
+ s.version = "1.1.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
6
  s.date = %q{2011-04-26}
@@ -18,12 +18,7 @@ Gem::Specification.new do |s|
18
18
  "lib/rgem2rpm.rb",
19
19
  "lib/rgem2rpm/argumentparse.rb",
20
20
  "lib/rgem2rpm/converter.rb",
21
- "lib/rgem2rpm/ext.rb",
22
21
  "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
22
  "conf/template.spec"]
28
23
  s.add_dependency 'minitar', '>= 0.5.3'
29
24
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: rgem2rpm
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.0.1
5
+ version: 1.1.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Joao Peixoto
@@ -38,12 +38,7 @@ files:
38
38
  - lib/rgem2rpm.rb
39
39
  - lib/rgem2rpm/argumentparse.rb
40
40
  - lib/rgem2rpm/converter.rb
41
- - lib/rgem2rpm/ext.rb
42
41
  - 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
42
  - conf/template.spec
48
43
  homepage: https://github.com/jppeixoto/rgem2rpm
49
44
  licenses: []
@@ -68,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
63
  requirements: []
69
64
 
70
65
  rubyforge_project:
71
- rubygems_version: 1.7.2
66
+ rubygems_version: 1.8.1
72
67
  signing_key:
73
68
  specification_version: 3
74
69
  summary: Convert ruby gems into rpm
@@ -1,23 +0,0 @@
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
-
@@ -1,20 +0,0 @@
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
-
@@ -1,17 +0,0 @@
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
@@ -1,32 +0,0 @@
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/lib/rgem2rpm/ext.rb DELETED
@@ -1,12 +0,0 @@
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
-