-
Notifications
You must be signed in to change notification settings - Fork 3
/
README
335 lines (221 loc) · 9.84 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
NAME
CPAN::Packager::Manual - User manual
USER MANUAL
This is the CPAN::Packager users manual.
DESCRIPTION
cpan-packager creates RPM and Deb packages of CPAN distributions. Given
a module name, cpan-packager will automatically analyze dependencies,
download, build, test, provision, and install packages.
SETUP
How to setup cpan-packager
Installation
Install CPAN::Packager from CPAN.
cpan CPAN::Packager
Additional setup for redhat users
Apply patches/rpm/perlreq.patch to /usr/lib/rpm/perl.req. Otherwise,
perl.req extracts needles module dependencies.
Additional setup for debian users
Copy conf/debian/rules* to the ~/.dh-make-perl directory. Otherwise, you
may experience conflicts. For example: perllocal.pod.
HOW TO USE CPAN-PACKAGER SCRIPT
RPMs
$ sudo cpan-packager --module Test::Exception --builder RPM --conf \
conf/config-rpm.yaml --verbose
The resulting package may be found at: ~/.cpanpackager/rpm
Debs
$ sudo cpan-packager --module Test::Exception --builder Deb --conf \
conf/config-deb.yaml --verbose
The resulting package may be found at: ~/.cpanpackager/deb
Options
* --builder (required)
The builder you'd like to use to build the module. Either "RPM" or
"Deb".
* --conf (required)
The local filesystem path to your CPAN::Packager configuration file.
An example configuration file is available at:
http://github.com/dann/p5-cpan-packager/tree/master/conf/
If you're building RPM's, you'll want the 'config-rpm.yaml'
configuration file.
If you're building Deb's, you'll want the 'config-deb.yaml'
configuration file.
* --module (required)
The name of the module that you'd like to build. For example:
Test::Reporter.
* --always_build (optional; default skips builds of installed modules)
Always build CPAN modules even if the module is already installed.
* --verbose (optional)
Emit additional information and diagnostics.
* --modulelist (optional; discouraged)
The path to a file containing the list of modules that should be
built. There should be one module per line. For example:
Foo::Bar
Wibble::Plink
CONFIGURATION
The configuration file is YAML-based and is comprised of two main
sections, the "global" section, and the "modules" section. The
configuration schema is defined in: CPAN::Packager::Config::Schema
The "global" configuration section.
This section defines common configuration entities.
* cpan_mirrors
Accepts one or more CPAN mirror arguments. These mirrors are used to
retrieve the module(s) being packaged in addition to their
dependencies. For example, a local CPAN::Mini mirror, or a "real"
mirror may be referenced:
* file:///home/dann/minicpan/
* http://cpan.pair.com/
* ftp://cpan.pair.com/pub/CPAN/
An example configuration section for "cpan_mirrors" may look like:
---
global:
cpan_mirrors:
- http://ftp.funet.fi/pub/languages/perl/CPAN/
- file:///home/dann/minicpan
* fix_package_depends
Correct misspelt package name.
* from
The incorrect module name which you want to fix.
* to
The correct module name.
* no_depends
Suppresses generation of a given required dependency. Sometimes
authors create dependencies on modules the packager can't find This
allows the packager to arbitrarily supress a given requirement.
* module
The module which you don't want to depend.
* skip_name_resolve_modules
Skip module name resolution.
* module
The module which you want to skip name resolution.
* fix_module_name
Fix incorrect module name.
* from
The incorrect module name which you want to fix.
* to
The correct module name.
The "modules" configuration section
This section defines module-specific configuration entities.
* module
Specifies the module to which this configuration applies. For
example: Test::Reporter.
* no_depends
Forcefully removes module dependencies.
* module
Given module is removed from the dependency list of the package
being built. For example: Test::Reporter.
* depends
Forcefully adds module dependencies.
* module
Given module is added to the dependency list of the package
being built. For example: Test::Reporter.
* skip_test
Causes "make test" to be skipped for given module. This is useful
when you don't want a module's failing tests to prevent the module
from being built and installed.
* force_build
Build the package forcefully if the package is installed already.
* custom
This is useful if you want to fetch modules from CPAN and use
patched CPAN module.
* tgz_path
The file path of gzipped tarball containing CPAN source.
* src_dir
The directory path of CPAN module source direcotry which
contains Makefile.PL or Build.PL
* version
The distribution version.
* dist_name
The CPAN module name.
* patches
Allows for specifying patch files to be inserted into the spec
file and applied when building the source.
* version
The CPAN module version.
* release
This specifies the release of the package itself (not the module
that's being packaged). This is most commonly used when you want to
re-package the same version of a given module. You may want to do
this, for example, if the original packaging was somehow in error,
or perhaps if you want to adjust the package's metadata.
* pkg_name
Ordinarilly, a module like, for example, Test::Reporter would be
given a package name of perl-Test-Reporter (RPM) or
libtest-reporter-perl (Deb), by default. However, if for some reason
you need to define your own package name, this option will allow you
to do just that. This can be useful in conjunction with the
"obsoletes" option, if you need to forcefully "override" an existing
"identical" package on the system.
* epoch
This option specifies the epoch of a package. This is primarily
useful in the situation where, for example, RPM's version comparison
algorithm isn't doing what you expect. Bumping the epoch integer up
will force RPM to consider the package as being newer even if it
would ordinarily consider it being older, version-wise.
* obsoletes
Accepts multiple "package" arguments. Causes the package being built
to obsolete the given packages.
* package
In the case of RPM, an example package argument may be:
perl-Compress-Zlib. For example, since the IO-Compress
distribution superceeds and deprecates the Compress-Zlib
distribution, the configuration section for the IO::Compress
module may obsolete the perl-Compress-Zlib package, as above.
MISCELLANEOUS
Using cpan-packager with minicpan
You may use CPAN::Packager with minicpan. First, establish your local
minicpan mirror:
minicpan -r http://ftp.funet.fi/pub/languages/perl/CPAN/ -l ~/minicpan
Then, just set the path to your local minicpan mirror in your
configuration file:
---
global:
cpan_mirrors:
- file:///home/dann/minicpan
Applying patches to tarballs for RPM builds
Write the module's configuration as such:
- module: Acme
custom:
tgz_path: ~/.cpanpackager/custom_module/Acme-1.11111.tar.gz
patches:
- ~/.cpanpackager/custom_module/acme_test.patch
dist_name: Acme
version: 1.11111
The patch should, for example, look like:
--- Acme-1.11111/t/acme.t.orig 2010-01-26 22:26:51.000000000 +0900
+++ Acme-1.11111/t/acme.t 2010-01-26 22:26:39.000000000 +0900
@@ -1,8 +1,10 @@
use lib 't', 'lib';
use strict;
use warnings;
-use Test::More tests => 2;
+use Test::More tests => 3;
use Acme;
ok(acme->is_acme);
ok(acme->is_perfect);
+ok 1;
Specify installation location (optional)
It is possible for a CPAN::Packager user to explicitly specify
installation locations for a distribution's libraries, documentation,
man pages, binaries, and scripts. Setting both of the below environment
variables, for example, will accomplish this.
PERL_MM_OPT="INSTALLVENDORMAN1DIR=/usr/local/share/man/man1
INSTALLVENDORMAN3DIR=/usr/local/share/man/man3
INSTALLVENDORBIN=/usr/local/bin INSTALLVENDORSCRIPT=/usr/local/bin"
PERL_MB_OPT="--config installvendorman1dir=/usr/local/share/man/man1
--config installvendorman3dir=/usr/local/share/man/man3 --config
installvendorbin=/usr/local/bin --config installvendorscript=/usr/local/bin"
Additionally, for RPMs, you may specify the directory in which non-man
documentation (Changes, README, etc) are installed via adding an entry
to your ~/.rpmmacros file:
%_defaultdocdir /usr/local/share/doc
ENVIRONMENT VARIABLES
Environment variable "CPAN_PACKAGER_TEST_LIVE" can be used to execute
live tests.
Environment variable "CPAN_PACKAGER_ENABLE_DUMP" can be used to dump
variables.
BUGS
Please report any bugs or feature requests to this project's GitHub
repository at:
http://github.com/dann/p5-cpan-packager/issues
Thank you!
AUTHOR
Takatoshi Kitano <kitano.tk@gmail.com>