fpm 0.4.42 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/CHANGELIST +54 -0
- data/lib/fpm.rb +1 -0
- data/lib/fpm/command.rb +25 -4
- data/lib/fpm/package.rb +7 -2
- data/lib/fpm/package/cpan.rb +72 -24
- data/lib/fpm/package/deb.rb +68 -9
- data/lib/fpm/package/dir.rb +32 -6
- data/lib/fpm/package/gem.rb +1 -1
- data/lib/fpm/package/npm.rb +7 -0
- data/lib/fpm/package/pkgin.rb +35 -0
- data/lib/fpm/package/pyfpm/__init__.pyc +0 -0
- data/lib/fpm/package/pyfpm/get_metadata.py +21 -6
- data/lib/fpm/package/pyfpm/get_metadata.pyc +0 -0
- data/lib/fpm/package/python.rb +10 -8
- data/lib/fpm/package/rpm.rb +59 -18
- data/lib/fpm/util.rb +42 -1
- data/lib/fpm/version.rb +1 -1
- data/templates/rpm.erb +2 -17
- metadata +40 -51
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MWE4OWM3Y2MxMzdkOGY3ZWE0MmFkYWRmNGExNTQ1OThkNThjYjlmOA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YTEwZWJjNGQ1MDA0M2E0YzEyZDJiMzVhMTdmYWU0MTZmOGNkMTdhNg==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NzdlOTZlNTA5NDhhYzIzMjJlMzQ5NzE1ZmE5M2RhNzk3MTUwNjVjMjZmNWJh
|
10
|
+
OWEwYjNhYjA2OTcxNmNkOGY2ZGFkYWQ4NzkxZThlZDRkYzhiNDE2ZmJkMWNk
|
11
|
+
YTE3OGEzN2MxOGNlOTAyOWI4MjZhNjllNDJlNzM4MDc2YjMxMzc=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
YTI2OWMyNjE3N2U1NzlkNTdhNTg1OTU3Njc2ZDJlZWVkYWI1MTc0OGFlN2U5
|
14
|
+
OWEzYmMxNjQ4N2VlZDhmMzk1MzBlZTRjOWY0OGNiMmIwMWNmM2EzNTgxMjEz
|
15
|
+
YzQ4NmY1ZDFlOWQ3MGVkYzY3MjdkNThmNmYzN2U3ODdlMGU4ZGM=
|
data/CHANGELIST
CHANGED
@@ -1,3 +1,57 @@
|
|
1
|
+
1.0.0 (December 5, 2013)
|
2
|
+
- Config file of flags is now supported. Searches for $HOME/.fpm and
|
3
|
+
$PWD/.fpm. If both exist, $HOME is loaded first so $PWD can override.
|
4
|
+
(Pranay Kanwar)
|
5
|
+
- pkgin: Basic support for SmartOS/pkgsrc's pkgin format. (#567, Brian Akins)
|
6
|
+
- cpan: catch more cases of perllocal.pod and delete them
|
7
|
+
(#510, Jordan Sissel)
|
8
|
+
- cpan: Correctly support module version selection (#518, Matt Sharpe)
|
9
|
+
- cpan: include builddeps in PERL5LIB when running cpan tests
|
10
|
+
(#500, Matt Sharpe)
|
11
|
+
- cpan: Avoid old system perl modules when doing module builds
|
12
|
+
(#442, #513; Matt Sharpe)
|
13
|
+
- python: safer gathering of python module dependencies.
|
14
|
+
- python: better handling of unicode strings in python package metadata
|
15
|
+
(#575, Bruno Renié)
|
16
|
+
- cpan: Support 'http_proxy' env var. (#491, Patrick Cable)
|
17
|
+
- deb: --deb-user and --deb-group both default to 'root' now
|
18
|
+
(#504, Pranay Kanwar)
|
19
|
+
- deb: convert '>' to '>>' in deb version constraints
|
20
|
+
(#503, #439, Pranay Kanwar)
|
21
|
+
- deb: Warn if epoch is set. Just so you know what's going on, since
|
22
|
+
the default filename doesn't include the epoch. (#502, Pranay Kanwar)
|
23
|
+
- deb,rpm: --config-files is now recursive if you give it a directory.
|
24
|
+
This seems to be the most expected behavior by users.
|
25
|
+
(#171, #506; Pranay Kanwar)
|
26
|
+
- dir: Respect -C when using path mapping (#498, #507; Pranay Kanwar)
|
27
|
+
- rpm: Add --rpm-ignore-iteration-in-dependencies to let you to depend
|
28
|
+
on any release (aka iteration) of the same version of a package.
|
29
|
+
(#364, #508; Pranay Kanwar)
|
30
|
+
- dir: Handle copying of special files when possible
|
31
|
+
(#347, #511, #539, #561; Pranay Kanwar)
|
32
|
+
- rpm: Don't mistake symlinks as actual directories (#521, Nathan Huff)
|
33
|
+
- npm: Choose an alternate npm registry with --npm-registry (#445, #524;
|
34
|
+
Matt Sharpe)
|
35
|
+
- cpan: Choose an alternate cpan server with --cpan-mirror. Additionally, you
|
36
|
+
can use --cpan-mirror-only to only use this mirror for metadata queries.
|
37
|
+
(#524, Matt Sharpe)
|
38
|
+
- deb: Fix broken --deb-changelog flag (#543, #544; Tray Torrance)
|
39
|
+
- deb: When --deb-upstart is given, automatically create an upstart-sysv
|
40
|
+
symlink /etc/init.d/<name> to /lib/init/upstart-job (#545, Igor Galić)
|
41
|
+
- rpm: Fix bug when generating spec file listings on files with strange
|
42
|
+
characters in the names. (#547, Chris Chandler)
|
43
|
+
- dir: Fix bug where the new directory mapping feature would cause you not
|
44
|
+
to be able to select files with '=' in the name for packaging.
|
45
|
+
(#556, #554; Pranay Kanwar)
|
46
|
+
- python: Fix some unicode string issues in package metadata
|
47
|
+
(#575, Bruno Renié)
|
48
|
+
- gem-rpm: Now respects the --gem-package-name-prefix when generating the
|
49
|
+
'rubygem(name)' provides statement (#585, Stepan Stipl)
|
50
|
+
- deb: Downcase and replace underscores with dashes in 'provides' list.
|
51
|
+
(#591, Eric Connell)
|
52
|
+
- deb: Fix a lintian complaint about md5sums permissions (#593, Sam Crang)
|
53
|
+
- cpan: Modules with 'MYMETA' files are now supported (#573, Michael Donlon)
|
54
|
+
|
1
55
|
0.4.42 (July 23, 2013)
|
2
56
|
- dir: make source=destination mappings behave the same way 'rsync -a' does
|
3
57
|
with respect to source and destination paths.
|
data/lib/fpm.rb
CHANGED
data/lib/fpm/command.rb
CHANGED
@@ -52,7 +52,7 @@ class FPM::Command < Clamp::Command
|
|
52
52
|
:attribute_name => :chdir
|
53
53
|
option "--prefix", "PREFIX",
|
54
54
|
"A path to prefix files with when building the target package. This may " \
|
55
|
-
"be necessary for all input packages. For example, the 'gem' type will" \
|
55
|
+
"be necessary for all input packages. For example, the 'gem' type will " \
|
56
56
|
"prefix with your gem directory automatically."
|
57
57
|
option ["-p", "--package"], "OUTPUT", "The package file path to output."
|
58
58
|
option ["-f", "--force"], :flag, "Force output even if it will overwrite an " \
|
@@ -103,7 +103,7 @@ class FPM::Command < Clamp::Command
|
|
103
103
|
" in debs and %config in rpm. If you have multiple files to mark as " \
|
104
104
|
"configuration files, specify this flag multiple times.",
|
105
105
|
:multivalued => true, :attribute_name => :config_files
|
106
|
-
option "--directories", "DIRECTORIES", "
|
106
|
+
option "--directories", "DIRECTORIES", "Recursively mark a directory as being owned " \
|
107
107
|
"by the package", :multivalued => true, :attribute_name => :directories
|
108
108
|
option ["-a", "--architecture"], "ARCHITECTURE",
|
109
109
|
"The architecture name. Usually matches 'uname -m'. For automatic values," \
|
@@ -217,8 +217,6 @@ class FPM::Command < Clamp::Command
|
|
217
217
|
|
218
218
|
# Execute this command. See Clamp::Command#execute and Clamp's documentation
|
219
219
|
def execute
|
220
|
-
@logger = Cabin::Channel.get
|
221
|
-
@logger.subscribe(STDOUT)
|
222
220
|
@logger.level = :warn
|
223
221
|
|
224
222
|
if (stray_flags = args.grep(/^-/); stray_flags.any?)
|
@@ -415,6 +413,29 @@ class FPM::Command < Clamp::Command
|
|
415
413
|
output.cleanup unless output.nil?
|
416
414
|
end # def execute
|
417
415
|
|
416
|
+
def run(*args)
|
417
|
+
@logger = Cabin::Channel.get
|
418
|
+
@logger.subscribe(STDOUT)
|
419
|
+
|
420
|
+
# fpm initialization files, note the order of the following array is
|
421
|
+
# important, try .fpm in users home directory first and then the current
|
422
|
+
# directory
|
423
|
+
rc_files = [File.join(ENV['HOME'],'.fpm'), '.fpm']
|
424
|
+
|
425
|
+
rc_files.each do |rc_file|
|
426
|
+
if File.readable? rc_file
|
427
|
+
@logger.warn("Loading flags from rc file #{rc_file}")
|
428
|
+
File.readlines(rc_file).each do |line|
|
429
|
+
Shellwords.shellsplit(line).each do |e|
|
430
|
+
ARGV << e
|
431
|
+
end
|
432
|
+
end
|
433
|
+
end
|
434
|
+
end
|
435
|
+
|
436
|
+
super(*args)
|
437
|
+
end # def run
|
438
|
+
|
418
439
|
# A simple flag validator
|
419
440
|
#
|
420
441
|
# The goal of this class is to ensure the flags and arguments given
|
data/lib/fpm/package.rb
CHANGED
@@ -195,7 +195,7 @@ class FPM::Package
|
|
195
195
|
|
196
196
|
# copy other bits
|
197
197
|
ivars = [
|
198
|
-
:@architecture, :@
|
198
|
+
:@architecture, :@category, :@config_files, :@conflicts,
|
199
199
|
:@dependencies, :@description, :@epoch, :@iteration, :@license, :@maintainer,
|
200
200
|
:@name, :@provides, :@replaces, :@scripts, :@url, :@vendor, :@version,
|
201
201
|
:@directories, :@staging_path
|
@@ -206,6 +206,11 @@ class FPM::Package
|
|
206
206
|
pkg.instance_variable_set(ivar, instance_variable_get(ivar))
|
207
207
|
end
|
208
208
|
|
209
|
+
# Attributes are special! We do not want to remove the default values of
|
210
|
+
# the destination package type unless their value is specified on the
|
211
|
+
# source package object.
|
212
|
+
pkg.attributes.merge!(self.attributes)
|
213
|
+
|
209
214
|
pkg.converted_from(self.class)
|
210
215
|
return pkg
|
211
216
|
end # def convert
|
@@ -366,7 +371,7 @@ class FPM::Package
|
|
366
371
|
end
|
367
372
|
|
368
373
|
Find.find(installdir) do |path|
|
369
|
-
match_path = path.sub("#{installdir}/", '')
|
374
|
+
match_path = path.sub("#{installdir.chomp('/')}/", '')
|
370
375
|
|
371
376
|
attributes[:excludes].each do |wildcard|
|
372
377
|
@logger.debug("Checking path against wildcard", :path => match_path, :wildcard => wildcard)
|
data/lib/fpm/package/cpan.rb
CHANGED
@@ -8,12 +8,24 @@ class FPM::Package::CPAN < FPM::Package
|
|
8
8
|
# Flags '--foo' will be accessable as attributes[:npm_foo]
|
9
9
|
option "--perl-bin", "PERL_EXECUTABLE",
|
10
10
|
"The path to the perl executable you wish to run.", :default => "perl"
|
11
|
+
|
11
12
|
option "--cpanm-bin", "CPANM_EXECUTABLE",
|
12
13
|
"The path to the cpanm executable you wish to run.", :default => "cpanm"
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
|
15
|
+
option "--mirror", "CPAN_MIRROR",
|
16
|
+
"The CPAN mirror to use instead of the default."
|
17
|
+
|
18
|
+
option "--mirror-only", :flag,
|
19
|
+
"Only use the specified mirror for metadata.", :default => false
|
20
|
+
|
21
|
+
option "--package-name-prefix", "NAME_PREFIX",
|
22
|
+
"Name to prefix the package name with.", :default => "perl"
|
23
|
+
|
24
|
+
option "--test", :flag,
|
25
|
+
"Run the tests before packaging?", :default => true
|
26
|
+
|
27
|
+
option "--perl-lib-path", "PERL_LIB_PATH",
|
28
|
+
"Path of target Perl Libraries"
|
17
29
|
|
18
30
|
private
|
19
31
|
def input(package)
|
@@ -28,9 +40,13 @@ class FPM::Package::CPAN < FPM::Package
|
|
28
40
|
require "net/http"
|
29
41
|
require "json"
|
30
42
|
|
31
|
-
|
32
|
-
|
33
|
-
|
43
|
+
if (attributes[:cpan_local_module?])
|
44
|
+
moduledir = package
|
45
|
+
else
|
46
|
+
result = search(package)
|
47
|
+
tarball = download(result, version)
|
48
|
+
moduledir = unpack(tarball)
|
49
|
+
end
|
34
50
|
|
35
51
|
# Read package metadata (name, version, etc)
|
36
52
|
if File.exists?(File.join(moduledir, "META.json"))
|
@@ -38,6 +54,11 @@ class FPM::Package::CPAN < FPM::Package
|
|
38
54
|
elsif File.exists?(File.join(moduledir, ("META.yml")))
|
39
55
|
require "yaml"
|
40
56
|
metadata = YAML.load_file(File.join(moduledir, ("META.yml")))
|
57
|
+
elsif File.exists?(File.join(moduledir, "MYMETA.json"))
|
58
|
+
metadata = JSON.parse(File.read(File.join(moduledir, ("MYMETA.json"))))
|
59
|
+
elsif File.exists?(File.join(moduledir, ("MYMETA.yml")))
|
60
|
+
require "yaml"
|
61
|
+
metadata = YAML.load_file(File.join(moduledir, ("MYMETA.yml")))
|
41
62
|
else
|
42
63
|
raise FPM::InvalidPackageConfiguration,
|
43
64
|
"Could not find package metadata. Checked for META.json and META.yml"
|
@@ -73,14 +94,15 @@ class FPM::Package::CPAN < FPM::Package
|
|
73
94
|
# We'll install to a temporary directory.
|
74
95
|
@logger.info("Installing any build or configure dependencies")
|
75
96
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
97
|
+
cpanm_flags = ["-L", build_path("cpan"), moduledir]
|
98
|
+
cpanm_flags += ["-n"] if attributes[:cpan_test?]
|
99
|
+
cpanm_flags += ["--mirror", "#{attributes[:cpan_mirror]}"] if !attributes[:cpan_mirror].nil?
|
100
|
+
cpanm_flags += ["--mirror-only"] if attributes[:cpan_mirror_only?] && !attributes[:cpan_mirror].nil?
|
101
|
+
|
102
|
+
safesystem(attributes[:cpan_cpanm_bin], *cpanm_flags)
|
81
103
|
|
82
104
|
if !attributes[:no_auto_depends?]
|
83
|
-
if metadata.include?("requires")
|
105
|
+
if metadata.include?("requires") && !metadata["requires"].nil?
|
84
106
|
metadata["requires"].each do |dep_name, version|
|
85
107
|
# Special case for representing perl core as a version.
|
86
108
|
if dep_name == "perl"
|
@@ -143,7 +165,11 @@ class FPM::Package::CPAN < FPM::Package
|
|
143
165
|
# Empty install_base to avoid local::lib being used.
|
144
166
|
"INSTALL_BASE=")
|
145
167
|
end
|
146
|
-
|
168
|
+
if attributes[:cpan_test?]
|
169
|
+
make = [ "env", "PERL5LIB=#{build_path("cpan/lib/perl5")}", "make" ]
|
170
|
+
else
|
171
|
+
make = [ "make" ]
|
172
|
+
end
|
147
173
|
safesystem(*make)
|
148
174
|
safesystem(*(make + ["test"])) if attributes[:cpan_test?]
|
149
175
|
safesystem(*(make + ["DESTDIR=#{staging_path}", "install"]))
|
@@ -152,10 +178,14 @@ class FPM::Package::CPAN < FPM::Package
|
|
152
178
|
safesystem(attributes[:cpan_perl_bin],
|
153
179
|
"-Mlocal::lib=#{build_path("cpan")}",
|
154
180
|
"Build.PL")
|
155
|
-
safesystem(
|
181
|
+
safesystem(attributes[:cpan_perl_bin],
|
182
|
+
"-Mlocal::lib=#{build_path("cpan")}",
|
183
|
+
"./Build")
|
156
184
|
|
157
185
|
if attributes[:cpan_test?]
|
158
|
-
safesystem(
|
186
|
+
safesystem(attributes[:cpan_perl_bin],
|
187
|
+
"-Mlocal::lib=#{build_path("cpan")}",
|
188
|
+
"./Build", "test")
|
159
189
|
end
|
160
190
|
if attributes[:cpan_perl_lib_path]
|
161
191
|
perl_lib_path = attributes[:cpan_perl_lib_path]
|
@@ -173,9 +203,11 @@ class FPM::Package::CPAN < FPM::Package
|
|
173
203
|
"Build.PL found"
|
174
204
|
end
|
175
205
|
|
176
|
-
# Fix any files likely to cause conflicts
|
206
|
+
# Fix any files likely to cause conflicts that are duplicated
|
207
|
+
# across packages.
|
177
208
|
# https://github.com/jordansissel/fpm/issues/443
|
178
|
-
|
209
|
+
# https://github.com/jordansissel/fpm/issues/510
|
210
|
+
::Dir.glob(File.join(staging_path, prefix, "**/perllocal.pod")).each do |path|
|
179
211
|
@logger.debug("Removing useless file.",
|
180
212
|
:path => path.gsub(staging_path, ""))
|
181
213
|
File.unlink(path)
|
@@ -207,17 +239,25 @@ class FPM::Package::CPAN < FPM::Package
|
|
207
239
|
return directory
|
208
240
|
end
|
209
241
|
|
210
|
-
def download(metadata)
|
242
|
+
def download(metadata, cpan_version=nil)
|
211
243
|
distribution = metadata["distribution"]
|
212
244
|
author = metadata["author"]
|
213
245
|
@logger.info("Downloading perl module",
|
214
246
|
:distribution => distribution,
|
215
|
-
:version =>
|
247
|
+
:version => cpan_version)
|
216
248
|
|
217
249
|
# default to latest versionunless we specify one
|
218
|
-
|
250
|
+
if cpan_version.nil?
|
251
|
+
self.version = metadata["version"]
|
252
|
+
else
|
253
|
+
if metadata["version"] =~ /^v\d/
|
254
|
+
self.version = "v#{cpan_version}"
|
255
|
+
else
|
256
|
+
self.version = cpan_version
|
257
|
+
end
|
258
|
+
end
|
219
259
|
|
220
|
-
tarball = "#{distribution}-#{version}.tar.gz"
|
260
|
+
tarball = "#{distribution}-#{self.version}.tar.gz"
|
221
261
|
#url = "http://www.cpan.org/CPAN/authors/id/#{author[0,1]}/#{author[0,2]}/#{author}/#{tarball}"
|
222
262
|
url = "http://www.cpan.org/authors/id/#{author[0,1]}/#{author[0,2]}/#{author}/#{tarball}"
|
223
263
|
@logger.debug("Fetching perl module", :url => url)
|
@@ -259,12 +299,20 @@ class FPM::Package::CPAN < FPM::Package
|
|
259
299
|
end # def metadata
|
260
300
|
|
261
301
|
def fix_name(name)
|
262
|
-
|
302
|
+
case name
|
303
|
+
when "perl"; return "perl"
|
304
|
+
else; return [attributes[:cpan_package_name_prefix], name].join("-").gsub("::", "-")
|
305
|
+
end
|
263
306
|
end # def fix_name
|
264
307
|
|
265
308
|
def httpfetch(url)
|
266
309
|
uri = URI.parse(url)
|
267
|
-
|
310
|
+
if ENV['http_proxy']
|
311
|
+
proxy = URI.parse(ENV['http_proxy'])
|
312
|
+
http = Net::HTTP.Proxy(proxy.host,proxy.port,proxy.user,proxy.password).new(uri.host, uri.port)
|
313
|
+
else
|
314
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
315
|
+
end
|
268
316
|
response = http.request(Net::HTTP::Get.new(uri.request_uri))
|
269
317
|
case response
|
270
318
|
when Net::HTTPSuccess; return response
|
data/lib/fpm/package/deb.rb
CHANGED
@@ -76,9 +76,9 @@ class FPM::Package::Deb < FPM::Package
|
|
76
76
|
option "--priority", "PRIORITY",
|
77
77
|
"The debian package 'priority' value.", :default => "extra"
|
78
78
|
|
79
|
-
option "--user", "USER", "The owner of files in this package"
|
79
|
+
option "--user", "USER", "The owner of files in this package", :default => 'root'
|
80
80
|
|
81
|
-
option "--group", "GROUP", "The group owner of files in this package"
|
81
|
+
option "--group", "GROUP", "The group owner of files in this package", :default => 'root'
|
82
82
|
|
83
83
|
option "--changelog", "FILEPATH", "Add FILEPATH as debian changelog" do |file|
|
84
84
|
File.expand_path(file)
|
@@ -225,7 +225,10 @@ class FPM::Package::Deb < FPM::Package
|
|
225
225
|
self.name = parse.call("Package")
|
226
226
|
self.url = parse.call("Homepage")
|
227
227
|
self.vendor = parse.call("Vendor") || self.vendor
|
228
|
-
|
228
|
+
with(parse.call("Provides")) do |provides_str|
|
229
|
+
next if provides_str.nil?
|
230
|
+
self.provides = provides_str.split(/\s*,\s*/)
|
231
|
+
end
|
229
232
|
|
230
233
|
# The description field is a special flower, parse it that way.
|
231
234
|
# The description is the first line as a normal Description field, but also continues
|
@@ -297,6 +300,7 @@ class FPM::Package::Deb < FPM::Package
|
|
297
300
|
end # def extract_files
|
298
301
|
|
299
302
|
def output(output_path)
|
303
|
+
self.provides = self.provides.collect { |p| fix_provides(p) }
|
300
304
|
output_check(output_path)
|
301
305
|
# Abort if the target path already exists.
|
302
306
|
|
@@ -340,8 +344,13 @@ class FPM::Package::Deb < FPM::Package
|
|
340
344
|
|
341
345
|
tar_flags = []
|
342
346
|
if !attributes[:deb_user].nil?
|
343
|
-
|
347
|
+
if attributes[:deb_user] == 'root'
|
348
|
+
tar_flags += [ "--numeric-owner", "--owner", "0" ]
|
349
|
+
else
|
350
|
+
tar_flags += [ "--owner", attributes[:deb_user] ]
|
351
|
+
end
|
344
352
|
end
|
353
|
+
|
345
354
|
if !attributes[:deb_group].nil?
|
346
355
|
if attributes[:deb_group] == 'root'
|
347
356
|
tar_flags += [ "--numeric-owner", "--group", "0" ]
|
@@ -351,7 +360,7 @@ class FPM::Package::Deb < FPM::Package
|
|
351
360
|
end
|
352
361
|
|
353
362
|
if attributes[:deb_changelog]
|
354
|
-
dest_changelog = File.join(staging_path, "usr/share/doc/#{
|
363
|
+
dest_changelog = File.join(staging_path, "usr/share/doc/#{name}/changelog.Debian")
|
355
364
|
FileUtils.mkdir_p(File.dirname(dest_changelog))
|
356
365
|
FileUtils.cp attributes[:deb_changelog], dest_changelog
|
357
366
|
File.chmod(0644, dest_changelog)
|
@@ -376,10 +385,15 @@ class FPM::Package::Deb < FPM::Package
|
|
376
385
|
|
377
386
|
attributes.fetch(:deb_upstart_list, []).each do |upstart|
|
378
387
|
name = File.basename(upstart, ".upstart")
|
379
|
-
dest_upstart =
|
388
|
+
dest_upstart = staging_path("etc/init/#{name}.conf")
|
380
389
|
FileUtils.mkdir_p(File.dirname(dest_upstart))
|
381
|
-
FileUtils.cp
|
390
|
+
FileUtils.cp(upstart, dest_upstart)
|
382
391
|
File.chmod(0644, dest_upstart)
|
392
|
+
|
393
|
+
# Install an init.d shim that calls upstart
|
394
|
+
dest_init = staging_path("/etc/init.d/#{name}")
|
395
|
+
FileUtils.mkdir_p(File.dirname(dest_init))
|
396
|
+
FileUtils.ln_s("/lib/init/upstart-job", dest_init)
|
383
397
|
end
|
384
398
|
|
385
399
|
args = [ tar_cmd, "-C", staging_path, compression ] + tar_flags + [ "-cf", datatar, "." ]
|
@@ -399,6 +413,10 @@ class FPM::Package::Deb < FPM::Package
|
|
399
413
|
self.dependencies = self.dependencies.collect do |dep|
|
400
414
|
fix_dependency(dep)
|
401
415
|
end.flatten
|
416
|
+
self.provides = self.provides.collect do |provides|
|
417
|
+
fix_provides(provides)
|
418
|
+
end.flatten
|
419
|
+
|
402
420
|
end # def converted_from
|
403
421
|
|
404
422
|
def debianize_op(op)
|
@@ -430,7 +448,7 @@ class FPM::Package::Deb < FPM::Package
|
|
430
448
|
end
|
431
449
|
|
432
450
|
if dep.include?("_")
|
433
|
-
@logger.warn("Replacing underscores with dashes in '#{dep}' because " \
|
451
|
+
@logger.warn("Replacing dependency underscores with dashes in '#{dep}' because " \
|
434
452
|
"debs don't like underscores")
|
435
453
|
dep = dep.gsub("_", "-")
|
436
454
|
end
|
@@ -458,12 +476,33 @@ class FPM::Package::Deb < FPM::Package
|
|
458
476
|
nextversion[-1] += 1
|
459
477
|
nextversion = nextversion.join(".")
|
460
478
|
return ["#{name} (>= #{version})", "#{name} (<< #{nextversion})"]
|
479
|
+
elsif (m = dep.match(/(\S+)\s+\(> (.+)\)/))
|
480
|
+
# Convert 'foo (> x) to 'foo (>> x)'
|
481
|
+
name, version = m[1..2]
|
482
|
+
return ["#{name} (>> #{version})"]
|
461
483
|
else
|
462
484
|
# otherwise the dep is probably fine
|
463
485
|
return dep.rstrip
|
464
486
|
end
|
465
487
|
end # def fix_dependency
|
466
488
|
|
489
|
+
def fix_provides(provides)
|
490
|
+
name_re = /^[^ \(]+/
|
491
|
+
name = provides[name_re]
|
492
|
+
if name =~ /[A-Z]/
|
493
|
+
@logger.warn("Downcasing provides '#{name}' because deb packages " \
|
494
|
+
" don't work so good with uppercase names")
|
495
|
+
provides = provides.gsub(name_re) { |n| n.downcase }
|
496
|
+
end
|
497
|
+
|
498
|
+
if provides.include?("_")
|
499
|
+
@logger.warn("Replacing 'provides' underscores with dashes in '#{provides}' because " \
|
500
|
+
"debs don't like underscores")
|
501
|
+
provides = provides.gsub("_", "-")
|
502
|
+
end
|
503
|
+
return provides.rstrip
|
504
|
+
end
|
505
|
+
|
467
506
|
def control_path(path=nil)
|
468
507
|
@control_path ||= build_path("control")
|
469
508
|
FileUtils.mkdir(@control_path) if !File.directory?(@control_path)
|
@@ -499,6 +538,9 @@ class FPM::Package::Deb < FPM::Package
|
|
499
538
|
end # def write_control_tarball
|
500
539
|
|
501
540
|
def write_control
|
541
|
+
# warn user if epoch is set
|
542
|
+
@logger.warn("epoch in Version is set", :epoch => self.epoch) if self.epoch
|
543
|
+
|
502
544
|
# calculate installed-size if necessary:
|
503
545
|
if attributes[:deb_installed_size].nil?
|
504
546
|
@logger.info("No deb_installed_size set, calculating now.")
|
@@ -549,10 +591,26 @@ class FPM::Package::Deb < FPM::Package
|
|
549
591
|
|
550
592
|
def write_conffiles
|
551
593
|
return unless config_files.any?
|
594
|
+
|
595
|
+
# scan all conf file paths for files and add them
|
596
|
+
allconfigs = []
|
597
|
+
config_files.each do |path|
|
598
|
+
cfg_path = File.expand_path(path, staging_path)
|
599
|
+
begin
|
600
|
+
Find.find(cfg_path) do |p|
|
601
|
+
allconfigs << p.gsub("#{staging_path}/", '') if File.file? p
|
602
|
+
end
|
603
|
+
rescue Errno::ENOENT => e
|
604
|
+
raise FPM::InvalidPackageConfiguration,
|
605
|
+
"Error trying to use '#{cfg_path}' as a config file in the package. Does it exist?"
|
606
|
+
end
|
607
|
+
end
|
608
|
+
allconfigs.sort!.uniq!
|
609
|
+
|
552
610
|
File.open(control_path("conffiles"), "w") do |out|
|
553
611
|
# 'config_files' comes from FPM::Package and is usually set with
|
554
612
|
# FPM::Command's --config-files flag
|
555
|
-
|
613
|
+
allconfigs.each { |cf| out.puts(cf) }
|
556
614
|
end
|
557
615
|
end # def write_conffiles
|
558
616
|
|
@@ -593,6 +651,7 @@ class FPM::Package::Deb < FPM::Package
|
|
593
651
|
out.puts "#{md5} #{path}"
|
594
652
|
end
|
595
653
|
end
|
654
|
+
File.chmod(0644, control_path("md5sums"))
|
596
655
|
end
|
597
656
|
end # def write_md5sums
|
598
657
|
|