📄 base.pm
字号:
package CPANPLUS::Dist::Base;use strict;use vars qw[@ISA $VERSION];@ISA = qw[CPANPLUS::Dist];$VERSION = '0.01';=head1 NAMECPANPLUS::Dist::Base - Base class for custom distribution classes=head1 SYNOPSIS package CPANPLUS::Dist::MY_IMPLEMENTATION use base 'CPANPLUS::Dist::Base'; sub prepare { my $dist = shift; ### do the 'standard' things $dist->SUPER::prepare( @_ ) or return; ### do MY_IMPLEMENTATION specific things ... ### don't forget to set the status! return $dist->status->prepared( $SUCCESS ? 1 : 0 ); }=head1 DESCRIPTIONCPANPLUS::Dist::Base functions as a base class for all customdistribution implementations. It does all the mundane work CPANPLUS would have done without a custom distribution, so youcan override just the parts you need to make your own implementationwork.=head1 FLOWBelow is a brief outline when and in which order methods in thisclass are called: $Class->format_available; # can we use this class on this system? $dist->init; # set up custom accessors, etc $dist->prepare; # find/write meta information $dist->create; # write the distribution file $dist->install; # install the distribution file $dist->uninstall; # remove the distribution (OPTIONAL)=head1 METHODS=cut=head2 $bool = $Class->format_availableThis method is called when someone requests a module to be installedvia the superclass. This gives you the opportunity to check if allthe needed requirements to build and install this distribution havebeen met.For example, you might need a command line program, or a certain perlmodule installed to do your job. Now is the time to check.Simply return true if the request can proceed and false if it can not.The C<CPANPLUS::Dist::Base> implementation always returns true.=cut sub format_available { return 1 }=head2 $bool = $dist->initThis method is called just after the new dist object is set up andbefore the C<prepare> method is called. This is the time to set upthe object so it can be used with your class. For example, you might want to add extra accessors to the C<status>object, which you might do as follows: $dist->status->mk_accessors( qw[my_implementation_accessor] ); The C<status> object is implemented as an instance of the C<Object::Accessor> class. Please refer to it's documentation for details. Return true if the initialization was successul, and false if it wasnot. The C<CPANPLUS::Dist::Base> implementation does not alter your object and always returns true.=cutsub init { return 1; }=head2 $bool = $dist->prepareThis runs the preparation step of your distribution. This step is meantto set up the environment so the C<create> step can create the actualdistribution(file). A C<prepare> call in the standard C<ExtUtils::MakeMaker> distribution would, for example, run C<perl Makefile.PL> to find the dependenciesfor a distribution. For a C<debian> distribution, this is where you would write all the metafiles required for the C<dpkg-*> tools.The C<CPANPLUS::Dist::Base> implementation simply calls the underlyingdistribution class (Typically C<CPANPLUS::Dist::MM> or C<CPANPLUS::Dist::Build>).Sets C<< $dist->status->prepared >> to the return value of this function.If you override this method, you should make sure to set this value.=cutsub prepare { ### just in case you already did a create call for this module object ### just via a different dist object my $dist = shift; my $self = $dist->parent; my $dist_cpan = $self->status->dist_cpan; my $cb = $self->parent; my $conf = $cb->configure_object; $dist->status->prepared( $dist_cpan->prepare( @_ ) );}=head2 $bool = $dist->createThis runs the creation step of your distribution. This step is meantto follow up on the C<prepare> call, that set up your environment so the C<create> step can create the actual distribution(file). A C<create> call in the standard C<ExtUtils::MakeMaker> distribution would, for example, run C<make> and C<make test> to build and testa distribution. For a C<debian> distribution, this is where you would create the actual C<.deb> file using C<dpkg>.The C<CPANPLUS::Dist::Base> implementation simply calls the underlyingdistribution class (Typically C<CPANPLUS::Dist::MM> or C<CPANPLUS::Dist::Build>).Sets C<< $dist->status->dist >> to the location of the created distribution.If you override this method, you should make sure to set this value.Sets C<< $dist->status->created >> to the return value of this function.If you override this method, you should make sure to set this value.=cutsub create { ### just in case you already did a create call for this module object ### just via a different dist object my $dist = shift; my $self = $dist->parent; my $dist_cpan = $self->status->dist_cpan; $dist = $self->status->dist if $self->status->dist; $self->status->dist( $dist ) unless $self->status->dist; my $cb = $self->parent; my $conf = $cb->configure_object; my $format = ref $dist; ### make sure to set this variable, if the caller hasn't yet ### just so we have some clue where the dist left off. $dist->status->dist( $dist_cpan->status->distdir ) unless defined $dist->status->dist; $dist->status->created( $dist_cpan->create(prereq_format => $format, @_) );}=head2 $bool = $dist->installThis runs the install step of your distribution. This step is meantto follow up on the C<create> call, which prepared a distribution(file)to install.A C<create> call in the standard C<ExtUtils::MakeMaker> distribution would, for example, run C<make install> to copy the distribution filesto their final destination. For a C<debian> distribution, this is where you would run C<dpkg --install> on the created C<.deb> file.The C<CPANPLUS::Dist::Base> implementation simply calls the underlyingdistribution class (Typically C<CPANPLUS::Dist::MM> or C<CPANPLUS::Dist::Build>).Sets C<< $dist->status->installed >> to the return value of this function.If you override this method, you should make sure to set this value.=cutsub install { ### just in case you already did a create call for this module object ### just via a different dist object my $dist = shift; my $self = $dist->parent; my $dist_cpan = $self->status->dist_cpan; my $cb = $self->parent; my $conf = $cb->configure_object; $dist->status->installed( $dist_cpan->install( @_ ) );}=head2 $bool = $dist->uninstallThis runs the uninstall step of your distribution. This step is meantto remove the distribution from the file system. A C<uninstall> call in the standard C<ExtUtils::MakeMaker> distribution would, for example, run C<make uninstall> to remove the distribution files the file system. For a C<debian> distribution, this is where you would run C<dpkg --uninstall PACKAGE>.The C<CPANPLUS::Dist::Base> implementation simply calls the underlyingdistribution class (Typically C<CPANPLUS::Dist::MM> or C<CPANPLUS::Dist::Build>).Sets C<< $dist->status->uninstalled >> to the return value of this function.If you override this method, you should make sure to set this value.=cutsub uninstall { ### just in case you already did a create call for this module object ### just via a different dist object my $dist = shift; my $self = $dist->parent; my $dist_cpan = $self->status->dist_cpan; my $cb = $self->parent; my $conf = $cb->configure_object; $dist->status->uninstalled( $dist_cpan->uninstall( @_ ) );}1; # Local variables:# c-indentation-style: bsd# c-basic-offset: 4# indent-tabs-mode: nil# End:# vim: expandtab shiftwidth=4:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -