1alienfile(3) User Contributed Perl Documentation alienfile(3)
2
3
4
6 alienfile - Specification for defining an external dependency for CPAN
7
9 version 2.47
10
12 Do-it-yourself approach:
13
14 use alienfile;
15
16 probe [ 'pkg-config --exists libarchive' ];
17
18 share {
19
20 start_url 'http://libarchive.org/downloads/libarchive-3.2.2.tar.gz';
21
22 # the first one which succeeds will be used
23 download [ 'wget %{.meta.start_url}' ];
24 download [ 'curl -o %{.meta.start_url}' ];
25
26 extract [ 'tar xf %{.install.download}' ];
27
28 build [
29 # Note: will not work on Windows, better to use Build::Autoconf plugin
30 # if you need windows support
31 './configure --prefix=%{.install.prefix} --disable-shared',
32 '%{make}',
33 '%{make} install',
34 ];
35 }
36
37 gather [
38 [ 'pkg-config', '--modversion', 'libarchive', \'%{.runtime.version}' ],
39 [ 'pkg-config', '--cflags', 'libarchive', \'%{.runtime.cflags}' ],
40 [ 'pkg-config', '--libs', 'libarchive', \'%{.runtime.libs}' ],
41 ];
42
43 With plugins (better):
44
45 use alienfile;
46
47 plugin 'PkgConfig' => 'libarchive';
48
49 share {
50 start_url 'http://libarchive.org/downloads/';
51 plugin Download => (
52 filter => qr/^libarchive-.*\.tar\.gz$/,
53 version => qr/([0-9\.]+)/,
54 );
55 plugin Extract => 'tar.gz';
56 plugin 'Build::Autoconf';
57 plugin 'Gather::IsolateDynamic';
58 build [
59 '%{configure}',
60 '%{make}',
61 '%{make} install',
62 ];
63 };
64
66 An alienfile is a recipe used by Alien::Build to, probe for system
67 libraries or download from the internet, and build source for those
68 libraries. This document acts as reference for the alienfile system,
69 but if you are starting out writing your own Alien you should read
70 Alien::Build::Manual::AlienAuthor, which will teach you how to write
71 your own complete Alien using alienfile + Alien::Build +
72 ExtUtils::MakeMaker. Special attention should be taken to the section
73 "a note about dynamic vs. static libraries".
74
76 requires
77 "any" requirement (either share or system):
78
79 requires $module;
80 requires $module => $version;
81
82 configure time requirement:
83
84 configure {
85 requires $module;
86 requires $module => $version;
87 };
88
89 system requirement:
90
91 sys {
92 requires $module;
93 requires $module => $version;
94 };
95
96 share requirement:
97
98 share {
99 requires $module;
100 requires $module => $version;
101 };
102
103 specifies a requirement. Alien::Build takes advantage of dynamic
104 requirements, so only modules that are needed for the specific type of
105 install need to be loaded. Here are the different types of
106 requirements:
107
108 configure
109 Configure requirements should already be installed before the
110 alienfile is loaded.
111
112 any "Any" requirements are those that are needed either for the probe
113 stage, or in either the system or share installs.
114
115 share
116 Share requirements are those modules needed when downloading and
117 building from source.
118
119 system
120 System requirements are those modules needed when the system
121 provides the library or tool.
122
123 plugin
124 plugin $name => (%args);
125 plugin $name => $arg;
126
127 Load the given plugin. If you prefix the plugin name with an "=" sign,
128 then it will be assumed to be a fully qualified path name. Otherwise
129 the plugin will be assumed to live in the "Alien::Build::Plugin"
130 namespace. If there is an appropriate negotiate plugin, that one will
131 be loaded. Examples:
132
133 # Loads Alien::Build::Plugin::Fetch::Negotiate
134 # which will pick the best Alien::Build::Plugin::Fetch
135 # plugin based on the URL, and system configuration
136 plugin 'Fetch' => 'http://ftp.gnu.org/gnu/gcc';
137
138 # loads the plugin with the badly named class!
139 plugin '=Badly::Named::Plugin::Not::In::Alien::Build::Namespace';
140
141 # explicitly loads Alien::Build::Plugin::Prefer::SortVersions
142 plugin 'Prefer::SortVersions' => (
143 filter => qr/^gcc-.*\.tar\.gz$/,
144 version => qr/([0-9\.]+)/,
145 );
146
147 probe
148 probe \&code;
149 probe \@commandlist;
150
151 Instructions for the probe stage. May be either a code reference, or a
152 command list.
153
154 configure
155 configure {
156 ...
157 };
158
159 Configure block. The only directive allowed in a configure block is
160 requires.
161
162 sys
163 sys {
164 ...
165 };
166
167 System block. Allowed directives are: requires and gather.
168
169 share
170 share {
171 ...
172 };
173
174 System block. Allowed directives are: download, fetch, decode, prefer,
175 extract, build, gather.
176
177 start_url
178 share {
179 start_url $url;
180 };
181
182 Set the start URL for download. This should be the URL to an index
183 page, or the actual tarball of the source.
184
185 download
186 share {
187 download \&code;
188 download \@commandlist;
189 };
190
191 Instructions for the download stage. May be either a code reference,
192 or a command list.
193
194 fetch
195 share {
196 fetch \&code;
197 fetch \@commandlist;
198 };
199
200 Instructions for the fetch stage. May be either a code reference, or a
201 command list.
202
203 decode
204 share {
205 decode \&code;
206 decode \@commandlist;
207 };
208
209 Instructions for the decode stage. May be either a code reference, or
210 a command list.
211
212 prefer
213 share {
214 prefer \&code;
215 prefer \@commandlist;
216 };
217
218 Instructions for the prefer stage. May be either a code reference, or
219 a command list.
220
221 extract
222 share {
223 extract \&code;
224 extract \@commandlist;
225 };
226
227 Instructions for the extract stage. May be either a code reference, or
228 a command list.
229
230 patch
231 share {
232 patch \&code;
233 patch \@commandlist;
234 };
235
236 Instructions for the patch stage. May be either a code reference, or a
237 command list.
238
239 patch_ffi
240 share {
241 patch_ffi \&code;
242 patch_ffi \@commandlist;
243 };
244
245 [DEPRECATED]
246
247 Instructions for the patch_ffi stage. May be either a code reference,
248 or a command list.
249
250 build
251 share {
252 build \&code;
253 build \@commandlist;
254 };
255
256 Instructions for the build stage. May be either a code reference, or a
257 command list.
258
259 build_ffi
260 share {
261 build \&code;
262 build \@commandlist;
263 };
264
265 [DEPRECATED]
266
267 Instructions for the build FFI stage. Builds shared libraries instead
268 of static. This is optional, and is only necessary if a fresh and
269 separate build needs to be done for FFI.
270
271 gather
272 gather \&code;
273 gather \@commandlist;
274
275 share {
276 gather \&code;
277 gather \@commandlist;
278 };
279
280 sys {
281 gather \&code;
282 gather \@commandlist;
283 };
284
285 Instructions for the gather stage. May be either a code reference, or
286 a command list. In the root block of the alienfile it will trigger in
287 both share and system build. In the share or sys block it will only
288 trigger in the corresponding build.
289
290 gather_ffi
291 share {
292 gather_ffi \&code;
293 gather_ffi \@commandlist;
294 }
295
296 [DEPRECATED]
297
298 Gather specific to "build_ffi". Not usually necessary.
299
300 ffi
301 share {
302 ffi {
303 patch \&code;
304 patch \@commandlist;
305 build \&code;
306 build \@commandlist;
307 gather \&code;
308 gather \@commandlist;
309 }
310 }
311
312 Specify patch, build or gather stages related to FFI.
313
314 meta_prop
315 my $hash = meta_prop;
316
317 Get the meta_prop hash reference.
318
319 meta
320 my $meta = meta;
321
322 Returns the meta object for your alienfile.
323
324 log
325 log($message);
326
327 Prints the given log to stdout.
328
329 test
330 share {
331 test \&code;
332 test \@commandlist;
333 };
334 sys {
335 test \&code;
336 test \@commandlist;
337 };
338
339 Run the tests
340
341 before
342 before $stage => \&code;
343
344 Execute the given code before the given stage. Stage should be one of
345 "probe", "download", "fetch", "decode", "prefer", "extract", "patch",
346 "build", "test", and "gather".
347
348 The before directive is only legal in the same blocks as the stage
349 would normally be legal in. For example, you can't do this:
350
351 use alienfile;
352
353 sys {
354 before 'build' => sub {
355 ...
356 };
357 };
358
359 Because a "build" wouldn't be legal inside a "sys" block.
360
361 after
362 after $stage => \&code;
363
364 Execute the given code after the given stage. Stage should be one of
365 "probe", "download", "fetch", "decode", "prefer", "extract", "patch",
366 "build", "test", and "gather".
367
368 The after directive is only legal in the same blocks as the stage would
369 normally be legal in. For example, you can't do this:
370
371 use alienfile;
372
373 sys {
374 after 'build' => sub {
375 ...
376 };
377 };
378
379 Because a "build" wouldn't be legal inside a "sys" block.
380
382 Alien
383 Alien::Build
384 Alien::Build::MM
385 Alien::Base
386
388 Author: Graham Ollis <plicease@cpan.org>
389
390 Contributors:
391
392 Diab Jerius (DJERIUS)
393
394 Roy Storey (KIWIROY)
395
396 Ilya Pavlov
397
398 David Mertens (run4flat)
399
400 Mark Nunberg (mordy, mnunberg)
401
402 Christian Walde (Mithaldu)
403
404 Brian Wightman (MidLifeXis)
405
406 Zaki Mughal (zmughal)
407
408 mohawk (mohawk2, ETJ)
409
410 Vikas N Kumar (vikasnkumar)
411
412 Flavio Poletti (polettix)
413
414 Salvador Fandiño (salva)
415
416 Gianni Ceccarelli (dakkar)
417
418 Pavel Shaydo (zwon, trinitum)
419
420 Kang-min Liu (劉康民, gugod)
421
422 Nicholas Shipp (nshp)
423
424 Juan Julián Merelo Guervós (JJ)
425
426 Joel Berger (JBERGER)
427
428 Petr Písař (ppisar)
429
430 Lance Wicks (LANCEW)
431
432 Ahmad Fatoum (a3f, ATHREEF)
433
434 José Joaquín Atria (JJATRIA)
435
436 Duke Leto (LETO)
437
438 Shoichi Kaji (SKAJI)
439
440 Shawn Laffan (SLAFFAN)
441
442 Paul Evans (leonerd, PEVANS)
443
444 Håkon Hægland (hakonhagland, HAKONH)
445
446 nick nauwelaerts (INPHOBIA)
447
449 This software is copyright (c) 2011-2020 by Graham Ollis.
450
451 This is free software; you can redistribute it and/or modify it under
452 the same terms as the Perl 5 programming language system itself.
453
454
455
456perl v5.34.0 2022-03-07 alienfile(3)