1*6e49571cSdaniel$OpenBSD: PackingElement.pod,v 1.1 2020/12/20 15:30:58 daniel Exp $
2*6e49571cSdaniel
3*6e49571cSdaniel=head1 NAME
4*6e49571cSdaniel
5*6e49571cSdanielOpenBSD::PackingElement - C<pkg_add(1)> packing-elements object hierarchy
6*6e49571cSdaniel
7*6e49571cSdaniel=head1 SYNOPSIS
8*6e49571cSdaniel
9*6e49571cSdaniel    package OpenBSD::PackingElement;
10*6e49571cSdaniel    sub method
11*6e49571cSdaniel    {
12*6e49571cSdaniel    }
13*6e49571cSdaniel
14*6e49571cSdaniel    package OpenBSD::PackingElement::Depend;
15*6e49571cSdaniel    sub method
16*6e49571cSdaniel    {
17*6e49571cSdaniel    	my ($self, @args) = @_;
18*6e49571cSdaniel	# do something
19*6e49571cSdaniel    }
20*6e49571cSdaniel
21*6e49571cSdaniel    package main;
22*6e49571cSdaniel    use OpenBSD::PackingList;
23*6e49571cSdaniel
24*6e49571cSdaniel    $plist = OpenBSD::PackingList->fromfile($filename);
25*6e49571cSdaniel    $plist->visit('method', @args);
26*6e49571cSdaniel
27*6e49571cSdaniel=head1 DESCRIPTION
28*6e49571cSdaniel
29*6e49571cSdanielC<OpenBSD::PackingElement> is the base class for all elements in a
30*6e49571cSdanielpacking-list (see L<OpenBSD::PackingList(3p)> and C<pkg_create(1)>).
31*6e49571cSdaniel
32*6e49571cSdanielManipulation of packing-lists mostly occurs through visitor patterns
33*6e49571cSdanielsuch as C<OpenBSD::PackingList::visit>: client code defines a method for
34*6e49571cSdanieleach relevant class in the hierarchy and calls C<$plist-E<gt>visit('method')>
35*6e49571cSdanielto perform the processing.
36*6e49571cSdaniel
37*6e49571cSdanielMost actual objects have one property: their C<name>.
38*6e49571cSdaniel
39*6e49571cSdaniel=over 4
40*6e49571cSdaniel
41*6e49571cSdaniel=item ::Meta
42*6e49571cSdaniel
43*6e49571cSdanielbase class for all meta information that can be reordered at will.
44*6e49571cSdaniel
45*6e49571cSdaniel=over 4
46*6e49571cSdaniel
47*6e49571cSdaniel=item ::Unique
48*6e49571cSdaniel
49*6e49571cSdanielmeta information with uniqueness properties.
50*6e49571cSdaniel
51*6e49571cSdaniel=over 4
52*6e49571cSdaniel
53*6e49571cSdaniel=item ::Arch
54*6e49571cSdaniel
55*6e49571cSdanielarchitecture requirements.
56*6e49571cSdaniel
57*6e49571cSdaniel=item ::ExtraInfo
58*6e49571cSdaniel
59*6e49571cSdanielsome unique properties, like C<PKGPATH> and allowed-for-ftp status.
60*6e49571cSdaniel
61*6e49571cSdaniel=item ::Name
62*6e49571cSdaniel
63*6e49571cSdanielthe package name.
64*6e49571cSdaniel
65*6e49571cSdaniel=item ::LocalBase
66*6e49571cSdaniel
67*6e49571cSdanielthe local base for the package.
68*6e49571cSdaniel
69*6e49571cSdaniel=item ::NoDefaultConflict
70*6e49571cSdaniel
71*6e49571cSdanielspecial annotation that package should not have any C<stem-*> conflict marker.
72*6e49571cSdaniel
73*6e49571cSdaniel=item ::SpecialFile
74*6e49571cSdaniel
75*6e49571cSdanielspecial files like the package description or install script.
76*6e49571cSdaniel
77*6e49571cSdaniel=over 4
78*6e49571cSdaniel
79*6e49571cSdaniel=item ::FCONTENTS
80*6e49571cSdaniel
81*6e49571cSdanielcontents file.
82*6e49571cSdaniel
83*6e49571cSdaniel=item ::FDESC
84*6e49571cSdaniel
85*6e49571cSdanielpackage description.
86*6e49571cSdaniel
87*6e49571cSdaniel=item ::DisplayFile
88*6e49571cSdaniel
89*6e49571cSdanielabstract class for special files that can be displayed.
90*6e49571cSdanielprovides method C<prepare($state)> to display the file.
91*6e49571cSdaniel
92*6e49571cSdaniel=over 4
93*6e49571cSdaniel
94*6e49571cSdaniel=item ::FDISPLAY
95*6e49571cSdaniel
96*6e49571cSdanielmessage displayed during package install.
97*6e49571cSdaniel
98*6e49571cSdaniel=item ::FUNDISPLAY
99*6e49571cSdaniel
100*6e49571cSdanielmessage displayed during package uninstall.
101*6e49571cSdaniel
102*6e49571cSdaniel=back
103*6e49571cSdaniel
104*6e49571cSdaniel=back
105*6e49571cSdaniel
106*6e49571cSdaniel=back
107*6e49571cSdaniel
108*6e49571cSdaniel=item ::Option
109*6e49571cSdaniel
110*6e49571cSdanielfactory for C<@option>
111*6e49571cSdaniel
112*6e49571cSdaniel=item ::Comment
113*6e49571cSdaniel
114*6e49571cSdanielcomments in the packing-lists. The constructor is actually a factory,
115*6e49571cSdanielsince some comments evolve to some other class.
116*6e49571cSdaniel
117*6e49571cSdaniel=item ::CVSTag
118*6e49571cSdaniel
119*6e49571cSdanielspecial class of comments that get reordered to the front of packing-lists.
120*6e49571cSdaniel
121*6e49571cSdaniel=item ::Depend
122*6e49571cSdaniel
123*6e49571cSdanielall dependency information.
124*6e49571cSdaniel
125*6e49571cSdaniel=over 4
126*6e49571cSdaniel
127*6e49571cSdaniel=item ::Wantlib
128*6e49571cSdaniel
129*6e49571cSdanielshared library needed for the package.
130*6e49571cSdaniel
131*6e49571cSdaniel=item ::Dependency
132*6e49571cSdaniel
133*6e49571cSdanielpackage needed, with the following properties: C<pkgpath> is the path
134*6e49571cSdanielused to create the dependency, C<pattern> is the L<OpenBSD::PkgSpec(3p)>
135*6e49571cSdanielpattern used to match the dependency, C<def> is the default value of
136*6e49571cSdanielthe dependency computed during build, to use for comparing package signatures
137*6e49571cSdanieland to fulfill default dependencies.
138*6e49571cSdaniel
139*6e49571cSdaniel=back
140*6e49571cSdaniel
141*6e49571cSdaniel=item ::Conflict
142*6e49571cSdaniel
143*6e49571cSdanielconflict information.
144*6e49571cSdaniel
145*6e49571cSdaniel=back
146*6e49571cSdaniel
147*6e49571cSdaniel=item ::Annotation
148*6e49571cSdaniel
149*6e49571cSdanielstuff that doesn't really exist as objects, but is used to add
150*6e49571cSdanielproperties to objects.
151*6e49571cSdaniel
152*6e49571cSdaniel=over 4
153*6e49571cSdaniel
154*6e49571cSdaniel=item ::Ignore
155*6e49571cSdaniel
156*6e49571cSdanielmark next object as ignored.
157*6e49571cSdaniel
158*6e49571cSdaniel=item ::sha
159*6e49571cSdaniel
160*6e49571cSdanielmark last file with a checksum.
161*6e49571cSdaniel
162*6e49571cSdaniel=item ::size
163*6e49571cSdaniel
164*6e49571cSdanielmark last file with a size.
165*6e49571cSdaniel
166*6e49571cSdaniel=item ::symlink
167*6e49571cSdaniel
168*6e49571cSdanielmark last file as a symlink.
169*6e49571cSdaniel
170*6e49571cSdaniel=item ::hardlink
171*6e49571cSdaniel
172*6e49571cSdanielmark last file as a hardlink.
173*6e49571cSdaniel
174*6e49571cSdaniel=item ::temp
175*6e49571cSdaniel
176*6e49571cSdanielmark last file with a temporary name. Used during extraction of
177*6e49571cSdanielpackages for replacement.
178*6e49571cSdaniel
179*6e49571cSdaniel=back
180*6e49571cSdaniel
181*6e49571cSdaniel=item ::Object
182*6e49571cSdaniel
183*6e49571cSdanielsomewhat concrete elements in packing-lists.
184*6e49571cSdanielThis is the base class for objects with a location in the filesystem.
185*6e49571cSdanielIt defineds method C<fullname>, to access the complete name of the object.
186*6e49571cSdaniel
187*6e49571cSdanielNote that all objects with file names use relative names except for
188*6e49571cSdanielC<::Extra>, C<::Sample> and C<::Sampledir>
189*6e49571cSdaniel
190*6e49571cSdaniel=over 4
191*6e49571cSdaniel
192*6e49571cSdaniel=item ::FileObject
193*6e49571cSdaniel
194*6e49571cSdanielabstract class corresponding to files and directories.
195*6e49571cSdanielDefault constructor depends on a C<dirclass> property, that may
196*6e49571cSdanielcreate objects from another class if their name ends with a C</>.
197*6e49571cSdanielThe full object name is normally computed relative to the current
198*6e49571cSdanielworking directory as set in C<::State>.
199*6e49571cSdaniel
200*6e49571cSdaniel=over 4
201*6e49571cSdaniel
202*6e49571cSdaniel=item ::FileBase
203*6e49571cSdaniel
204*6e49571cSdanielabstract class for files.
205*6e49571cSdaniel
206*6e49571cSdaniel=over 4
207*6e49571cSdaniel
208*6e49571cSdaniel=item ::File
209*6e49571cSdaniel
210*6e49571cSdanielactual file objects present in the packing-list.
211*6e49571cSdaniel
212*6e49571cSdaniel=item ::InfoFile
213*6e49571cSdaniel
214*6e49571cSdanielGNU info file objects.
215*6e49571cSdaniel
216*6e49571cSdaniel=item ::Shell
217*6e49571cSdaniel
218*6e49571cSdanielfiles with shell properties.
219*6e49571cSdaniel
220*6e49571cSdaniel=item ::Manpage
221*6e49571cSdaniel
222*6e49571cSdanielman pages.
223*6e49571cSdaniel
224*6e49571cSdaniel=item ::Lib
225*6e49571cSdaniel
226*6e49571cSdanielshared library files.
227*6e49571cSdaniel
228*6e49571cSdaniel=item ::Sample
229*6e49571cSdaniel
230*6e49571cSdanielfile objects not present in the packing-list.
231*6e49571cSdaniel
232*6e49571cSdaniel=for comment  ::Extra and ::Extradir intentionally not documented yet.
233*6e49571cSdaniel
234*6e49571cSdaniel=back
235*6e49571cSdaniel
236*6e49571cSdaniel=item ::DirlikeObject
237*6e49571cSdaniel
238*6e49571cSdanielabstract class for directories.
239*6e49571cSdaniel
240*6e49571cSdaniel=over 4
241*6e49571cSdaniel
242*6e49571cSdaniel=item ::DirRm
243*6e49571cSdaniel
244*6e49571cSdanieldeprecated.
245*6e49571cSdaniel
246*6e49571cSdaniel=item ::DirBase
247*6e49571cSdaniel
248*6e49571cSdaniel=over 4
249*6e49571cSdaniel
250*6e49571cSdaniel=item ::Dir
251*6e49571cSdaniel
252*6e49571cSdanielnormal directory, with specialized versions.
253*6e49571cSdaniel
254*6e49571cSdaniel=over 4
255*6e49571cSdaniel
256*6e49571cSdaniel=item ::Infodir
257*6e49571cSdaniel
258*6e49571cSdanieldirectory holds GNU info files.
259*6e49571cSdaniel
260*6e49571cSdaniel=item ::Fontdir
261*6e49571cSdaniel
262*6e49571cSdanieldirectory holds X11 fonts.
263*6e49571cSdaniel
264*6e49571cSdaniel=item ::Mandir
265*6e49571cSdaniel
266*6e49571cSdanieldirectory is the root of a set of manpages.
267*6e49571cSdaniel
268*6e49571cSdaniel=item ::Sampledir
269*6e49571cSdaniel
270*6e49571cSdanieldirectory is used to hold configuration files or similar objects.
271*6e49571cSdaniel
272*6e49571cSdaniel=back
273*6e49571cSdaniel
274*6e49571cSdaniel=back
275*6e49571cSdaniel
276*6e49571cSdaniel=back
277*6e49571cSdaniel
278*6e49571cSdaniel=back
279*6e49571cSdaniel
280*6e49571cSdaniel=item ::Action
281*6e49571cSdaniel
282*6e49571cSdanielstuff that performs some action during addition/removal of package.
283*6e49571cSdaniel
284*6e49571cSdaniel=over 4
285*6e49571cSdaniel
286*6e49571cSdaniel=item ::NewAuth
287*6e49571cSdaniel
288*6e49571cSdaniel=over 4
289*6e49571cSdaniel
290*6e49571cSdaniel=item ::NewUser
291*6e49571cSdaniel
292*6e49571cSdanieluser that needs to be created for the package to work.
293*6e49571cSdaniel
294*6e49571cSdaniel=item ::NewGroup
295*6e49571cSdaniel
296*6e49571cSdanielgroup that needs to be created for the package to work.
297*6e49571cSdaniel
298*6e49571cSdaniel=back
299*6e49571cSdaniel
300*6e49571cSdaniel=item ::ExeclikeAction
301*6e49571cSdaniel
302*6e49571cSdanielescape mechanism for embedded code that needs to be run.
303*6e49571cSdaniel
304*6e49571cSdaniel=over 4
305*6e49571cSdaniel
306*6e49571cSdaniel=item ::Exec
307*6e49571cSdaniel
308*6e49571cSdanielcode to run during installation.
309*6e49571cSdaniel
310*6e49571cSdaniel=item ::Unexec
311*6e49571cSdaniel
312*6e49571cSdanielcode to run during deinstallation.
313*6e49571cSdaniel
314*6e49571cSdaniel=item ::Extraunexec
315*6e49571cSdaniel
316*6e49571cSdanielextra code to run during deinstallation with -c.
317*6e49571cSdaniel
318*6e49571cSdaniel=back
319*6e49571cSdaniel
320*6e49571cSdaniel=back
321*6e49571cSdaniel
322*6e49571cSdaniel=item ::State
323*6e49571cSdaniel
324*6e49571cSdanielannotation-like stuff that can't be easily moved around because it influences
325*6e49571cSdanielsurrounding objects (mostly derived from C<::FileObject>).
326*6e49571cSdaniel
327*6e49571cSdaniel=over 4
328*6e49571cSdaniel
329*6e49571cSdaniel=item ::Cwd
330*6e49571cSdaniel
331*6e49571cSdanielchange the current working directory.
332*6e49571cSdaniel
333*6e49571cSdaniel=item ::Owner
334*6e49571cSdaniel
335*6e49571cSdanielchange the current file owner.
336*6e49571cSdaniel
337*6e49571cSdaniel=item ::Group
338*6e49571cSdaniel
339*6e49571cSdanielchange the current file group.
340*6e49571cSdaniel
341*6e49571cSdaniel=item ::Mode
342*6e49571cSdaniel
343*6e49571cSdanielchange the current file mode.
344*6e49571cSdaniel
345*6e49571cSdaniel=back
346*6e49571cSdaniel
347*6e49571cSdaniel=back
348*6e49571cSdaniel
349*6e49571cSdaniel=back
350*6e49571cSdaniel
351*6e49571cSdaniel=head1 CAVEATS
352*6e49571cSdaniel
353*6e49571cSdanielSome aspects of this API are likely to change in the future, although the
354*6e49571cSdanielbasic class hierarchy is now more or less worked out.
355