fpm 0.4.26 → 0.4.27
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELIST +17 -0
- data/lib/fpm.rb +1 -0
- data/lib/fpm/package.rb +1 -1
- data/lib/fpm/package/deb.rb +19 -0
- data/lib/fpm/package/osxpkg.rb +165 -0
- data/lib/fpm/package/pyfpm/__init__.pyc +0 -0
- data/lib/fpm/package/pyfpm/get_metadata.py +50 -64
- data/lib/fpm/package/pyfpm/get_metadata.pyc +0 -0
- data/lib/fpm/package/python.rb +15 -3
- data/lib/fpm/package/rpm.rb +25 -2
- data/lib/fpm/util.rb +11 -2
- data/lib/fpm/version.rb +1 -1
- data/templates/deb.erb +11 -0
- data/templates/osxpkg.erb +11 -0
- metadata +37 -18
data/CHANGELIST
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
0.4.27 (January 16, 2013)
|
2
|
+
- Make all fpm output go through the logger (#329; patch by jaybuff)
|
3
|
+
- New package type: osxpkg, for building packages installable on OS X. (#332,
|
4
|
+
patch by Timothy Sutton)
|
5
|
+
- Fix crash bug when converting rpms to something else (#316, #325; patch by
|
6
|
+
rtucker-mozilla)
|
7
|
+
- deb: Add --deb-field for setting a custom field in the control file.
|
8
|
+
For more information on this setting, see section 5.7 "User-defined fields"
|
9
|
+
of the debian policy manual:
|
10
|
+
http://www.debian.org/doc/debian-policy/ch-controlfields.html#s5.7
|
11
|
+
- deb: Add --deb-recommends and --deb-suggests (#285, #310; patch by Pranay
|
12
|
+
Kanwar)
|
13
|
+
- python to rpm: convert "!=" dependency operators in python to "Conflicts"
|
14
|
+
in rpm. (#263, #312; patch by Pranay Kanwar)
|
15
|
+
- python: fix bug - ignore blank lines in requirements.txt (#312, patch by
|
16
|
+
Pranay Kanwar)
|
17
|
+
|
1
18
|
0.4.26 (December 27, 2012)
|
2
19
|
- rpm: add --rpm-sign flag to sign packages using the 'rpmbuild --sign' flag.
|
3
20
|
(#311, Patch by Pranay Kanwar)
|
data/lib/fpm.rb
CHANGED
data/lib/fpm/package.rb
CHANGED
@@ -337,7 +337,7 @@ class FPM::Package
|
|
337
337
|
def edit_file(path)
|
338
338
|
editor = ENV['FPM_EDITOR'] || ENV['EDITOR'] || 'vi'
|
339
339
|
@logger.info("Launching editor", :file => path)
|
340
|
-
|
340
|
+
system("#{editor} #{Shellwords.escape(path)}")
|
341
341
|
|
342
342
|
if File.size(path) == 0
|
343
343
|
raise "Empty file after editing: #{path.inspect}"
|
data/lib/fpm/package/deb.rb
CHANGED
@@ -77,6 +77,25 @@ class FPM::Package::Deb < FPM::Package
|
|
77
77
|
File.expand_path(file)
|
78
78
|
end
|
79
79
|
|
80
|
+
option "--recommends", "PACKAGE", "Add PACKAGE to Recommends" do |pkg|
|
81
|
+
@recommends ||= []
|
82
|
+
@recommends << pkg
|
83
|
+
next @recommends
|
84
|
+
end
|
85
|
+
|
86
|
+
option "--suggests", "PACKAGE", "Add PACKAGE to Suggests" do |pkg|
|
87
|
+
@suggests ||= []
|
88
|
+
@suggests << pkg
|
89
|
+
next @suggests
|
90
|
+
end
|
91
|
+
|
92
|
+
option "--field", "'FIELD: VALUE'", "Add custom field to the control file" do |fv|
|
93
|
+
@custom_fields ||= {}
|
94
|
+
field, value = fv.split(/: */, 2)
|
95
|
+
@custom_fields[field] = value
|
96
|
+
next @custom_fields
|
97
|
+
end
|
98
|
+
|
80
99
|
def initialize(*args)
|
81
100
|
super(*args)
|
82
101
|
attributes[:deb_priority] = "extra"
|
@@ -0,0 +1,165 @@
|
|
1
|
+
require "fpm/package"
|
2
|
+
require "fpm/util"
|
3
|
+
require "fileutils"
|
4
|
+
require "fpm/package/dir"
|
5
|
+
require 'tempfile' # stdlib
|
6
|
+
require 'pathname' # stdlib
|
7
|
+
require 'rexml/document' # stdlib
|
8
|
+
|
9
|
+
# Use an OS X pkg built with pkgbuild.
|
10
|
+
#
|
11
|
+
# Supports input and output. Requires pkgbuild and (for input) pkgutil, part of a
|
12
|
+
# standard OS X install in 10.7 and higher.
|
13
|
+
class FPM::Package::OSXpkg < FPM::Package
|
14
|
+
|
15
|
+
# Map of what scripts are named.
|
16
|
+
SCRIPT_MAP = {
|
17
|
+
:before_install => "preinstall",
|
18
|
+
:after_install => "postinstall",
|
19
|
+
} unless defined?(SCRIPT_MAP)
|
20
|
+
|
21
|
+
POSTINSTALL_ACTIONS = [ "logout", "restart", "shutdown" ]
|
22
|
+
OWNERSHIP_OPTIONS = ["recommended", "preserve", "preserve-other"]
|
23
|
+
|
24
|
+
option "--identifier-prefix", "IDENTIFIER_PREFIX",
|
25
|
+
"Reverse domain prefix prepended to package identifier, " \
|
26
|
+
"ie. 'org.great.my'. If this is omitted, the identifer " \
|
27
|
+
"will be the package name."
|
28
|
+
option "--payload-free", :flag, "Define no payload, assumes use of script options.",
|
29
|
+
:default => false
|
30
|
+
option "--ownership", "OWNERSHIP",
|
31
|
+
"--ownership option passed to pkgbuild. Defaults to 'recommended'. " \
|
32
|
+
"See pkgbuild(1).", :default => 'recommended' do |value|
|
33
|
+
if !OWNERSHIP_OPTIONS.include?(value)
|
34
|
+
raise ArgumentError, "osxpkg-ownership value of '#{value}' is invalid. " \
|
35
|
+
"Must be one of #{OWNERSHIP_OPTIONS.join(", ")}"
|
36
|
+
end
|
37
|
+
value
|
38
|
+
end
|
39
|
+
|
40
|
+
option "--postinstall-action", "POSTINSTALL_ACTION",
|
41
|
+
"Post-install action provided in package metadata. " \
|
42
|
+
"Optionally one of '#{POSTINSTALL_ACTIONS.join("', '")}'." do |value|
|
43
|
+
if !POSTINSTALL_ACTIONS.include?(value)
|
44
|
+
raise ArgumentError, "osxpkg-postinstall-action value of '#{value}' is invalid. " \
|
45
|
+
"Must be one of #{POSTINSTALL_ACTIONS.join(", ")}"
|
46
|
+
end
|
47
|
+
value
|
48
|
+
end
|
49
|
+
|
50
|
+
dont_obsolete_paths = []
|
51
|
+
option "--dont-obsolete", "DONT_OBSOLETE_PATH",
|
52
|
+
"A file path for which to 'dont-obsolete' in the built PackageInfo. " \
|
53
|
+
"Can be specified multiple times." do |path|
|
54
|
+
dont_obsolete_paths << path
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
# return the identifier by prepending the reverse-domain prefix
|
59
|
+
# to the package name, else return just the name
|
60
|
+
def identifier
|
61
|
+
identifier = name.dup
|
62
|
+
if self.attributes[:osxpkg_identifier_prefix]
|
63
|
+
identifier.insert(0, "#{self.attributes[:osxpkg_identifier_prefix]}.")
|
64
|
+
end
|
65
|
+
identifier
|
66
|
+
end # def identifier
|
67
|
+
|
68
|
+
# scripts_path and write_scripts cribbed from deb.rb
|
69
|
+
def scripts_path(path=nil)
|
70
|
+
@scripts_path ||= build_path("Scripts")
|
71
|
+
FileUtils.mkdir(@scripts_path) if !File.directory?(@scripts_path)
|
72
|
+
|
73
|
+
if path.nil?
|
74
|
+
return @scripts_path
|
75
|
+
else
|
76
|
+
return File.join(@scripts_path, path)
|
77
|
+
end
|
78
|
+
end # def scripts_path
|
79
|
+
|
80
|
+
def write_scripts
|
81
|
+
SCRIPT_MAP.each do |scriptname, filename|
|
82
|
+
next unless script?(scriptname)
|
83
|
+
|
84
|
+
with(scripts_path(filename)) do |pkgscript|
|
85
|
+
@logger.info("Writing pkg script", :source => filename, :target => pkgscript)
|
86
|
+
File.write(pkgscript, script(scriptname))
|
87
|
+
# scripts are required to be executable
|
88
|
+
File.chmod(0755, pkgscript)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end # def write_scripts
|
92
|
+
|
93
|
+
# Returns path of a processed template PackageInfo given to 'pkgbuild --info'
|
94
|
+
# note: '--info' is undocumented:
|
95
|
+
# http://managingosx.wordpress.com/2012/07/05/stupid-tricks-with-pkgbuild
|
96
|
+
def pkginfo_template_path
|
97
|
+
pkginfo_template = Tempfile.open("fpm-PackageInfo")
|
98
|
+
pkginfo_data = template("osxpkg.erb").result(binding)
|
99
|
+
pkginfo_template.write(pkginfo_data)
|
100
|
+
pkginfo_template.close
|
101
|
+
pkginfo_template.path
|
102
|
+
end # def write_pkginfo_template
|
103
|
+
|
104
|
+
# Extract name and version from PackageInfo XML
|
105
|
+
def extract_info(package)
|
106
|
+
with(build_path("expand")) do |path|
|
107
|
+
doc = REXML::Document.new File.open(File.join(path, "PackageInfo"))
|
108
|
+
pkginfo_elem = doc.elements["pkg-info"]
|
109
|
+
identifier = pkginfo_elem.attribute("identifier").value
|
110
|
+
self.version = pkginfo_elem.attribute("version").value
|
111
|
+
# set name to the last dot element of the identifier
|
112
|
+
self.name = identifier.split(".").last
|
113
|
+
@logger.info("inferring name #{self.name} from pkg-id #{identifier}")
|
114
|
+
end
|
115
|
+
end # def extract_info
|
116
|
+
|
117
|
+
# Take a flat package as input
|
118
|
+
def input(input_path)
|
119
|
+
# TODO: Fail if it's a Distribution pkg or old-fashioned
|
120
|
+
expand_dir = File.join(build_path, "expand")
|
121
|
+
# expand_dir must not already exist for pkgutil --expand
|
122
|
+
safesystem("pkgutil --expand #{input_path} #{expand_dir}")
|
123
|
+
|
124
|
+
extract_info(input_path)
|
125
|
+
|
126
|
+
# extract Payload
|
127
|
+
safesystem("tar -xz -f #{expand_dir}/Payload -C #{staging_path}")
|
128
|
+
end # def input
|
129
|
+
|
130
|
+
# Output a pkgbuild pkg.
|
131
|
+
def output(output_path)
|
132
|
+
output_check(output_path)
|
133
|
+
raise FileAlreadyExists.new(output_path) if File.exists?(output_path)
|
134
|
+
|
135
|
+
temp_info = pkginfo_template_path
|
136
|
+
|
137
|
+
args = ["--identifier", identifier,
|
138
|
+
"--info", temp_info,
|
139
|
+
"--version", version.to_s,
|
140
|
+
"--ownership", attributes[:osxpkg_ownership]]
|
141
|
+
|
142
|
+
if self.attributes[:osxpkg_payload_free?]
|
143
|
+
args << "--nopayload"
|
144
|
+
else
|
145
|
+
args += ["--root", staging_path]
|
146
|
+
end
|
147
|
+
|
148
|
+
if attributes[:before_install_given?] or attributes[:after_install_given?]
|
149
|
+
write_scripts
|
150
|
+
args += ["--scripts", scripts_path]
|
151
|
+
end
|
152
|
+
args << output_path
|
153
|
+
|
154
|
+
safesystem("pkgbuild", *args)
|
155
|
+
FileUtils.remove_file(temp_info)
|
156
|
+
end # def output
|
157
|
+
|
158
|
+
def to_s(format=nil)
|
159
|
+
return super("NAME-VERSION.pkg") if format.nil?
|
160
|
+
return super(format)
|
161
|
+
end # def to_s
|
162
|
+
|
163
|
+
public(:input, :output, :identifier, :to_s)
|
164
|
+
|
165
|
+
end # class FPM::Package::OSXpkg
|
Binary file
|
@@ -1,76 +1,62 @@
|
|
1
1
|
from distutils.core import Command
|
2
|
-
import re
|
3
|
-
import time
|
4
2
|
import pkg_resources
|
5
3
|
try:
|
6
4
|
import json
|
7
5
|
except ImportError:
|
8
6
|
import simplejson as json
|
9
7
|
|
8
|
+
|
10
9
|
# Note, the last time I coded python daily was at Google, so it's entirely
|
11
10
|
# possible some of my techniques below are outdated or bad.
|
12
11
|
# If you have fixes, let me know.
|
13
12
|
|
14
|
-
|
15
13
|
class get_metadata(Command):
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
final_deps.append(dep.project_name)
|
66
|
-
|
67
|
-
data["dependencies"] = final_deps
|
68
|
-
|
69
|
-
#print json.dumps(data, indent=2)
|
70
|
-
if hasattr(json, 'dumps'):
|
71
|
-
print(json.dumps(data, indent=2))
|
72
|
-
else:
|
73
|
-
# For Python 2.5 and Debian's python-json
|
74
|
-
print(json.write(data))
|
75
|
-
# def run
|
76
|
-
# class list_dependencies
|
14
|
+
description = "get package metadata"
|
15
|
+
user_options = []
|
16
|
+
|
17
|
+
def initialize_options(self):
|
18
|
+
pass
|
19
|
+
|
20
|
+
def finalize_options(self):
|
21
|
+
pass
|
22
|
+
|
23
|
+
def run(self):
|
24
|
+
data = {
|
25
|
+
"name": self.distribution.get_name(),
|
26
|
+
"version": self.distribution.get_version(),
|
27
|
+
"author": "%s <%s>" % (
|
28
|
+
self.distribution.get_author(),
|
29
|
+
self.distribution.get_author_email()
|
30
|
+
),
|
31
|
+
"description": self.distribution.get_description(),
|
32
|
+
"license": self.distribution.get_license(),
|
33
|
+
"url": self.distribution.get_url(),
|
34
|
+
}
|
35
|
+
|
36
|
+
if self.distribution.has_ext_modules():
|
37
|
+
data["architecture"] = "native"
|
38
|
+
else:
|
39
|
+
data["architecture"] = "all"
|
40
|
+
|
41
|
+
final_deps = []
|
42
|
+
if getattr(self.distribution, 'install_requires', None):
|
43
|
+
for dep in pkg_resources.parse_requirements(
|
44
|
+
self.distribution.install_requires):
|
45
|
+
# add all defined specs to the dependecy list separately.
|
46
|
+
if dep.specs:
|
47
|
+
for operator, version in dep.specs:
|
48
|
+
final_deps.append("%s %s %s" % (
|
49
|
+
dep.project_name,
|
50
|
+
(lambda x: "=" if x == "==" else x)(operator),
|
51
|
+
version
|
52
|
+
))
|
53
|
+
else:
|
54
|
+
final_deps.append(dep.project_name)
|
55
|
+
|
56
|
+
data["dependencies"] = final_deps
|
57
|
+
|
58
|
+
if hasattr(json, 'dumps'):
|
59
|
+
print(json.dumps(data, indent=2))
|
60
|
+
else:
|
61
|
+
# For Python 2.5 and Debian's python-json
|
62
|
+
print(json.write(data))
|
Binary file
|
data/lib/fpm/package/python.rb
CHANGED
@@ -43,6 +43,11 @@ class FPM::Package::Python < FPM::Package
|
|
43
43
|
option "--fix-dependencies", :flag, "Should the package dependencies be " \
|
44
44
|
"prefixed?", :default => true
|
45
45
|
|
46
|
+
option "--downcase-name", :flag, "Should the target package name be in " \
|
47
|
+
"lowercase?", :default => true
|
48
|
+
option "--downcase-dependencies", :flag, "Should the package dependencies " \
|
49
|
+
"be in lowercase?", :default => true
|
50
|
+
|
46
51
|
option "--install-bin", "BIN_PATH", "The path to where python scripts " \
|
47
52
|
"should be installed to.", :default => "/usr/bin"
|
48
53
|
option "--install-lib", "LIB_PATH", "The path to where python libs " \
|
@@ -105,12 +110,12 @@ class FPM::Package::Python < FPM::Package
|
|
105
110
|
|
106
111
|
if attributes[:python_pip].nil?
|
107
112
|
# no pip, use easy_install
|
108
|
-
|
113
|
+
@logger.debug("no pip, defaulting to easy_install", :easy_install => attributes[:python_easyinstall])
|
109
114
|
safesystem(attributes[:python_easyinstall], "-i",
|
110
115
|
attributes[:python_pypi], "--editable", "-U",
|
111
116
|
"--build-directory", target, want_pkg)
|
112
117
|
else
|
113
|
-
|
118
|
+
@logger.debug("using pip", :pip => attributes[:python_pip])
|
114
119
|
safesystem(attributes[:python_pip], "install", "--no-install",
|
115
120
|
"-U", "--build", target, want_pkg)
|
116
121
|
end
|
@@ -169,6 +174,9 @@ class FPM::Package::Python < FPM::Package
|
|
169
174
|
self.name = metadata["name"]
|
170
175
|
end
|
171
176
|
|
177
|
+
# convert python-Foo to python-foo if flag is set
|
178
|
+
self.name = self.name.downcase if attributes[:python_downcase_name?]
|
179
|
+
|
172
180
|
requirements_txt = File.join(setup_dir, "requirements.txt")
|
173
181
|
if File.exists?(requirements_txt)
|
174
182
|
@logger.info("Found requirements.txt, using it instead of setup.py " \
|
@@ -182,13 +190,14 @@ class FPM::Package::Python < FPM::Package
|
|
182
190
|
# requirements.txt can have dependencies, flags, and comments.
|
183
191
|
# We only want the comments, so remove comment and flag lines.
|
184
192
|
metadata["dependencies"] = File.read(requirements_txt).split("\n") \
|
193
|
+
.reject { |l| l =~ /^\s*$/ } \
|
185
194
|
.reject { |l| l =~ /^\s*#/ } \
|
186
195
|
.reject { |l| l =~ /^-/ } \
|
187
196
|
.map(&:strip)
|
188
197
|
end
|
189
198
|
|
190
199
|
self.dependencies += metadata["dependencies"].collect do |dep|
|
191
|
-
dep_re = /^([
|
200
|
+
dep_re = /^([^<>!= ]+)\s*(?:([<>!=]{1,2})\s*(.*))?$/
|
192
201
|
match = dep_re.match(dep)
|
193
202
|
if match.nil?
|
194
203
|
@logger.error("Unable to parse dependency", :dependency => dep)
|
@@ -199,6 +208,9 @@ class FPM::Package::Python < FPM::Package
|
|
199
208
|
# become 'python-foo' (depending on what the python_package_name_prefix
|
200
209
|
# is)
|
201
210
|
name = fix_name(name) if attributes[:python_fix_dependencies?]
|
211
|
+
|
212
|
+
# convert dependencies from python-Foo to python-foo
|
213
|
+
name = name.downcase if attributes[:python_downcase_dependencies?]
|
202
214
|
"#{name} #{cmp} #{version}"
|
203
215
|
end
|
204
216
|
end # def load_package_info
|
data/lib/fpm/package/rpm.rb
CHANGED
@@ -143,6 +143,19 @@ class FPM::Package::RPM < FPM::Package
|
|
143
143
|
end
|
144
144
|
#self.provides << "rubygem(#{self.name})"
|
145
145
|
end
|
146
|
+
|
147
|
+
# Convert != dependency as Conflict =, as rpm doesn't understand !=
|
148
|
+
if origin == FPM::Package::Python
|
149
|
+
self.dependencies = self.dependencies.select do |dep|
|
150
|
+
name, op, version = dep.split(/\s+/)
|
151
|
+
dep_ok = true
|
152
|
+
if op == '!='
|
153
|
+
self.conflicts << "#{name} = #{version}"
|
154
|
+
dep_ok = false
|
155
|
+
end
|
156
|
+
dep_ok
|
157
|
+
end
|
158
|
+
end
|
146
159
|
end # def converted
|
147
160
|
|
148
161
|
def input(path)
|
@@ -187,7 +200,15 @@ class FPM::Package::RPM < FPM::Package
|
|
187
200
|
#input.replaces += replaces
|
188
201
|
|
189
202
|
self.config_files += rpm.config_files
|
190
|
-
|
203
|
+
|
204
|
+
# rpms support '%dir' things for specifying empty directories to package,
|
205
|
+
# but the rpm header itself doesn't actually record this information.
|
206
|
+
# so there's no 'directories' to copy, so don't try to merge in the
|
207
|
+
# 'directories' feature.
|
208
|
+
# TODO(sissel): If you want this feature, we'll have to find scan
|
209
|
+
# the extracted rpm for empty directories. I'll wait until someone asks for
|
210
|
+
# this feature
|
211
|
+
#self.directories += rpm.directories
|
191
212
|
|
192
213
|
# Extract to the staging directory
|
193
214
|
rpm.extract(staging_path)
|
@@ -249,7 +270,9 @@ class FPM::Package::RPM < FPM::Package
|
|
249
270
|
# The default epoch value must be 1 (backward compatibility for rpms built
|
250
271
|
# with fpm 0.4.3 and older)
|
251
272
|
def epoch
|
252
|
-
return @epoch
|
273
|
+
return 1 if @epoch.nil?
|
274
|
+
return nil if @epoch.empty?
|
275
|
+
return @epoch
|
253
276
|
end # def epoch
|
254
277
|
|
255
278
|
def to_s(format=nil)
|
data/lib/fpm/util.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "fpm/namespace"
|
2
|
+
require "open4"
|
2
3
|
|
3
4
|
# Some utility functions
|
4
5
|
module FPM::Util
|
@@ -27,9 +28,17 @@ module FPM::Util
|
|
27
28
|
end
|
28
29
|
|
29
30
|
@logger.debug("Running command", :args => args)
|
30
|
-
|
31
|
+
|
32
|
+
status = Open4::popen4(*args) do |pid, stdin, stdout, stderr|
|
33
|
+
stdin.close
|
34
|
+
|
35
|
+
@logger.debug("Process is running", :pid => pid)
|
36
|
+
@logger.pipe(stdout => :info, stderr => :error)
|
37
|
+
end
|
38
|
+
success = (status.exitstatus == 0)
|
39
|
+
|
31
40
|
if !success
|
32
|
-
raise ProcessFailed.new("#{program} failed (exit code #{
|
41
|
+
raise ProcessFailed.new("#{program} failed (exit code #{status.exitstatus})" \
|
33
42
|
". Full command was:#{args.inspect}")
|
34
43
|
end
|
35
44
|
return success
|
data/lib/fpm/version.rb
CHANGED
data/templates/deb.erb
CHANGED
@@ -22,6 +22,12 @@ Provides: <%= provides.map {|p| p.split(" ").first}.join ", " %>
|
|
22
22
|
<% if !replaces.empty? -%>
|
23
23
|
Replaces: <%= replaces.join(", ") %>
|
24
24
|
<% end -%>
|
25
|
+
<% if attributes[:deb_recommends_given?] -%>
|
26
|
+
Recommends: <%= attributes[:deb_recommends].collect { |d| fix_dependency(d) }.flatten.join(", ") %>
|
27
|
+
<% end -%>
|
28
|
+
<% if attributes[:deb_suggests_given?] -%>
|
29
|
+
Suggests: <%= attributes[:deb_suggests].collect { |d| fix_dependency(d) }.flatten.join(", ") %>
|
30
|
+
<% end -%>
|
25
31
|
Section: <%= category %>
|
26
32
|
Priority: <%= attributes[:deb_priority] %>
|
27
33
|
Homepage: <%= url or "http://nourlgiven.example.com/" %>
|
@@ -31,3 +37,8 @@ Description: <%= firstline %>
|
|
31
37
|
<% if remainder.any? -%>
|
32
38
|
<%= remainder.collect { |l| l =~ /^ *$/ ? " ." : " #{l}" }.join("\n") %>
|
33
39
|
<% end -%>
|
40
|
+
<% if attributes[:deb_field_given?] -%>
|
41
|
+
<% attributes[:deb_field].each do |field, value| -%>
|
42
|
+
<%= field %>: <%= value %>
|
43
|
+
<% end -%>
|
44
|
+
<% end -%>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<pkg-info
|
2
|
+
<% if !attributes[:osxpkg_postinstall_action].nil? -%>postinstall-action="<%= attributes[:osxpkg_postinstall_action] %>"<% end -%>
|
3
|
+
>
|
4
|
+
<% if !attributes[:osxpkg_dont_obsolete].nil? -%>
|
5
|
+
<dont-obsolete>
|
6
|
+
<% attributes[:osxpkg_dont_obsolete].each do |filepath| -%>
|
7
|
+
<file path="<%= filepath %>"/>
|
8
|
+
<% end -%>
|
9
|
+
</dont-obsolete>
|
10
|
+
<% end -%>
|
11
|
+
</pkg-info>
|
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.
|
4
|
+
version: 0.4.27
|
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:
|
12
|
+
date: 2013-01-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -32,17 +32,17 @@ dependencies:
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ! '>='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 0.
|
37
|
+
version: 0.5.0
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 0.
|
45
|
+
version: 0.5.0
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: backports
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -91,6 +91,22 @@ dependencies:
|
|
91
91
|
- - '='
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: 0.3.1
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: open4
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
94
110
|
- !ruby/object:Gem::Dependency
|
95
111
|
name: rush
|
96
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -152,31 +168,33 @@ files:
|
|
152
168
|
- lib/fpm/command.rb
|
153
169
|
- lib/fpm/namespace.rb
|
154
170
|
- lib/fpm/package.rb
|
171
|
+
- lib/fpm/errors.rb
|
172
|
+
- lib/fpm/version.rb
|
173
|
+
- lib/fpm/package/gem.rb
|
174
|
+
- lib/fpm/package/dir.rb
|
175
|
+
- lib/fpm/package/pyfpm/__init__.pyc
|
155
176
|
- lib/fpm/package/pyfpm/get_metadata.pyc
|
156
177
|
- lib/fpm/package/pyfpm/get_metadata.py
|
157
|
-
- lib/fpm/package/pyfpm/__init__.pyc
|
158
178
|
- lib/fpm/package/pyfpm/__init__.py
|
159
|
-
- lib/fpm/package/
|
179
|
+
- lib/fpm/package/osxpkg.rb
|
180
|
+
- lib/fpm/package/npm.rb
|
181
|
+
- lib/fpm/package/pear.rb
|
160
182
|
- lib/fpm/package/deb.rb
|
161
|
-
- lib/fpm/package/dir.rb
|
162
|
-
- lib/fpm/package/puppet.rb
|
163
|
-
- lib/fpm/package/gem.rb
|
164
183
|
- lib/fpm/package/python.rb
|
165
|
-
- lib/fpm/package/solaris.rb
|
166
184
|
- lib/fpm/package/rpm.rb
|
167
|
-
- lib/fpm/package/
|
168
|
-
- lib/fpm/package/
|
169
|
-
- lib/fpm/
|
170
|
-
- lib/fpm/errors.rb
|
185
|
+
- lib/fpm/package/puppet.rb
|
186
|
+
- lib/fpm/package/tar.rb
|
187
|
+
- lib/fpm/package/solaris.rb
|
171
188
|
- lib/fpm/util.rb
|
172
189
|
- lib/fpm.rb
|
173
190
|
- bin/fpm-npm
|
174
191
|
- bin/fpm
|
175
|
-
- templates/solaris.erb
|
176
|
-
- templates/rpm.erb
|
177
192
|
- templates/deb.erb
|
193
|
+
- templates/rpm.erb
|
194
|
+
- templates/solaris.erb
|
178
195
|
- templates/puppet/package/remove.pp.erb
|
179
196
|
- templates/puppet/package.pp.erb
|
197
|
+
- templates/osxpkg.erb
|
180
198
|
- LICENSE
|
181
199
|
- CONTRIBUTORS
|
182
200
|
- CHANGELIST
|
@@ -206,3 +224,4 @@ signing_key:
|
|
206
224
|
specification_version: 3
|
207
225
|
summary: fpm - package building and mangling
|
208
226
|
test_files: []
|
227
|
+
has_rdoc:
|