fpm 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELIST +13 -0
- data/CONTRIBUTORS +3 -0
- data/lib/fpm/command.rb +20 -5
- data/lib/fpm/package.rb +10 -10
- data/lib/fpm/package/dir.rb +3 -2
- data/lib/fpm/package/python.rb +28 -14
- data/templates/rpm.erb +3 -3
- metadata +126 -133
data/CHANGELIST
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
0.4.2 (March 21, 2012)
|
2
|
+
- Set default temporary directory to /tmp
|
3
|
+
(https://github.com/jordansissel/fpm/issues/174)
|
4
|
+
- Improve symlink handling (patch by Aleix Conchillo Flaqué, pull/177))
|
5
|
+
- Python package support changes (thanks to input by Luke Macken):
|
6
|
+
* New flag: --python-install-bin. Sets the location for python package
|
7
|
+
scripts (default: /usr/bin)
|
8
|
+
* New flag: --python-install-lib. Sets the location for the python
|
9
|
+
package to install libs to, default varies by system. Usually something
|
10
|
+
like /usr/lib/python2.7/site-packages.
|
11
|
+
* Fix up --prefix support
|
12
|
+
* Improve staged package installation
|
13
|
+
|
1
14
|
0.4.1 (March 19, 2012)
|
2
15
|
- Fix fpm so it works in ruby 1.8 again.
|
3
16
|
Tests run, and passing:
|
data/CONTRIBUTORS
CHANGED
data/lib/fpm/command.rb
CHANGED
@@ -205,17 +205,29 @@ class FPM::Command < Clamp::Command
|
|
205
205
|
# They are stored in 'settings' as :gem_foo_bar.
|
206
206
|
input.attributes ||= {}
|
207
207
|
|
208
|
-
# Iterate over all the options
|
208
|
+
# Iterate over all the options and set their values in the package's
|
209
|
+
# attribute hash.
|
210
|
+
#
|
211
|
+
# Things like '--foo-bar' will be available as pkg.attributes[:foo_bar]
|
209
212
|
self.class.declared_options.each do |option|
|
210
213
|
with(option.attribute_name) do |attr|
|
214
|
+
next if attr == "help"
|
211
215
|
# clamp makes option attributes available as accessor methods
|
212
|
-
#
|
213
|
-
#
|
214
|
-
|
216
|
+
# --foo-bar is available as 'foo_bar'. Put these in the package
|
217
|
+
# attributes hash. (See FPM::Package#attributes)
|
218
|
+
#
|
219
|
+
# In the case of 'flag' options, the accessor is actually 'foo_bar?'
|
220
|
+
# instead of just 'foo_bar'
|
221
|
+
attr = "#{attr}?" if !respond_to?(attr) # handle boolean :flag cases
|
215
222
|
input.attributes[attr.to_sym] = send(attr) if respond_to?(attr)
|
223
|
+
@logger.debug("Setting attribute", attr.to_sym => send(attr))
|
216
224
|
end
|
217
225
|
end
|
218
226
|
|
227
|
+
# Each remaining command line parameter is used as an 'input' argument.
|
228
|
+
# For directories, this means paths. For things like gem and python, this
|
229
|
+
# means package name or paths to the packages (rails, foo-1.0.gem, django,
|
230
|
+
# bar/setup.py, etc)
|
219
231
|
args.each do |arg|
|
220
232
|
input.input(arg)
|
221
233
|
end
|
@@ -228,7 +240,10 @@ class FPM::Command < Clamp::Command
|
|
228
240
|
end
|
229
241
|
|
230
242
|
# Read each line as a path
|
231
|
-
File.new(inputs, "r").each_line
|
243
|
+
File.new(inputs, "r").each_line do |line|
|
244
|
+
# Handle each line as if it were an argument
|
245
|
+
input.input(line)
|
246
|
+
end
|
232
247
|
end
|
233
248
|
|
234
249
|
# Override package settings if they are not the default flag values
|
data/lib/fpm/package.rb
CHANGED
@@ -223,7 +223,7 @@ class FPM::Package
|
|
223
223
|
end # def output
|
224
224
|
|
225
225
|
def staging_path(path=nil)
|
226
|
-
@staging_path ||= ::Dir.mktmpdir("package-#{type}-staging"
|
226
|
+
@staging_path ||= ::Dir.mktmpdir("package-#{type}-staging") #, ::Dir.pwd)
|
227
227
|
|
228
228
|
if path.nil?
|
229
229
|
return @staging_path
|
@@ -233,7 +233,7 @@ class FPM::Package
|
|
233
233
|
end # def staging_path
|
234
234
|
|
235
235
|
def build_path(path=nil)
|
236
|
-
@build_path ||= ::Dir.mktmpdir("package-#{type}-build"
|
236
|
+
@build_path ||= ::Dir.mktmpdir("package-#{type}-build") #, ::Dir.pwd)
|
237
237
|
|
238
238
|
if path.nil?
|
239
239
|
return @build_path
|
@@ -333,7 +333,13 @@ class FPM::Package
|
|
333
333
|
flag = [flag]
|
334
334
|
end
|
335
335
|
|
336
|
-
|
336
|
+
if param == :flag
|
337
|
+
# Automatically make 'flag' (boolean) options tunable with '--[no-]...'
|
338
|
+
flag = flag.collect { |f| "--[no-]#{type}-#{f.gsub(/^--/, "")}" }
|
339
|
+
else
|
340
|
+
flag = flag.collect { |f| "--#{type}-#{f.gsub(/^--/, "")}" }
|
341
|
+
end
|
342
|
+
|
337
343
|
help = "(#{type} only) #{help}"
|
338
344
|
@options << [flag, param, help, options, block]
|
339
345
|
end # def options
|
@@ -353,13 +359,7 @@ class FPM::Package
|
|
353
359
|
@options ||= []
|
354
360
|
@options.each do |args|
|
355
361
|
flag, param, help, options, block = args
|
356
|
-
clampcommand.option(flag, param, help, options)
|
357
|
-
# This is run in the scope of FPM::Command
|
358
|
-
value = block.call(value) unless block.nil?
|
359
|
-
# flag is an array, use the first flag as the attribute name
|
360
|
-
attr = flag.first[2..-1].gsub(/-+/, "_").to_sym
|
361
|
-
settings[attr] = value
|
362
|
-
end
|
362
|
+
clampcommand.option(flag, param, help, options, &block)
|
363
363
|
end
|
364
364
|
end # def apply_options
|
365
365
|
|
data/lib/fpm/package/dir.rb
CHANGED
@@ -91,16 +91,17 @@ class FPM::Package::Dir < FPM::Package
|
|
91
91
|
end
|
92
92
|
|
93
93
|
# Create a directory if this path is a directory
|
94
|
-
if File.directory?(source)
|
94
|
+
if File.directory?(source) and !File.symlink?(source)
|
95
95
|
@logger.debug("Creating", :directory => destination)
|
96
96
|
FileUtils.mkdir(destination)
|
97
97
|
else
|
98
98
|
# Otherwise try copying the file.
|
99
|
-
@logger.debug("Copying", :source => source, :destination => destination)
|
100
99
|
begin
|
100
|
+
@logger.debug("Linking", :source => source, :destination => destination)
|
101
101
|
File.link(source, destination)
|
102
102
|
rescue Errno::EXDEV
|
103
103
|
# Hardlink attempt failed, copy it instead
|
104
|
+
@logger.debug("Copying", :source => source, :destination => destination)
|
104
105
|
FileUtils.copy(source, destination)
|
105
106
|
end
|
106
107
|
end
|
data/lib/fpm/package/python.rb
CHANGED
@@ -40,6 +40,13 @@ class FPM::Package::Python < FPM::Package
|
|
40
40
|
option "--fix-dependencies", :flag, "Should the package dependencies be " \
|
41
41
|
"prefixed?", :default => true
|
42
42
|
|
43
|
+
option "--install-bin", "BIN_PATH", "The path to where python scripts " \
|
44
|
+
"should be installed to.", :default => "/usr/bin"
|
45
|
+
option "--install-lib", "LIB_PATH", "The path to where python libs " \
|
46
|
+
"should be installed to (default depends on your python installation). " \
|
47
|
+
"Want to what your target platform is using? Run this: " \
|
48
|
+
"python -c 'from distutils.sysconfig import get_python_lib; " \
|
49
|
+
"print get_python_lib()'"
|
43
50
|
|
44
51
|
private
|
45
52
|
|
@@ -156,22 +163,29 @@ class FPM::Package::Python < FPM::Package
|
|
156
163
|
|
157
164
|
# Install this package to the staging directory
|
158
165
|
def install_to_staging(setup_py)
|
159
|
-
|
160
|
-
|
166
|
+
project_dir = File.dirname(setup_py)
|
167
|
+
|
168
|
+
prefix = "/"
|
169
|
+
prefix = attributes[:prefix] unless attributes[:prefix].nil?
|
170
|
+
|
171
|
+
# Set the default install library location (like
|
172
|
+
# /usr/lib/python2.7/site-packages) if it is not given
|
173
|
+
if attributes[:python_install_lib].nil?
|
174
|
+
# Ask python where libraries are installed to.
|
175
|
+
# This line is unusually long because I don't have a shorter way to express it.
|
176
|
+
attributes[:python_install_lib] = %x{
|
177
|
+
#{attributes[:python_bin]} -c 'from distutils.sysconfig import get_python_lib; print get_python_lib()'
|
178
|
+
}.chomp
|
179
|
+
@logger.info("Setting default :python_install_lib attribute",
|
180
|
+
:value => attributes[:python_install_lib])
|
181
|
+
end
|
161
182
|
# Some setup.py's assume $PWD == current directory of setup.py, so let's
|
162
183
|
# chdir first.
|
163
|
-
::Dir.chdir(
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
File.join(staging_path, attributes[:prefix]))
|
169
|
-
else
|
170
|
-
# Otherwise set the root in staging_path
|
171
|
-
# TODO(sissel): there needs to be a way to force
|
172
|
-
safesystem(attributes[:python_bin], "setup.py", "install", "--root",
|
173
|
-
staging_path)
|
174
|
-
end
|
184
|
+
::Dir.chdir(project_dir) do
|
185
|
+
safesystem(attributes[:python_bin], "setup.py", "install",
|
186
|
+
"--root", staging_path,
|
187
|
+
"--install-lib", File.join(prefix, attributes[:python_install_lib]),
|
188
|
+
"--install-scripts", File.join(prefix, attributes[:python_install_bin]))
|
175
189
|
end
|
176
190
|
end # def install_to_staging
|
177
191
|
|
data/templates/rpm.erb
CHANGED
@@ -56,8 +56,8 @@ Obsoletes: <%= repl %>
|
|
56
56
|
<% target = File.join(build_path, "BUILD", path) -%>
|
57
57
|
<% dir = File.dirname(target) %>
|
58
58
|
mkdir -p "<%= dir %>"
|
59
|
-
if [ -f "<%= source %>" ] ; then
|
60
|
-
cp "<%= source %>" "<%= target %>"
|
59
|
+
if [ -f "<%= source %>" ] || [ -h "<%= source %>" ] ; then
|
60
|
+
cp -d "<%= source %>" "<%= target %>"
|
61
61
|
elif [ -d "<%= source %>" ] ; then
|
62
62
|
mkdir "<%= target %>"
|
63
63
|
fi
|
@@ -96,7 +96,7 @@ fi
|
|
96
96
|
<%=
|
97
97
|
# Reject directories or config files already listed, then prefix files with
|
98
98
|
# "/", then make sure paths with spaces are quoted. I hate rpm so much.
|
99
|
-
files.reject { |f| File.
|
99
|
+
files.reject { |f| x = File.join(staging_path, f); File.directory?(x) && !File.symlink?(x) } \
|
100
100
|
.collect { |f| "/#{f}" } \
|
101
101
|
.reject { |f| config_files.include?(f) } \
|
102
102
|
.collect { |f| f[/\s/] and "\"#{f}\"" or f } \
|
metadata
CHANGED
@@ -1,152 +1,154 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: fpm
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.2
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 4
|
9
|
-
- 1
|
10
|
-
version: 0.4.1
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Jordan Sissel
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-03-21 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: json
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
hash: 3
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
32
22
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: cabin
|
36
23
|
prerelease: false
|
37
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: cabin
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
38
33
|
none: false
|
39
|
-
requirements:
|
34
|
+
requirements:
|
40
35
|
- - ~>
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
hash: 9
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
- 4
|
46
|
-
- 3
|
36
|
+
- !ruby/object:Gem::Version
|
47
37
|
version: 0.4.3
|
48
38
|
type: :runtime
|
49
|
-
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: backports
|
52
39
|
prerelease: false
|
53
|
-
|
54
|
-
none: false
|
55
|
-
requirements:
|
56
|
-
- -
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.4.3
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: backports
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - '='
|
52
|
+
- !ruby/object:Gem::Version
|
63
53
|
version: 2.3.0
|
64
54
|
type: :runtime
|
65
|
-
version_requirements: *id003
|
66
|
-
- !ruby/object:Gem::Dependency
|
67
|
-
name: arr-pm
|
68
55
|
prerelease: false
|
69
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
70
57
|
none: false
|
71
|
-
requirements:
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.3.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: arr-pm
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
72
67
|
- - ~>
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
hash: 17
|
75
|
-
segments:
|
76
|
-
- 0
|
77
|
-
- 0
|
78
|
-
- 7
|
68
|
+
- !ruby/object:Gem::Version
|
79
69
|
version: 0.0.7
|
80
70
|
type: :runtime
|
81
|
-
version_requirements: *id004
|
82
|
-
- !ruby/object:Gem::Dependency
|
83
|
-
name: clamp
|
84
71
|
prerelease: false
|
85
|
-
|
86
|
-
none: false
|
87
|
-
requirements:
|
88
|
-
- -
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.0.7
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: clamp
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
94
86
|
type: :runtime
|
95
|
-
version_requirements: *id005
|
96
|
-
- !ruby/object:Gem::Dependency
|
97
|
-
name: rush
|
98
87
|
prerelease: false
|
99
|
-
|
100
|
-
none: false
|
101
|
-
requirements:
|
102
|
-
- -
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rush
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
108
102
|
type: :development
|
109
|
-
version_requirements: *id006
|
110
|
-
- !ruby/object:Gem::Dependency
|
111
|
-
name: rspec
|
112
103
|
prerelease: false
|
113
|
-
|
114
|
-
none: false
|
115
|
-
requirements:
|
116
|
-
- -
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rspec
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
122
118
|
type: :development
|
123
|
-
version_requirements: *id007
|
124
|
-
- !ruby/object:Gem::Dependency
|
125
|
-
name: insist
|
126
119
|
prerelease: false
|
127
|
-
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: insist
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
128
129
|
none: false
|
129
|
-
requirements:
|
130
|
+
requirements:
|
130
131
|
- - ~>
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
hash: 21
|
133
|
-
segments:
|
134
|
-
- 0
|
135
|
-
- 0
|
136
|
-
- 5
|
132
|
+
- !ruby/object:Gem::Version
|
137
133
|
version: 0.0.5
|
138
134
|
type: :development
|
139
|
-
|
140
|
-
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 0.0.5
|
142
|
+
description: Convert directories, rpms, python eggs, rubygems, and more to rpms, debs,
|
143
|
+
solaris packages and more. Win at package management without wasting pointless hours
|
144
|
+
debugging bad rpm specs!
|
141
145
|
email: jls@semicomplete.com
|
142
|
-
executables:
|
146
|
+
executables:
|
143
147
|
- fpm
|
144
148
|
- fpm-npm
|
145
149
|
extensions: []
|
146
|
-
|
147
150
|
extra_rdoc_files: []
|
148
|
-
|
149
|
-
files:
|
151
|
+
files:
|
150
152
|
- lib/fpm/errors.rb
|
151
153
|
- lib/fpm/util.rb
|
152
154
|
- lib/fpm/command.rb
|
@@ -180,37 +182,28 @@ files:
|
|
180
182
|
- CHANGELIST
|
181
183
|
homepage: https://github.com/jordansissel/fpm
|
182
184
|
licenses: []
|
183
|
-
|
184
185
|
post_install_message:
|
185
186
|
rdoc_options: []
|
186
|
-
|
187
|
-
require_paths:
|
187
|
+
require_paths:
|
188
188
|
- lib
|
189
189
|
- lib
|
190
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
190
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
191
191
|
none: false
|
192
|
-
requirements:
|
193
|
-
- -
|
194
|
-
- !ruby/object:Gem::Version
|
195
|
-
|
196
|
-
|
197
|
-
- 0
|
198
|
-
version: "0"
|
199
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - ! '>='
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
196
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
200
197
|
none: false
|
201
|
-
requirements:
|
202
|
-
- -
|
203
|
-
- !ruby/object:Gem::Version
|
204
|
-
|
205
|
-
segments:
|
206
|
-
- 0
|
207
|
-
version: "0"
|
198
|
+
requirements:
|
199
|
+
- - ! '>='
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
208
202
|
requirements: []
|
209
|
-
|
210
203
|
rubyforge_project:
|
211
|
-
rubygems_version: 1.8.
|
204
|
+
rubygems_version: 1.8.18
|
212
205
|
signing_key:
|
213
206
|
specification_version: 3
|
214
207
|
summary: fpm - package building and mangling
|
215
208
|
test_files: []
|
216
|
-
|
209
|
+
has_rdoc:
|