fpm 0.3.7 → 0.3.8
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/lib/fpm/builder.rb +16 -5
- data/lib/fpm/source.rb +10 -5
- data/lib/fpm/source/dir.rb +8 -5
- data/lib/fpm/source/gem.rb +28 -6
- data/lib/fpm/source/npm.rb +3 -2
- data/lib/fpm/source/pyfpm/get_metadata.py +6 -1
- data/lib/fpm/source/pyfpm/get_metadata.pyc +0 -0
- data/lib/fpm/source/python.rb +24 -9
- data/lib/fpm/source/rpm.rb +3 -2
- data/lib/fpm/source/tar.rb +7 -3
- data/lib/fpm/target/deb.rb +30 -6
- data/lib/fpm/target/rpm.rb +21 -11
- data/lib/fpm/target/solaris.rb +7 -6
- data/lib/fpm/util.rb +7 -0
- data/templates/deb.erb +4 -0
- data/templates/rpm.erb +2 -2
- data/templates/solaris.erb +1 -1
- metadata +6 -7
data/lib/fpm/builder.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "fileutils"
|
2
|
+
require "fpm/util"
|
2
3
|
require "pathname"
|
3
4
|
|
4
5
|
class FPM::Builder
|
@@ -102,10 +103,10 @@ class FPM::Builder
|
|
102
103
|
data_tarball = File.join(builddir, "data.tar.gz")
|
103
104
|
Dir.chdir(builddir) do
|
104
105
|
FileUtils.mkdir_p(@package.unpack_data_to)
|
105
|
-
|
106
|
+
safesystem("gzip -d #{data_tarball}")
|
106
107
|
Dir.chdir(@package.unpack_data_to) do
|
107
108
|
@source.root = Dir.pwd
|
108
|
-
|
109
|
+
safesystem("tar -xf #{data_tarball.gsub(/\.gz$/, "")}")
|
109
110
|
end
|
110
111
|
end
|
111
112
|
end
|
@@ -185,7 +186,7 @@ class FPM::Builder
|
|
185
186
|
# TODO(sissel): support editing multiple files for targets like
|
186
187
|
# puppet which generate multiple manifests.
|
187
188
|
editor = ENV['FPM_EDITOR'] || ENV['EDITOR'] || 'vi'
|
188
|
-
|
189
|
+
safesystem("#{editor} '#{package.specfile(builddir)}'")
|
189
190
|
unless File.size? package.specfile(builddir)
|
190
191
|
puts "Empty specfile. Aborting."
|
191
192
|
exit 1
|
@@ -202,8 +203,18 @@ class FPM::Builder
|
|
202
203
|
private
|
203
204
|
def checksum(paths)
|
204
205
|
paths.collect do |path|
|
205
|
-
|
206
|
-
|
206
|
+
if File.directory? path
|
207
|
+
# This should work for both cases where we use -C or not ...
|
208
|
+
%x{ find #{path} -type f -print0 | xargs -0 md5sum }.split("\n").collect do |i|
|
209
|
+
# Remove leading path and "./" from the md5sum output if present ...
|
210
|
+
i = i.split(/\s+/)
|
211
|
+
"%s %s" % [i[0], i[1].sub(/#{path}\//, '').sub(/\.\//, '')]
|
212
|
+
end
|
213
|
+
elsif File.exists? path
|
214
|
+
%x{md5sum #{path}}
|
215
|
+
else
|
216
|
+
next
|
217
|
+
end
|
207
218
|
end.flatten
|
208
219
|
end # def checksum
|
209
220
|
end
|
data/lib/fpm/source.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "fpm/namespace"
|
2
|
+
require "fpm/util"
|
2
3
|
|
3
4
|
# Abstract class for a "thing to build a package from"
|
4
5
|
class FPM::Source
|
@@ -120,11 +121,15 @@ class FPM::Source
|
|
120
121
|
# than it is worth. For now, rely on tar's --exclude.
|
121
122
|
dir_tar = [tar_cmd, "--owner=root", "--group=root" ] \
|
122
123
|
+ excludes \
|
123
|
-
+ ["-cf", output, "--no-recursion" ]
|
124
|
-
+ dirs
|
124
|
+
+ ["-cf", output, "--no-recursion" ]
|
125
125
|
|
126
|
-
|
127
|
-
|
126
|
+
# Only if directories and paths do not have duplicates ...
|
127
|
+
dirs -= paths
|
128
|
+
|
129
|
+
if dirs.any?
|
130
|
+
::Dir.chdir(chdir) do
|
131
|
+
safesystem *(dir_tar += dirs)
|
132
|
+
end
|
128
133
|
end
|
129
134
|
|
130
135
|
files_tar = [ tar_cmd ] \
|
@@ -132,7 +137,7 @@ class FPM::Source
|
|
132
137
|
+ [ "--owner=root", "--group=root", "-rf", output ] \
|
133
138
|
+ paths
|
134
139
|
::Dir.chdir(chdir) do
|
135
|
-
|
140
|
+
safesystem(*files_tar)
|
136
141
|
end
|
137
142
|
end # def tar
|
138
143
|
|
data/lib/fpm/source/dir.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "fpm/source"
|
2
2
|
require "fileutils"
|
3
3
|
require "fpm/rubyfixes"
|
4
|
+
require "fpm/util"
|
4
5
|
|
5
6
|
class FPM::Source::Dir < FPM::Source
|
6
7
|
def get_metadata
|
@@ -30,8 +31,8 @@ class FPM::Source::Dir < FPM::Source
|
|
30
31
|
|
31
32
|
::FileUtils.mkdir_p(dest)
|
32
33
|
rsync = ["rsync", "-a", path, dest]
|
33
|
-
p rsync
|
34
|
-
|
34
|
+
p rsync if $DEBUG
|
35
|
+
safesystem(*rsync)
|
35
36
|
|
36
37
|
# FileUtils.cp_r is pretty silly about how it copies files in some
|
37
38
|
# cases (funky permissions, etc)
|
@@ -45,14 +46,16 @@ class FPM::Source::Dir < FPM::Source
|
|
45
46
|
end
|
46
47
|
|
47
48
|
::Dir.chdir("#{builddir}/tarbuild") do
|
48
|
-
|
49
|
+
safesystem("ls #{builddir}/tarbuild") if $DEBUG
|
49
50
|
tar(tar_path, ".")
|
50
51
|
end
|
51
52
|
else
|
52
|
-
|
53
|
+
# Prefix everything with "./" as per the Debian way if needed ...
|
54
|
+
path = paths[0].match(/^(\.\/|\.)/) ? paths[0] : "./%s" % paths[0]
|
55
|
+
tar(tar_path, path)
|
53
56
|
end
|
54
57
|
|
55
58
|
# TODO(sissel): Make a helper method.
|
56
|
-
|
59
|
+
safesystem(*["gzip", "-f", tar_path])
|
57
60
|
end # def make_tarball!
|
58
61
|
end # class FPM::Source::Dir
|
data/lib/fpm/source/gem.rb
CHANGED
@@ -3,13 +3,26 @@ require "fpm/source"
|
|
3
3
|
require "rubygems/package"
|
4
4
|
require "rubygems"
|
5
5
|
require "fileutils"
|
6
|
+
require "fpm/util"
|
6
7
|
|
7
8
|
class FPM::Source::Gem < FPM::Source
|
8
9
|
def self.flags(opts, settings)
|
10
|
+
settings.source[:gem] = "gem"
|
11
|
+
|
9
12
|
opts.on("--bin-path DIRECTORY",
|
10
13
|
"The directory to install gem executables") do |path|
|
11
14
|
settings.source[:bin_path] = path
|
12
15
|
end
|
16
|
+
opts.on("--package-prefix PREFIX",
|
17
|
+
"Prefix for gem packages") do |package_prefix|
|
18
|
+
settings.source[:package_prefix] = package_prefix
|
19
|
+
end
|
20
|
+
|
21
|
+
opts.on("--gem PATH_TO_GEM",
|
22
|
+
"The path to the 'gem' tool (defaults to 'gem' and searches " \
|
23
|
+
"your $PATH)") do |path|
|
24
|
+
settings.source[:gem] = path
|
25
|
+
end
|
13
26
|
end # def flags
|
14
27
|
|
15
28
|
def get_source(params)
|
@@ -70,7 +83,12 @@ class FPM::Source::Gem < FPM::Source
|
|
70
83
|
self[field.to_sym] = spec.send(field) rescue "unknown"
|
71
84
|
end
|
72
85
|
|
73
|
-
self[:
|
86
|
+
if self[:settings][:package_prefix]
|
87
|
+
self[:package_prefix] = self[:settings][:package_prefix]
|
88
|
+
else
|
89
|
+
self[:package_prefix] = "rubygem"
|
90
|
+
end
|
91
|
+
self[:name] = "#{self[:package_prefix]}#{self[:suffix]}-#{spec.name}"
|
74
92
|
self[:maintainer] = spec.author
|
75
93
|
self[:url] = spec.homepage
|
76
94
|
|
@@ -85,6 +103,10 @@ class FPM::Source::Gem < FPM::Source
|
|
85
103
|
self[:architecture] = "all"
|
86
104
|
end
|
87
105
|
|
106
|
+
# make sure we have a description
|
107
|
+
descriptions = [ self[:description], self[:summary], "#{spec.name} - no description given" ]
|
108
|
+
self[:description] = descriptions.detect { |d| !(d.nil? or d.strip.empty?) }
|
109
|
+
|
88
110
|
self[:dependencies] = []
|
89
111
|
spec.runtime_dependencies.map do |dep|
|
90
112
|
# rubygems 1.3.5 doesn't have 'Gem::Dependency#requirement'
|
@@ -96,7 +118,7 @@ class FPM::Source::Gem < FPM::Source
|
|
96
118
|
|
97
119
|
# Some reqs can be ">= a, < b" versions, let's handle that.
|
98
120
|
reqs.to_s.split(/, */).each do |req|
|
99
|
-
self[:dependencies] << "
|
121
|
+
self[:dependencies] << "#{self[:package_prefix]}#{self[:suffix]}-#{dep.name} #{req}"
|
100
122
|
end
|
101
123
|
end # runtime_dependencies
|
102
124
|
end # ::Gem::Package
|
@@ -117,8 +139,8 @@ class FPM::Source::Gem < FPM::Source
|
|
117
139
|
end
|
118
140
|
|
119
141
|
::FileUtils.mkdir_p(installdir)
|
120
|
-
args = [
|
121
|
-
"--install-dir", installdir, "--ignore-dependencies"]
|
142
|
+
args = [self[:settings][:gem], "install", "--quiet", "--no-ri", "--no-rdoc",
|
143
|
+
"--install-dir", installdir, "--ignore-dependencies", "-E"]
|
122
144
|
if self[:settings][:bin_path]
|
123
145
|
tmp_bin_path = File.join(tmpdir, self[:settings][:bin_path])
|
124
146
|
args += ["--bindir", tmp_bin_path]
|
@@ -127,14 +149,14 @@ class FPM::Source::Gem < FPM::Source
|
|
127
149
|
end
|
128
150
|
|
129
151
|
args << gem
|
130
|
-
|
152
|
+
safesystem(*args)
|
131
153
|
|
132
154
|
# make paths relative (/foo becomes ./foo)
|
133
155
|
tar(tar_path, @paths.collect {|p| ".#{p}"}, tmpdir)
|
134
156
|
FileUtils.rm_r(tmpdir)
|
135
157
|
|
136
158
|
# TODO(sissel): Make a helper method.
|
137
|
-
|
159
|
+
safesystem(*["gzip", "-f", tar_path])
|
138
160
|
end
|
139
161
|
|
140
162
|
end # class FPM::Source::Gem
|
data/lib/fpm/source/npm.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "fpm/namespace"
|
2
2
|
require "fpm/source"
|
3
|
+
require "fpm/util"
|
3
4
|
require "fileutils"
|
4
5
|
|
5
6
|
class FPM::Source::Npm < FPM::Source
|
@@ -25,11 +26,11 @@ class FPM::Source::Npm < FPM::Source
|
|
25
26
|
::FileUtils.mkdir_p(installdir)
|
26
27
|
args = ["gem", "install", "--quiet", "--no-ri", "--no-rdoc",
|
27
28
|
"--install-dir", installdir, "--ignore-dependencies", @paths.first]
|
28
|
-
|
29
|
+
safesystem(*args)
|
29
30
|
tar(tar_path, ".", tmpdir)
|
30
31
|
|
31
32
|
# TODO(sissel): Make a helper method.
|
32
|
-
|
33
|
+
safesystem(*["gzip", "-f", tar_path])
|
33
34
|
end
|
34
35
|
|
35
36
|
end # class FPM::Source::Gem
|
@@ -83,6 +83,11 @@ class get_metadata(Command):
|
|
83
83
|
data["dependencies"] = final_deps
|
84
84
|
|
85
85
|
#print json.dumps(data, indent=2)
|
86
|
-
|
86
|
+
try:
|
87
|
+
print json.dumps(data, indent=2)
|
88
|
+
except AttributeError, e:
|
89
|
+
# For Python 2.5 and Debian's python-json
|
90
|
+
print json.write(data)
|
91
|
+
|
87
92
|
# def run
|
88
93
|
# class list_dependencies
|
Binary file
|
data/lib/fpm/source/python.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "fpm/namespace"
|
2
2
|
require "fpm/source"
|
3
|
+
require "fpm/util"
|
3
4
|
require "rubygems/package"
|
4
5
|
require "rubygems"
|
5
6
|
require "fileutils"
|
@@ -10,6 +11,7 @@ class FPM::Source::Python < FPM::Source
|
|
10
11
|
def self.flags(opts, settings)
|
11
12
|
settings.source[:python] = "python"
|
12
13
|
settings.source[:easy_install] = "easy_install"
|
14
|
+
settings.source[:pypi] ="http://pypi.python.org/simple"
|
13
15
|
|
14
16
|
opts.on("--bin PYTHON_BINARY_LOCATION",
|
15
17
|
"The path to the python you want to run. Default is 'python'") do |path|
|
@@ -20,6 +22,16 @@ class FPM::Source::Python < FPM::Source
|
|
20
22
|
"The path to your easy_install tool. Default is 'easy_install'") do |path|
|
21
23
|
settings.source[:easy_install] = path
|
22
24
|
end
|
25
|
+
|
26
|
+
opts.on("--pypi PYPI_SERVER",
|
27
|
+
"PyPi Server uri for retrieving packages. Default is 'http://pypi.python.org/simple'") do |pypi|
|
28
|
+
settings.source[:pypi] = pypi
|
29
|
+
end
|
30
|
+
|
31
|
+
opts.on("--package-prefix PREFIX",
|
32
|
+
"Prefix for python packages") do |package_prefix|
|
33
|
+
settings.source[:package_prefix] = package_prefix
|
34
|
+
end
|
23
35
|
end # def flags
|
24
36
|
|
25
37
|
def get_source(params)
|
@@ -47,11 +59,8 @@ class FPM::Source::Python < FPM::Source
|
|
47
59
|
want_pkg = "#{package}==#{version}"
|
48
60
|
end
|
49
61
|
|
50
|
-
|
51
|
-
|
52
|
-
if return_value.nil?
|
53
|
-
raise "The execution of #{self[:settings][:easy_install]} failed"
|
54
|
-
end
|
62
|
+
safesystem(self[:settings][:easy_install], "-i", self[:settings][:pypi],
|
63
|
+
"--editable", "--build-directory", @tmpdir, want_pkg)
|
55
64
|
|
56
65
|
# easy_install will put stuff in @tmpdir/packagename/, flatten that.
|
57
66
|
# That is, we want @tmpdir/setup.py, and start with
|
@@ -81,16 +90,22 @@ class FPM::Source::Python < FPM::Source
|
|
81
90
|
metadata = JSON.parse(output[/\{.*\}/msx])
|
82
91
|
#p metadata
|
83
92
|
|
93
|
+
if self[:settings][:package_prefix]
|
94
|
+
self[:package_prefix] = self[:settings][:package_prefix]
|
95
|
+
else
|
96
|
+
self[:package_prefix] = "python"
|
97
|
+
end
|
98
|
+
|
84
99
|
self[:architecture] = metadata["architecture"]
|
85
100
|
self[:description] = metadata["description"]
|
86
101
|
self[:license] = metadata["license"]
|
87
102
|
self[:version] = metadata["version"]
|
88
|
-
self[:name] = "
|
103
|
+
self[:name] = "#{self[:package_prefix]}#{self[:suffix]}-#{metadata["name"]}"
|
89
104
|
self[:url] = metadata["url"]
|
90
105
|
|
91
106
|
self[:dependencies] = metadata["dependencies"].collect do |dep|
|
92
107
|
name, cmp, version = dep.split
|
93
|
-
"
|
108
|
+
"#{self[:package_prefix]}#{self[:suffix]}-#{name} #{cmp} #{version}"
|
94
109
|
end
|
95
110
|
end # def get_metadata
|
96
111
|
|
@@ -101,7 +116,7 @@ class FPM::Source::Python < FPM::Source
|
|
101
116
|
# Some setup.py's assume $PWD == current directory of setup.py, so let's
|
102
117
|
# chdir first.
|
103
118
|
::Dir.chdir(dir) do
|
104
|
-
|
119
|
+
safesystem(self[:settings][:python], "setup.py", "bdist")
|
105
120
|
end
|
106
121
|
|
107
122
|
dist_tar = ::Dir.glob(File.join(dir, "dist", "*.tar.gz")).first
|
@@ -110,7 +125,7 @@ class FPM::Source::Python < FPM::Source
|
|
110
125
|
|
111
126
|
@paths = [ "." ]
|
112
127
|
|
113
|
-
|
128
|
+
safesystem("cp", dist_tar, "#{tar_path}.gz")
|
114
129
|
end # def make_tarball!
|
115
130
|
|
116
131
|
def garbage
|
data/lib/fpm/source/rpm.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "fpm/source"
|
2
|
+
require "fpm/util"
|
2
3
|
|
3
4
|
class FPM::Source::RPM < FPM::Source
|
4
5
|
def get_metadata
|
@@ -18,10 +19,10 @@ class FPM::Source::RPM < FPM::Source
|
|
18
19
|
def make_tarball!(tar_path, builddir)
|
19
20
|
tmpdir = "#{tar_path}.dir"
|
20
21
|
::Dir.mkdir(tmpdir)
|
21
|
-
|
22
|
+
safesystem("rpm2cpio #{@rpm} | (cd #{tmpdir}; cpio -i --make-directories)")
|
22
23
|
tar(tar_path, ".", tmpdir)
|
23
24
|
@paths = ["."]
|
24
25
|
# TODO(sissel): Make a helper method.
|
25
|
-
|
26
|
+
safesystem(*["gzip", "-f", tar_path])
|
26
27
|
end
|
27
28
|
end
|
data/lib/fpm/source/tar.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
+
require "fpm/rubyfixes"
|
1
2
|
require "fpm/source"
|
3
|
+
require "fpm/util"
|
2
4
|
require "fileutils"
|
3
|
-
require "fpm/rubyfixes"
|
4
5
|
|
5
6
|
class FPM::Source::Tar < FPM::Source
|
6
7
|
def get_metadata
|
@@ -14,6 +15,8 @@ class FPM::Source::Tar < FPM::Source
|
|
14
15
|
compression = :bipz2
|
15
16
|
elsif input_tarball =~ /\.tar\.gz$/
|
16
17
|
compression = :gzip
|
18
|
+
elsif input_tarball =~ /\.tar\.xz$/
|
19
|
+
compression = :lzma
|
17
20
|
else
|
18
21
|
compression = :none
|
19
22
|
end
|
@@ -25,10 +28,11 @@ class FPM::Source::Tar < FPM::Source
|
|
25
28
|
case compression
|
26
29
|
when :bzip2; flags += " -j"
|
27
30
|
when :gzip; flags += " -z"
|
31
|
+
when :lzma; flags += " --lzma"
|
28
32
|
end
|
29
33
|
#puts("tar #{flags}")
|
30
34
|
#sleep 5
|
31
|
-
|
35
|
+
safesystem("tar #{flags}")
|
32
36
|
|
33
37
|
if self[:prefix]
|
34
38
|
@paths = [self[:prefix]]
|
@@ -41,6 +45,6 @@ class FPM::Source::Tar < FPM::Source
|
|
41
45
|
end
|
42
46
|
|
43
47
|
# TODO(sissel): Make a helper method.
|
44
|
-
|
48
|
+
safesystem(*["gzip", "-f", tar_path])
|
45
49
|
end # def make_tarball!
|
46
50
|
end # class FPM::Source::Dir
|
data/lib/fpm/target/deb.rb
CHANGED
@@ -2,6 +2,7 @@ require "erb"
|
|
2
2
|
require "fpm/namespace"
|
3
3
|
require "fpm/package"
|
4
4
|
require "fpm/errors"
|
5
|
+
require "fpm/util"
|
5
6
|
|
6
7
|
class FPM::Target::Deb < FPM::Package
|
7
8
|
|
@@ -12,6 +13,16 @@ class FPM::Target::Deb < FPM::Package
|
|
12
13
|
"For = dependencies, allow iterations on the specified version. Default is to be specific.") do |x|
|
13
14
|
settings.target[:ignore_iteration] = true
|
14
15
|
end
|
16
|
+
|
17
|
+
opts.on("--pre-depends DEPENDENCY", "Add DEPENDENCY as Pre-Depends.") do |dep|
|
18
|
+
(settings.target[:pre_depends] ||= []) << dep
|
19
|
+
end
|
20
|
+
|
21
|
+
# Take care about the case when we want custom control file but still use fpm ...
|
22
|
+
opts.on("--custom-control FILEPATH",
|
23
|
+
"Custom version of the Debian control file.") do |control|
|
24
|
+
settings.target[:control] = File.expand_path(control)
|
25
|
+
end
|
15
26
|
end
|
16
27
|
|
17
28
|
def needs_md5sums
|
@@ -62,20 +73,29 @@ class FPM::Target::Deb < FPM::Package
|
|
62
73
|
|
63
74
|
def build!(params)
|
64
75
|
control_files = [ "control", "md5sums" ]
|
76
|
+
|
77
|
+
# Use custom Debian control file when given ...
|
78
|
+
if self.settings[:control]
|
79
|
+
%x{cp #{self.settings[:control]} ./control 2> /dev/null 2>&1}
|
80
|
+
@logger.warn("Unable to process custom Debian control file (exit " \
|
81
|
+
"code: #{$?.exitstatus}). Falling back to default " \
|
82
|
+
"template.") unless $?.exitstatus == 0
|
83
|
+
end
|
84
|
+
|
65
85
|
# place the postinst prerm files
|
66
86
|
self.scripts.each do |name, path|
|
67
87
|
case name
|
68
88
|
when "pre-install"
|
69
|
-
|
89
|
+
safesystem("cp #{path} ./preinst")
|
70
90
|
control_files << "preinst"
|
71
91
|
when "post-install"
|
72
|
-
|
92
|
+
safesystem("cp #{path} ./postinst")
|
73
93
|
control_files << "postinst"
|
74
94
|
when "pre-uninstall"
|
75
|
-
|
95
|
+
safesystem("cp #{path} ./prerm")
|
76
96
|
control_files << "prerm"
|
77
97
|
when "post-uninstall"
|
78
|
-
|
98
|
+
safesystem("cp #{path} ./postrm")
|
79
99
|
control_files << "postrm"
|
80
100
|
else raise "Unsupported script name '#{name}' (path: #{path})"
|
81
101
|
end # case name
|
@@ -87,13 +107,13 @@ class FPM::Target::Deb < FPM::Package
|
|
87
107
|
end
|
88
108
|
|
89
109
|
# Make the control
|
90
|
-
|
110
|
+
safesystem("tar -zcf control.tar.gz #{control_files.map{ |f| "./#{f}" }.join(" ")}")
|
91
111
|
|
92
112
|
# create debian-binary
|
93
113
|
File.open("debian-binary", "w") { |f| f.puts "2.0" }
|
94
114
|
|
95
115
|
# pack up the .deb
|
96
|
-
|
116
|
+
safesystem("ar -qc #{params[:output]} debian-binary control.tar.gz data.tar.gz")
|
97
117
|
end # def build
|
98
118
|
|
99
119
|
def default_output
|
@@ -149,4 +169,8 @@ class FPM::Target::Deb < FPM::Package
|
|
149
169
|
return dep
|
150
170
|
end
|
151
171
|
end # def fix_dependency
|
172
|
+
|
173
|
+
def pre_dependencies
|
174
|
+
self.settings[:pre_depends] || []
|
175
|
+
end # def pre_dependencies
|
152
176
|
end # class FPM::Target::Deb
|
data/lib/fpm/target/rpm.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "fpm/package"
|
2
|
+
require "fpm/util"
|
2
3
|
|
3
4
|
class FPM::Target::Rpm < FPM::Package
|
4
5
|
def architecture
|
@@ -19,16 +20,28 @@ class FPM::Target::Rpm < FPM::Package
|
|
19
20
|
"#{builddir}/#{name}.spec"
|
20
21
|
end
|
21
22
|
|
23
|
+
def url
|
24
|
+
if @url.nil? || @url.empty?
|
25
|
+
'http://nourlgiven.example.com'
|
26
|
+
else
|
27
|
+
@url
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def version
|
32
|
+
if @version.kind_of?(String) and @version.include?("-")
|
33
|
+
@logger.info("Package version '#{@version}' includes dashes, converting" \
|
34
|
+
" to underscores")
|
35
|
+
@version = @version.gsub(/-/, "_")
|
36
|
+
end
|
37
|
+
|
38
|
+
return @version
|
39
|
+
end
|
40
|
+
|
22
41
|
def build!(params)
|
23
42
|
raise "No package name given. Can't assemble package" if !@name
|
24
43
|
# TODO(sissel): Abort if 'rpmbuild' tool not found.
|
25
44
|
|
26
|
-
if !replaces.empty?
|
27
|
-
$stderr.puts "Warning: RPM does not support 'replaces'"
|
28
|
-
$stderr.puts "If you have suggstions as to what --replaces means to RPM"
|
29
|
-
$stderr.puts "Please let me know: https://github.com/jordansissel/fpm/issues"
|
30
|
-
end
|
31
|
-
|
32
45
|
%w(BUILD RPMS SRPMS SOURCES SPECS).each { |d| Dir.mkdir(d) }
|
33
46
|
args = ["rpmbuild", "-ba",
|
34
47
|
"--define", "buildroot #{Dir.pwd}/BUILD",
|
@@ -36,14 +49,11 @@ class FPM::Target::Rpm < FPM::Package
|
|
36
49
|
"--define", "_sourcedir #{Dir.pwd}",
|
37
50
|
"--define", "_rpmdir #{Dir.pwd}/RPMS",
|
38
51
|
"#{name}.spec"]
|
39
|
-
|
40
|
-
if !ret
|
41
|
-
raise "rpmbuild failed (exit code: #{$?.exitstatus})"
|
42
|
-
end
|
52
|
+
safesystem(*args)
|
43
53
|
|
44
54
|
Dir["#{Dir.pwd}/RPMS/**/*.rpm"].each do |path|
|
45
55
|
# This should only output one rpm, should we verify this?
|
46
|
-
|
56
|
+
safesystem("mv", path, params[:output])
|
47
57
|
end
|
48
58
|
end # def build!
|
49
59
|
end # class FPM::Target::RPM
|
data/lib/fpm/target/solaris.rb
CHANGED
@@ -2,6 +2,7 @@ require "erb"
|
|
2
2
|
require "fpm/namespace"
|
3
3
|
require "fpm/package"
|
4
4
|
require "fpm/errors"
|
5
|
+
require "fpm/util"
|
5
6
|
|
6
7
|
# TODO(sissel): Add dependency checking support.
|
7
8
|
# IIRC this has to be done as a 'checkinstall' step.
|
@@ -25,10 +26,10 @@ class FPM::Target::Solaris < FPM::Package
|
|
25
26
|
self.scripts.each do |name, path|
|
26
27
|
case name
|
27
28
|
when "pre-install"
|
28
|
-
|
29
|
+
safesystem("cp #{path} ./preinstall")
|
29
30
|
File.chmod(0755, "./preinstall")
|
30
31
|
when "post-install"
|
31
|
-
|
32
|
+
safesystem("cp #{path} ./postinstall")
|
32
33
|
File.chmod(0755, "./postinstall")
|
33
34
|
when "pre-uninstall"
|
34
35
|
raise FPM::InvalidPackageConfiguration.new(
|
@@ -43,9 +44,9 @@ class FPM::Target::Solaris < FPM::Package
|
|
43
44
|
|
44
45
|
# Unpack data.tar.gz so we can build a package from it.
|
45
46
|
Dir.mkdir("data")
|
46
|
-
|
47
|
+
safesystem("gzip -d data.tar.gz");
|
47
48
|
Dir.chdir("data") do
|
48
|
-
|
49
|
+
safesystem("tar -xf ../data.tar");
|
49
50
|
end
|
50
51
|
|
51
52
|
#system("(echo 'i pkginfo'; pkgproto data=/) > Prototype")
|
@@ -69,10 +70,10 @@ class FPM::Target::Solaris < FPM::Package
|
|
69
70
|
end # File prototype
|
70
71
|
|
71
72
|
# Should create a package directory named by the package name.
|
72
|
-
|
73
|
+
safesystem("pkgmk -o -d .")
|
73
74
|
|
74
75
|
# Convert the 'package directory' built above to a real solaris package.
|
75
|
-
|
76
|
+
safesystem("pkgtrans -s . #{params[:output]} #{name}")
|
76
77
|
end # def build
|
77
78
|
|
78
79
|
def default_output
|
data/lib/fpm/util.rb
ADDED
data/templates/deb.erb
CHANGED
@@ -6,6 +6,10 @@ Maintainer: <%= maintainer or "<unknown>" %>
|
|
6
6
|
<% properdeps = dependencies.collect { |d| fix_dependency(d) }.flatten -%>
|
7
7
|
Depends: <%= properdeps.flatten.join(", ") %>
|
8
8
|
<% end -%>
|
9
|
+
<% if !pre_dependencies.empty? -%>
|
10
|
+
<% properpredeps = pre_dependencies.collect { |d| fix_dependency(d) }.flatten -%>
|
11
|
+
Pre-Depends: <%= properpredeps.flatten.join(", ") %>
|
12
|
+
<% end -%>
|
9
13
|
<% if !conflicts.empty? -%>
|
10
14
|
Conflicts: <%= conflicts.join(", ") %>
|
11
15
|
<% end -%>
|
data/templates/rpm.erb
CHANGED
@@ -31,8 +31,8 @@ BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
|
|
31
31
|
nextversion[l-1] = 0
|
32
32
|
nextversion = nextversion.join(".")
|
33
33
|
["#{name} >= #{version}", "#{name} < #{nextversion}"]
|
34
|
-
|
35
|
-
|
34
|
+
elsif d =~ /\d [<>]=? [0-9.+] [<>]=? \d/
|
35
|
+
# Convert gem >= A.B.C <= X.Y.Z to '>= A.B.C' and '<= X.Y.Z'
|
36
36
|
puts d
|
37
37
|
# split out version numbers with their equality sign
|
38
38
|
name, lower_version, upper_version = d.scan(/([\w-]+) ([<>]=? [\d\.]+) ([<>]=? [\d\.]+)/)[0]
|
data/templates/solaris.erb
CHANGED
@@ -11,5 +11,5 @@ CATEGORY=application
|
|
11
11
|
DESC=<%= description.split("\n").first[0..255] or "no description given" %>
|
12
12
|
VENDOR=<%= maintainer %>
|
13
13
|
<%# Take maintainer of "Foo <bar@baz.com>" and use "bar@baz.com" -%>
|
14
|
-
EMAIL=<%= maintainer[/<.+>/].gsub(/[<>]/, "") %>
|
14
|
+
EMAIL=<%= (maintainer[/<.+>/] or maintainer).gsub(/[<>]/, "") %>
|
15
15
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fpm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 8
|
10
|
+
version: 0.3.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jordan Sissel
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-09-06 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: json
|
@@ -53,6 +52,7 @@ files:
|
|
53
52
|
- lib/fpm/source.rb
|
54
53
|
- lib/fpm/namespace.rb
|
55
54
|
- lib/fpm/package.rb
|
55
|
+
- lib/fpm/util.rb
|
56
56
|
- lib/fpm/program.rb
|
57
57
|
- lib/fpm/source/gem.rb
|
58
58
|
- lib/fpm/source/npm.rb
|
@@ -80,7 +80,6 @@ files:
|
|
80
80
|
- LICENSE
|
81
81
|
- CONTRIBUTORS
|
82
82
|
- CHANGELIST
|
83
|
-
has_rdoc: true
|
84
83
|
homepage: https://github.com/jordansissel/fpm
|
85
84
|
licenses: []
|
86
85
|
|
@@ -111,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
110
|
requirements: []
|
112
111
|
|
113
112
|
rubyforge_project:
|
114
|
-
rubygems_version: 1.
|
113
|
+
rubygems_version: 1.7.2
|
115
114
|
signing_key:
|
116
115
|
specification_version: 3
|
117
116
|
summary: fpm - package building and mangling
|