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