fpm 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -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