fpm 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 1865c3f86f85b91177908b4ab565d14586795cb8
4
- data.tar.gz: 0fbd72a7c8db1b4eb11104990182f248233e2252
5
- SHA512:
6
- metadata.gz: 3b988637a79243d70644a911e65143784129de29278a3581b31f777a433570fde9fbb125ae12f7ff15c81ba043917a67dac0c98a383e50ed49676457ff48d23c
7
- data.tar.gz: 350fbd84054b7685815b527ff6cb51dcbd8ab8d4331f84f0deb0450f40ac6c12a7e06c8cf6df8caa2e8980512daf0439bbca5f3cd200ed04f1f368443effc088
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 94e2acc2a51dca9658374538128343b060301a57
4
+ data.tar.gz: ae3771e347496bd609cfa118c602d59a9277daf5
5
+ SHA512:
6
+ metadata.gz: 21ce60f7679ae634fdf4a55214b93476bc0d14d41fe1806b4f25133dfa6b4035dc4acf1d4c9d3eaa420a3960a2daedf11e6dd16499dcd04be09d13718432d4ef
7
+ data.tar.gz: dab536c4438a4db9f1920a8be8903b62060ac0b7a9c1b075eeedda225364bb79ea7f55d942163167262995b0d749c9f8859caf8997656fe6378046d761894535
data/CHANGELIST CHANGED
@@ -1,3 +1,25 @@
1
+ 1.3.0 (????)
2
+ - Fixed a bunch of Ruby 1.8.7-related bugs. (Jordan Sissel)
3
+ - cpan: Fix bug in author handling (#744, Leon Weidauer)
4
+ - cpan: Better removal of perllocal.pod (#763, #443, #510, Mathias Lafeldt)
5
+ - rpm: Use lstat calls instead of stat, so we don't follow symlinks (#765, Shrijeet Paliwal)
6
+ - rpm and deb: Now supports script actions on upgrades. This adds two new flags:
7
+ --before-upgrade and --after-upgrade. (#772, #661; Daniel Haskin)
8
+ - rpm: Package triggers are now supported. New flags: --rpm-trigger-before-install,
9
+ --rpm-trigger-after-install, --rpm-trigger-before-uninstall,
10
+ --rpm-trigger-after-target-uninstall. (#626, Maxime Caumartin)
11
+ - rpm: Add --rpm-init flag; similar to --deb-init. (Josh Dolitsky)
12
+ - sh: Skip installation if already installed for the given version. If forced,
13
+ the old installation is renamed. (#776, Chris Gerber)
14
+ - deb: Allow Vendor field to be omitted now by specifying `--vendor ""` (#778, Nate Brown)
15
+ - general: Add --log=level flag for setting log level. Levels are error, warn, info, debug. (Jordan SIssel)
16
+ - cpan: Check for Build.PL first before Makefile.PL (#787, Daniel Jay Haskin)
17
+ - dir: Don't follow symlinks when copying files (#658, Jordan Sissel)
18
+ - deb: Automatically provide a 'changes' file in debs because lintian
19
+ complains if they are missing. (#784, Jordan Sissel)
20
+ - deb: Fix and warn for package names that have spaces (#779, Grantlyk)
21
+ - npm: Automatically set the prefix to `npm prefix -g` (#758, Brady Wetherington and Jordan Sissel)
22
+
1
23
  1.2.0 (July 25, 2014)
2
24
  - rpm: Add --rpm-verifyscript for adding a custom rpm verify script to
3
25
  your package. (Remi Hakim)
@@ -19,6 +19,7 @@ Oliver Hookins (github: ohookins)
19
19
  llasram
20
20
  sbuss
21
21
  Brett Gailey (github: dnbert)
22
+ Daniel Haskin (github: djhaskin987)
22
23
 
23
24
  If you have contributed (bug reports, feature requests, help in IRC, blog
24
25
  posts, code, etc) and aren't listed here, please let me know if you wish to be
@@ -58,6 +58,16 @@ class FPM::Command < Clamp::Command
58
58
  option ["-f", "--force"], :flag, "Force output even if it will overwrite an " \
59
59
  "existing file", :default => false
60
60
  option ["-n", "--name"], "NAME", "The name to give to the package"
61
+
62
+ loglevels = %w(error warn info debug)
63
+ option "--log", "LEVEL", "Set the log level. Values: #{loglevels.join(", ")}.",
64
+ :attribute_name => :log_level do |val|
65
+ val.downcase.tap do |v|
66
+ if !loglevels.include?(v)
67
+ raise FPM::Package::InvalidArgument, "Invalid log level, #{v.inspect}. Must be one of: #{loglevels.join(", ")}"
68
+ end
69
+ end
70
+ end # --log
61
71
  option "--verbose", :flag, "Enable verbose output"
62
72
  option "--debug", :flag, "Enable debug output"
63
73
  option "--debug-workspace", :flag, "Keep any file workspaces around for " \
@@ -85,11 +95,11 @@ class FPM::Command < Clamp::Command
85
95
  option "--no-depends", :flag, "Do not list any dependencies in this package",
86
96
  :default => false
87
97
 
88
- option "--no-auto-depends", :flag, "Do not list any dependencies in this" \
98
+ option "--no-auto-depends", :flag, "Do not list any dependencies in this " \
89
99
  "package automatically", :default => false
90
100
 
91
101
  option "--provides", "PROVIDES",
92
- "What this package provides (usually a name). This flag can be "\
102
+ "What this package provides (usually a name). This flag can be " \
93
103
  "specified multiple times.", :multivalued => true,
94
104
  :attribute_name => :provides
95
105
  option "--conflicts", "CONFLICTS",
@@ -97,7 +107,7 @@ class FPM::Command < Clamp::Command
97
107
  "specified multiple times.", :multivalued => true,
98
108
  :attribute_name => :conflicts
99
109
  option "--replaces", "REPLACES",
100
- "Other packages/versions this package replaces. This flag can be "\
110
+ "Other packages/versions this package replaces. This flag can be " \
101
111
  "specified multiple times.", :multivalued => true,
102
112
  :attribute_name => :replaces
103
113
 
@@ -142,42 +152,59 @@ class FPM::Command < Clamp::Command
142
152
  "files and dirs to use as input."
143
153
 
144
154
  option "--post-install", "FILE",
145
- "(DEPRECATED, use --after-install) a script to be run after " \
155
+ "(DEPRECATED, use --after-install) A script to be run after " \
146
156
  "package installation" do |val|
147
157
  @after_install = File.expand_path(val) # Get the full path to the script
148
158
  end # --post-install (DEPRECATED)
149
159
  option "--pre-install", "FILE",
150
- "(DEPRECATED, use --before-install) a script to be run before " \
160
+ "(DEPRECATED, use --before-install) A script to be run before " \
151
161
  "package installation" do |val|
152
162
  @before_install = File.expand_path(val) # Get the full path to the script
153
163
  end # --pre-install (DEPRECATED)
154
164
  option "--post-uninstall", "FILE",
155
- "(DEPRECATED, use --after-remove) a script to be run after " \
165
+ "(DEPRECATED, use --after-remove) A script to be run after " \
156
166
  "package removal" do |val|
157
167
  @after_remove = File.expand_path(val) # Get the full path to the script
158
168
  end # --post-uninstall (DEPRECATED)
159
169
  option "--pre-uninstall", "FILE",
160
- "(DEPRECATED, use --before-remove) a script to be run before " \
170
+ "(DEPRECATED, use --before-remove) A script to be run before " \
161
171
  "package removal" do |val|
162
172
  @before_remove = File.expand_path(val) # Get the full path to the script
163
173
  end # --pre-uninstall (DEPRECATED)
164
174
 
165
175
  option "--after-install", "FILE",
166
- "a script to be run after package installation" do |val|
176
+ "A script to be run after package installation" do |val|
167
177
  File.expand_path(val) # Get the full path to the script
168
178
  end # --after-install
169
179
  option "--before-install", "FILE",
170
- "a script to be run before package installation" do |val|
180
+ "A script to be run before package installation" do |val|
171
181
  File.expand_path(val) # Get the full path to the script
172
- end # --pre-install
182
+ end # --before-install
173
183
  option "--after-remove", "FILE",
174
- "a script to be run after package removal" do |val|
184
+ "A script to be run after package removal" do |val|
175
185
  File.expand_path(val) # Get the full path to the script
176
186
  end # --after-remove
177
187
  option "--before-remove", "FILE",
178
- "a script to be run before package removal" do |val|
188
+ "A script to be run before package removal" do |val|
179
189
  File.expand_path(val) # Get the full path to the script
180
190
  end # --before-remove
191
+ option "--after-upgrade", "FILE",
192
+ "A script to be run after package upgrade. If not specified,\n" \
193
+ "--before-install, --after-install, --before-remove, and \n" \
194
+ "--after-remove wil behave in a backwards-compatible manner\n" \
195
+ "(they will not be upgrade-case aware).\n" \
196
+ "Currently only supports deb and rpm packages." do |val|
197
+ File.expand_path(val) # Get the full path to the script
198
+ end # --after-upgrade
199
+ option "--before-upgrade", "FILE",
200
+ "A script to be run before package upgrade. If not specified,\n" \
201
+ "--before-install, --after-install, --before-remove, and \n" \
202
+ "--after-remove wil behave in a backwards-compatible manner\n" \
203
+ "(they will not be upgrade-case aware).\n" \
204
+ "Currently only supports deb and rpm packages." do |val|
205
+ File.expand_path(val) # Get the full path to the script
206
+ end # --before-upgrade
207
+
181
208
  option "--template-scripts", :flag,
182
209
  "Allow scripts to be templated. This lets you use ERB to template your " \
183
210
  "packaging scripts (for --after-install, etc). For example, you can do " \
@@ -227,10 +254,16 @@ class FPM::Command < Clamp::Command
227
254
  return 0
228
255
  end
229
256
 
230
- @logger.level = :warn
257
+ logger.level = :warn
258
+ logger.level = :info if verbose? # --verbose
259
+ logger.level = :debug if debug? # --debug
260
+ if log_level
261
+ logger.level = log_level.to_sym
262
+ end
263
+
231
264
 
232
265
  if (stray_flags = args.grep(/^-/); stray_flags.any?)
233
- @logger.warn("All flags should be before the first argument " \
266
+ logger.warn("All flags should be before the first argument " \
234
267
  "(stray flags found: #{stray_flags}")
235
268
  end
236
269
 
@@ -239,28 +272,25 @@ class FPM::Command < Clamp::Command
239
272
  # fpm would assume you meant to add '.' to the end of the commandline.
240
273
  # Let's hack that. https://github.com/jordansissel/fpm/issues/187
241
274
  if input_type == "dir" and args.empty? and !chdir.nil?
242
- @logger.info("No args, but -s dir and -C are given, assuming '.' as input")
275
+ logger.info("No args, but -s dir and -C are given, assuming '.' as input")
243
276
  args << "."
244
277
  end
245
278
 
246
- @logger.info("Setting workdir", :workdir => workdir)
279
+ logger.info("Setting workdir", :workdir => workdir)
247
280
  ENV["TMP"] = workdir
248
281
 
249
282
  validator = Validator.new(self)
250
283
  if !validator.ok?
251
284
  validator.messages.each do |message|
252
- @logger.warn(message)
285
+ logger.warn(message)
253
286
  end
254
287
 
255
- @logger.fatal("Fix the above problems, and you'll be rolling packages in no time!")
288
+ logger.fatal("Fix the above problems, and you'll be rolling packages in no time!")
256
289
  return 1
257
290
  end
258
291
  input_class = FPM::Package.types[input_type]
259
292
  output_class = FPM::Package.types[output_type]
260
293
 
261
- @logger.level = :info if verbose? # --verbose
262
- @logger.level = :debug if debug? # --debug
263
-
264
294
  input = input_class.new
265
295
 
266
296
  # Merge in package settings.
@@ -290,7 +320,7 @@ class FPM::Command < Clamp::Command
290
320
  input.attributes["#{attr}_given?".to_sym] = flag_given
291
321
  attr = "#{attr}?" if !respond_to?(attr) # handle boolean :flag cases
292
322
  input.attributes[attr.to_sym] = send(attr) if respond_to?(attr)
293
- @logger.debug("Setting attribute", attr.to_sym => send(attr))
323
+ logger.debug("Setting attribute", attr.to_sym => send(attr))
294
324
  end
295
325
  end
296
326
 
@@ -305,7 +335,7 @@ class FPM::Command < Clamp::Command
305
335
  # If --inputs was specified, read it as a file.
306
336
  if !inputs.nil?
307
337
  if !File.exists?(inputs)
308
- @logger.fatal("File given for --inputs does not exist (#{inputs})")
338
+ logger.fatal("File given for --inputs does not exist (#{inputs})")
309
339
  return 1
310
340
  end
311
341
 
@@ -326,7 +356,7 @@ class FPM::Command < Clamp::Command
326
356
  # if the package's attribute is currently nil *or* the flag setting for this
327
357
  # attribute is non-default, use the value.
328
358
  if object.send(attribute).nil? || send(attribute) != send("default_#{attribute}")
329
- @logger.info("Setting from flags: #{attribute}=#{send(attribute)}")
359
+ logger.info("Setting from flags: #{attribute}=#{send(attribute)}")
330
360
  object.send("#{attribute}=", send(attribute))
331
361
  end
332
362
  end
@@ -369,7 +399,7 @@ class FPM::Command < Clamp::Command
369
399
  next if path.nil?
370
400
 
371
401
  if !File.exists?(path)
372
- @logger.error("No such file (for #{scriptname.to_s}): #{path.inspect}")
402
+ logger.error("No such file (for #{scriptname.to_s}): #{path.inspect}")
373
403
  script_errors << path
374
404
  end
375
405
 
@@ -381,6 +411,8 @@ class FPM::Command < Clamp::Command
381
411
  setscript.call(:after_install)
382
412
  setscript.call(:before_remove)
383
413
  setscript.call(:after_remove)
414
+ setscript.call(:before_upgrade)
415
+ setscript.call(:after_upgrade)
384
416
 
385
417
  # Bail if any setscript calls had errors. We don't need to log
386
418
  # anything because we've already logged the error(s) above.
@@ -388,7 +420,7 @@ class FPM::Command < Clamp::Command
388
420
 
389
421
  # Validate the package
390
422
  if input.name.nil? or input.name.empty?
391
- @logger.fatal("No name given for this package (set name with, " \
423
+ logger.fatal("No name given for this package (set name with, " \
392
424
  "for example, '-n packagename')")
393
425
  return 1
394
426
  end
@@ -417,26 +449,23 @@ class FPM::Command < Clamp::Command
417
449
  begin
418
450
  output.output(package_file)
419
451
  rescue FPM::Package::FileAlreadyExists => e
420
- @logger.fatal(e.message)
452
+ logger.fatal(e.message)
421
453
  return 1
422
454
  rescue FPM::Package::ParentDirectoryMissing => e
423
- @logger.fatal(e.message)
455
+ logger.fatal(e.message)
424
456
  return 1
425
457
  end
426
458
 
427
- @logger.log("Created package", :path => package_file)
459
+ logger.log("Created package", :path => package_file)
428
460
  return 0
429
461
  rescue FPM::Util::ExecutableNotFound => e
430
- @logger.error("Need executable '#{e}' to convert #{input_type} to #{output_type}")
462
+ logger.error("Need executable '#{e}' to convert #{input_type} to #{output_type}")
431
463
  return 1
432
464
  rescue FPM::InvalidPackageConfiguration => e
433
- @logger.error("Invalid package configuration: #{e}")
434
- return 1
435
- rescue FPM::Package::InvalidArgument => e
436
- @logger.error("Invalid package argument: #{e}")
465
+ logger.error("Invalid package configuration: #{e}")
437
466
  return 1
438
467
  rescue FPM::Util::ProcessFailed => e
439
- @logger.error("Process failed: #{e}")
468
+ logger.error("Process failed: #{e}")
440
469
  return 1
441
470
  ensure
442
471
  if debug_workspace?
@@ -446,7 +475,7 @@ class FPM::Command < Clamp::Command
446
475
  [:staging_path, :build_path].each do |pathtype|
447
476
  path = plugin.send(pathtype)
448
477
  next unless Dir.open(path).to_a.size > 2
449
- @logger.log("plugin directory", :plugin => plugin.type, :pathtype => pathtype, :path => path)
478
+ logger.log("plugin directory", :plugin => plugin.type, :pathtype => pathtype, :path => path)
450
479
  end
451
480
  end
452
481
  else
@@ -456,8 +485,7 @@ class FPM::Command < Clamp::Command
456
485
  end # def execute
457
486
 
458
487
  def run(*args)
459
- @logger = Cabin::Channel.get
460
- @logger.subscribe(STDOUT)
488
+ logger.subscribe(STDOUT)
461
489
 
462
490
  # fpm initialization files, note the order of the following array is
463
491
  # important, try .fpm in users home directory first and then the current
@@ -467,7 +495,7 @@ class FPM::Command < Clamp::Command
467
495
 
468
496
  rc_files.each do |rc_file|
469
497
  if File.readable? rc_file
470
- @logger.warn("Loading flags from rc file #{rc_file}")
498
+ logger.warn("Loading flags from rc file #{rc_file}")
471
499
  File.readlines(rc_file).each do |line|
472
500
  # reverse becasue 'unshift' pushes onto the left side of the array.
473
501
  Shellwords.shellsplit(line).reverse.each do |arg|
@@ -480,6 +508,9 @@ class FPM::Command < Clamp::Command
480
508
  end
481
509
 
482
510
  super(*args)
511
+ rescue FPM::Package::InvalidArgument => e
512
+ logger.error("Invalid package argument: #{e}")
513
+ return 1
483
514
  end # def run
484
515
 
485
516
  # A simple flag validator
@@ -116,8 +116,6 @@ class FPM::Package
116
116
  private
117
117
 
118
118
  def initialize
119
- @logger = Cabin::Channel.get
120
-
121
119
  # Attributes for this specific package
122
120
  @attributes = {}
123
121
 
@@ -189,7 +187,7 @@ class FPM::Package
189
187
 
190
188
  # Convert this package to a new package type
191
189
  def convert(klass)
192
- @logger.info("Converting #{self.type} to #{klass.type}")
190
+ logger.info("Converting #{self.type} to #{klass.type}")
193
191
 
194
192
  exclude
195
193
 
@@ -204,7 +202,7 @@ class FPM::Package
204
202
  :@directories, :@staging_path, :@attrs
205
203
  ]
206
204
  ivars.each do |ivar|
207
- #@logger.debug("Copying ivar", :ivar => ivar, :value => instance_variable_get(ivar),
205
+ #logger.debug("Copying ivar", :ivar => ivar, :value => instance_variable_get(ivar),
208
206
  #:from => self.type, :to => pkg.type)
209
207
  pkg.instance_variable_set(ivar, instance_variable_get(ivar))
210
208
  end
@@ -272,20 +270,20 @@ class FPM::Package
272
270
 
273
271
  # Clean up any temporary storage used by this class.
274
272
  def cleanup
275
- cleanup_staging unless @logger.level == :debug
276
- cleanup_build unless @logger.level == :debug
273
+ cleanup_staging unless logger.level == :debug
274
+ cleanup_build unless logger.level == :debug
277
275
  end # def cleanup
278
276
 
279
277
  def cleanup_staging
280
278
  if File.directory?(staging_path)
281
- @logger.debug("Cleaning up staging path", :path => staging_path)
279
+ logger.debug("Cleaning up staging path", :path => staging_path)
282
280
  FileUtils.rm_r(staging_path)
283
281
  end
284
282
  end # def cleanup_staging
285
283
 
286
284
  def cleanup_build
287
285
  if File.directory?(build_path)
288
- @logger.debug("Cleaning up build path", :path => build_path)
286
+ logger.debug("Cleaning up build path", :path => build_path)
289
287
  FileUtils.rm_r(build_path)
290
288
  end
291
289
  end # def cleanup_build
@@ -327,7 +325,7 @@ class FPM::Package
327
325
  def template(path)
328
326
  template_path = File.join(template_dir, path)
329
327
  template_code = File.read(template_path)
330
- @logger.info("Reading template", :path => template_path)
328
+ logger.info("Reading template", :path => template_path)
331
329
  erb = ERB.new(template_code, nil, "-")
332
330
  erb.filename = template_path
333
331
  return erb
@@ -348,7 +346,7 @@ class FPM::Package
348
346
 
349
347
  def edit_file(path)
350
348
  editor = ENV['FPM_EDITOR'] || ENV['EDITOR'] || 'vi'
351
- @logger.info("Launching editor", :file => path)
349
+ logger.info("Launching editor", :file => path)
352
350
  command = "#{editor} #{Shellwords.escape(path)}"
353
351
  system("#{editor} #{Shellwords.escape(path)}")
354
352
  if !$?.success?
@@ -377,10 +375,10 @@ class FPM::Package
377
375
  match_path = path.sub("#{installdir.chomp('/')}/", '')
378
376
 
379
377
  attributes[:excludes].each do |wildcard|
380
- @logger.debug("Checking path against wildcard", :path => match_path, :wildcard => wildcard)
378
+ logger.debug("Checking path against wildcard", :path => match_path, :wildcard => wildcard)
381
379
 
382
380
  if File.fnmatch(wildcard, match_path)
383
- @logger.info("Removing excluded path", :path => match_path, :matches => wildcard)
381
+ logger.info("Removing excluded path", :path => match_path, :matches => wildcard)
384
382
  FileUtils.remove_entry_secure(path)
385
383
  Find.prune
386
384
  break
@@ -500,7 +498,7 @@ class FPM::Package
500
498
  end
501
499
  if File.file?(output_path)
502
500
  if attributes[:force?]
503
- @logger.warn("Force flag given. Overwriting package at #{output_path}")
501
+ logger.warn("Force flag given. Overwriting package at #{output_path}")
504
502
  File.delete(output_path)
505
503
  else
506
504
  raise FileAlreadyExists.new(output_path)
@@ -73,17 +73,23 @@ class FPM::Package::CPAN < FPM::Package
73
73
  end
74
74
 
75
75
  unless metadata["distribution"].nil?
76
- @logger.info("Setting package name from 'distribution'",
76
+ logger.info("Setting package name from 'distribution'",
77
77
  :distribution => metadata["distribution"])
78
78
  self.name = fix_name(metadata["distribution"])
79
79
  else
80
- @logger.info("Setting package name from 'name'",
80
+ logger.info("Setting package name from 'name'",
81
81
  :name => metadata["name"])
82
82
  self.name = fix_name(metadata["name"])
83
83
  end
84
84
 
85
- # Not all things have 'author' listed.
86
- self.vendor = metadata["author"].join(", ") unless metadata["author"].nil?
85
+ # author is not always set or it may be a string instead of an array
86
+ self.vendor = case metadata["author"]
87
+ when String; metadata["author"]
88
+ when Array; metadata["author"].join(", ")
89
+ else
90
+ raise FPM::InvalidPackageConfiguration, "Unexpected CPAN 'author' field type: #{metadata["author"].class}. This is a bug."
91
+ end if metadata.include?("author")
92
+
87
93
  self.url = metadata["resources"]["homepage"] rescue "unknown"
88
94
 
89
95
  # TODO(sissel): figure out if this perl module compiles anything
@@ -92,7 +98,7 @@ class FPM::Package::CPAN < FPM::Package
92
98
 
93
99
  # Install any build/configure dependencies with cpanm.
94
100
  # We'll install to a temporary directory.
95
- @logger.info("Installing any build or configure dependencies")
101
+ logger.info("Installing any build or configure dependencies")
96
102
 
97
103
  cpanm_flags = ["-L", build_path("cpan"), moduledir]
98
104
  cpanm_flags += ["-n"] if attributes[:cpan_test?]
@@ -144,36 +150,13 @@ class FPM::Package::CPAN < FPM::Package
144
150
  # build/configure requirements.
145
151
  # META.yml calls it 'configure_requires' and 'build_requires'
146
152
  # META.json calls it prereqs/build and prereqs/configure
147
-
153
+
148
154
  prefix = attributes[:prefix] || "/usr/local"
149
155
  # TODO(sissel): Set default INSTALL path?
150
156
 
151
157
  # Try Makefile.PL, Build.PL
152
158
  #
153
- if File.exists?("Makefile.PL")
154
- if attributes[:cpan_perl_lib_path]
155
- perl_lib_path = attributes[:cpan_perl_lib_path]
156
- safesystem(attributes[:cpan_perl_bin],
157
- "-Mlocal::lib=#{build_path("cpan")}",
158
- "Makefile.PL", "PREFIX=#{prefix}", "LIB=#{perl_lib_path}",
159
- # Empty install_base to avoid local::lib being used.
160
- "INSTALL_BASE=")
161
- else
162
- safesystem(attributes[:cpan_perl_bin],
163
- "-Mlocal::lib=#{build_path("cpan")}",
164
- "Makefile.PL", "PREFIX=#{prefix}",
165
- # Empty install_base to avoid local::lib being used.
166
- "INSTALL_BASE=")
167
- end
168
- if attributes[:cpan_test?]
169
- make = [ "env", "PERL5LIB=#{build_path("cpan/lib/perl5")}", "make" ]
170
- else
171
- make = [ "make" ]
172
- end
173
- safesystem(*make)
174
- safesystem(*(make + ["test"])) if attributes[:cpan_test?]
175
- safesystem(*(make + ["DESTDIR=#{staging_path}", "install"]))
176
- elsif File.exists?("Build.PL")
159
+ if File.exists?("Build.PL")
177
160
  # Module::Build is in use here; different actions required.
178
161
  safesystem(attributes[:cpan_perl_bin],
179
162
  "-Mlocal::lib=#{build_path("cpan")}",
@@ -197,6 +180,31 @@ class FPM::Package::CPAN < FPM::Package
197
180
  # Empty install_base to avoid local::lib being used.
198
181
  "--install_base", "")
199
182
  end
183
+ elsif File.exists?("Makefile.PL")
184
+ if attributes[:cpan_perl_lib_path]
185
+ perl_lib_path = attributes[:cpan_perl_lib_path]
186
+ safesystem(attributes[:cpan_perl_bin],
187
+ "-Mlocal::lib=#{build_path("cpan")}",
188
+ "Makefile.PL", "PREFIX=#{prefix}", "LIB=#{perl_lib_path}",
189
+ # Empty install_base to avoid local::lib being used.
190
+ "INSTALL_BASE=")
191
+ else
192
+ safesystem(attributes[:cpan_perl_bin],
193
+ "-Mlocal::lib=#{build_path("cpan")}",
194
+ "Makefile.PL", "PREFIX=#{prefix}",
195
+ # Empty install_base to avoid local::lib being used.
196
+ "INSTALL_BASE=")
197
+ end
198
+ if attributes[:cpan_test?]
199
+ make = [ "env", "PERL5LIB=#{build_path("cpan/lib/perl5")}", "make" ]
200
+ else
201
+ make = [ "make" ]
202
+ end
203
+ safesystem(*make)
204
+ safesystem(*(make + ["test"])) if attributes[:cpan_test?]
205
+ safesystem(*(make + ["DESTDIR=#{staging_path}", "install"]))
206
+
207
+
200
208
  else
201
209
  raise FPM::InvalidPackageConfiguration,
202
210
  "I don't know how to build #{name}. No Makefile.PL nor " \
@@ -207,8 +215,9 @@ class FPM::Package::CPAN < FPM::Package
207
215
  # across packages.
208
216
  # https://github.com/jordansissel/fpm/issues/443
209
217
  # https://github.com/jordansissel/fpm/issues/510
210
- ::Dir.glob(File.join(staging_path, prefix, "**/perllocal.pod")).each do |path|
211
- @logger.debug("Removing useless file.",
218
+ glob_prefix = attributes[:cpan_perl_lib_path] || prefix
219
+ ::Dir.glob(File.join(staging_path, glob_prefix, "**/perllocal.pod")).each do |path|
220
+ logger.debug("Removing useless file.",
212
221
  :path => path.gsub(staging_path, ""))
213
222
  File.unlink(path)
214
223
  end
@@ -223,7 +232,7 @@ class FPM::Package::CPAN < FPM::Package
223
232
  # native if found; otherwise keep the 'all' default.
224
233
  Find.find(staging_path) do |path|
225
234
  if path =~ /\.so$/
226
- @logger.info("Found shared library, setting architecture=native",
235
+ logger.info("Found shared library, setting architecture=native",
227
236
  :path => path)
228
237
  self.architecture = "native"
229
238
  end
@@ -243,7 +252,7 @@ class FPM::Package::CPAN < FPM::Package
243
252
  distribution = metadata["distribution"]
244
253
  author = metadata["author"]
245
254
 
246
- @logger.info("Downloading perl module",
255
+ logger.info("Downloading perl module",
247
256
  :distribution => distribution,
248
257
  :version => cpan_version)
249
258
 
@@ -262,7 +271,7 @@ class FPM::Package::CPAN < FPM::Package
262
271
  begin
263
272
  release_response = httpfetch(metacpan_release_url)
264
273
  rescue Net::HTTPServerException => e
265
- @logger.error("metacpan release query failed.", :error => e.message,
274
+ logger.error("metacpan release query failed.", :error => e.message,
266
275
  :module => package, :url => metacpan_release_url)
267
276
  raise FPM::InvalidPackageConfiguration, "metacpan release query failed"
268
277
  end
@@ -279,14 +288,14 @@ class FPM::Package::CPAN < FPM::Package
279
288
 
280
289
  #url = "http://www.cpan.org/CPAN/authors/id/#{author[0,1]}/#{author[0,2]}/#{author}/#{tarball}"
281
290
  url = "#{url_base}/authors/id/#{author[0,1]}/#{author[0,2]}/#{author}/#{archive}"
282
- @logger.debug("Fetching perl module", :url => url)
291
+ logger.debug("Fetching perl module", :url => url)
283
292
 
284
293
  begin
285
294
  response = httpfetch(url)
286
295
  rescue Net::HTTPServerException => e
287
- #@logger.error("Download failed", :error => response.status_line,
296
+ #logger.error("Download failed", :error => response.status_line,
288
297
  #:url => url)
289
- @logger.error("Download failed", :error => e, :url => url)
298
+ logger.error("Download failed", :error => e, :url => url)
290
299
  raise FPM::InvalidPackageConfiguration, "metacpan query failed"
291
300
  end
292
301
 
@@ -298,14 +307,14 @@ class FPM::Package::CPAN < FPM::Package
298
307
  end # def download
299
308
 
300
309
  def search(package)
301
- @logger.info("Asking metacpan about a module", :module => package)
310
+ logger.info("Asking metacpan about a module", :module => package)
302
311
  metacpan_url = "http://api.metacpan.org/v0/module/" + package
303
312
  begin
304
313
  response = httpfetch(metacpan_url)
305
314
  rescue Net::HTTPServerException => e
306
- #@logger.error("metacpan query failed.", :error => response.status_line,
315
+ #logger.error("metacpan query failed.", :error => response.status_line,
307
316
  #:module => package, :url => metacpan_url)
308
- @logger.error("metacpan query failed.", :error => e.message,
317
+ logger.error("metacpan query failed.", :error => e.message,
309
318
  :module => package, :url => metacpan_url)
310
319
  raise FPM::InvalidPackageConfiguration, "metacpan query failed"
311
320
  end