rgem2rpm 1.4.12 → 1.4.14

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 CHANGED
@@ -1,4 +1,4 @@
1
- require 'rake'
2
- require 'rake/rdoctask'
3
-
4
- FileList['lib/*.rb'].each { |file| load(file) }
1
+ require 'rake'
2
+ require 'rake/rdoctask'
3
+
4
+ FileList['lib/*.rb'].each { |file| load(file) }
data/bin/rgem2rpm CHANGED
@@ -1,21 +1,21 @@
1
- #!/usr/bin/env ruby
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 = RGem2Rpm::ArgumentParse.parse(ARGV)
12
- # check arguments
13
- raise "Missing argument: gemfilename" unless ARGV.size == 1
14
- # get filename
15
- filename = ARGV[0]
16
- # convert gem to rpm
17
- RGem2Rpm::Converter.process(options, filename)
18
- rescue => e
19
- puts e.message
20
- exit
21
- end
1
+ #!/usr/bin/env ruby
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 = RGem2Rpm::ArgumentParse.parse(ARGV)
12
+ # check arguments
13
+ raise "Missing argument: gemfilename" unless ARGV.size == 1
14
+ # get filename
15
+ filename = ARGV[0]
16
+ # convert gem to rpm
17
+ RGem2Rpm::Converter.process(options, filename)
18
+ rescue => e
19
+ puts e.message
20
+ exit
21
+ end
@@ -1,81 +1,81 @@
1
- # -*- encoding : utf-8 -*-
2
- require 'optparse'
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 = {}
12
-
13
- opts = OptionParser.new do |opt|
14
- opt.banner = "Usage: rgem2rpm [options] [gemfilename]"
15
- opt.separator "options:"
16
-
17
- # Template argument
18
- opt.on("--template TEMPLATE", "RPM spec template.") do |template|
19
- options[:template] = template
20
- end
21
-
22
- # Release name
23
- opt.on("--release RELEASE", "RPM spec release.") do |release|
24
- options[:release] = release
25
- end
26
-
27
- # rpm group
28
- opt.on("--group GROUP", "RPM spec group.") do |group|
29
- options[:group] = group
30
- end
31
-
32
- # operating system install user
33
- opt.on("--osuser OSUSER", "OS install user.") do |osuser|
34
- options[:osuser] = osuser
35
- end
36
-
37
- # operating system install group
38
- opt.on("--osgroup OSGROUP", "OS install group.") do |osgroup|
39
- options[:osgroup] = osgroup
40
- end
41
-
42
- # operating system install dir
43
- opt.on("--installdir INSTALLDIR", "OS install directory.") do |installdir|
44
- options[:installdir] = installdir
45
- end
46
-
47
- # jruby gem
48
- opt.on("--jruby", "Build RPM to jruby platform (only when gem has executables).") do
49
- options[:platform] = 'jruby'
50
- end
51
- #custom rpm name
52
- opt.on("--rpmname RPMNAME", "Custom package name (in case you don't want it to be rubygem-gemname") do |rpmname|
53
- options[:rpmname] = rpmname
54
- end
55
-
56
-
57
- # No argument, shows at tail. This will print an options summary.
58
- # Try it and see!
59
- opt.on_tail("--help", "Show this message.") do
60
- puts opt
61
- exit
62
- end
63
-
64
- # Another typical switch to print the version.
65
- opt.on_tail("--version", "Show version.") do
66
- puts RGem2Rpm::VERSION
67
- exit
68
- end
69
- end
70
-
71
- begin
72
- # parse options
73
- opts.parse!(args)
74
- # return options
75
- options
76
- rescue => e
77
- puts e.message
78
- exit
79
- end
80
- end
81
- end
1
+ # -*- encoding : utf-8 -*-
2
+ require 'optparse'
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 = {}
12
+
13
+ opts = OptionParser.new do |opt|
14
+ opt.banner = "Usage: rgem2rpm [options] [gemfilename]"
15
+ opt.separator "options:"
16
+
17
+ # Template argument
18
+ opt.on("--template TEMPLATE", "RPM spec template.") do |template|
19
+ options[:template] = template
20
+ end
21
+
22
+ # Release name
23
+ opt.on("--release RELEASE", "RPM spec release.") do |release|
24
+ options[:release] = release
25
+ end
26
+
27
+ # rpm group
28
+ opt.on("--group GROUP", "RPM spec group.") do |group|
29
+ options[:group] = group
30
+ end
31
+
32
+ # operating system install user
33
+ opt.on("--osuser OSUSER", "OS install user.") do |osuser|
34
+ options[:osuser] = osuser
35
+ end
36
+
37
+ # operating system install group
38
+ opt.on("--osgroup OSGROUP", "OS install group.") do |osgroup|
39
+ options[:osgroup] = osgroup
40
+ end
41
+
42
+ # operating system install dir
43
+ opt.on("--installdir INSTALLDIR", "OS install directory.") do |installdir|
44
+ options[:installdir] = installdir
45
+ end
46
+
47
+ # jruby gem
48
+ opt.on("--jruby", "Build RPM to jruby platform (only when gem has executables).") do
49
+ options[:platform] = 'jruby'
50
+ end
51
+ #custom rpm name
52
+ opt.on("--rpmname RPMNAME", "Custom package name (in case you don't want it to be rubygem-gemname") do |rpmname|
53
+ options[:rpmname] = rpmname
54
+ end
55
+
56
+
57
+ # No argument, shows at tail. This will print an options summary.
58
+ # Try it and see!
59
+ opt.on_tail("--help", "Show this message.") do
60
+ puts opt
61
+ exit
62
+ end
63
+
64
+ # Another typical switch to print the version.
65
+ opt.on_tail("--version", "Show version.") do
66
+ puts RGem2Rpm::VERSION
67
+ exit
68
+ end
69
+ end
70
+
71
+ begin
72
+ # parse options
73
+ opts.parse!(args)
74
+ # return options
75
+ options
76
+ rescue => e
77
+ puts e.message
78
+ exit
79
+ end
80
+ end
81
+ end
@@ -1,27 +1,27 @@
1
- # -*- encoding : utf-8 -*-
2
- class RGem2Rpm::Converter
3
- class << self
4
- def process(options, filename)
5
- objects = []
6
- # execute gemfile installation
7
- gem = RGem2Rpm::Gem.new :filename => filename, :platform => options[:platform], :rpmname => options[:rpmname]
8
- objects << gem
9
- gem.install
10
- # build args to rpm
11
- args = gem.spec
12
- [:template, :release, :group, :osuser, :osgroup, :installdir, :rpmname].each {|key|
13
- args[key] = options[key] if options[key]
14
- }
15
- # build rpm
16
- rpm = RGem2Rpm::Rpm.new args
17
- objects << rpm
18
- rpm.create
19
- rescue => e
20
- # clean temporary files
21
- objects.each { |obj| obj.clean }
22
- # write error message
23
- puts e.message
24
- exit
25
- end
26
- end
27
- end
1
+ # -*- encoding : utf-8 -*-
2
+ class RGem2Rpm::Converter
3
+ class << self
4
+ def process(options, filename)
5
+ objects = []
6
+ # execute gemfile installation
7
+ gem = RGem2Rpm::Gem.new :filename => filename, :platform => options[:platform], :rpmname => options[:rpmname]
8
+ objects << gem
9
+ gem.install
10
+ # build args to rpm
11
+ args = gem.spec
12
+ [:template, :release, :group, :osuser, :osgroup, :installdir, :rpmname].each {|key|
13
+ args[key] = options[key] if options[key]
14
+ }
15
+ # build rpm
16
+ rpm = RGem2Rpm::Rpm.new args
17
+ objects << rpm
18
+ rpm.create
19
+ rescue => e
20
+ # clean temporary files
21
+ objects.each { |obj| obj.clean }
22
+ # write error message
23
+ puts e.message
24
+ exit
25
+ end
26
+ end
27
+ end
data/lib/rgem2rpm/gem.rb CHANGED
@@ -1,154 +1,163 @@
1
- # -*- encoding : utf-8 -*-
2
- require 'pathname'
3
- require 'rubygems'
4
- require 'rubygems/installer'
5
- require 'rubygems/remote_fetcher'
6
-
7
- class RGem2Rpm::Gem
8
- # define accessors
9
- attr_accessor :spec
10
-
11
- def initialize(args)
12
- # initialize paramters
13
- @filename = args[:filename]
14
- @platform = args[:platform] || 'ruby'
15
- @installname = args[:rpmname]
16
- end
17
-
18
- # install gem to pwd
19
- def install
20
- # get spec information
21
- @spec = compute_spec
22
- # define name and platform
23
- if @installname
24
- @spec[:installname] = @installname
25
- else
26
- @spec[:installname] = name_and_platform(@spec[:name])
27
- end
28
- # set install dir
29
- @installdir = "#{@spec[:installname]}-#{@spec[:version]}"
30
- # install gem
31
- Gem::Installer.new(@filename, :env_shebang => true, :ignore_dependencies => true, :install_dir => @installdir, :bin_dir => "#{@installdir}/bin", :wrappers => true).install
32
- # install build files
33
- install_build_files
34
- # get file list
35
- files
36
- # build tar.gz
37
- build_source
38
- end
39
-
40
- # clean temporary files
41
- def clean
42
- return if @installdir.nil?
43
- FileUtils.rm_rf @installdir
44
- FileUtils.rm_rf "#{@installdir}.tar.gz"
45
- end
46
-
47
- private
48
- # get information from specification
49
- def compute_spec
50
- specinfo = {}
51
- metadata = nil
52
-
53
- if Gem::VERSION.to_i >= 2
54
- metadata = Gem::Package.new(@filename).spec
55
- else
56
- Gem::Package.open(File.open(@filename)) { |gem| metadata = gem.metadata }
57
- end
58
-
59
- # name
60
- specinfo[:name] = metadata.name
61
- # version
62
- specinfo[:version] = metadata.version
63
- # summary
64
- specinfo[:summary] = metadata.summary
65
- # homepage
66
- specinfo[:homepage] = metadata.homepage
67
- # platform
68
- specinfo[:platform] = metadata.platform
69
- # description
70
- specinfo[:description] = metadata.description
71
- # if the gemspec has extensions defined, then this should be a 'native' arch.
72
- specinfo[:architecture] = metadata.extensions.empty? ? 'all' : 'native'
73
- # rubygem required version
74
- specinfo[:rubygem] = metadata.required_rubygems_version
75
- # dependencies
76
- specinfo[:dependencies] = metadata.runtime_dependencies
77
- # extensions
78
- specinfo[:extensions] = metadata.extensions
79
- # executables
80
- specinfo[:executables] = metadata.executables
81
- #Return value
82
- specinfo
83
- end
84
-
85
- # define name and platform
86
- def name_and_platform(gemname)
87
- name = gemname
88
- if gemname =~ /jruby|jar|java/ or @spec[:platform].to_s == 'java'
89
- @platform = 'jruby'
90
- name = "jruby-#{gemname}" unless gemname =~ /jruby/
91
- elsif @platform == 'jruby' and !@spec[:executables].nil? and !@spec[:executables].empty?
92
- name = "jruby-#{gemname}"
93
- end
94
- "rubygem-#{name}"
95
- end
96
-
97
- # return hash with list of files and directories
98
- def files
99
- @spec[:files] = {:directories => [], :files => [], :executables => []}
100
- Dir.chdir(@installdir) do
101
- # create gem directory structure
102
- @spec[:files][:directories] << 'gems'
103
- @spec[:files][:directories] << 'specifications'
104
- @spec[:files][:directories] << 'bin'
105
- # get files and directories
106
- Dir.glob("gems/**/*") do |file|
107
- key = File.directory?(file) ? :directories : (File.executable?(file) || file.end_with?('.sh') ? :executables : :files)
108
- @spec[:files][key] << file
109
- end
110
- # get gem path
111
- Dir.glob("gems/*") do |file|
112
- @spec[:files][:gempath] = file
113
- end
114
- # get specification filename
115
- Dir.glob("specifications/*") do |file|
116
- @spec[:files][:specification] = file
117
- end
118
- # get executable files
119
- Dir.glob("bin/*") do |file|
120
- @spec[:files][:executables] << file
121
- shebang(file)
122
- end
123
- end
124
- end
125
-
126
- def shebang(filename)
127
- # alter first line of all executables
128
- file_arr = File.readlines(filename)
129
- file_arr[0] = "#!/usr/bin/env #{@platform}\n"
130
- File.open(filename, 'w') { |f| f.write(file_arr.join) }
131
- end
132
-
133
- def build_source
134
- # create tar.gz
135
- res = system "tar czf #{@installdir}.tar.gz #{@installdir}"
136
- # check errors
137
- raise "Error creating archive #{@installdir}.tar.gz" unless res
138
- # clean temporary files
139
- FileUtils.rm_rf @installdir
140
- end
141
-
142
- def install_build_files
143
- # get current directory
144
- pwd = FileUtils.pwd
145
- # clean build if gem has extensions
146
- @spec[:extensions].each { |extension|
147
- path = File.dirname("#{pwd}/#{@installdir}/gems/#{@filename[0, @filename.size-4]}/#{extension}")
148
- FileUtils.rm_rf Dir.glob("#{path}/*.o")
149
- FileUtils.rm_rf "#{path}/Makefile"
150
- }
151
- # delete directories
152
- Dir["#{@installdir}/*"].each {|name| FileUtils.rm_rf(name) unless name =~ /bin|gems|specifications/ }
153
- end
154
- end
1
+ # -*- encoding : utf-8 -*-
2
+ require 'pathname'
3
+ require 'rubygems'
4
+ require 'rubygems/installer'
5
+ require 'rubygems/remote_fetcher'
6
+
7
+ class RGem2Rpm::Gem
8
+ # define accessors
9
+ attr_accessor :spec
10
+
11
+ def initialize(args)
12
+ # initialize paramters
13
+ @filename = args[:filename]
14
+ @platform = args[:platform] || 'ruby'
15
+ @installname = args[:rpmname]
16
+ end
17
+
18
+ # install gem to pwd
19
+ def install
20
+ # get spec information
21
+ @spec = compute_spec
22
+ # define name and platform
23
+ if @installname
24
+ @spec[:installname] = @installname
25
+ else
26
+ @spec[:installname] = name_and_platform(@spec[:name])
27
+ end
28
+ # set install dir
29
+ @installdir = "#{@spec[:installname]}-#{@spec[:version]}"
30
+ # install gem
31
+ Gem::Installer.new(@filename, :env_shebang => true, :ignore_dependencies => true, :install_dir => @installdir, :bin_dir => "#{@installdir}/bin", :wrappers => true).install
32
+ # install build files
33
+ install_build_files
34
+ # get file list
35
+ files
36
+ # build tar.gz
37
+ build_source
38
+ end
39
+
40
+ # clean temporary files
41
+ def clean
42
+ return if @installdir.nil?
43
+ FileUtils.rm_rf @installdir
44
+ FileUtils.rm_rf "#{@installdir}.tar.gz"
45
+ end
46
+
47
+ private
48
+ # get information from specification
49
+ def compute_spec
50
+ specinfo = {}
51
+ metadata = nil
52
+
53
+ if Gem::VERSION.to_i >= 2
54
+ metadata = Gem::Package.new(@filename).spec
55
+ else
56
+ Gem::Package.open(File.open(@filename)) { |gem| metadata = gem.metadata }
57
+ end
58
+
59
+ # name
60
+ specinfo[:name] = metadata.name
61
+ # version
62
+ specinfo[:version] = metadata.version
63
+ # summary
64
+ specinfo[:summary] = metadata.summary
65
+ # homepage
66
+ specinfo[:homepage] = metadata.homepage
67
+ # platform
68
+ specinfo[:platform] = metadata.platform
69
+ # description
70
+ specinfo[:description] = metadata.description
71
+ # if the gemspec has extensions defined, then this should be a 'native' arch.
72
+ specinfo[:architecture] = metadata.extensions.empty? ? 'all' : 'native'
73
+ # rubygem required version
74
+ specinfo[:rubygem] = metadata.required_rubygems_version
75
+ # dependencies
76
+ specinfo[:dependencies] = metadata.runtime_dependencies
77
+ # extensions
78
+ specinfo[:extensions] = metadata.extensions
79
+ # executables
80
+ specinfo[:executables] = metadata.executables
81
+ #Return value
82
+ specinfo
83
+ end
84
+
85
+ # define name and platform
86
+ def name_and_platform(gemname)
87
+ name = gemname
88
+ if gemname =~ /jruby|jar|java/ or @spec[:platform].to_s == 'java'
89
+ @platform = 'jruby'
90
+ name = "jruby-#{gemname}" unless gemname =~ /jruby/
91
+ elsif @platform == 'jruby' and !@spec[:executables].nil? and !@spec[:executables].empty?
92
+ name = "jruby-#{gemname}"
93
+ end
94
+ "rubygem-#{name}"
95
+ end
96
+
97
+ # return hash with list of files and directories
98
+ def files
99
+ @spec[:files] = {:directories => [], :files => [], :executables => []}
100
+ Dir.chdir(@installdir) do
101
+ # create gem directory structure
102
+ @spec[:files][:directories] << 'gems'
103
+ @spec[:files][:directories] << 'specifications'
104
+ @spec[:files][:directories] << 'bin'
105
+ # get files and directories
106
+ Dir.glob("gems/**/*") do |file|
107
+ key = File.directory?(file) ? :directories : (File.executable?(file) || file.end_with?('.sh') ? :executables : :files)
108
+ @spec[:files][key] << file
109
+ end
110
+ # get gem path
111
+ Dir.glob("gems/*") do |file|
112
+ @spec[:files][:gempath] = file
113
+ end
114
+ # get specification filename
115
+ Dir.glob("specifications/*") do |file|
116
+ @spec[:files][:specification] = file
117
+ end
118
+ # get executable files
119
+ Dir.glob("bin/*") do |file|
120
+ @spec[:files][:executables] << file
121
+ shebang(file)
122
+ end
123
+ end
124
+ end
125
+
126
+ def shebang(filename)
127
+ # alter first line of all executables
128
+ file_arr = File.readlines(filename)
129
+ file_arr[0] = "#!/usr/bin/env #{@platform}\n"
130
+ File.open(filename, 'w') { |f| f.write(file_arr.join) }
131
+ end
132
+
133
+ def build_source
134
+ # create tar.gz
135
+ res = system "tar czf #{@installdir}.tar.gz #{@installdir}"
136
+ # check errors
137
+ raise "Error creating archive #{@installdir}.tar.gz" unless res
138
+ # clean temporary files
139
+ FileUtils.rm_rf @installdir
140
+ end
141
+
142
+ def install_build_files
143
+ # get current directory
144
+ pwd = FileUtils.pwd
145
+ # clean build if gem has extensions
146
+ @spec[:extensions].each { |extension|
147
+ path = File.dirname("#{pwd}/#{@installdir}/gems/#{@filename[0, @filename.size-4]}/#{extension}")
148
+ case RUBY_VERSION
149
+ when /^1.8/
150
+ FileUtils.rm_rf Dir.glob("#{path}/*.o")
151
+ FileUtils.rm_rf "#{path}/Makefile"
152
+ when /^1.9/
153
+ FileUtils.cp_r "#{path}/#{@installdir}", "#{pwd}/"
154
+ FileUtils.rm_rf "#{path}/#{@installdir}"
155
+ FileUtils.rm_rf Dir.glob("#{path}/*.o")
156
+ FileUtils.rm_rf Dir.glob("#{path}/*.so")
157
+ FileUtils.rm_rf "#{path}/Makefile"
158
+ end
159
+ }
160
+ # delete directories
161
+ Dir["#{@installdir}/*"].each {|name| FileUtils.rm_rf(name) unless name =~ /bin|gems|specifications/ }
162
+ end
163
+ end
data/lib/rgem2rpm/rpm.rb CHANGED
@@ -1,195 +1,195 @@
1
- # -*- encoding : utf-8 -*-
2
- require 'erb'
3
-
4
- class RGem2Rpm::Rpm
5
- attr_accessor :name, :version, :release, :license, :summary, :group, :packager, :description, :installdir
6
-
7
- def initialize(args)
8
- @template = args[:template] || File.dirname(__FILE__) + '/../../conf/template.spec'
9
- @name = args[:installname]
10
- @rpmname = args[:rpmname] || args[:installname]
11
- @gemname = args[:name]
12
- @version = args[:version]
13
- @release = args[:release] || '1'
14
- @license = "See #{args[:homepage]}"
15
- @summary = args[:summary]
16
- @packager = args[:packager] || 'rgem2rpm'
17
- @group = args[:group] || 'System Environment/Libraries'
18
- @osuser = args[:osuser] || 'root'
19
- @osgroup = args[:osgroup] || 'root'
20
- @description = process_description(args[:description])
21
- @installdir = args[:installdir] || '/usr/share/gems'
22
- @arch = args[:architecture]
23
- @files = args[:files]
24
- @rubygem = args[:rubygem]
25
- @dependencies = args[:dependencies]
26
- end
27
-
28
- def create
29
- # create spec
30
- spec
31
- # build rpm
32
- build
33
- end
34
-
35
- def installlist
36
- install_str = StringIO.new
37
- install_str << "rm -rf %{buildroot}\n"
38
- # get directories
39
- @files[:directories].each { |directory|
40
- escaped_str = directory.gsub(/%/, '%%')
41
- install_str << "install -d \"#{escaped_str}\" %{buildroot}%{prefix}/\"#{escaped_str}\"\n"
42
- }
43
- # get files
44
- @files[:files].each { |file|
45
- escaped_str = file.gsub(/%/, '%%')
46
- install_str << "install -m 644 \"#{escaped_str}\" %{buildroot}%{prefix}/\"#{escaped_str}\"\n"
47
- }
48
- # get specification
49
- escaped_str = @files[:specification].gsub(/%/, '%%')
50
- install_str << "install -m 644 \"#{escaped_str}\" %{buildroot}%{prefix}/\"#{escaped_str}\"\n"
51
- # get executables
52
- @files[:executables].each { |executable|
53
- escaped_str = executable.gsub(/%/, '%%')
54
- install_str << "install -m 0755 \"#{escaped_str}\" %{buildroot}%{prefix}/\"#{escaped_str}\"\n"
55
- }
56
- # return install string
57
- install_str.string
58
- end
59
-
60
- def filelist
61
- files_str = StringIO.new
62
- files_str << "%defattr(0644,#{@osuser},#{@osgroup},0755)\n"
63
-
64
- files_str << "%dir %{prefix}\n"
65
- @files[:directories].each { |file|
66
- escaped_str = file.gsub(/%/, '?')
67
- files_str << "%dir \"%{prefix}/#{escaped_str}\"\n"
68
- }
69
-
70
- files_str << "%{prefix}/#{@files[:specification]}\n"
71
- @files[:files].each { |file|
72
- escaped_str = file.gsub(/%/, '?')
73
- files_str << "\"%{prefix}/#{escaped_str}\"\n"
74
- }
75
-
76
- # get executables
77
- @files[:executables].each { |executable|
78
- files_str << "%attr(0755,#{@osuser},#{@osgroup}) %{prefix}/#{executable}\n"
79
- }
80
- # return file string
81
- files_str.string
82
- end
83
-
84
- def buildarch
85
- @arch == 'all' ? 'noarch' : nil
86
- end
87
-
88
- def requires
89
- req_str = StringIO.new
90
- # set rubygems dependency
91
- unless @rubygem.nil?
92
- req_str << "rubygems"
93
- req_str << " #{@rubygem}" unless @rubygem == '>= 0'
94
- end
95
- # set runtime dependencies
96
- @dependencies.each { |d|
97
- d.requirement.requirements.each { |v|
98
- req_str << ', ' unless req_str.size == 0
99
- req_str << "rubygem(#{d.name})"
100
- req_str << " #{v[0].gsub('~>','>=')} #{v[1].to_s}" unless v[0] =~ /!=/
101
- if v[0] =~ /~>/
102
- version = v[1].to_s.strip.split('.')
103
- version[version.size - 1] = "0"
104
- version[version.size - 2] = (version[version.size - 2].to_i + 1).to_s
105
- req_str << ", rubygem(#{d.name}) < #{version.join('.')}"
106
- end
107
- }
108
- }
109
- # return string with dependencies
110
- req_str.string
111
- end
112
-
113
- def conflicts
114
- conflict_str = StringIO.new
115
- # set conflicts
116
- @dependencies.each { |d|
117
- d.requirement.requirements.each { |v|
118
- conflict_str << ', ' unless conflict_str.size == 0
119
- conflict_str << "rubygem(#{d.name}) #{v[0].gsub('!=','=')} #{v[1].to_s}" if v[0] =~ /!=/
120
- }
121
- }
122
- # returns string with conflicts
123
- conflict_str.string
124
- end
125
-
126
- # return gem provides clause
127
- def provides
128
- prv_str = StringIO.new
129
- prv_str << "rubygem(#{@gemname}) = #{@version}"
130
- prv_str.string
131
- end
132
-
133
- # return changelog information
134
- def changelog
135
- change_str = StringIO.new
136
- change_str << "* #{Time.now.strftime('%a %b %d %Y')} rgem2rpm <https://github.com/jppeixoto/rgem2rpm> #{@version}-#{@release}\n"
137
- change_str << "- Create rpm package\n"
138
- change_str.string
139
- end
140
-
141
- # clean temporary files
142
- def clean
143
- FileUtils.rm_rf "#{@name}-#{@version}.spec"
144
- FileUtils.rm_rf "./rpmtemp"
145
- end
146
-
147
- private
148
- def spec
149
- template = ERB.new(File.read(@template))
150
- # write rpm spec file file
151
- File.open("#{@name}-#{@version}.spec", 'w') { |f|
152
- f.write(template.result(binding))
153
- }
154
- end
155
-
156
- def process_description(description)
157
- res = []
158
- str = description
159
- while str != nil
160
- res << "#{str[0,80]}"
161
- str = str[80,str.size]
162
- end
163
- res.join "\n"
164
- end
165
-
166
- def build
167
- create_rpm_env
168
- # move to rpmbuild path
169
- FileUtils.mv "#{@name}-#{@version}.spec", "rpmtemp/rpmbuild/SPECS"
170
- # move sources to rpmbuild
171
- FileUtils.mv "#{@name}-#{@version}.tar.gz", "rpmtemp/rpmbuild/SOURCES"
172
- # define rpm build args
173
- options = "-bb --rmspec --rmsource"
174
- define = "--define \"_topdir #{Dir.pwd}/rpmtemp/rpmbuild\" --define \"_tmppath #{Dir.pwd}/rpmtemp/rpmbuild/tmp\""
175
- specfile = "#{Dir.pwd}/rpmtemp/rpmbuild/SPECS/#{@name}-#{@version}.spec"
176
- # create rpm
177
- res = system "rpmbuild #{options} #{define} #{specfile}"
178
- # check errors
179
- raise "Error creating rpm" unless res
180
- # clean temporary files
181
- Dir.glob("rpmtemp/rpmbuild/RPMS/**/*.rpm") do |file|
182
- FileUtils.mv file, "./"
183
- end
184
- clean
185
- end
186
-
187
- def create_rpm_env
188
- FileUtils.mkdir_p "rpmtemp/rpmbuild/SPECS"
189
- FileUtils.mkdir_p "rpmtemp/rpmbuild/BUILD"
190
- FileUtils.mkdir_p "rpmtemp/rpmbuild/RPMS"
191
- FileUtils.mkdir_p "rpmtemp/rpmbuild/SRPMS"
192
- FileUtils.mkdir_p "rpmtemp/rpmbuild/SOURCES"
193
- FileUtils.mkdir_p "rpmtemp/rpmbuild/tmp"
194
- end
195
- end
1
+ # -*- encoding : utf-8 -*-
2
+ require 'erb'
3
+
4
+ class RGem2Rpm::Rpm
5
+ attr_accessor :name, :version, :release, :license, :summary, :group, :packager, :description, :installdir
6
+
7
+ def initialize(args)
8
+ @template = args[:template] || File.dirname(__FILE__) + '/../../conf/template.spec'
9
+ @name = args[:installname]
10
+ @rpmname = args[:rpmname] || args[:installname]
11
+ @gemname = args[:name]
12
+ @version = args[:version]
13
+ @release = args[:release] || '1'
14
+ @license = "See #{args[:homepage]}"
15
+ @summary = args[:summary]
16
+ @packager = args[:packager] || 'rgem2rpm'
17
+ @group = args[:group] || 'System Environment/Libraries'
18
+ @osuser = args[:osuser] || 'root'
19
+ @osgroup = args[:osgroup] || 'root'
20
+ @description = process_description(args[:description])
21
+ @installdir = args[:installdir] || '/usr/share/gems'
22
+ @arch = args[:architecture]
23
+ @files = args[:files]
24
+ @rubygem = args[:rubygem]
25
+ @dependencies = args[:dependencies]
26
+ end
27
+
28
+ def create
29
+ # create spec
30
+ spec
31
+ # build rpm
32
+ build
33
+ end
34
+
35
+ def installlist
36
+ install_str = StringIO.new
37
+ install_str << "rm -rf %{buildroot}\n"
38
+ # get directories
39
+ @files[:directories].each { |directory|
40
+ escaped_str = directory.gsub(/%/, '%%')
41
+ install_str << "install -d \"#{escaped_str}\" %{buildroot}%{prefix}/\"#{escaped_str}\"\n"
42
+ }
43
+ # get files
44
+ @files[:files].each { |file|
45
+ escaped_str = file.gsub(/%/, '%%')
46
+ install_str << "install -m 644 \"#{escaped_str}\" %{buildroot}%{prefix}/\"#{escaped_str}\"\n"
47
+ }
48
+ # get specification
49
+ escaped_str = @files[:specification].gsub(/%/, '%%')
50
+ install_str << "install -m 644 \"#{escaped_str}\" %{buildroot}%{prefix}/\"#{escaped_str}\"\n"
51
+ # get executables
52
+ @files[:executables].each { |executable|
53
+ escaped_str = executable.gsub(/%/, '%%')
54
+ install_str << "install -m 0755 \"#{escaped_str}\" %{buildroot}%{prefix}/\"#{escaped_str}\"\n"
55
+ }
56
+ # return install string
57
+ install_str.string
58
+ end
59
+
60
+ def filelist
61
+ files_str = StringIO.new
62
+ files_str << "%defattr(0644,#{@osuser},#{@osgroup},0755)\n"
63
+
64
+ files_str << "%dir %{prefix}\n"
65
+ @files[:directories].each { |file|
66
+ escaped_str = file.gsub(/%/, '?')
67
+ files_str << "%dir \"%{prefix}/#{escaped_str}\"\n"
68
+ }
69
+
70
+ files_str << "%{prefix}/#{@files[:specification]}\n"
71
+ @files[:files].each { |file|
72
+ escaped_str = file.gsub(/%/, '?')
73
+ files_str << "\"%{prefix}/#{escaped_str}\"\n"
74
+ }
75
+
76
+ # get executables
77
+ @files[:executables].each { |executable|
78
+ files_str << "%attr(0755,#{@osuser},#{@osgroup}) %{prefix}/#{executable}\n"
79
+ }
80
+ # return file string
81
+ files_str.string
82
+ end
83
+
84
+ def buildarch
85
+ @arch == 'all' ? 'noarch' : nil
86
+ end
87
+
88
+ def requires
89
+ req_str = StringIO.new
90
+ # set rubygems dependency
91
+ unless @rubygem.nil?
92
+ req_str << "rubygems"
93
+ req_str << " #{@rubygem}" unless @rubygem == '>= 0'
94
+ end
95
+ # set runtime dependencies
96
+ @dependencies.each { |d|
97
+ d.requirement.requirements.each { |v|
98
+ req_str << ', ' unless req_str.size == 0
99
+ req_str << "rubygem(#{d.name})"
100
+ req_str << " #{v[0].gsub('~>','>=')} #{v[1].to_s}" unless v[0] =~ /!=/
101
+ if v[0] =~ /~>/
102
+ version = v[1].to_s.strip.split('.')
103
+ version[version.size - 1] = "0"
104
+ version[version.size - 2] = (version[version.size - 2].to_i + 1).to_s
105
+ req_str << ", rubygem(#{d.name}) < #{version.join('.')}"
106
+ end
107
+ }
108
+ }
109
+ # return string with dependencies
110
+ req_str.string
111
+ end
112
+
113
+ def conflicts
114
+ conflict_str = StringIO.new
115
+ # set conflicts
116
+ @dependencies.each { |d|
117
+ d.requirement.requirements.each { |v|
118
+ conflict_str << ', ' unless conflict_str.size == 0
119
+ conflict_str << "rubygem(#{d.name}) #{v[0].gsub('!=','=')} #{v[1].to_s}" if v[0] =~ /!=/
120
+ }
121
+ }
122
+ # returns string with conflicts
123
+ conflict_str.string
124
+ end
125
+
126
+ # return gem provides clause
127
+ def provides
128
+ prv_str = StringIO.new
129
+ prv_str << "rubygem(#{@gemname}) = #{@version}"
130
+ prv_str.string
131
+ end
132
+
133
+ # return changelog information
134
+ def changelog
135
+ change_str = StringIO.new
136
+ change_str << "* #{Time.now.strftime('%a %b %d %Y')} rgem2rpm <https://github.com/jppeixoto/rgem2rpm> #{@version}-#{@release}\n"
137
+ change_str << "- Create rpm package\n"
138
+ change_str.string
139
+ end
140
+
141
+ # clean temporary files
142
+ def clean
143
+ FileUtils.rm_rf "#{@name}-#{@version}.spec"
144
+ FileUtils.rm_rf "./rpmtemp"
145
+ end
146
+
147
+ private
148
+ def spec
149
+ template = ERB.new(File.read(@template))
150
+ # write rpm spec file file
151
+ File.open("#{@name}-#{@version}.spec", 'w') { |f|
152
+ f.write(template.result(binding))
153
+ }
154
+ end
155
+
156
+ def process_description(description)
157
+ res = []
158
+ str = description
159
+ while str != nil
160
+ res << "#{str[0,80]}"
161
+ str = str[80,str.size]
162
+ end
163
+ res.join "\n"
164
+ end
165
+
166
+ def build
167
+ create_rpm_env
168
+ # move to rpmbuild path
169
+ FileUtils.mv "#{@name}-#{@version}.spec", "rpmtemp/rpmbuild/SPECS"
170
+ # move sources to rpmbuild
171
+ FileUtils.mv "#{@name}-#{@version}.tar.gz", "rpmtemp/rpmbuild/SOURCES"
172
+ # define rpm build args
173
+ options = "-bb --rmspec --rmsource"
174
+ define = "--define \"_topdir #{Dir.pwd}/rpmtemp/rpmbuild\" --define \"_tmppath #{Dir.pwd}/rpmtemp/rpmbuild/tmp\""
175
+ specfile = "#{Dir.pwd}/rpmtemp/rpmbuild/SPECS/#{@name}-#{@version}.spec"
176
+ # create rpm
177
+ res = system "rpmbuild #{options} #{define} #{specfile}"
178
+ # check errors
179
+ raise "Error creating rpm" unless res
180
+ # clean temporary files
181
+ Dir.glob("rpmtemp/rpmbuild/RPMS/**/*.rpm") do |file|
182
+ FileUtils.mv file, "./"
183
+ end
184
+ clean
185
+ end
186
+
187
+ def create_rpm_env
188
+ FileUtils.mkdir_p "rpmtemp/rpmbuild/SPECS"
189
+ FileUtils.mkdir_p "rpmtemp/rpmbuild/BUILD"
190
+ FileUtils.mkdir_p "rpmtemp/rpmbuild/RPMS"
191
+ FileUtils.mkdir_p "rpmtemp/rpmbuild/SRPMS"
192
+ FileUtils.mkdir_p "rpmtemp/rpmbuild/SOURCES"
193
+ FileUtils.mkdir_p "rpmtemp/rpmbuild/tmp"
194
+ end
195
+ end
@@ -1,4 +1,4 @@
1
- # -*- encoding : utf-8 -*-
2
- module RGem2Rpm
3
- VERSION = '1.4.12'
4
- end
1
+ # -*- encoding : utf-8 -*-
2
+ module RGem2Rpm
3
+ VERSION = '1.4.14'
4
+ end
data/lib/rgem2rpm.rb CHANGED
@@ -1,11 +1,11 @@
1
- # -*- encoding : utf-8 -*-
2
- # initialize module RGem2Rpm
3
- # added ruby 1.9 combatibility for gem build
4
- #
5
- lib = File.dirname(__FILE__)
6
-
7
- require lib + '/rgem2rpm/version'
8
- require lib + '/rgem2rpm/argumentparse'
9
- require lib + '/rgem2rpm/converter'
10
- require lib + '/rgem2rpm/gem'
11
- require lib + '/rgem2rpm/rpm'
1
+ # -*- encoding : utf-8 -*-
2
+ # initialize module RGem2Rpm
3
+ # added ruby 1.9 combatibility for gem build
4
+ #
5
+ lib = File.dirname(__FILE__)
6
+
7
+ require lib + '/rgem2rpm/version'
8
+ require lib + '/rgem2rpm/argumentparse'
9
+ require lib + '/rgem2rpm/converter'
10
+ require lib + '/rgem2rpm/gem'
11
+ require lib + '/rgem2rpm/rpm'
data/rgem2rpm.gemspec CHANGED
@@ -1,19 +1,19 @@
1
- # -*- encoding : utf-8 -*-
2
- require File.dirname(__FILE__) + '/lib/rgem2rpm/version'
3
-
4
- Gem::Specification.new do |s|
5
- s.name = %q{rgem2rpm}
6
- s.version = RGem2Rpm::VERSION
7
- s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
8
- s.required_rubygems_version = Gem::Requirement.new(">= 1.4.2") if s.respond_to?(:required_rubygems_version=)
9
- s.date = Time.now.strftime("%Y-%m-%d")
10
- s.authors = ["Joao Peixoto"]
11
- s.email = %q{peixoto.joao@gmail.com}
12
- s.summary = %q{Convert ruby gems into rpm}
13
- s.homepage = %q{https://github.com/jppeixoto/rgem2rpm}
14
- s.description = %q{Application that enables conversion of rubygems to rpms.}
15
- s.bindir = 'bin'
16
- s.require_path = "lib"
17
- s.executables = 'rgem2rpm'
18
- s.files = Dir.glob("{lib}/**/*") + Dir.glob("{bin}/*") + Dir.glob("{conf}/*") + [__FILE__, 'Rakefile']
19
- end
1
+ # -*- encoding : utf-8 -*-
2
+ require File.dirname(__FILE__) + '/lib/rgem2rpm/version'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = %q{rgem2rpm}
6
+ s.version = RGem2Rpm::VERSION
7
+ s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.4.2") if s.respond_to?(:required_rubygems_version=)
9
+ s.date = Time.now.strftime("%Y-%m-%d")
10
+ s.authors = ["Joao Peixoto"]
11
+ s.email = %q{peixoto.joao@gmail.com}
12
+ s.summary = %q{Convert ruby gems into rpm}
13
+ s.homepage = %q{https://github.com/ptinovacao/rgem2rpm}
14
+ s.description = %q{Application that enables conversion of rubygems to rpms.}
15
+ s.bindir = 'bin'
16
+ s.require_path = "lib"
17
+ s.executables = 'rgem2rpm'
18
+ s.files = Dir.glob("{lib}/**/*") + Dir.glob("{bin}/*") + Dir.glob("{conf}/*") + [__FILE__, 'Rakefile']
19
+ end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rgem2rpm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.12
5
- prerelease:
4
+ version: 1.4.14
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Joao Peixoto
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-10 00:00:00.000000000 Z
12
+ date: 2013-10-11 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Application that enables conversion of rubygems to rpms.
15
15
  email: peixoto.joao@gmail.com
@@ -18,38 +18,38 @@ executables:
18
18
  extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
- - lib/rgem2rpm.rb
22
- - lib/rgem2rpm/argumentparse.rb
23
21
  - lib/rgem2rpm/converter.rb
24
22
  - lib/rgem2rpm/gem.rb
25
- - lib/rgem2rpm/rpm.rb
23
+ - lib/rgem2rpm/argumentparse.rb
26
24
  - lib/rgem2rpm/version.rb
25
+ - lib/rgem2rpm/rpm.rb
26
+ - lib/rgem2rpm.rb
27
27
  - bin/rgem2rpm
28
28
  - conf/template.spec
29
29
  - rgem2rpm.gemspec
30
30
  - Rakefile
31
- homepage: https://github.com/jppeixoto/rgem2rpm
31
+ homepage: https://github.com/ptinovacao/rgem2rpm
32
32
  licenses: []
33
- post_install_message:
33
+ post_install_message:
34
34
  rdoc_options: []
35
35
  require_paths:
36
36
  - lib
37
37
  required_ruby_version: !ruby/object:Gem::Requirement
38
+ none: false
38
39
  requirements:
39
40
  - - ! '>='
40
41
  - !ruby/object:Gem::Version
41
42
  version: 1.8.6
42
- none: false
43
43
  required_rubygems_version: !ruby/object:Gem::Requirement
44
+ none: false
44
45
  requirements:
45
46
  - - ! '>='
46
47
  - !ruby/object:Gem::Version
47
48
  version: 1.4.2
48
- none: false
49
49
  requirements: []
50
- rubyforge_project:
51
- rubygems_version: 1.8.24
52
- signing_key:
50
+ rubyforge_project:
51
+ rubygems_version: 1.8.23
52
+ signing_key:
53
53
  specification_version: 3
54
54
  summary: Convert ruby gems into rpm
55
55
  test_files: []