fpm 0.4.36 → 0.4.37

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELIST CHANGED
@@ -1,3 +1,11 @@
1
+ 0.4.37 (May 30, 2013)
2
+ - deb: fix creation failures on OS X (#450, patch by Anthony Scalisi and
3
+ Matthew M. Boedicker)
4
+ - deb: you can now set --deb-build-depends. This is generally for extremely
5
+ rare use cases. (#451, patch by torrancew)
6
+ - perl: add --cpan-perl-lib-path for a custom perl library installation path
7
+ (#447, patch by Brett Gailey)
8
+
1
9
  0.4.36 (May 15, 2013)
2
10
  - pear: only do channel-discover if necessary (#438, patch by Hatt)
3
11
  - cpan: now supports cpan modules that use Module::Build
@@ -13,9 +13,17 @@ class FPM::Package::CPAN < FPM::Package
13
13
  option "--package-name-prefix", "NAME_PREFIX", "Name to prefix the package " \
14
14
  "name with.", :default => "perl"
15
15
  option "--test", :flag, "Run the tests before packaging?", :default => true
16
+ option "--perl-lib-path", "PERL_LIB_PATH", "Path of target Perl Libraries"
16
17
 
17
18
  private
18
19
  def input(package)
20
+ if RUBY_VERSION =~ /^1\.8/
21
+ raise FPM::Package::InvalidArgument,
22
+ "Sorry, CPAN support requires ruby 1.9 or higher. You have " \
23
+ "#{RUBY_VERSION}. If this negatively impacts you, please let " \
24
+ "me know by filing an issue: " \
25
+ "https://github.com/jordansissel/fpm/issues"
26
+ end
19
27
  require "ftw" # for http access
20
28
  require "json"
21
29
 
@@ -108,12 +116,20 @@ class FPM::Package::CPAN < FPM::Package
108
116
  # Try Makefile.PL, Build.PL
109
117
  #
110
118
  if File.exists?("Makefile.PL")
111
- safesystem(attributes[:cpan_perl_bin],
112
- "-Mlocal::lib=#{build_path("cpan")}",
113
- "Makefile.PL",
114
- "PREFIX=#{prefix}",
115
- # Empty install_base to avoid local::lib being used.
116
- "INSTALL_BASE=")
119
+ if attributes[:cpan_perl_lib_path]
120
+ perl_lib_path = attributes[:cpan_perl_lib_path]
121
+ safesystem(attributes[:cpan_perl_bin],
122
+ "-Mlocal::lib=#{build_path("cpan")}",
123
+ "Makefile.PL", "PREFIX=#{prefix}", "LIB=#{perl_lib_path}",
124
+ # Empty install_base to avoid local::lib being used.
125
+ "INSTALL_BASE=")
126
+ else
127
+ safesystem(attributes[:cpan_perl_bin],
128
+ "-Mlocal::lib=#{build_path("cpan")}",
129
+ "Makefile.PL", "PREFIX=#{prefix}",
130
+ # Empty install_base to avoid local::lib being used.
131
+ "INSTALL_BASE=")
132
+ end
117
133
  make = [ "make" ]
118
134
  safesystem(*make)
119
135
  safesystem(*(make + ["test"])) if attributes[:cpan_test?]
@@ -128,16 +144,29 @@ class FPM::Package::CPAN < FPM::Package
128
144
  if attributes[:cpan_test?]
129
145
  safesystem("./Build", "test")
130
146
  end
131
-
132
- safesystem("./Build", "install",
133
- "--prefix", prefix, "--destdir", staging_path,
134
- # Empty install_base to avoid local::lib being used.
135
- "--install_base", "")
147
+ if attributes[:cpan_perl_lib_path]
148
+ perl_lib_path = attributes[:cpan_perl_lib_path]
149
+ safesystem("./Build install --install_path lib=#{perl_lib_path} \
150
+ --destdir #{staging_path} --prefix #{prefix} --destdir #{staging_path}")
151
+ else
152
+ safesystem("./Build", "install",
153
+ "--prefix", prefix, "--destdir", staging_path,
154
+ # Empty install_base to avoid local::lib being used.
155
+ "--install_base", "")
156
+ end
136
157
  else
137
158
  raise FPM::InvalidPackageConfiguration,
138
159
  "I don't know how to build #{name}. No Makefile.PL nor " \
139
160
  "Build.PL found"
140
161
  end
162
+
163
+ # Fix any files likely to cause conflicts.
164
+ # https://github.com/jordansissel/fpm/issues/443
165
+ ::Dir.glob(File.join(staging_path, prefix, "lib/perl/*/perllocal.pod")).each do |path|
166
+ @logger.debug("Removing useless file.",
167
+ :path => path.gsub(staging_path, ""))
168
+ File.unlink(path)
169
+ end
141
170
  end
142
171
 
143
172
 
@@ -176,7 +205,8 @@ class FPM::Package::CPAN < FPM::Package
176
205
  version = metadata["version"] if version.nil?
177
206
 
178
207
  tarball = "#{distribution}-#{version}.tar.gz"
179
- url = "http://search.cpan.org/CPAN/authors/id/#{author[0,1]}/#{author[0,2]}/#{author}/#{tarball}"
208
+ url = "http://www.cpan.org/CPAN/authors/id/#{author[0,1]}/#{author[0,2]}/#{author}/#{tarball}"
209
+ @logger.debug("Fetching perl module", :url => url)
180
210
  response = agent.get!(url)
181
211
  if response.error?
182
212
  @logger.error("Download failed", :error => response.status_line,
@@ -28,6 +28,12 @@ class FPM::Package::Deb < FPM::Package
28
28
  "version. Default is to be specific. This option allows the same " \
29
29
  "version of a package but any iteration is permitted"
30
30
 
31
+ option "--build-depends", "DEPENDENCY",
32
+ "Add DEPENDENCY as a Build-Depends" do |dep|
33
+ @build_depends ||= []
34
+ @build_depends << dep
35
+ end
36
+
31
37
  option "--pre-depends", "DEPENDENCY",
32
38
  "Add DEPENDENCY as a Pre-Depends" do |dep|
33
39
  @pre_depends ||= []
@@ -316,12 +322,17 @@ class FPM::Package::Deb < FPM::Package
316
322
  raise FPM::InvalidPackageConfiguration,
317
323
  "Unknown compression type '#{self.attributes[:deb_compression]}'"
318
324
  end
325
+
319
326
  tar_flags = []
320
327
  if !attributes[:deb_user].nil?
321
328
  tar_flags += [ "--owner", attributes[:deb_user] ]
322
329
  end
323
330
  if !attributes[:deb_group].nil?
324
- tar_flags += [ "--group", attributes[:deb_group] ]
331
+ if attributes[:deb_group] == 'root'
332
+ tar_flags += [ "--numeric-owner", "--group", "0" ]
333
+ else
334
+ tar_flags += [ "--group", attributes[:deb_group] ]
335
+ end
325
336
  end
326
337
 
327
338
  if attributes[:deb_changelog]
@@ -437,8 +448,10 @@ class FPM::Package::Deb < FPM::Package
437
448
  # Make the control.tar.gz
438
449
  with(build_path("control.tar.gz")) do |controltar|
439
450
  @logger.info("Creating", :path => controltar, :from => control_path)
440
- safesystem(tar_cmd, "--owner=root", "--group=root", "-zcf",
441
- controltar, "-C", control_path, ".")
451
+
452
+ args = [ tar_cmd, "-C", control_path, "-zcf", controltar,
453
+ "--owner=0", "--group=0", "--numeric-owner", "." ]
454
+ safesystem(*args)
442
455
  end
443
456
 
444
457
  @logger.debug("Removing no longer needed control dir", :path => control_path)
@@ -56,15 +56,7 @@ class FPM::Package::NPM < FPM::Package
56
56
  # Query details about our now-installed package.
57
57
  # We do this by using 'npm ls' with json + long enabled to query details
58
58
  # about the installed package.
59
- npm_ls_cmd = [attributes[:npm_bin], "ls", "--json", "--long", package] + npm_flags
60
- npm_ls_fd = IO.popen(npm_ls_cmd)
61
- npm_ls_out = npm_ls_fd.read()
62
- pid, status = Process.waitpid2(npm_ls_fd.pid)
63
- if !status.success?
64
- raise FPM::Util::ProcessFailed.new("#{npm_ls_cmd.first} failed (exit " \
65
- "code #{status.exitstatus}). " \
66
- "Full command was: #{npm_ls_cmd.inspect}")
67
- end
59
+ npm_ls_out = safesystemout(attributes[:npm_bin], "ls", "--json", "--long", package, *npm_flags)
68
60
  npm_ls = JSON.parse(npm_ls_out)
69
61
  name, info = npm_ls["dependencies"].first
70
62
 
@@ -59,16 +59,9 @@ class FPM::Package::PEAR < FPM::Package
59
59
  # do channel-discover if required
60
60
  if !attributes[:pear_channel].nil?
61
61
  @logger.info("Custom channel specified", :channel => attributes[:pear_channel])
62
- pear_lc_cmd = "pear -c #{config} list-channels"
63
- pear_lc_fd = IO.popen(pear_lc_cmd)
64
- pear_lc_out = pear_lc_fd.read()
65
- pid, status = Process.waitpid2(pear_lc_fd.pid)
66
- if !status.success?
67
- raise FPM::Util::ProcessFailed.new("#{pear_ls_cmd.first} failed (exit " \
68
- "code #{status.exitstatus}). " \
69
- "Full command was: #{pear_ls_cmd.inspect}")
70
- end
71
- if !pear_lc_out =~ /#{Regexp.quote(attributes[:pear_channel])}/
62
+ channel_list = safesystemout("pear", "-c", config, "list-channels")
63
+
64
+ if !channel_list =~ /#{Regexp.quote(attributes[:pear_channel])}/
72
65
  @logger.info("Discovering new channel", :channel => attributes[:pear_channel])
73
66
  safesystem("pear", "-c", config, "channel-discover", attributes[:pear_channel])
74
67
  end
@@ -58,6 +58,41 @@ module FPM::Util
58
58
  return success
59
59
  end # def safesystem
60
60
 
61
+ # Run a command safely in a way that captures output and status.
62
+ def safesystemout(*args)
63
+ if args.size == 1
64
+ args = [ ENV["SHELL"], "-c", args[0] ]
65
+ end
66
+ program = args[0]
67
+
68
+ if !program.include?("/") and !program_in_path?(program)
69
+ raise ExecutableNotFound.new(program)
70
+ end
71
+
72
+ @logger.debug("Running command", :args => args)
73
+
74
+ stdout_r, stdout_w = IO.pipe
75
+ stderr_r, stderr_w = IO.pipe
76
+
77
+ process = ChildProcess.build(*args)
78
+ process.io.stdout = stdout_w
79
+ process.io.stderr = stderr_w
80
+
81
+ process.start
82
+ stdout_w.close; stderr_w.close
83
+ @logger.debug("Process is running", :pid => process.pid)
84
+
85
+ process.wait
86
+ success = (process.exit_code == 0)
87
+
88
+ if !success
89
+ raise ProcessFailed.new("#{program} failed (exit code #{process.exit_code})" \
90
+ ". Full command was:#{args.inspect}")
91
+ end
92
+
93
+ return :stdout_r
94
+ end # def safesystemout
95
+
61
96
  # Get the recommended 'tar' command for this platform.
62
97
  def tar_cmd
63
98
  # Rely on gnu tar for solaris and OSX.
@@ -1,3 +1,3 @@
1
1
  module FPM
2
- VERSION = "0.4.36"
2
+ VERSION = "0.4.37"
3
3
  end
@@ -17,6 +17,9 @@ Breaks: <%= attributes[:deb_breaks].collect { |d| fix_dependency(d) }.flatten.jo
17
17
  <% if attributes[:deb_pre_depends_given?] -%>
18
18
  Pre-Depends: <%= attributes[:deb_pre_depends].collect { |d| fix_dependency(d) }.flatten.join(", ") %>
19
19
  <% end -%>
20
+ <% if attributes[:deb_build_depends_given?] -%>
21
+ Build-Depends: <%= attributes[:deb_build_depends].collect { |d| fix_dependency(d) }.flatten.join(", ") %>
22
+ <% end -%>
20
23
  <% if !provides.empty? -%>
21
24
  <%# Turn each provides from 'foo = 123' to simply 'foo' because Debian :\ -%>
22
25
  <%# http://www.debian.org/doc/debian-policy/ch-relationships.html -%>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fpm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.36
4
+ version: 0.4.37
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-15 00:00:00.000000000 Z
12
+ date: 2013-05-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -96,17 +96,17 @@ dependencies:
96
96
  requirement: !ruby/object:Gem::Requirement
97
97
  none: false
98
98
  requirements:
99
- - - '='
99
+ - - ~>
100
100
  - !ruby/object:Gem::Version
101
- version: 0.6.0
101
+ version: '0.6'
102
102
  type: :runtime
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
- - - '='
107
+ - - ~>
108
108
  - !ruby/object:Gem::Version
109
- version: 0.6.0
109
+ version: '0.6'
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: childprocess
112
112
  requirement: !ruby/object:Gem::Requirement