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.
@@ -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
- system("gzip -d #{data_tarball}")
106
+ safesystem("gzip -d #{data_tarball}")
106
107
  Dir.chdir(@package.unpack_data_to) do
107
108
  @source.root = Dir.pwd
108
- system("tar -xf #{data_tarball.gsub(/\.gz$/, "")}")
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
- system("#{editor} '#{package.specfile(builddir)}'")
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
- next if !File.exists?(path)
206
- %x{find #{path} -type f -printf %P\\\\0 | xargs -0 md5sum}.split("\n")
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
@@ -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
- ::Dir.chdir(chdir) do
127
- system(*dir_tar) if dirs.any?
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
- system(*files_tar)
140
+ safesystem(*files_tar)
136
141
  end
137
142
  end # def tar
138
143
 
@@ -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
- system(*rsync)
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
- system("ls #{builddir}/tarbuild")
49
+ safesystem("ls #{builddir}/tarbuild") if $DEBUG
49
50
  tar(tar_path, ".")
50
51
  end
51
52
  else
52
- tar(tar_path, paths)
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
- system(*["gzip", "-f", tar_path])
59
+ safesystem(*["gzip", "-f", tar_path])
57
60
  end # def make_tarball!
58
61
  end # class FPM::Source::Dir
@@ -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[:name] = "rubygem#{self[:suffix]}-#{spec.name}"
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] << "rubygem#{self[:suffix]}-#{dep.name} #{req}"
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 = ["gem", "install", "--quiet", "--no-ri", "--no-rdoc",
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
- system(*args)
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
- system(*["gzip", "-f", tar_path])
159
+ safesystem(*["gzip", "-f", tar_path])
138
160
  end
139
161
 
140
162
  end # class FPM::Source::Gem
@@ -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
- system(*args)
29
+ safesystem(*args)
29
30
  tar(tar_path, ".", tmpdir)
30
31
 
31
32
  # TODO(sissel): Make a helper method.
32
- system(*["gzip", "-f", tar_path])
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
- print json.dumps(data, indent=2)
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
@@ -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
- return_value = system(self[:settings][:easy_install], "--editable", "--build-directory", @tmpdir, want_pkg)
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] = "python#{self[:suffix]}-#{metadata["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
- "python#{self[:suffix]}-#{name} #{cmp} #{version}"
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
- system(self[:settings][:python], "setup.py", "bdist")
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
- system("cp", dist_tar, "#{tar_path}.gz")
128
+ safesystem("cp", dist_tar, "#{tar_path}.gz")
114
129
  end # def make_tarball!
115
130
 
116
131
  def garbage
@@ -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
- system("rpm2cpio #{@rpm} | (cd #{tmpdir}; cpio -i --make-directories)")
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
- system(*["gzip", "-f", tar_path])
26
+ safesystem(*["gzip", "-f", tar_path])
26
27
  end
27
28
  end
@@ -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
- system("tar #{flags}")
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
- system(*["gzip", "-f", tar_path])
48
+ safesystem(*["gzip", "-f", tar_path])
45
49
  end # def make_tarball!
46
50
  end # class FPM::Source::Dir
@@ -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
- system("cp #{path} ./preinst")
89
+ safesystem("cp #{path} ./preinst")
70
90
  control_files << "preinst"
71
91
  when "post-install"
72
- system("cp #{path} ./postinst")
92
+ safesystem("cp #{path} ./postinst")
73
93
  control_files << "postinst"
74
94
  when "pre-uninstall"
75
- system("cp #{path} ./prerm")
95
+ safesystem("cp #{path} ./prerm")
76
96
  control_files << "prerm"
77
97
  when "post-uninstall"
78
- system("cp #{path} ./postrm")
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
- system("tar -zcf control.tar.gz #{control_files.join(" ")}")
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
- system("ar -qc #{params[:output]} debian-binary control.tar.gz data.tar.gz")
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
@@ -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
- ret = system(*args)
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
- system("mv", path, params[:output])
56
+ safesystem("mv", path, params[:output])
47
57
  end
48
58
  end # def build!
49
59
  end # class FPM::Target::RPM
@@ -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
- system("cp #{path} ./preinstall")
29
+ safesystem("cp #{path} ./preinstall")
29
30
  File.chmod(0755, "./preinstall")
30
31
  when "post-install"
31
- system("cp #{path} ./postinstall")
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
- system("gzip -d data.tar.gz");
47
+ safesystem("gzip -d data.tar.gz");
47
48
  Dir.chdir("data") do
48
- system("tar -xf ../data.tar");
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
- system("pkgmk -o -d .")
73
+ safesystem("pkgmk -o -d .")
73
74
 
74
75
  # Convert the 'package directory' built above to a real solaris package.
75
- system("pkgtrans -s . #{params[:output]} #{name}")
76
+ safesystem("pkgtrans -s . #{params[:output]} #{name}")
76
77
  end # def build
77
78
 
78
79
  def default_output
@@ -0,0 +1,7 @@
1
+ def safesystem(*args)
2
+ success = system(*args)
3
+ if !success
4
+ raise "'system(#{args.inspect})' failed with error code: #{$?.exitstatus}"
5
+ end
6
+ return success
7
+ end # def safesystem
@@ -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 -%>
@@ -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
- # Convert gem >= A.B.C <= X.Y.Z to '>= A.B.C' and '<= X.Y.Z'
35
- elsif d =~ /\d [<>]=? \d/
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]
@@ -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: 29
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 7
10
- version: 0.3.7
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-07-11 00:00:00 -07:00
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.6.2
113
+ rubygems_version: 1.7.2
115
114
  signing_key:
116
115
  specification_version: 3
117
116
  summary: fpm - package building and mangling