diff options
Diffstat (limited to 'community/perl-app-cpanminus/cpanms')
-rw-r--r-- | community/perl-app-cpanminus/cpanms | 652 |
1 files changed, 652 insertions, 0 deletions
diff --git a/community/perl-app-cpanminus/cpanms b/community/perl-app-cpanminus/cpanms new file mode 100644 index 00000000000..d88d0cce01d --- /dev/null +++ b/community/perl-app-cpanminus/cpanms @@ -0,0 +1,652 @@ +#!/usr/bin/perl +# +# This version of cpanminus has been modified in the following 3 ways: +# +# (1) The `--retry-connrefused` option for the wget backend has been +# commented out. This restores compatibility with Busybox wget +# that comes pre-installed in the Alpine base system. +# +# (2) The default CPAN mirrors have been changed from HTTP to HTTPS. +# This provides better security. Alpine's `apk` package manager +# ensures that the necessary dependencies for enabling HTTPS +# support with Busybox wget are installed with this package. +# +# (3) The `has_working_lwp` method has been altered to first check +# if @$mirrors provided to it as an argument is an empty array. +# This causes $https to be true when @$mirrors is empty, which +# is the behavior we want, because the default mirrors have +# been switched to HTTPS as stated above in (2). When $https +# is true, the eval-require check for LWP::Protocol::https +# runs, so if you don't have that installed, this version +# of cpanminus will fallback on wget, instead of displaying +# the "LWP will support https URLs if the LWP::Protocol::https +# module is installed" error message. +# +# If you're looking for the unmodified cpanminus, please install +# the `perl-app-cpanminus` package instead. + +use strict; +use App::cpanminus::https::fatscript; + +unless (caller) { + my $app = App::cpanminus::script->new; + $app->parse_options(@ARGV); + exit $app->doit; +} + +__END__ + +=head1 NAME + +cpanms - get, unpack build and install modules from CPAN via HTTPS + +=head1 SYNOPSIS + + cpanms Test::More # install Test::More + cpanms MIYAGAWA/Plack-0.99_05.tar.gz # full distribution path + cpanms http://example.org/LDS/CGI.pm-3.20.tar.gz # install from URL + cpanms ~/dists/MyCompany-Enterprise-1.00.tar.gz # install from a local file + cpanms --interactive Task::Kensho # Configure interactively + cpanms . # install from local directory + cpanms --installdeps . # install all the deps for the current directory + cpanms -L extlib Plack # install Plack and all non-core deps into extlib + cpanms --mirror http://cpan.cpantesters.org/ DBI # use the fast-syncing mirror + cpanms --from https://cpan.metacpan.org/ Plack # use only the HTTPS mirror + +=head1 MODIFICATIONS + +This version of cpanminus has been modified in the following 3 ways: + +=over 4 + +=item 1. + +The C<--retry-connrefused> option for the wget backend has been +commented out. This restores compatibility with Busybox wget +that comes pre-installed in the Alpine base system. + +=item 2. + +The default CPAN mirrors have been changed from HTTP to HTTPS. +This provides better security. Alpine's C<apk> package manager +ensures that the necessary dependencies for enabling HTTPS +support with Busybox wget are installed with this package. + +=item 3. + +The C<has_working_lwp> method has been altered to first check +if @$mirrors provided to it as an argument is an empty array. +This causes $https to be true when @$mirrors is empty, which +is the behavior we want, because the default mirrors have +been switched to HTTPS as stated above in (2). When $https +is true, the eval-require check for LWP::Protocol::https +runs, so if you don't have that installed, this version +of cpanminus will fallback on wget, instead of displaying +the "LWP will support https URLs if the LWP::Protocol::https +module is installed" error message. + +=back + +If you're looking for the unmodified cpanminus, please install +the C<perl-app-cpanminus> package instead. + +=head1 COMMANDS + +=over 4 + +=item (arguments) + +Command line arguments can be either a module name, distribution file, +local file path, HTTP URL or git repository URL. Following commands +will all work as you expect. + + cpanms Plack + cpanms Plack/Request.pm + cpanms MIYAGAWA/Plack-1.0000.tar.gz + cpanms /path/to/Plack-1.0000.tar.gz + cpanms http://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/Plack-0.9990.tar.gz + cpanms git://github.com/plack/Plack.git + +Additionally, you can use the notation using C<~> and C<@> to specify +version for a given module. C<~> specifies the version requirement in +the L<CPAN::Meta::Spec> format, while C<@> pins the exact version, and +is a shortcut for C<~"== VERSION">. + + cpanms Plack~1.0000 # 1.0000 or later + cpanms Plack~">= 1.0000, < 2.0000" # latest of 1.xxxx + cpanms Plack@0.9990 # specific version. same as Plack~"== 0.9990" + +The version query including specific version or range will be sent to +L<MetaCPAN> to search for previous releases. The query will search for +BackPAN archives by default, unless you specify C<--dev> option, in +which case, archived versions will be filtered out. + +For a git repository, you can specify a branch, tag, or commit SHA to +build. The default is C<master> + + cpanms git://github.com/plack/Plack.git@1.0000 # tag + cpanms git://github.com/plack/Plack.git@devel # branch + +=item -i, --install + +Installs the modules. This is a default behavior and this is just a +compatibility option to make it work like L<cpan> or L<cpanp>. + +=item --self-upgrade + +Upgrades itself. It's just an alias for: + + cpanms App::cpanminus + +=item --info + +Displays the distribution information in +C<AUTHOR/Dist-Name-ver.tar.gz> format in the standard out. + +=item --installdeps + +Installs the dependencies of the target distribution but won't build +itself. Handy if you want to try the application from a version +controlled repository such as git. + + cpanms --installdeps . + +=item --look + +Download and unpack the distribution and then open the directory with +your shell. Handy to poke around the source code or do manual +testing. + +=item -h, --help + +Displays the help message. + +=item -V, --version + +Displays the version number. + +=back + +=head1 OPTIONS + +You can specify the default options in C<PERL_CPANM_OPT> environment variable. + +=over 4 + +=item -f, --force + +Force install modules even when testing failed. + +=item -n, --notest + +Skip the testing of modules. Use this only when you just want to save +time for installing hundreds of distributions to the same perl and +architecture you've already tested to make sure it builds fine. + +Defaults to false, and you can say C<--no-notest> to override when it +is set in the default options in C<PERL_CPANM_OPT>. + +=item --test-only + +Run the tests only, and do not install the specified module or +distributions. Handy if you want to verify the new (or even old) +releases pass its unit tests without installing the module. + +Note that if you specify this option with a module or distribution +that has dependencies, these dependencies will be installed if you +don't currently have them. + +=item -S, --sudo + +Switch to the root user with C<sudo> when installing modules. Use this +if you want to install modules to the system perl include path. + +Defaults to false, and you can say C<--no-sudo> to override when it is +set in the default options in C<PERL_CPANM_OPT>. + +=item -v, --verbose + +Makes the output verbose. It also enables the interactive +configuration. (See --interactive) + +=item -q, --quiet + +Makes the output even more quiet than the default. It only shows the +successful/failed dependencies to the output. + +=item -l, --local-lib + +Sets the L<local::lib> compatible path to install modules to. You +don't need to set this if you already configure the shell environment +variables using L<local::lib>, but this can be used to override that +as well. + +=item -L, --local-lib-contained + +Same with C<--local-lib> but with L<--self-contained> set. All +non-core dependencies will be installed even if they're already +installed. + +For instance, + + cpanms -L extlib Plack + +would install Plack and all of its non-core dependencies into the +directory C<extlib>, which can be loaded from your application with: + + use local::lib '/path/to/extlib'; + +Note that this option does B<NOT> reliably work with perl installations +supplied by operating system vendors that strips standard modules from perl, +such as RHEL, Fedora and CentOS, B<UNLESS> you also install packages supplying +all the modules that have been stripped. For these systems you will probably +want to install the C<perl-core> meta-package which does just that. + +=item --self-contained + +When examining the dependencies, assume no non-core modules are +installed on the system. Handy if you want to bundle application +dependencies in one directory so you can distribute to other machines. + +=item --exclude-vendor + +Don't include modules installed under the 'vendor' paths when searching for +core modules when the C<--self-contained> flag is in effect. This restores +the behaviour from before version 1.7023 + +=item --mirror + +Specifies the base URL for the CPAN mirror to use, such as +C<http://cpan.cpantesters.org/> (you can omit the trailing slash). You +can specify multiple mirror URLs by repeating the command line option. + +You can use a local directory that has a CPAN mirror structure +(created by tools such as L<OrePAN> or L<Pinto>) by using a special +URL scheme C<file://>. If the given URL begins with `/` (without any +scheme), it is considered as a file scheme as well. + + cpanms --mirror file:///path/to/mirror + cpanms --mirror ~/minicpan # Because shell expands ~ to /home/user + +Defaults to C<http://www.cpan.org/>. + +=item --mirror-only + +Download the mirror's 02packages.details.txt.gz index file instead of +querying the CPAN Meta DB. This will also effectively opt out sending +your local perl versions to backend database servers such as CPAN Meta +DB and MetaCPAN. + +Select this option if you are using a local mirror of CPAN, such as +minicpan when you're offline, or your own CPAN index (a.k.a darkpan). + +=item --from, -M + + cpanms -M https://cpan.metacpan.org/ + cpanms --from https://cpan.metacpan.org/ + +Use the given mirror URL and its index as the I<only> source to search +and download modules from. + +It works similar to C<--mirror> and C<--mirror-only> combined, with a +small difference: unlike C<--mirror> which I<appends> the URL to the +list of mirrors, C<--from> (or C<-M> for short) uses the specified URL +as its I<only> source to download index and modules from. This makes +the option always override the default mirror, which might have been +set via global options such as the one set by C<PERL_CPANM_OPT> +environment variable. + +B<Tip:> It might be useful if you name these options with your shell +aliases, like: + + alias minicpanm='cpanms --from ~/minicpan' + alias darkpan='cpanms --from http://mycompany.example.com/DPAN' + +=item --mirror-index + +B<EXPERIMENTAL>: Specifies the file path to C<02packages.details.txt> +for module search index. + +=item --cpanmetadb + +B<EXPERIMENTAL>: Specifies an alternate URI for CPAN MetaDB index lookups. + +=item --metacpan + +Prefers MetaCPAN API over CPAN MetaDB. + +=item --cpanfile + +B<EXPERIMENTAL>: Specified an alternate path for cpanfile to search for, +when C<--installdeps> command is in use. Defaults to C<cpanfile>. + +=item --prompt + +Prompts when a test fails so that you can skip, force install, retry +or look in the shell to see what's going wrong. It also prompts when +one of the dependency failed if you want to proceed the installation. + +Defaults to false, and you can say C<--no-prompt> to override if it's +set in the default options in C<PERL_CPANM_OPT>. + +=item --dev + +B<EXPERIMENTAL>: search for a newer developer release as well. Defaults to false. + +=item --reinstall + +cpanms, when given a module name in the command line (i.e. C<cpanms +Plack>), checks the locally installed version first and skips if it is +already installed. This option makes it skip the check, so: + + cpanms --reinstall Plack + +would reinstall L<Plack> even if your locally installed version is +latest, or even newer (which would happen if you install a developer +release from version control repositories). + +Defaults to false. + +=item --interactive + +Makes the configuration (such as C<Makefile.PL> and C<Build.PL>) +interactive, so you can answer questions in the distribution that +requires custom configuration or Task:: distributions. + +Defaults to false, and you can say C<--no-interactive> to override +when it's set in the default options in C<PERL_CPANM_OPT>. + +=item --pp, --pureperl + +Prefer Pure perl build of modules by setting C<PUREPERL_ONLY=1> for +MakeMaker and C<--pureperl-only> for Build.PL based +distributions. Note that not all of the CPAN modules support this +convention yet. + +=item --with-recommends, --with-suggests + +B<EXPERIMENTAL>: Installs dependencies declared as C<recommends> and +C<suggests> respectively, per META spec. When these dependencies fail +to install, cpanms continues the installation, since they're just +recommendation/suggestion. + +Enabling this could potentially make a circular dependency for a few +modules on CPAN, when C<recommends> adds a module that C<recommends> +back the module in return. + +There's also C<--without-recommend> and C<--without-suggests> to +override the default decision made earlier in C<PERL_CPANM_OPT>. + +Defaults to false for both. + +=item --with-develop + +B<EXPERIMENTAL>: Installs develop phase dependencies in META files or +C<cpanfile> when used with C<--installdeps>. Defaults to false. + +=item --with-configure + +B<EXPERIMENTAL>: Installs configure phase dependencies in C<cpanfile> +when used with C<--installdeps>. Defaults to false. + +=item --with-feature, --without-feature, --with-all-features + +B<EXPERIMENTAL>: Specifies the feature to enable, if a module supports +optional features per META spec 2.0. + + cpanms --with-feature=opt_csv Spreadsheet::Read + +the features can also be interactively chosen when C<--interactive> +option is enabled. + +C<--with-all-features> enables all the optional features, and +C<--without-feature> can select a feature to disable. + +=item --configure-timeout, --build-timeout, --test-timeout + +Specify the timeout length (in seconds) to wait for the configure, +build and test process. Current default values are: 60 for configure, +3600 for build and 1800 for test. + +=item --configure-args, --build-args, --test-args, --install-args + +B<EXPERIMENTAL>: Pass arguments for configure/build/test/install +commands respectively, for a given module to install. + + cpanms DBD::mysql --configure-args="--cflags=... --libs=..." + +The argument is only enabled for the module passed as a command line +argument, not dependencies. + +=item --scandeps + +B<DEPRECATED>: Scans the depencencies of given modules and output the +tree in a text format. (See C<--format> below for more options) + +Because this command doesn't actually install any distributions, it +will be useful that by typing: + + cpanms --scandeps Catalyst::Runtime + +you can make sure what modules will be installed. + +This command takes into account which modules you already have +installed in your system. If you want to see what modules will be +installed against a vanilla perl installation, you might want to +combine it with C<-L> option. + +=item --format + +B<DEPRECATED>: Determines what format to display the scanned +dependency tree. Available options are C<tree>, C<json>, C<yaml> and +C<dists>. + +=over 8 + +=item tree + +Displays the tree in a plain text format. This is the default value. + +=item json, yaml + +Outputs the tree in a JSON or YAML format. L<JSON> and L<YAML> modules +need to be installed respectively. The output tree is represented as a +recursive tuple of: + + [ distribution, dependencies ] + +and the container is an array containing the root elements. Note that +there may be multiple root nodes, since you can give multiple modules +to the C<--scandeps> command. + +=item dists + +C<dists> is a special output format, where it prints the distribution +filename in the I<depth first order> after the dependency resolution, +like: + + GAAS/MIME-Base64-3.13.tar.gz + GAAS/URI-1.58.tar.gz + PETDANCE/HTML-Tagset-3.20.tar.gz + GAAS/HTML-Parser-3.68.tar.gz + GAAS/libwww-perl-5.837.tar.gz + +which means you can install these distributions in this order without +extra dependencies. When combined with C<-L> option, it will be useful +to replay installations on other machines. + +=back + +=item --save-dists + +Specifies the optional directory path to copy downloaded tarballs in +the CPAN mirror compatible directory structure +i.e. I<authors/id/A/AU/AUTHORS/Foo-Bar-version.tar.gz> + +If the distro tarball did not come from CPAN, for example from a local +file or from GitHub, then it will be saved under +I<vendor/Foo-Bar-version.tar.gz>. + +=item --uninst-shadows + +Uninstalls the shadow files of the distribution that you're +installing. This eliminates the confusion if you're trying to install +core (dual-life) modules from CPAN against perl 5.10 or older, or +modules that used to be XS-based but switched to pure perl at some +version. + +If you run cpanms as root and use C<INSTALL_BASE> or equivalent to +specify custom installation path, you SHOULD disable this option so +you won't accidentally uninstall dual-life modules from the core +include path. + +Defaults to true if your perl version is smaller than 5.12, and you +can disable that with C<--no-uninst-shadows>. + +B<NOTE>: Since version 1.3000 this flag is turned off by default for +perl newer than 5.12, since with 5.12 @INC contains site_perl directory +I<before> the perl core library path, and uninstalling shadows is not +necessary anymore and does more harm by deleting files from the core +library path. + +=item --uninstall, -U + +Uninstalls a module from the library path. It finds a packlist for +given modules, and removes all the files included in the same +distribution. + +If you enable local::lib, it only removes files from the local::lib +directory. + +If you try to uninstall a module in C<perl> directory (i.e. core +module), an error will be thrown. + +A dialog will be prompted to confirm the files to be deleted. If you pass +C<-f> option as well, the dialog will be skipped and uninstallation +will be forced. + +=item --cascade-search + +B<EXPERIMENTAL>: Specifies whether to cascade search when you specify +multiple mirrors and a mirror doesn't have a module or has a lower +version of the module than requested. Defaults to false. + +=item --skip-installed + +Specifies whether a module given in the command line is skipped if its latest +version is already installed. Defaults to true. + +B<NOTE>: The C<PERL5LIB> environment variable have to be correctly set +for this to work with modules installed using L<local::lib>, unless +you always use the C<-l> option. + +=item --skip-satisfied + +B<EXPERIMENTAL>: Specifies whether a module (and version) given in the +command line is skipped if it's already installed. + +If you run: + + cpanms --skip-satisfied CGI DBI~1.2 + +cpanms won't install them if you already have CGI (for whatever +versions) or have DBI with version higher than 1.2. It is similar to +C<--skip-installed> but while C<--skip-installed> checks if the +I<latest> version of CPAN is installed, C<--skip-satisfied> checks if +a requested version (or not, which means any version) is installed. + +Defaults to false. + +=item --verify + +Verify the integrity of distribution files retrieved from CPAN using CHECKSUMS +file, and SIGNATURES file (if found in the distribution). Defaults to false. + +Using this option does not verify the integrity of the CHECKSUMS file, and it's +unsafe to rely on this option if you're using a CPAN mirror that you do not trust. + +=item --report-perl-version + +Whether it reports the locally installed perl version to the various +web server as part of User-Agent. Defaults to true unless CI related +environment variables such as C<TRAVIS>, C<CI> or C<AUTOMATED_TESTING> +is enabled. You can disable it by using C<--no-report-perl-version>. + +=item --auto-cleanup + +Specifies the number of days in which cpanm's work directories +expire. Defaults to 7, which means old work directories will be +cleaned up in one week. + +You can set the value to C<0> to make cpan never cleanup those +directories. + +=item --man-pages + +Generates man pages for executables (man1) and libraries (man3). + +Defaults to true (man pages generated) unless C<-L|--local-lib-contained> +option is supplied in which case it's set to false. You can disable +it with C<--no-man-pages>. + +=item --lwp + +Uses L<LWP> module to download stuff over HTTP. Defaults to true, and +you can say C<--no-lwp> to disable using LWP, when you want to upgrade +LWP from CPAN on some broken perl systems. + +=item --wget + +Uses GNU Wget (if available) to download stuff. Defaults to true, and +you can say C<--no-wget> to disable using Wget. + +=item --curl + +Uses cURL (if available) to download stuff. Defaults to true, and +you can say C<--no-curl> to disable using cURL. + +Normally with C<--lwp>, C<--wget> and C<--curl> options set to true +(which is the default) cpanms tries L<LWP>, Wget, cURL and L<HTTP::Tiny> +(in that order) and uses the first one available. + +=back + +=head1 ENVIRONMENT VARIABLES + +=over 4 + +=item PERL_CPANM_HOME + +The directory cpanms should use to store downloads and build and test +modules. Defaults to the C<.cpanm> directory in your user's home +directory. + +=item PERL_CPANM_OPT + +If set, adds a set of default options to every cpanms command. These +options come first, and so are overridden by command-line options. + +=back + +=head1 SEE ALSO + +L<App::cpanminus> + +=head1 BUGS + +This version of cpanminus distributed under the name of C<cpanms> +has been modified by Rubicon for Alpine Linux. If you find any bugs +that are specific to this version (not reproducible with the original +cpanminus distributed in Alpine under the name of C<cpanm>), please +do not bother the original author, instead file a bug report at: +https://gitlab.alpinelinux.org/alpine/aports/-/issues . + +=head1 COPYRIGHT + +Copyright 2010- Tatsuhiko Miyagawa. + +=head1 AUTHOR + +Tatsuhiko Miyagawa + +=cut |