├── .gitignore ├── .perl.metadata ├── DESCRIPTION ├── Makefile ├── Rules-perl.mk ├── bootstrap.sh ├── empty ├── graphs └── default │ └── perl.xml ├── manifest ├── nodes ├── opt-perl-cpan-support.xml └── opt-perl.xml ├── src ├── Makefile ├── cpan-support │ ├── Makefile │ ├── buildmodules.sh │ ├── modules.bootstrap │ ├── modules.build.in │ ├── modules.build3 │ ├── mymod │ ├── remrequires │ └── version.mk ├── cpan │ ├── Config.pm │ ├── Makefile │ ├── Rocks.pm │ ├── Signature.pm │ ├── System.pm │ └── version.mk ├── linux.mk ├── opt-perl-module │ ├── Makefile │ ├── opt-perl.in │ └── version.mk ├── perl │ ├── Makefile │ ├── patch-files │ │ ├── perl-5.14.1 │ │ │ └── cpan │ │ │ │ └── CPANPLUS │ │ │ │ ├── bin │ │ │ │ └── cpan2dist │ │ │ │ └── lib │ │ │ │ └── CPANPLUS │ │ │ │ ├── Dist.pm │ │ │ │ └── Internals.pm │ │ └── perl-5.14.2 │ │ │ └── cpan │ │ │ └── CPANPLUS │ │ │ ├── bin │ │ │ └── cpan2dist │ │ │ └── lib │ │ │ └── CPANPLUS │ │ │ ├── Dist.pm │ │ │ └── Internals.pm │ ├── provides-5.26.0 │ └── version.mk.in ├── sunos.mk └── usersguide │ ├── Makefile │ ├── copyrights.sgml │ ├── images │ └── i-01.png │ ├── index.sgml │ ├── installing.sgml │ ├── preface.sgml │ ├── using.sgml │ └── version.mk └── version.mk /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # build directory 3 | BUILD/ 4 | RPMS/ 5 | SOURCES/ 6 | SPECS/ 7 | 8 | 9 | *.pyc 10 | 11 | _os 12 | _arch 13 | _distribution 14 | 15 | # ignore version.mk 16 | rocks-version.mk 17 | rocks-version-common.mk 18 | 19 | # ignore python.mk 20 | python.mk 21 | 22 | # ignore Rules files 23 | Rules-install.mk 24 | Rules-linux-centos.mk 25 | Rules-linux.mk 26 | Rules-rcfiles.mk 27 | Rules-scripts.mk 28 | Rules.mk 29 | Rolls.mk 30 | 31 | # --- BEGIN --- binaries files 32 | src/perl/perl-5.14.2.tar.gz 33 | # --- END --- 34 | -------------------------------------------------------------------------------- /.perl.metadata: -------------------------------------------------------------------------------- 1 | df1549d65cdef2b20023af83ecaa2a024109a5ad src/perl/perl-5.14.2.tar.gz 0B0LD0shfkvCRSV9jbWZNWkJpRGs 2 | e1abc572ef5bb69ebfa0f79a60a7eae753cc7b29 src/perl/perl-5.26.0.tar.gz 0B0LD0shfkvCRTlR5Ullwd3llTzA 3 | -------------------------------------------------------------------------------- /DESCRIPTION: -------------------------------------------------------------------------------- 1 | Perl Interpreter 2 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # $Id: Makefile,v 1.4 2012/11/27 00:49:11 phil Exp $ 3 | # 4 | # @Copyright@ 5 | # 6 | # Rocks(r) 7 | # www.rocksclusters.org 8 | # version 6.2 (SideWinder) 9 | # version 7.0 (Manzanita) 10 | # 11 | # Copyright (c) 2000 - 2017 The Regents of the University of California. 12 | # All rights reserved. 13 | # 14 | # Redistribution and use in source and binary forms, with or without 15 | # modification, are permitted provided that the following conditions are 16 | # met: 17 | # 18 | # 1. Redistributions of source code must retain the above copyright 19 | # notice, this list of conditions and the following disclaimer. 20 | # 21 | # 2. Redistributions in binary form must reproduce the above copyright 22 | # notice unmodified and in its entirety, this list of conditions and the 23 | # following disclaimer in the documentation and/or other materials provided 24 | # with the distribution. 25 | # 26 | # 3. All advertising and press materials, printed or electronic, mentioning 27 | # features or use of this software must display the following acknowledgement: 28 | # 29 | # "This product includes software developed by the Rocks(r) 30 | # Cluster Group at the San Diego Supercomputer Center at the 31 | # University of California, San Diego and its contributors." 32 | # 33 | # 4. Except as permitted for the purposes of acknowledgment in paragraph 3, 34 | # neither the name or logo of this software nor the names of its 35 | # authors may be used to endorse or promote products derived from this 36 | # software without specific prior written permission. The name of the 37 | # software includes the following terms, and any derivatives thereof: 38 | # "Rocks", "Rocks Clusters", and "Avalanche Installer". For licensing of 39 | # the associated name, interested parties should contact Technology 40 | # Transfer & Intellectual Property Services, University of California, 41 | # San Diego, 9500 Gilman Drive, Mail Code 0910, La Jolla, CA 92093-0910, 42 | # Ph: (858) 534-5815, FAX: (858) 534-7345, E-MAIL:invent@ucsd.edu 43 | # 44 | # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' 45 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 46 | # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 47 | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS 48 | # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 49 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 50 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 51 | # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 52 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 53 | # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 54 | # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 55 | # 56 | # @Copyright@ 57 | # 58 | # $Log: Makefile,v $ 59 | # Revision 1.4 2012/11/27 00:49:11 phil 60 | # Copyright Storm for Emerald Boa 61 | # 62 | # Revision 1.3 2012/05/06 05:49:18 phil 63 | # Copyright Storm for Mamba 64 | # 65 | # Revision 1.2 2011/07/23 02:31:15 phil 66 | # Viper Copyright 67 | # 68 | # Revision 1.1 2011/06/16 18:00:27 anoop 69 | # Start of a perl roll 70 | # 71 | # 72 | 73 | -include $(ROLLSROOT)/etc/Rolls.mk 74 | include Rolls.mk 75 | 76 | default: roll 77 | 78 | preroll:: 79 | make --quiet -C src/cpan-support opt-perl-cpan-support.xml > nodes/opt-perl-cpan-support.xml 80 | -------------------------------------------------------------------------------- /Rules-perl.mk: -------------------------------------------------------------------------------- 1 | PERL=/opt/perl/bin/perl 2 | export PERL 3 | -------------------------------------------------------------------------------- /bootstrap.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # $Id: bootstrap.sh,v 1.4 2012/11/27 00:49:11 phil Exp $ 4 | 5 | # @Copyright@ 6 | # 7 | # Rocks(r) 8 | # www.rocksclusters.org 9 | # version 6.2 (SideWinder) 10 | # version 7.0 (Manzanita) 11 | # 12 | # Copyright (c) 2000 - 2017 The Regents of the University of California. 13 | # All rights reserved. 14 | # 15 | # Redistribution and use in source and binary forms, with or without 16 | # modification, are permitted provided that the following conditions are 17 | # met: 18 | # 19 | # 1. Redistributions of source code must retain the above copyright 20 | # notice, this list of conditions and the following disclaimer. 21 | # 22 | # 2. Redistributions in binary form must reproduce the above copyright 23 | # notice unmodified and in its entirety, this list of conditions and the 24 | # following disclaimer in the documentation and/or other materials provided 25 | # with the distribution. 26 | # 27 | # 3. All advertising and press materials, printed or electronic, mentioning 28 | # features or use of this software must display the following acknowledgement: 29 | # 30 | # "This product includes software developed by the Rocks(r) 31 | # Cluster Group at the San Diego Supercomputer Center at the 32 | # University of California, San Diego and its contributors." 33 | # 34 | # 4. Except as permitted for the purposes of acknowledgment in paragraph 3, 35 | # neither the name or logo of this software nor the names of its 36 | # authors may be used to endorse or promote products derived from this 37 | # software without specific prior written permission. The name of the 38 | # software includes the following terms, and any derivatives thereof: 39 | # "Rocks", "Rocks Clusters", and "Avalanche Installer". For licensing of 40 | # the associated name, interested parties should contact Technology 41 | # Transfer & Intellectual Property Services, University of California, 42 | # San Diego, 9500 Gilman Drive, Mail Code 0910, La Jolla, CA 92093-0910, 43 | # Ph: (858) 534-5815, FAX: (858) 534-7345, E-MAIL:invent@ucsd.edu 44 | # 45 | # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' 46 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 47 | # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 48 | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS 49 | # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 50 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 51 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 52 | # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 53 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 54 | # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 55 | # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 56 | # 57 | # @Copyright@ 58 | 59 | # $Log: bootstrap.sh,v $ 60 | # Revision 1.4 2012/11/27 00:49:11 phil 61 | # Copyright Storm for Emerald Boa 62 | # 63 | # Revision 1.3 2012/05/06 05:49:18 phil 64 | # Copyright Storm for Mamba 65 | # 66 | # Revision 1.2 2011/07/23 02:31:15 phil 67 | # Viper Copyright 68 | # 69 | # Revision 1.1 2011/06/16 18:00:27 anoop 70 | # Start of a perl roll 71 | # 72 | 73 | if [ ! -f "$ROLLSROOT/../../bin/get_sources.sh" ]; then 74 | echo "To compile this roll on Rocks 6.1.1 or older you need to install a newer rocks-devel rpm. 75 | Install it with: 76 | rpm -Uvh https://googledrive.com/host/0B0LD0shfkvCRRGtadUFTQkhoZWs/rocks-devel-6.2-3.x86_64.rpm 77 | If you need an older version of this roll you can get it from: 78 | https://github.com/rocksclusters-attic" 79 | exit 1 80 | fi 81 | 82 | . $ROLLSROOT/etc/bootstrap-functions.sh 83 | 84 | 85 | compile perl 86 | install opt-perl 87 | compile_and_install opt-perl-module 88 | 89 | (cd src/cpan-support && make bootstrap) 90 | -------------------------------------------------------------------------------- /empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rocksclusters/perl/16d0a74db951bafe6ae000685fb59933d6ef37c6/empty -------------------------------------------------------------------------------- /graphs/default/perl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | The perl Roll 8 | 9 | 10 | 11 | 12 | Copyright (c) 2000 - 2017 The Regents of the University of California. 13 | All rights reserved. Rocks(r) v6.2/v7.0 www.rocksclusters.org 14 | 15 | 16 | 17 | 18 | $Log: perl.xml,v $ 19 | Revision 1.4 2012/05/06 05:49:18 phil 20 | Copyright Storm for Mamba 21 | 22 | Revision 1.3 2011/07/23 02:31:15 phil 23 | Viper Copyright 24 | 25 | Revision 1.2 2011/07/20 20:29:47 anoop 26 | cpan-support finally in. 27 | 28 | Revision 1.1 2011/06/16 18:00:27 anoop 29 | Start of a perl roll 30 | 31 | 32 | 33 | 34 | 35 | opt-perl 36 | opt-perl-cpan-support 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /manifest: -------------------------------------------------------------------------------- 1 | opt-perl-Params-Util 2 | opt-perl-HTML-Parser 3 | opt-perl-Template-Toolkit 4 | opt-perl-Tk 5 | opt-perl-List-MoreUtils 6 | opt-perl-Text-Glob 7 | opt-perl-Encode-Locale 8 | opt-perl-ExtUtils-MakeMaker 9 | opt-perl-Module-Signature 10 | opt-perl-File-Find-Rule 11 | opt-perl-HTTP-Negotiate 12 | opt-perl-IPC-Run 13 | opt-perl-HTTP-Message 14 | opt-perl-HTTP-Date 15 | opt-perl-Number-Compare 16 | opt-perl-LWP-MediaTypes 17 | opt-perl-Sub-Install 18 | opt-perl-Readonly 19 | opt-perl-URI 20 | opt-perl-Text-Autoformat 21 | opt-perl-Data-OptList 22 | opt-perl-MRO-Compat 23 | opt-perl-libwww-perl 24 | opt-perl-YAML 25 | opt-perl-Sub-Exporter 26 | opt-perl-HTTP-Cookies 27 | opt-perl-Pod-POM 28 | opt-perl-Text-Reform 29 | opt-perl-HTML-Tagset 30 | opt-perl-Path-Class 31 | opt-perl-Net-HTTP 32 | opt-perl-File-Listing 33 | opt-perl-WWW-RobotRules 34 | opt-perl-HTTP-Daemon 35 | opt-perl-Text-Template 36 | opt-perl-File-Slurp 37 | opt-perl-AppConfig 38 | opt-perl-Data-Section 39 | opt-perl-Software-License 40 | opt-perl 41 | rocks-cpan 42 | roll-perl-usersguide 43 | roll-perl-kickstart 44 | -------------------------------------------------------------------------------- /nodes/opt-perl-cpan-support.xml: -------------------------------------------------------------------------------- 1 | 2 | opt-perl-Spiffy 3 | opt-perl-IO-HTML 4 | opt-perl-Test-Base 5 | opt-perl-Test-Deep 6 | opt-perl-URI 7 | opt-perl-Algorithm-Diff 8 | opt-perl-Encode-Locale 9 | opt-perl-HTTP-Date 10 | opt-perl-HTTP-Message 11 | opt-perl-HTTP-Cookies 12 | opt-perl-HTTP-Daemon 13 | opt-perl-HTTP-Negotiate 14 | opt-perl-Net-HTTP 15 | opt-perl-File-Listing 16 | opt-perl-Try-Tiny 17 | opt-perl-HTML-Parser 18 | opt-perl-WWW-RobotRules 19 | opt-perl-libwww-perl 20 | opt-perl-YAML 21 | opt-perl-App-CPANtoRPM 22 | opt-perl-MRO-Compat 23 | opt-perl-Sub-Install 24 | opt-perl-Params-Util 25 | opt-perl-Data-OptList 26 | opt-perl-Capture-Tiny 27 | opt-perl-Test-FailWarnings 28 | opt-perl-Sub-Exporter 29 | opt-perl-Data-Section 30 | opt-perl-HTML-Tagset 31 | opt-perl-IO-Tty 32 | opt-perl-IPC-Run 33 | opt-perl-File-Remove 34 | opt-perl-Module-Build 35 | opt-perl-Test-Requires 36 | opt-perl-Module-ScanDeps 37 | opt-perl-YAML-Tiny 38 | opt-perl-Module-Install 39 | opt-perl-inc-latest 40 | opt-perl-Number-Compare 41 | opt-perl-Module-Signature 42 | opt-perl-Number-Compare 43 | opt-perl-Text-Glob 44 | opt-perl-File-Find-Rule 45 | opt-perl-Exporter-Tiny 46 | opt-perl-Test-Fatal 47 | opt-perl-Test-Warnings 48 | opt-perl-List-MoreUtils-XS 49 | opt-perl-List-MoreUtils 50 | opt-perl-Test-LeakTrace 51 | opt-perl-File-Slurper 52 | opt-perl-Sub-Uplevel 53 | opt-perl-Test-Exception 54 | opt-perl-PerlIO-utf8_strict 55 | opt-perl-Pod-POM 56 | opt-perl-ExtUtils-Config 57 | opt-perl-ExtUtils-InstallPaths 58 | opt-perl-ExtUtils-Helpers 59 | opt-perl-Text-Template 60 | opt-perl-Software-License 61 | opt-perl-Text-Reform 62 | opt-perl-Text-Autoformat 63 | opt-perl-Test-Pod 64 | opt-perl-AppConfig 65 | opt-perl-Test-Warn 66 | opt-perl-CGI 67 | opt-perl-Template-Toolkit 68 | opt-perl-IO-stringy 69 | opt-perl-Image-Info 70 | opt-perl-Image-Size 71 | opt-perl-Devel-Leak 72 | opt-perl-Module-Pluggable 73 | opt-perl-Log-Message 74 | opt-perl-Archive-Extract 75 | opt-perl-Log-Message-Simple 76 | opt-perl-Term-UI 77 | opt-perl-Object-Accessor 78 | opt-perl-Package-Constants 79 | opt-perl-Socket6 80 | opt-perl-CPANPLUS 81 | opt-perl-Log-Log4perl 82 | 83 | -------------------------------------------------------------------------------- /nodes/opt-perl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Your perl roll description here 8 | 9 | 10 | 11 | Copyright (c) 2000 - 2017 The Regents of the University of California. 12 | All rights reserved. Rocks(r) v6.2/v7.0 www.rocksclusters.org 13 | 14 | 15 | 16 | 17 | $Log: opt-perl.xml,v $ 18 | Revision 1.4 2012/05/06 05:49:18 phil 19 | Copyright Storm for Mamba 20 | 21 | Revision 1.3 2011/07/23 02:31:15 phil 22 | Viper Copyright 23 | 24 | Revision 1.2 2011/07/20 20:29:47 anoop 25 | cpan-support finally in. 26 | 27 | Revision 1.1 2011/06/16 18:00:27 anoop 28 | Start of a perl roll 29 | 30 | 31 | 32 | opt-perl 33 | opt-perl-module 34 | roll-perl-usersguide 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/Makefile: -------------------------------------------------------------------------------- 1 | # $Id: Makefile,v 1.4 2012/11/27 00:49:11 phil Exp $ 2 | # 3 | # @Copyright@ 4 | # 5 | # Rocks(r) 6 | # www.rocksclusters.org 7 | # version 6.2 (SideWinder) 8 | # version 7.0 (Manzanita) 9 | # 10 | # Copyright (c) 2000 - 2017 The Regents of the University of California. 11 | # All rights reserved. 12 | # 13 | # Redistribution and use in source and binary forms, with or without 14 | # modification, are permitted provided that the following conditions are 15 | # met: 16 | # 17 | # 1. Redistributions of source code must retain the above copyright 18 | # notice, this list of conditions and the following disclaimer. 19 | # 20 | # 2. Redistributions in binary form must reproduce the above copyright 21 | # notice unmodified and in its entirety, this list of conditions and the 22 | # following disclaimer in the documentation and/or other materials provided 23 | # with the distribution. 24 | # 25 | # 3. All advertising and press materials, printed or electronic, mentioning 26 | # features or use of this software must display the following acknowledgement: 27 | # 28 | # "This product includes software developed by the Rocks(r) 29 | # Cluster Group at the San Diego Supercomputer Center at the 30 | # University of California, San Diego and its contributors." 31 | # 32 | # 4. Except as permitted for the purposes of acknowledgment in paragraph 3, 33 | # neither the name or logo of this software nor the names of its 34 | # authors may be used to endorse or promote products derived from this 35 | # software without specific prior written permission. The name of the 36 | # software includes the following terms, and any derivatives thereof: 37 | # "Rocks", "Rocks Clusters", and "Avalanche Installer". For licensing of 38 | # the associated name, interested parties should contact Technology 39 | # Transfer & Intellectual Property Services, University of California, 40 | # San Diego, 9500 Gilman Drive, Mail Code 0910, La Jolla, CA 92093-0910, 41 | # Ph: (858) 534-5815, FAX: (858) 534-7345, E-MAIL:invent@ucsd.edu 42 | # 43 | # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' 44 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 45 | # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 46 | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS 47 | # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 48 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 49 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 50 | # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 51 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 52 | # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 53 | # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 54 | # 55 | # @Copyright@ 56 | # 57 | # $Log: Makefile,v $ 58 | # Revision 1.4 2012/11/27 00:49:11 phil 59 | # Copyright Storm for Emerald Boa 60 | # 61 | # Revision 1.3 2012/05/06 05:49:18 phil 62 | # Copyright Storm for Mamba 63 | # 64 | # Revision 1.2 2011/07/23 02:31:15 phil 65 | # Viper Copyright 66 | # 67 | # Revision 1.1 2011/06/16 18:00:28 anoop 68 | # Start of a perl roll 69 | # 70 | 71 | -include $(shell $(ROCKSROOT)/bin/arch).mk 72 | -include $(shell $(ROCKSROOT)/bin/os).mk 73 | 74 | default: pkg 75 | 76 | copyright pkg rpm clean:: 77 | for i in $(SRCDIRS) ; do \ 78 | (cd $$i; $(MAKE) $@) ; \ 79 | done 80 | -------------------------------------------------------------------------------- /src/cpan-support/Makefile: -------------------------------------------------------------------------------- 1 | # $Id: Makefile,v 1.10 2013/02/05 18:29:56 clem Exp $ 2 | 3 | # @Copyright@ 4 | # 5 | # Rocks(r) 6 | # www.rocksclusters.org 7 | # version 6.2 (SideWinder) 8 | # version 7.0 (Manzanita) 9 | # 10 | # Copyright (c) 2000 - 2017 The Regents of the University of California. 11 | # All rights reserved. 12 | # 13 | # Redistribution and use in source and binary forms, with or without 14 | # modification, are permitted provided that the following conditions are 15 | # met: 16 | # 17 | # 1. Redistributions of source code must retain the above copyright 18 | # notice, this list of conditions and the following disclaimer. 19 | # 20 | # 2. Redistributions in binary form must reproduce the above copyright 21 | # notice unmodified and in its entirety, this list of conditions and the 22 | # following disclaimer in the documentation and/or other materials provided 23 | # with the distribution. 24 | # 25 | # 3. All advertising and press materials, printed or electronic, mentioning 26 | # features or use of this software must display the following acknowledgement: 27 | # 28 | # "This product includes software developed by the Rocks(r) 29 | # Cluster Group at the San Diego Supercomputer Center at the 30 | # University of California, San Diego and its contributors." 31 | # 32 | # 4. Except as permitted for the purposes of acknowledgment in paragraph 3, 33 | # neither the name or logo of this software nor the names of its 34 | # authors may be used to endorse or promote products derived from this 35 | # software without specific prior written permission. The name of the 36 | # software includes the following terms, and any derivatives thereof: 37 | # "Rocks", "Rocks Clusters", and "Avalanche Installer". For licensing of 38 | # the associated name, interested parties should contact Technology 39 | # Transfer & Intellectual Property Services, University of California, 40 | # San Diego, 9500 Gilman Drive, Mail Code 0910, La Jolla, CA 92093-0910, 41 | # Ph: (858) 534-5815, FAX: (858) 534-7345, E-MAIL:invent@ucsd.edu 42 | # 43 | # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' 44 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 45 | # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 46 | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS 47 | # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 48 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 49 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 50 | # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 51 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 52 | # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 53 | # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 54 | # 55 | # @Copyright@ 56 | 57 | # $Log: Makefile,v $ 58 | # Revision 1.10 2013/02/05 18:29:56 clem 59 | # last fix to properly set the release number 60 | # 61 | # in makefile you need to expicitly export a variable to make it visible to the 62 | # subshells 63 | # 64 | # Revision 1.9 2013/02/05 01:17:12 clem 65 | # fix make clean so it doesnt wipe version.mk 66 | # 67 | # Revision 1.8 2012/11/27 00:49:11 phil 68 | # Copyright Storm for Emerald Boa 69 | # 70 | # Revision 1.7 2012/05/06 05:49:19 phil 71 | # Copyright Storm for Mamba 72 | # 73 | # Revision 1.6 2012/04/25 02:05:01 phil 74 | # Perl sucks and here's why. The latest version of perl supplies MakeMaker 75 | # version 6.57, but some of the support packages require version 6.62. 76 | # 77 | # So we have to build newer version of MakeMaker. But MakeMaker is required to 78 | # build perl in the first place. Can you drop in the 6.62 tree into the 79 | # perl tree and update the source? Of course not. 80 | # 81 | # Instead, you have create an alternate package. But now the perl and makeMaker rpms collide. basically, no win. Having software rely on versions beyond the latest release is brain dead. Welcome to bio and perl code. 82 | # 83 | # Revision 1.5 2011/07/23 02:31:15 phil 84 | # Viper Copyright 85 | # 86 | # Revision 1.4 2011/07/20 20:17:13 anoop 87 | # Separate bootstrap and build lists. 88 | # This way bootstrap takes less time than build 89 | # 90 | # Revision 1.3 2011/07/20 06:34:18 anoop 91 | # Bug fixes to Makefile. Make sed parsing a bit more accurate 92 | # 93 | # Revision 1.2 2011/07/20 03:04:45 anoop 94 | # Update ignorelists dynamically 95 | # Make the sed parsing a bit more accurate 96 | # 97 | # Revision 1.1 2011/06/16 18:00:28 anoop 98 | # Start of a perl roll 99 | # 100 | # Revision 1.5 2010/09/07 23:53:04 bruno 101 | # star power for gb 102 | # 103 | # Revision 1.4 2010/06/22 21:26:22 mjk 104 | # Build env is now from src/devel package, nothing outside of base roll. 105 | # 106 | # Revision 1.3 2009/11/20 23:38:38 bruno 107 | # from anoop: 108 | # Disable building and installation of rocks-cpan and cpan-support on 109 | # Solaris. Will re-enable for next release after testing. 110 | # 111 | # Revision 1.2 2009/11/19 21:10:34 bruno 112 | # patch from anoop 113 | # 114 | # Revision 1.1 2009/11/18 22:16:56 anoop 115 | # - Big changes to rocks-cpan. Now more accurate. 116 | # - CPAN Support introduced. Builds and installs the 117 | # necessary infrastucture to get CPANPLUS::Dist::Rocks 118 | # to function correctly 119 | # - Changes to xml files to include CPAN packages and support 120 | # infrastructure 121 | # 122 | 123 | REDHAT.ROOT = $(CURDIR)/../.. 124 | 125 | PERLVERSION = $(shell awk '/^VERSION/{printf("%s",$$NF)}' $(CURDIR)/../perl/version.mk) 126 | 127 | .rpmmacros: 128 | echo "%_topdir $(REDHAT.ROOT)" > .rpmmacros 129 | echo "%__perl /opt/perl/bin/perl" >> .rpmmacros 130 | 131 | RPMTREE: 132 | if [ ! -d $(REDHAT.ROOT)/SPECS ]; then mkdir $(REDHAT.ROOT)/SPECS; fi 133 | if [ ! -d $(REDHAT.ROOT)/SOURCES ]; then mkdir $(REDHAT.ROOT)/SOURCES; fi 134 | if [ ! -d $(REDHAT.ROOT)/RPMS ]; then mkdir $(REDHAT.ROOT)/SOURCES; fi 135 | if [ ! -d $(REDHAT.ROOT)/SRPMS ]; then mkdir $(REDHAT.ROOT)/SOURCES; fi 136 | 137 | 138 | ## The following reads the modules required to bootstrap 139 | bootstrap: 140 | cat modules.bootstrap | while read line; do \ 141 | /opt/perl/bin/cpan $$line < /dev/null; \ 142 | done 143 | 144 | ## This is nasty and more than a bit of manual maintenance, but it works 145 | ## Build will build and install modules in modules.build using buildmodules.sh, 146 | ## which will in turn use cpantorpm. 147 | 148 | modules.build: modules.build.in 149 | sed 's/@PERLVERSION@/$(PERLVERSION)/g' modules.build.in > modules.build 150 | 151 | build: .rpmmacros RPMTREE modules.build 152 | (HOME=$(CURDIR) WORKDIR=$(REDHAT.ROOT) ./buildmodules.sh modules.build) 153 | 154 | # Transfer all the RPMS to the Roll RPM repository. 155 | rpm: build 156 | echo "used buildmodules.sh" 157 | 158 | opt-perl-cpan-support.xml: modules.build 159 | sed -e 's/{.*}//' -e '/^#/d' -e 's/::/-/g' modules.build | \ 160 | awk 'BEGIN{print ""}; END {print ""}; {print "opt-perl-" $$NF ""}' 161 | # Clean out everything that's not Makefile or modules.build or CVS 162 | clean:: 163 | find * -prune ! -name CVS \ 164 | ! -name Makefile -a \ 165 | ! -name modules.build.in -a\ 166 | ! -name buildmodules.sh -a\ 167 | ! -name version.mk -a\ 168 | ! -name modules.bootstrap\ 169 | ! -name remrequires\ 170 | -exec rm -rf {} \; 171 | -rm -rf .gnupg .cpan .cpanplus 172 | set: 173 | echo $(PERLVERSION) 174 | -------------------------------------------------------------------------------- /src/cpan-support/buildmodules.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # This script reads a file of CPAN module names (and options) to build and install 4 | # Summary: 5 | # buildmodules.sh modulefile 6 | # 7 | # RPM-versions of these modules. It uses cpantorpm. The following modules must be 8 | # installed (through CPAN) for this to work the first time 9 | # 1. LWP::Simple 10 | # 2. YAML 11 | # 3. App::CPANtoRPM 12 | # 13 | # The format of a line in the list of module files: 14 | # ModuleName [rpmname] [{buildoption[:arg]}] [{buildoption[:arg]}] 15 | # buildoption is any option understood by cpantorpm 16 | # 17 | # Examples: 18 | # YAML 19 | # LWP libwww-perl 20 | # Text::Glob {--build-type:make} 21 | # 22 | cleanup() 23 | { 24 | module unload opt-perl 25 | } 26 | sighandler() 27 | { 28 | cleanup 29 | exit 0 30 | } 31 | module load opt-perl 32 | trap 'sighandler' QUIT 33 | trap 'sighandler' INT 34 | 35 | if [ -z "${WORKDIR+x}" ]; then 36 | WORKDIR=/tmp/rpm 37 | fi 38 | while read mod 39 | do 40 | # Skip comment lines in the module file 41 | echo $mod | grep -q '^#' 42 | if [ $? -eq 0 ]; then 43 | continue 44 | fi 45 | 46 | # Parse the line to figure out the module name and options 47 | read -r -a modinfo <<< $mod 48 | buildflags="" 49 | modperl=${modinfo[0]} 50 | rpmname=$(echo $modperl | sed 's/::/-/g') 51 | pkgfiles="" 52 | nelem=${#modinfo[@]} 53 | let nelem=${nelem}-1 54 | if [ ${nelem} -gt 0 ]; then 55 | for i in `seq 1 ${nelem}`; do 56 | elem=${modinfo[$i]} 57 | echo $elem | grep -q '{' 58 | if [ $? -eq 0 ]; then 59 | bp=$(echo $elem | sed -e 's/{//' -e 's/}//' -e 's/:/ /') 60 | echo $bp | grep -q '%files' 61 | if [ $? -ne 0 ]; then 62 | buildflags="$buildflags $bp" 63 | echo ">> $buildflags" 64 | else 65 | echo -e "Setting pkgfiles to $bp" 66 | pkgfiles=$bp 67 | fi 68 | else 69 | rpmname=$elem 70 | fi 71 | done 72 | fi 73 | echo -e ">> $modperl $rpmname $buildflags $pkgfiles" 74 | 75 | ## Create the SPEC file for this RPM. Try twice. It's perl, don't ask why 76 | retries=2 77 | for i in `seq 1 $retries`; do 78 | /usr/bin/yes | /opt/perl/bin/cpantorpm $buildflags --add-require "opt-perl" --install-base /opt/perl --prefix opt-perl- --packager Rocks --spec-only $modperl 79 | if [ $? -eq 0 ]; then break; fi 80 | done 81 | if [ $? -ne 0 ]; then code=$?; cleanup; exit $code; fi 82 | 83 | # Download the source tarball for this RPM 84 | (cd ${WORKDIR}/SOURCES; /opt/perl/bin/cpan -g $modperl) 85 | 86 | # Fix-up the cpantorpm-generated spec file. 87 | SPECFILE=${WORKDIR}/SPECS/opt-perl-${rpmname}.spec 88 | /bin/sed -i -e "s#^%setup -T -D#%setup #" -e 's#perl/lib/perl5#perl/lib#g' $SPECFILE 89 | SPECFILETMP=$SPECFILE.$$ 90 | awk -- '/Provides:[[:space:]]+perl/{print gensub("perl","opt-perl",1);next} /Requires:[[:space:]]+perl/{print gensub("perl","opt-perl",1);next} {print}' $SPECFILE > $SPECFILETMP 91 | awk -f remrequires $SPECFILETMP > $SPECFILE 92 | if [ $? -ne 0 ]; then 93 | code=$? 94 | cleanup 95 | exit $code 96 | fi 97 | if [ "x$pkgfiles" != "x" ]; then 98 | "echo overriding files in package spec ${SPECFILE}" 99 | sed -i -e "s#%files#$pkgfiles#" $SPECFILE 100 | fi 101 | 102 | rpm="opt-perl-${rpmname}" 103 | 104 | # Build the RPM 105 | rpmbuild -ba ${WORKDIR}/SPECS/${rpm}.spec 106 | if [ $? -ne 0 ]; then 107 | code=$? 108 | cleanup 109 | exit $code 110 | fi 111 | 112 | # Install the just-built module. This is to satisfy dependencies for subsequent 113 | # builds 114 | if [ ! -f ${WORKDIR}/Makefile ]; then 115 | find ${WORKDIR}/RPMS -type f -name "${rpm}-*" -exec yum -y install {} \; -print 116 | else 117 | pushd ${WORKDIR} 118 | make createlocalrepo 119 | yum -c yum.conf -y install ${rpm} 120 | popd 121 | fi 122 | done < $1 123 | cleanup 124 | -------------------------------------------------------------------------------- /src/cpan-support/modules.bootstrap: -------------------------------------------------------------------------------- 1 | LWP::Simple 2 | YAML 3 | App::CPANtoRPM 4 | -------------------------------------------------------------------------------- /src/cpan-support/modules.build.in: -------------------------------------------------------------------------------- 1 | ## These are Modules that are built with CPANtoRPM 2 | ## ORDER is Critical. Modules are built and installed in the order defined here to 3 | ## handle prerequisites 4 | ## 5 | ## This uses cpantorpm, which seems to be pretty good. But perl packaging is a nightmare 6 | ## It handles MOST perl modules without issue, some need fixups. 7 | ## forms of entry 8 | ## module <- build a module using its defaults. usual case 9 | ## module modname <- build a module, but name it modname (See LWP as an example) 10 | ## module {<>} <- build a module, but pass build-option to to cpantorpm 11 | ## module {%files\\n ...} <- build a module, but overwrite the %files section in the RPM Spec file 12 | #################################################################### 13 | Spiffy 14 | IO::HTML 15 | Test::Base 16 | Test::Deep 17 | URI {--rem-require:opt-perl} 18 | Algorithm::Diff 19 | Encode::Locale 20 | HTTP::Date 21 | HTTP::Message {--rem-require:perl(LWP::MediaTypes)} 22 | HTTP::Cookies 23 | HTTP::Daemon {--rem-require:perl(LWP::MediaTypes)} 24 | HTTP::Negotiate 25 | Net::HTTP 26 | File::Listing 27 | Try::Tiny 28 | HTML::Parser 29 | WWW::RobotRules 30 | LWP libwww-perl {%files\\n/opt/perl/lib/site_perl/@PERLVERSION@/*\\n/opt/perl/man/man1/*\\n/opt/perl/man/man3/*\\n/opt/perl/bin/*} {--rem-require:perl(LWP::MediaTypes)} 31 | YAML {%files\\n/opt/perl/lib/site_perl/@PERLVERSION@/*\\n/opt/perl/man/man3/*} 32 | App::CPANtoRPM 33 | MRO::Compat 34 | Sub::Install 35 | Params::Util 36 | Data::OptList 37 | Capture::Tiny 38 | Test::FailWarnings 39 | Sub::Exporter 40 | Data::Section 41 | HTML::Tagset 42 | IO::Tty 43 | IPC::Run 44 | File::Remove 45 | Module::Build {--build-type:build} {%files\\n/opt/perl/lib/site_perl/@PERLVERSION@/*\\n/opt/perl/man/man1/*\\n/opt/perl/man/man3/*\\n/opt/perl/bin/*} 46 | Test::Requires 47 | Module::ScanDeps 48 | YAML::Tiny 49 | Module::Install 50 | inc::latest 51 | Number::Compare 52 | Module::Signature 53 | Number::Compare 54 | Text::Glob {--build-type:make} 55 | File::Find::Rule 56 | Exporter::Tiny 57 | Test::Fatal {%files\\n/opt/perl/lib/site_perl/@PERLVERSION@/*\\n/opt/perl/man/man3/*} 58 | Test::Warnings 59 | List::MoreUtils::XS 60 | List::MoreUtils {--rem-require:perl(XSLoader)} 61 | Test::LeakTrace 62 | File::Slurper 63 | Sub::Uplevel 64 | Test::Exception 65 | PerlIO::utf8_strict 66 | Pod::POM 67 | ExtUtils::Config 68 | ExtUtils::InstallPaths 69 | ExtUtils::Helpers 70 | Text::Template 71 | Software::License {%files\\n/opt/perl/lib/site_perl/@PERLVERSION@/*\\n/opt/perl/man/man3/*} 72 | Text::Reform {--build-type:make} 73 | Text::Autoformat {--build-type:make} 74 | Test::Pod 75 | AppConfig 76 | Test::Warn 77 | CGI 78 | Template Template-Toolkit 79 | IO::Scalar IO-stringy 80 | Image::Info 81 | Image::Size 82 | Devel::Leak 83 | ## Tk 84 | Module::Pluggable 85 | Log::Message 86 | Archive::Extract {--rem-require:perl(Module::Load::Conditional)} 87 | Log::Message::Simple {%files\\n/opt/perl/lib/site_perl/@PERLVERSION@/*\\n/opt/perl/man/man3/*} 88 | Term::UI 89 | Object::Accessor 90 | Package::Constants {%files\\n/opt/perl/lib/site_perl/@PERLVERSION@/*\\n/opt/perl/man/man3/*} 91 | Socket6 92 | CPANPLUS 93 | Log::Log4perl {--rem-require:perl(File::Path)} 94 | -------------------------------------------------------------------------------- /src/cpan-support/modules.build3: -------------------------------------------------------------------------------- 1 | IO::HTML 2 | URI 3 | HTTP::Date 4 | Date::Parse 5 | Encode::Locale 6 | LWP::MediaTypes 7 | HTTP::Message 8 | HTML::Tagset 9 | HTML::Parser 10 | WWW::RobotRules 11 | HTTP::Daemon 12 | HTTP::Negotiate 13 | Net::HTTP 14 | Mozilla::CA 15 | Net::SSLeay 16 | IO::Socket::SSL 17 | HTTP::Cookies 18 | File::Listing 19 | LWP libwww-perl 20 | Algorithm::Diff 21 | Text::Diff 22 | Spiffy 23 | Test::Base 24 | Test::Deep 25 | Test::YAML 26 | YAML 27 | App::CPANtoRPM 28 | Params::Util 29 | Sub::Install 30 | Capture::Tiny 31 | Test::FailWarnings 32 | Data::OptList 33 | Sub::Exporter 34 | MRO::Compat 35 | Data::Section 36 | IPC::Run 37 | IO::Tty 38 | Module::Signature 39 | Number::Compare 40 | File::Find::Rule 41 | XSLoader 42 | Exporter::Tiny 43 | Try::Tiny 44 | Test::Fatal 45 | Test::Warnings 46 | List::MoreUtils 47 | Test::LeakTrace 48 | File::Slurper 49 | Sub::Uplevel 50 | Test::Exception 51 | PerlIO::utf8_strict 52 | Pod::POM 53 | ExtUtils::Config 54 | ExtUtils::InstallPaths 55 | ExtUtils::Helpers 56 | Text::Template 57 | Software::License 58 | Text::Autoformat 59 | Test::Pod 60 | AppConfig 61 | Template Template-Toolkit 62 | Tk 63 | Module::Pluggable 64 | Log::Message 65 | Module::Load::Conditional 66 | Archive::Extract 67 | Log::Message::Simple 68 | Term::UI 69 | Object::Accessor 70 | Package::Constants 71 | CPANPLUS 72 | Socket6 73 | -------------------------------------------------------------------------------- /src/cpan-support/mymod: -------------------------------------------------------------------------------- 1 | ## These are Modules that are built with CPANtoRPM 2 | ## ORDER is Critical. Modules are built and installed in the order defined here to 3 | ## handle prerequisites 4 | ## 5 | ## This uses cpantorpm, which seems to be pretty good. But perl packaging is a nightmare 6 | ## It handles MOST perl modules without issue, some need fixups. 7 | Spiffy 8 | IO::HTML 9 | Test::Deep 10 | URI 11 | Algorithm::Diff 12 | Encode::Locale 13 | HTTP::Date 14 | HTTP::Message {--rem-require:perl(LWP::MediaTypes)} 15 | HTTP::Cookies 16 | HTTP::Daemon {--rem-require:perl(LWP::MediaTypes)} 17 | HTTP::Negotiate 18 | Net::HTTP 19 | File::Listing 20 | WWW::RobotRules 21 | LWP libwww-perl {%files\\n/opt/perl/lib/site_perl/5.24.0/*\\n/opt/perl/man/man1/*\\n/opt/perl/man/man3/*\\n/opt/perl/bin/*} {--rem-require:perl(LWP::MediaTypes)} 22 | YAML 23 | App::CPANtoRPM 24 | MRO::Compat 25 | Sub::Install 26 | Params::Util 27 | Data::OptList 28 | Capture::Tiny 29 | Test::FailWarnings 30 | Sub::Exporter 31 | Data::Section 32 | HTML::Tagset 33 | IO::Tty 34 | IPC::Run 35 | Module::Signature 36 | inc::latest 37 | Module::Build {--build-type:build} {%files\\n/opt/perl/lib/5.24.0/*\\n/opt/perl/man/man1/*\\n/opt/perl/man/man3/*\\n/opt/perl/bin/*} 38 | Text::Glob {--build-type:make} 39 | Number::Compare 40 | File::Find::Rule 41 | XSLoader 42 | Exporter::Tiny 43 | Try::Tiny 44 | Test::Fatal {%files\\n/opt/perl/lib/site_perl/5.24.0/*\\n/opt/perl/man/man3/*} 45 | Test::Warnings 46 | List::MoreUtils {--rem-require:perl(XSLoader)} 47 | Test::LeakTrace 48 | File::Slurper 49 | Sub::Uplevel 50 | Test::Exception 51 | PerlIO::utf8_strict 52 | Pod::POM 53 | ExtUtils::Config 54 | ExtUtils::InstallPaths 55 | ExtUtils::Helpers 56 | Text::Template 57 | Software::License {%files\\n/opt/perl/lib/site_perl/5.24.0/*\\n/opt/perl/man/man3/*} 58 | Text::Reform {--build-type:make} 59 | Text::Autoformat {--build-type:make} 60 | Test::Pod 61 | AppConfig 62 | Template Template-Toolkit 63 | Tk 64 | Module::Pluggable 65 | Log::Message 66 | Archive::Extract {--rem-require:perl(Module::Load::Conditional)} 67 | Log::Message::Simple {%files\\n/opt/perl/lib/5.24.0/*\\n/opt/perl/man/man3/*} 68 | Term::UI 69 | Object::Accessor 70 | Package::Constants {%files\\n/opt/perl/lib/5.24.0/*\\n/opt/perl/man/man3/*} 71 | Socket6 72 | CPANPLUS 73 | Log::Log4perl {--rem-require:perl(File::Path)} 74 | -------------------------------------------------------------------------------- /src/cpan-support/remrequires: -------------------------------------------------------------------------------- 1 | /Requires:.*opt-perl.*[>=]+/{next}; 2 | {print} 3 | -------------------------------------------------------------------------------- /src/cpan-support/version.mk: -------------------------------------------------------------------------------- 1 | RELEASE = 2 2 | -------------------------------------------------------------------------------- /src/cpan/Config.pm: -------------------------------------------------------------------------------- 1 | 2 | # This is CPAN.pm's systemwide configuration file. This file provides 3 | # defaults for users, and the values can be changed in a per-user 4 | # configuration file. The user-config file is being looked for as 5 | # /root/.cpan/CPAN/MyConfig.pm. 6 | 7 | $CPAN::Config = { 8 | 'applypatch' => q[], 9 | 'auto_commit' => q[1], 10 | 'build_cache' => q[100], 11 | 'build_dir' => q[/export/cpan/cpan/build], 12 | 'build_dir_reuse' => q[0], 13 | 'build_requires_install_policy' => q[yes], 14 | 'bzip2' => q[/usr/bin/bzip2], 15 | 'cache_metadata' => q[1], 16 | 'check_sigs' => q[1], 17 | 'colorize_output' => q[0], 18 | 'commandnumber_in_prompt' => q[1], 19 | 'connect_to_internet_ok' => q[1], 20 | 'cpan_home' => q[/export/cpan/cpan], 21 | 'curl' => q[/usr/bin/curl], 22 | 'ftp' => q[/usr/kerberos/bin/ftp], 23 | 'ftp_passive' => q[1], 24 | 'ftp_proxy' => q[], 25 | 'getcwd' => q[cwd], 26 | 'gpg' => q[/usr/bin/gpg], 27 | 'gzip' => q[/bin/gzip], 28 | 'halt_on_failure' => q[0], 29 | 'histfile' => q[/export/cpan/cpan/histfile], 30 | 'histsize' => q[100], 31 | 'http_proxy' => q[], 32 | 'inactivity_timeout' => q[0], 33 | 'index_expire' => q[1], 34 | 'inhibit_startup_message' => q[0], 35 | 'keep_source_where' => q[/export/cpan/cpan/sources], 36 | 'load_module_verbosity' => q[v], 37 | 'lynx' => q[], 38 | 'make' => q[/usr/bin/make], 39 | 'make_arg' => q[], 40 | 'make_install_arg' => q[], 41 | 'make_install_make_command' => q[/usr/bin/make], 42 | 'makepl_arg' => q[], 43 | 'mbuild_arg' => q[], 44 | 'mbuild_install_arg' => q[], 45 | 'mbuild_install_build_command' => q[./Build], 46 | 'mbuildpl_arg' => q[], 47 | 'ncftp' => q[], 48 | 'ncftpget' => q[], 49 | 'no_proxy' => q[], 50 | 'pager' => q[/usr/bin/less], 51 | 'patch' => q[/usr/bin/patch], 52 | 'perl5lib_verbosity' => q[v], 53 | 'prefer_external_tar' => q[1], 54 | 'prefer_installer' => q[MB], 55 | 'prefs_dir' => q[/export/cpan/cpan/prefs], 56 | 'prerequisites_policy' => q[follow], 57 | 'scan_cache' => q[atstart], 58 | 'shell' => q[/bin/bash], 59 | 'show_unparsable_versions' => q[0], 60 | 'show_upload_date' => q[0], 61 | 'show_zero_versions' => q[0], 62 | 'tar' => q[/bin/tar], 63 | 'tar_verbosity' => q[v], 64 | 'term_is_latin' => q[1], 65 | 'term_ornaments' => q[1], 66 | 'test_report' => q[0], 67 | 'trust_test_report_history' => q[0], 68 | 'unzip' => q[/usr/bin/unzip], 69 | 'urllist' => [q[ftp://cpan-du.viaverio.com/pub/CPAN/], q[ftp://cpan-sj.viaverio.com/pub/CPAN/], q[ftp://cpan.erlbaum.net/CPAN/], q[ftp://cpan.hexten.net/], q[ftp://cpan.llarian.net/pub/CPAN/], q[ftp://cpan.mirrors.tds.net/pub/CPAN], q[ftp://cpan.netnitco.net/pub/mirrors/CPAN/], q[ftp://cpan.pair.com/pub/CPAN/], q[ftp://cpan.uchicago.edu/pub/CPAN/], q[ftp://ftp-mirror.internap.com/pub/CPAN/]], 70 | 'use_sqlite' => q[0], 71 | 'version_timeout' => q[15], 72 | 'wget' => q[/usr/bin/wget], 73 | 'yaml_load_code' => q[0], 74 | 'yaml_module' => q[YAML], 75 | }; 76 | 1; 77 | __END__ 78 | -------------------------------------------------------------------------------- /src/cpan/Makefile: -------------------------------------------------------------------------------- 1 | # $Id: Makefile,v 1.5 2013/01/22 22:13:58 clem Exp $ 2 | 3 | # @Copyright@ 4 | # 5 | # Rocks(r) 6 | # www.rocksclusters.org 7 | # version 6.2 (SideWinder) 8 | # version 7.0 (Manzanita) 9 | # 10 | # Copyright (c) 2000 - 2017 The Regents of the University of California. 11 | # All rights reserved. 12 | # 13 | # Redistribution and use in source and binary forms, with or without 14 | # modification, are permitted provided that the following conditions are 15 | # met: 16 | # 17 | # 1. Redistributions of source code must retain the above copyright 18 | # notice, this list of conditions and the following disclaimer. 19 | # 20 | # 2. Redistributions in binary form must reproduce the above copyright 21 | # notice unmodified and in its entirety, this list of conditions and the 22 | # following disclaimer in the documentation and/or other materials provided 23 | # with the distribution. 24 | # 25 | # 3. All advertising and press materials, printed or electronic, mentioning 26 | # features or use of this software must display the following acknowledgement: 27 | # 28 | # "This product includes software developed by the Rocks(r) 29 | # Cluster Group at the San Diego Supercomputer Center at the 30 | # University of California, San Diego and its contributors." 31 | # 32 | # 4. Except as permitted for the purposes of acknowledgment in paragraph 3, 33 | # neither the name or logo of this software nor the names of its 34 | # authors may be used to endorse or promote products derived from this 35 | # software without specific prior written permission. The name of the 36 | # software includes the following terms, and any derivatives thereof: 37 | # "Rocks", "Rocks Clusters", and "Avalanche Installer". For licensing of 38 | # the associated name, interested parties should contact Technology 39 | # Transfer & Intellectual Property Services, University of California, 40 | # San Diego, 9500 Gilman Drive, Mail Code 0910, La Jolla, CA 92093-0910, 41 | # Ph: (858) 534-5815, FAX: (858) 534-7345, E-MAIL:invent@ucsd.edu 42 | # 43 | # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' 44 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 45 | # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 46 | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS 47 | # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 48 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 49 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 50 | # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 51 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 52 | # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 53 | # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 54 | # 55 | # @Copyright@ 56 | 57 | # $Log: Makefile,v $ 58 | # Revision 1.5 2013/01/22 22:13:58 clem 59 | # With this last fix the yum check repo should now be clean!! 60 | # 61 | # there was a missing dependency in opt-cpan which was wrong. I disabled it. 62 | # 63 | # Revision 1.4 2012/11/27 00:49:11 phil 64 | # Copyright Storm for Emerald Boa 65 | # 66 | # Revision 1.3 2012/05/06 05:49:18 phil 67 | # Copyright Storm for Mamba 68 | # 69 | # Revision 1.2 2011/07/23 02:31:15 phil 70 | # Viper Copyright 71 | # 72 | # Revision 1.1 2011/06/16 18:00:28 anoop 73 | # Start of a perl roll 74 | # 75 | # Revision 1.4 2010/09/07 23:53:04 bruno 76 | # star power for gb 77 | # 78 | # Revision 1.3 2010/06/22 21:26:22 mjk 79 | # Build env is now from src/devel package, nothing outside of base roll. 80 | # 81 | # Revision 1.2 2009/11/18 22:16:56 anoop 82 | # - Big changes to rocks-cpan. Now more accurate. 83 | # - CPAN Support introduced. Builds and installs the 84 | # necessary infrastucture to get CPANPLUS::Dist::Rocks 85 | # to function correctly 86 | # - Changes to xml files to include CPAN packages and support 87 | # infrastructure 88 | # 89 | # Revision 1.1 2009/11/10 21:32:28 anoop 90 | # Install CPAN config files to help create RPM files from CPAN directly 91 | # Make sure to build and install rocks-cpan during bootstrap of the base roll 92 | # Include CPAN support on solaris as well. All CPAN files are only for 93 | # foundation-perl 94 | # 95 | 96 | REDHAT.ROOT = $(CURDIR)/../../ 97 | -include $(ROCKSROOT)/etc/Rules.mk 98 | include Rules.mk 99 | include $(REDHAT.ROOT)/Rules-perl.mk 100 | 101 | RPM.EXTRAS += "AutoReqProv: no" 102 | 103 | 104 | build: 105 | 106 | install:: 107 | PKGROOT = `eval "\`$(PERL) -V:privlibexp\`" ; echo $$privlibexp` 108 | SITEROOT = `eval "\`$(PERL) -V:installsitelib\`" ; echo $$installsitelib` 109 | install:: 110 | # Create all the necessary directories 111 | mkdir -p $(ROOT)/$(PKGROOT) 112 | mkdir -p $(ROOT)/$(PKGROOT)/CPAN 113 | mkdir -p $(ROOT)/$(PKGROOT)/CPANPLUS/Config 114 | mkdir -p $(ROOT)/$(SITEROOT)/CPANPLUS/Dist 115 | mkdir -p $(ROOT)/$(SITEROOT)/CPANPLUS/Module 116 | # Install relevant files 117 | $(INSTALL) -m0544 Config.pm $(ROOT)/$(PKGROOT)/CPAN 118 | $(INSTALL) -m0544 System.pm $(ROOT)/$(PKGROOT)/CPANPLUS/Config/ 119 | $(INSTALL) -m0544 Rocks.pm $(ROOT)/$(SITEROOT)/CPANPLUS/Dist/ 120 | $(INSTALL) -m0544 Signature.pm $(ROOT)/$(SITEROOT)/CPANPLUS/Module/ 121 | -------------------------------------------------------------------------------- /src/cpan/Signature.pm: -------------------------------------------------------------------------------- 1 | package CPANPLUS::Module::Signature; 2 | 3 | use strict; 4 | 5 | 6 | use Cwd; 7 | use CPANPLUS::Error; 8 | use Params::Check qw[check]; 9 | use Module::Load::Conditional qw[can_load]; 10 | 11 | 12 | ### detached sig, not actually used afaik --kane ### 13 | #sub get_signature { 14 | # my $self = shift; 15 | # 16 | # my $clone = $self->clone; 17 | # $clone->package( $self->package . '.sig' ); 18 | # 19 | # return $clone->fetch; 20 | #} 21 | 22 | sub check_signature { 23 | my $self = shift; 24 | my $cb = $self->parent; 25 | my $conf = $cb->configure_object; 26 | my %hash = @_; 27 | 28 | my $verbose; 29 | my $tmpl = { 30 | verbose => {default => $conf->get_conf('verbose'), store => \$verbose}, 31 | }; 32 | 33 | check( $tmpl, \%hash ) or return; 34 | 35 | my $dir = $self->status->extract or ( 36 | error( loc( "Do not know what dir '%1' was extracted to; ". 37 | "Cannot check signature", $self->module ) ), 38 | return ); 39 | 40 | my $cwd = cwd(); 41 | unless( $cb->_chdir( dir => $dir ) ) { 42 | error(loc( "Could not chdir to '%1', cannot verify distribution '%2'", 43 | $dir, $self->module )); 44 | return; 45 | } 46 | 47 | 48 | ### check prerequisites 49 | my $flag; 50 | my $use_list = { 'Module::Signature' => '0.06' }; 51 | if( can_load( modules => $use_list, verbose => 1 ) ) { 52 | my $rv = Module::Signature::verify(); 53 | unless ($rv eq Module::Signature::SIGNATURE_OK() or 54 | $rv eq Module::Signature::SIGNATURE_MISSING() or 55 | $rv eq Module::Signature::MANIFEST_MISMATCH() 56 | ) { 57 | $flag++; # whoops, bad sig 58 | } 59 | } 60 | 61 | $cb->_chdir( dir => $cwd ); 62 | return $flag ? 0 : 1; 63 | } 64 | 65 | 1; 66 | -------------------------------------------------------------------------------- /src/cpan/System.pm: -------------------------------------------------------------------------------- 1 | ############################################### 2 | ### 3 | ### Configuration structure for CPANPLUS::Config::System 4 | ### 5 | ############################################### 6 | 7 | #last changed: Wed Nov 4 00:29:31 2009 GMT 8 | 9 | ### minimal pod, so you can find it with perldoc -l, etc 10 | =pod 11 | 12 | =head1 NAME 13 | 14 | CPANPLUS::Config::System 15 | 16 | =head1 DESCRIPTION 17 | 18 | This is a CPANPLUS configuration file. Editing this 19 | config changes the way CPANPLUS will behave 20 | 21 | =cut 22 | 23 | package CPANPLUS::Config::System; 24 | 25 | use strict; 26 | 27 | sub setup { 28 | my $conf = shift; 29 | 30 | ### conf section 31 | $conf->set_conf( allow_build_interactivity => '0' ); 32 | $conf->set_conf( base => '/export/cpan/cpanplus' ); 33 | $conf->set_conf( buildflags => '' ); 34 | $conf->set_conf( cpantest => 0 ); 35 | $conf->set_conf( cpantest_mx => '' ); 36 | $conf->set_conf( cpantest_reporter_args => {} ); 37 | $conf->set_conf( debug => 0 ); 38 | $conf->set_conf( dist_type => '' ); 39 | $conf->set_conf( email => 'cpanplus@example.com' ); 40 | $conf->set_conf( enable_custom_sources => 1 ); 41 | $conf->set_conf( extractdir => '' ); 42 | $conf->set_conf( fetchdir => '' ); 43 | $conf->set_conf( flush => 1 ); 44 | $conf->set_conf( force => 0 ); 45 | $conf->set_conf( hosts => [ 46 | { 47 | 'scheme' => 'ftp', 48 | 'path' => '/pub/CPAN/', 49 | 'host' => 'ftp.cpan.org' 50 | }, 51 | { 52 | 'scheme' => 'http', 53 | 'path' => '/', 54 | 'host' => 'www.cpan.org' 55 | }, 56 | { 57 | 'scheme' => 'ftp', 58 | 'path' => '/pub/CPAN/', 59 | 'host' => 'ftp.nl.uu.net' 60 | }, 61 | { 62 | 'scheme' => 'ftp', 63 | 'path' => '/pub/CPAN/', 64 | 'host' => 'cpan.valueclick.com' 65 | }, 66 | { 67 | 'scheme' => 'ftp', 68 | 'path' => '/pub/languages/perl/CPAN/', 69 | 'host' => 'ftp.funet.fi' 70 | } 71 | ] ); 72 | $conf->set_conf( lib => [] ); 73 | $conf->set_conf( makeflags => '' ); 74 | $conf->set_conf( makemakerflags => '' ); 75 | $conf->set_conf( md5 => 1 ); 76 | $conf->set_conf( no_update => 0 ); 77 | $conf->set_conf( passive => 1 ); 78 | $conf->set_conf( prefer_bin => 0 ); 79 | $conf->set_conf( prefer_makefile => 1 ); 80 | $conf->set_conf( prereqs => '1' ); 81 | $conf->set_conf( shell => 'CPANPLUS::Shell::Default' ); 82 | $conf->set_conf( show_startup_tip => 1 ); 83 | $conf->set_conf( signature => 1 ); 84 | $conf->set_conf( skiptest => 0 ); 85 | $conf->set_conf( source_engine => 'CPANPLUS::Internals::Source::Memory' ); 86 | $conf->set_conf( storable => 1 ); 87 | $conf->set_conf( timeout => 300 ); 88 | $conf->set_conf( verbose => 0 ); 89 | $conf->set_conf( write_install_logs => 1 ); 90 | 91 | 92 | ### program section 93 | $conf->set_program( editor => '/bin/vi' ); 94 | $conf->set_program( make => '/usr/bin/make' ); 95 | $conf->set_program( pager => '/usr/bin/less' ); 96 | $conf->set_program( perlwrapper => '/opt/perl/bin/cpanp-run-perl' ); 97 | $conf->set_program( shell => '/bin/bash' ); 98 | $conf->set_program( sudo => undef ); 99 | 100 | 101 | 102 | 103 | return 1; 104 | } 105 | 106 | 1; 107 | 108 | -------------------------------------------------------------------------------- /src/cpan/version.mk: -------------------------------------------------------------------------------- 1 | NAME = rocks-cpan 2 | RELEASE = 3 3 | -------------------------------------------------------------------------------- /src/linux.mk: -------------------------------------------------------------------------------- 1 | SRCDIRS = `find * -prune\ 2 | -type d \ 3 | ! -name CVS \ 4 | ! -name cpan \ 5 | ! -name .` 6 | 7 | -------------------------------------------------------------------------------- /src/opt-perl-module/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # $Id: Makefile,v 1.2 2012/11/27 00:49:01 phil Exp $ 3 | # 4 | # @Copyright@ 5 | # 6 | # Rocks(r) 7 | # www.rocksclusters.org 8 | # version 6.2 (SideWinder) 9 | # version 7.0 (Manzanita) 10 | # 11 | # Copyright (c) 2000 - 2017 The Regents of the University of California. 12 | # All rights reserved. 13 | # 14 | # Redistribution and use in source and binary forms, with or without 15 | # modification, are permitted provided that the following conditions are 16 | # met: 17 | # 18 | # 1. Redistributions of source code must retain the above copyright 19 | # notice, this list of conditions and the following disclaimer. 20 | # 21 | # 2. Redistributions in binary form must reproduce the above copyright 22 | # notice unmodified and in its entirety, this list of conditions and the 23 | # following disclaimer in the documentation and/or other materials provided 24 | # with the distribution. 25 | # 26 | # 3. All advertising and press materials, printed or electronic, mentioning 27 | # features or use of this software must display the following acknowledgement: 28 | # 29 | # "This product includes software developed by the Rocks(r) 30 | # Cluster Group at the San Diego Supercomputer Center at the 31 | # University of California, San Diego and its contributors." 32 | # 33 | # 4. Except as permitted for the purposes of acknowledgment in paragraph 3, 34 | # neither the name or logo of this software nor the names of its 35 | # authors may be used to endorse or promote products derived from this 36 | # software without specific prior written permission. The name of the 37 | # software includes the following terms, and any derivatives thereof: 38 | # "Rocks", "Rocks Clusters", and "Avalanche Installer". For licensing of 39 | # the associated name, interested parties should contact Technology 40 | # Transfer & Intellectual Property Services, University of California, 41 | # San Diego, 9500 Gilman Drive, Mail Code 0910, La Jolla, CA 92093-0910, 42 | # Ph: (858) 534-5815, FAX: (858) 534-7345, E-MAIL:invent@ucsd.edu 43 | # 44 | # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' 45 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 46 | # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 47 | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS 48 | # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 49 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 50 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 51 | # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 52 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 53 | # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 54 | # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 55 | # 56 | # @Copyright@ 57 | # 58 | 59 | PKGROOT = /usr/share/Modules/modulefiles 60 | REDHAT.ROOT = $(CURDIR)/../../ 61 | 62 | -include $(ROCKSROOT)/etc/Rules.mk 63 | include Rules.mk 64 | 65 | MODULESFILES = opt-perl 66 | 67 | %: %.in 68 | $(SED) $(SEDSCRIPT) $^ > $@ 69 | 70 | pretar:: $(MODULESFILES) 71 | 72 | build: $(MODULESFILES) 73 | 74 | install:: $(MODULESFILES) 75 | mkdir -p $(ROOT)/$(PKGROOT) 76 | install -m 755 $(MODULESFILES) $(ROOT)/$(PKGROOT) 77 | 78 | clean:: 79 | rm -rf $(NAME).spec.in 80 | rm -rf $(MODULESFILES) 81 | 82 | -------------------------------------------------------------------------------- /src/opt-perl-module/opt-perl.in: -------------------------------------------------------------------------------- 1 | #%Module1.0##################################################################### 2 | ## 3 | ## opt-perl modulefile 4 | ## 5 | ## modulefiles/ 6 | ## 7 | proc ModulesHelp { } { 8 | global perlversion 9 | 10 | puts stderr "\t Use /opt/perl/bin/perl as your Perl" 11 | puts stderr "\n\tVersion $perlversion\n" 12 | } 13 | 14 | module-whatis "opt-perl" 15 | module-whatis "Version: @VERSION@" 16 | 17 | # for Tcl script use only 18 | set perlversion @VERSION@ 19 | 20 | prepend-path PATH /opt/perl/bin 21 | prepend-path LD_LIBRARY_PATH /opt/perl/lib 22 | prepend-path LIBPATH /opt/perl/lib 23 | prepend-path MANPATH /opt/perl/share/man 24 | -------------------------------------------------------------------------------- /src/opt-perl-module/version.mk: -------------------------------------------------------------------------------- 1 | # Get the PERL version from it's version.mk file. 2 | PERLVERSION = $(shell awk '/^VERSION/{printf("%s",$$NF)}' $(CURDIR)/../perl/version.mk) 3 | 4 | PKGROOT = /usr/share/Modules/modulefiles 5 | NAME = opt-perl-module 6 | RELEASE = 0 7 | RPM.REQUIRES = environment-modules 8 | RPM.FILES = $(PKGROOT)/* 9 | VERSION = $(PERLVERSION) 10 | -------------------------------------------------------------------------------- /src/perl/Makefile: -------------------------------------------------------------------------------- 1 | # $Id: Makefile,v 1.6 2012/11/27 00:49:11 phil Exp $ 2 | # 3 | # @Copyright@ 4 | # 5 | # Rocks(r) 6 | # www.rocksclusters.org 7 | # version 6.2 (SideWinder) 8 | # version 7.0 (Manzanita) 9 | # 10 | # Copyright (c) 2000 - 2017 The Regents of the University of California. 11 | # All rights reserved. 12 | # 13 | # Redistribution and use in source and binary forms, with or without 14 | # modification, are permitted provided that the following conditions are 15 | # met: 16 | # 17 | # 1. Redistributions of source code must retain the above copyright 18 | # notice, this list of conditions and the following disclaimer. 19 | # 20 | # 2. Redistributions in binary form must reproduce the above copyright 21 | # notice unmodified and in its entirety, this list of conditions and the 22 | # following disclaimer in the documentation and/or other materials provided 23 | # with the distribution. 24 | # 25 | # 3. All advertising and press materials, printed or electronic, mentioning 26 | # features or use of this software must display the following acknowledgement: 27 | # 28 | # "This product includes software developed by the Rocks(r) 29 | # Cluster Group at the San Diego Supercomputer Center at the 30 | # University of California, San Diego and its contributors." 31 | # 32 | # 4. Except as permitted for the purposes of acknowledgment in paragraph 3, 33 | # neither the name or logo of this software nor the names of its 34 | # authors may be used to endorse or promote products derived from this 35 | # software without specific prior written permission. The name of the 36 | # software includes the following terms, and any derivatives thereof: 37 | # "Rocks", "Rocks Clusters", and "Avalanche Installer". For licensing of 38 | # the associated name, interested parties should contact Technology 39 | # Transfer & Intellectual Property Services, University of California, 40 | # San Diego, 9500 Gilman Drive, Mail Code 0910, La Jolla, CA 92093-0910, 41 | # Ph: (858) 534-5815, FAX: (858) 534-7345, E-MAIL:invent@ucsd.edu 42 | # 43 | # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' 44 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 45 | # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 46 | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS 47 | # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 48 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 49 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 50 | # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 51 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 52 | # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 53 | # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 54 | # 55 | # @Copyright@ 56 | # 57 | # $Log: Makefile,v $ 58 | # Revision 1.6 2012/11/27 00:49:11 phil 59 | # Copyright Storm for Emerald Boa 60 | # 61 | # Revision 1.5 2012/05/06 05:49:19 phil 62 | # Copyright Storm for Mamba 63 | # 64 | # Revision 1.4 2011/07/23 02:31:15 phil 65 | # Viper Copyright 66 | # 67 | # Revision 1.3 2011/07/20 03:00:00 anoop 68 | # - Patches for cpan2dist. The ignore_me function is now 69 | # a callback function. This means libraries can access 70 | # this function. 71 | # - Now cpan2dist does a slightly better job of honouring 72 | # the ignore-lists even when the code is multiple levels 73 | # deep. 74 | # - The CPANPLUS::Dist::Rocks module can now handle both 75 | # Makefile.PL and Build.PL type build files for CPAN 76 | # modules. 77 | # 78 | # Revision 1.2 2011/07/07 00:47:39 anoop 79 | # Version Bump 80 | # 81 | # Revision 1.1 2011/06/16 18:00:28 anoop 82 | # Start of a perl roll 83 | # 84 | 85 | REDHAT.ROOT = $(CURDIR)/../../ 86 | 87 | -include $(ROCKSROOT)/etc/Rules.mk 88 | include Rules.mk 89 | EXTRAS = "RPM.EXTRAS = AutoReqProv: no\\n" 90 | VERSION = 5.26.0 91 | 92 | prespec:: version.mk 93 | 94 | version.mk: extras.mk version.mk.in 95 | cat version.mk.in extras.mk > version.mk 96 | 97 | extras.mk: 98 | cat provides-$(VERSION) | python -c 'import sys;print $(EXTRAS) + "Provides: " + "Provides: ".join(sys.stdin.readlines()).replace("\n","\\n")' > extras.mk 99 | 100 | build: 101 | gunzip -c $(ARCHIVE_NAME)-$(VERSION).$(TARBALL_POSTFIX) | $(TAR) -xf - 102 | -(cd patch-files && find . -type f | grep -v CVS | cpio -pudv ../) 103 | ( \ 104 | cd $(ARCHIVE_NAME)-$(VERSION); \ 105 | ./Configure -Dprefix=$(PKGROOT) \ 106 | -Dusethreads -des \ 107 | -Dotherlibdirs=/opt/perl/lib/perl5/site_perl/$(VERSION) \ 108 | < /dev/null; \ 109 | $(MAKE); \ 110 | ) 111 | 112 | install:: 113 | mkdir -p $(ROOT)/$(PKGROOT) 114 | ( \ 115 | cd $(ARCHIVE_NAME)-$(VERSION); \ 116 | $(MAKE) DESTDIR=$(ROOT) install;\ 117 | ) 118 | 119 | clean:: 120 | rm -rf $(ARCHIVE_NAME)-$(VERSION) 121 | -rm extras.mk version.mk 122 | -------------------------------------------------------------------------------- /src/perl/patch-files/perl-5.14.1/cpan/CPANPLUS/bin/cpan2dist: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl -w 2 | use strict; 3 | use CPANPLUS::Backend; 4 | use CPANPLUS::Dist; 5 | use CPANPLUS::Internals::Constants; 6 | use Data::Dumper; 7 | use Getopt::Long; 8 | use File::Spec; 9 | use File::Temp qw|tempfile|; 10 | use File::Basename; 11 | use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; 12 | 13 | local $Data::Dumper::Indent = 1; 14 | 15 | use constant PREREQ_SKIP_CLASS => 'CPANPLUS::To::Dist::PREREQ_SKIP'; 16 | use constant ALARM_CLASS => 'CPANPLUS::To::Dist::ALARM'; 17 | 18 | ### print when you can 19 | $|++; 20 | 21 | my $cb = CPANPLUS::Backend->new 22 | or die loc("Could not create new CPANPLUS::Backend object"); 23 | my $conf = $cb->configure_object; 24 | 25 | my %formats = map { $_ => $_ } CPANPLUS::Dist->dist_types; 26 | 27 | my $opts = {}; 28 | GetOptions( $opts, 29 | 'format=s', 'archive', 30 | 'verbose!', 'force!', 31 | 'skiptest!', 'keepsource!', 32 | 'makefile!', 'buildprereq!', 33 | 'help', 'flushcache', 34 | 'ban=s@', 'banlist=s@', 35 | 'ignore=s@', 'ignorelist=s@', 36 | 'defaults', 'modulelist=s@', 37 | 'logfile=s', 'timeout=s', 38 | 'dist-opts=s%', 'set-config=s%', 39 | 'default-banlist!', 'set-program=s%', 40 | 'default-ignorelist!', 'edit-metafile!', 41 | 'install!' 42 | ); 43 | 44 | die usage() if exists $opts->{'help'}; 45 | 46 | ### parse options 47 | my $tarball = $opts->{'archive'} || 0; 48 | my $keep = $opts->{'keepsource'} ? 1 : 0; 49 | my $prereqbuild = exists $opts->{'buildprereq'} 50 | ? $opts->{'buildprereq'} 51 | : 0; 52 | my $timeout = exists $opts->{'timeout'} 53 | ? $opts->{'timeout'} 54 | : 300; 55 | 56 | ### use default answers? 57 | unless ( $ENV{'PERL_MM_USE_DEFAULT'} ) { 58 | $ENV{'PERL_MM_USE_DEFAULT'} = $opts->{'defaults'} ? 1 : 0; 59 | } 60 | 61 | my $format; 62 | ### if provided, we go with the command line option, fall back to conf setting 63 | { $format = $opts->{'format'} || $conf->get_conf('dist_type'); 64 | $conf->set_conf( dist_type => $format ); 65 | 66 | ### is this a valid format?? 67 | die loc("Invalid format: " . ($format || "[NONE]") ) . usage() 68 | unless $formats{$format}; 69 | 70 | ### any options to fix config entries 71 | { my $set_conf = $opts->{'set-config'} || {}; 72 | while( my($key,$val) = each %$set_conf ) { 73 | $conf->set_conf( $key => $val ); 74 | } 75 | } 76 | 77 | ### any options to fix program entries 78 | { my $set_prog = $opts->{'set-program'} || {}; 79 | while( my($key,$val) = each %$set_prog ) { 80 | $conf->set_program( $key => $val ); 81 | } 82 | } 83 | 84 | ### any other options passed 85 | { my %map = ( verbose => 'verbose', 86 | force => 'force', 87 | skiptest => 'skiptest', 88 | makefile => 'prefer_makefile' 89 | ); 90 | 91 | ### set config options from arguments 92 | while (my($key,$val) = each %map) { 93 | my $bool = exists $opts->{$key} 94 | ? $opts->{$key} 95 | : $conf->get_conf($val); 96 | $conf->set_conf( $val => $bool ); 97 | } 98 | } 99 | } 100 | 101 | my @modules = @ARGV; 102 | if( exists $opts->{'modulelist'} ) { 103 | push @modules, map { parse_file( $_ ) } @{ $opts->{'modulelist'} }; 104 | } 105 | 106 | die usage() unless @modules; 107 | 108 | ### set up munge callback if requested 109 | { if( $opts->{'edit-metafile'} ) { 110 | my $editor = $conf->get_program('editor'); 111 | 112 | if( $editor ) { 113 | 114 | ### register install callback ### 115 | $cb->_register_callback( 116 | name => 'munge_dist_metafile', 117 | code => sub { 118 | my $self = shift; 119 | my $text = shift or return; 120 | 121 | my($fh,$file) = tempfile( UNLINK => 1 ); 122 | 123 | unless( print $fh $text ) { 124 | warn "Could not print metafile information: $!"; 125 | return; 126 | } 127 | 128 | close $fh; 129 | 130 | system( $editor => $file ); 131 | 132 | my $cont = $cb->_get_file_contents( file => $file ); 133 | 134 | return $cont; 135 | }, 136 | ); 137 | 138 | } else { 139 | warn "No editor configured. Can not edit metafiles!\n"; 140 | } 141 | } 142 | } 143 | 144 | my $fh; 145 | LOGFILE: { 146 | if( my $file = $opts->{logfile} ) { 147 | open $fh, ">$file" or ( 148 | warn loc("Could not open '%1' for writing: %2", $file,$!), 149 | last LOGFILE 150 | ); 151 | 152 | warn "Logging to '$file'\n"; 153 | 154 | *STDERR = $fh; 155 | *STDOUT = $fh; 156 | } 157 | } 158 | 159 | ### reload indices if so desired 160 | $cb->reload_indices() if $opts->{'flushcache'}; 161 | 162 | { my @ban = exists $opts->{'ban'} 163 | ? map { qr/$_/ } @{ $opts->{'ban'} } 164 | : (); 165 | 166 | 167 | if( exists $opts->{'banlist'} ) { 168 | push @ban, map { parse_file( $_, 1 ) } @{ $opts->{'banlist'} }; 169 | } 170 | 171 | push @ban, map { s/\s+//; $_ } 172 | map { [split /\s*#\s*/]->[0] } 173 | grep { /#/ } 174 | map { split /\n/ } _default_ban_list() 175 | if $opts->{'default-banlist'}; 176 | 177 | ### use our prereq install callback 178 | $conf->set_conf( prereqs => PREREQ_ASK ); 179 | 180 | ### register install callback ### 181 | $cb->_register_callback( 182 | name => 'install_prerequisite', 183 | code => \&__ask_about_install, 184 | ); 185 | 186 | 187 | ### check for ban patterns when handling prereqs 188 | sub __ask_about_install { 189 | 190 | my $mod = shift or return; 191 | my $prereq = shift or return; 192 | 193 | 194 | ### die with an error object, so we can verify that 195 | ### the die came from this location, and that it's an 196 | ### 'acceptable' death 197 | my $pat = ban_me( $prereq ); 198 | die bless sub { loc("Module '%1' requires '%2' to be installed " . 199 | "but found in your ban list (%3) -- skipping", 200 | $mod->module, $prereq->module, $pat ) 201 | }, PREREQ_SKIP_CLASS if $pat; 202 | return 1; 203 | } 204 | 205 | ### should we skip this module? 206 | sub ban_me { 207 | my $mod = shift; 208 | 209 | for my $pat ( @ban ) { 210 | return $pat if $mod->module =~ /$pat/i; 211 | } 212 | return; 213 | } 214 | } 215 | 216 | ### patterns to strip from prereq lists 217 | { my @ignore = exists $opts->{'ignore'} 218 | ? map { qr/$_/ } @{ $opts->{'ignore'} } 219 | : (); 220 | 221 | if( exists $opts->{'ignorelist'} ) { 222 | push @ignore, map { parse_file( $_, 1 ) } @{ $opts->{'ignorelist'} }; 223 | } 224 | 225 | push @ignore, map { s/\s+//; $_ } 226 | map { [split /\s*#\s*/]->[0] } 227 | grep { /#/ } 228 | map { split /\n/ } _default_ignore_list() 229 | if $opts->{'default-ignorelist'}; 230 | 231 | 232 | ### register install callback ### 233 | $cb->_register_callback( 234 | name => 'filter_prereqs', 235 | code => \&__filter_prereqs, 236 | ); 237 | 238 | sub __filter_prereqs { 239 | my $cb = shift; 240 | my $href = shift; 241 | 242 | for my $name ( keys %$href ) { 243 | my $obj = $cb->parse_module( module => $name ) or ( 244 | warn "Cannot make a module object out of ". 245 | "'$name' -- skipping\n", 246 | next ); 247 | 248 | if( my $pat = ignore_me( $obj ) ) { 249 | warn loc("'%1' found in your ignore list (%2) ". 250 | "-- filtering it out\n", $name, $pat); 251 | 252 | delete $href->{ $name }; 253 | } 254 | } 255 | 256 | return $href; 257 | } 258 | 259 | 260 | $cb->_register_callback( 261 | name => 'ignore_me', 262 | code => \&ignore_me, 263 | ); 264 | 265 | ### should we skip this module? 266 | sub ignore_me { 267 | my $mod = shift; 268 | 269 | for my $pat ( @ignore ) { 270 | return $pat if $mod->module =~ /$pat/i; 271 | return $pat if $mod->package_name =~ /$pat/i; 272 | } 273 | return; 274 | } 275 | } 276 | 277 | 278 | my %done; 279 | for my $name (@modules) { 280 | 281 | my $obj; 282 | 283 | ### is it a tarball? then we get it locally and transform it 284 | ### and its dependencies into .debs 285 | if( $tarball ) { 286 | ### make sure we use an absolute path, so chdirs() dont 287 | ### mess things up 288 | $name = File::Spec->rel2abs( $name ); 289 | 290 | ### ENOTARBALL? 291 | unless( -e $name ) { 292 | warn loc("Archive '$name' does not exist"); 293 | next; 294 | } 295 | 296 | $obj = CPANPLUS::Module::Fake->new( 297 | module => basename($name), 298 | path => dirname($name), 299 | package => basename($name), 300 | ); 301 | 302 | ### if it's a traditional CPAN package, we can tidy 303 | ### up the module name some 304 | $obj->module( $obj->package_name ) if $obj->package_name; 305 | 306 | ### get the version from the package name 307 | $obj->version( $obj->package_version || 0 ); 308 | 309 | ### set the location of the tarball 310 | $obj->status->fetch($name); 311 | 312 | ### plain old cpan module? 313 | } else { 314 | 315 | ### find the corresponding module object ### 316 | $obj = $cb->parse_module( module => $name ) or ( 317 | warn "Cannot make a module object out of ". 318 | "'$name' -- skipping\n", 319 | next ); 320 | } 321 | 322 | ### you banned it? 323 | if( my $pat = ban_me( $obj ) ) { 324 | warn loc("'%1' found in your ban list (%2) -- skipping\n", 325 | $obj->module, $pat ); 326 | next; 327 | } 328 | 329 | ### or just ignored it? 330 | if( my $pat = ignore_me( $obj ) ) { 331 | warn loc("'%1' found in your ignore list (%2) -- skipping\n", 332 | $obj->module, $pat ); 333 | next; 334 | } 335 | 336 | 337 | my $target = $opts->{'install'} ? 'install' : 'create'; 338 | my $dist = eval { 339 | local $SIG{ALRM} = sub { die bless {}, ALARM_CLASS } 340 | if $timeout; 341 | 342 | alarm $timeout || 0; 343 | 344 | my $dist_opts = $opts->{'dist-opts'} || {}; 345 | 346 | my $rv = $obj->install( 347 | prereq_target => $target, 348 | target => $target, 349 | keep_source => $keep, 350 | prereq_build => $prereqbuild, 351 | 352 | ### any passed arbitrary options 353 | %$dist_opts, 354 | ); 355 | 356 | alarm 0; 357 | 358 | $rv; 359 | }; 360 | 361 | ### set here again, in case the install dies 362 | alarm 0; 363 | 364 | ### install failed due to a 'die' in our prereq skipper? 365 | if( $@ and ref $@ and $@->isa( PREREQ_SKIP_CLASS ) ) { 366 | warn loc("Dist creation of '%1' skipped: '%2'", 367 | $obj->module, $@->() ); 368 | next; 369 | 370 | } elsif ( $@ and ref $@ and $@->isa( ALARM_CLASS ) ) { 371 | warn loc("\nDist creation of '%1' skipped, build time exceeded: ". 372 | "%2 seconds\n", $obj->module, $timeout ); 373 | next; 374 | 375 | ### died for some other reason? just report and skip 376 | } elsif ( $@ ) { 377 | warn loc("Dist creation of '%1' failed: '%2'", 378 | $obj->module, $@ ); 379 | next; 380 | } 381 | 382 | ### we didn't get a dist object back? 383 | unless ($dist and $obj->status->dist) { 384 | warn loc("Unable to create '%1' dist of '%2'", $format, $obj->module); 385 | next 386 | } 387 | 388 | print "Created '$format' distribution for ", $obj->module, 389 | " to:\n\t", $obj->status->dist->status->dist, "\n"; 390 | } 391 | 392 | 393 | sub parse_file { 394 | my $file = shift or return; 395 | my $qr = shift() ? 1 : 0; 396 | 397 | my $fh = OPEN_FILE->( $file ) or return; 398 | 399 | my @rv; 400 | while( <$fh> ) { 401 | chomp; 402 | next if /^#/; # skip comments 403 | next unless /\S/; # skip empty lines 404 | s/^(\S+).*/$1/; # skip extra info 405 | push @rv, $qr ? qr/$_/ : $_; # add pattern to the list 406 | } 407 | 408 | return @rv; 409 | } 410 | 411 | =head1 NAME 412 | 413 | cpan2dist - The CPANPLUS distribution creator 414 | 415 | =head1 DESCRIPTION 416 | 417 | This script will create distributions of C modules of the format 418 | you specify, including its prerequisites. These packages can then be 419 | installed using the corresponding package manager for the format. 420 | 421 | Note, you can also do this interactively from the default shell, 422 | C. See the C documentation, 423 | as well as the documentation of your format of choice for any format 424 | specific documentation. 425 | 426 | =head1 USAGE 427 | 428 | =cut 429 | 430 | sub usage { 431 | my $me = basename($0); 432 | my $formats = join "\n", map { "\t\t$_" } sort keys %formats; 433 | 434 | my $usage = << '=cut'; 435 | =pod 436 | 437 | Usage: cpan2dist [--format FMT] [OPTS] Mod::Name [Mod::Name, ...] 438 | cpan2dist [--format FMT] [OPTS] --modulelist /tmp/mods.list 439 | cpan2dist [--format FMT] [OPTS] --archive /tmp/dist [/tmp/dist2] 440 | 441 | Will create a distribution of type FMT of the modules 442 | specified on the command line, and all their prerequisites. 443 | 444 | Can also create a distribution of type FMT from a local 445 | archive and all of its prerequisites. 446 | 447 | =cut 448 | 449 | $usage .= qq[ 450 | Possible formats are: 451 | $formats 452 | 453 | You can install more formats from CPAN! 454 | \n]; 455 | 456 | $usage .= << '=cut'; 457 | =pod 458 | 459 | Options: 460 | 461 | ### take no argument: 462 | --help Show this help message 463 | --install Install this package (and any prerequisites you built) 464 | after building it. 465 | --skiptest Skip tests. Can be negated using --noskiptest 466 | --force Force operation. Can be negated using --noforce 467 | --verbose Be verbose. Can be negated using --noverbose 468 | --keepsource Keep sources after building distribution. Can be 469 | negated by --nokeepsource. May not be supported 470 | by all formats 471 | --makefile Prefer Makefile.PL over Build.PL. Can be negated 472 | using --nomakefile. Defaults to your config setting 473 | --buildprereq Build packages of any prerequisites, even if they are 474 | already uptodate on the local system. Can be negated 475 | using --nobuildprereq. Defaults to false. 476 | --archive Indicate that all modules listed are actually archives 477 | --flushcache Update CPANPLUS' cache before commencing any operation 478 | --defaults Instruct ExtUtils::MakeMaker and Module::Build to use 479 | default answers during 'perl Makefile.PL' or 'perl 480 | Build.PL' calls where possible 481 | --edit-metafile Edit the distributions metafile(s) before the distribution 482 | is built. Requires a configured editor. 483 | 484 | ### take argument: 485 | --format Installer format to use (defaults to config setting) 486 | --ban Patterns of module names to skip during installation, 487 | case-insensitive (affects prerequisites too) 488 | May be given multiple times 489 | --banlist File containing patterns that could be given to --ban 490 | Are appended to the ban list built up by --ban 491 | May be given multiple times. 492 | --ignore Patterns of modules to exclude from prereq list. Useful 493 | for when a prereq listed by a CPAN module is resolved 494 | in another way than from its corresponding CPAN package 495 | (Match is done on both module name, and package name of 496 | the package the module is in, case-insensitive) 497 | --ignorelist File containing patterns that may be given to --ignore. 498 | Are appended to the ban list built up by --ignore. 499 | May be given multiple times. 500 | --modulelist File containing a list of modules that should be built. 501 | Are appended to the list of command line modules. 502 | May be given multiple times. 503 | --logfile File to log all output to. By default, all output goes 504 | to the console. 505 | --timeout The allowed time for buliding a distribution before 506 | aborting. This is useful to terminate any build that 507 | hang or happen to be interactive despite being told not 508 | to be. Defaults to 300 seconds. To turn off, you can 509 | set it to 0. 510 | --set-config Change any options as specified in your config for this 511 | invocation only. See CPANPLUS::Config for a list of 512 | supported options. 513 | --set-program Change any programs as specified in your config for this 514 | invocation only. See CPANPLUS::Config for a list of 515 | supported programs. 516 | --dist-opts Arbitrary options passed along to the chosen installer 517 | format's prepare()/create() routine. Please see the 518 | documentation of the installer of your choice for 519 | options it accepts. 520 | 521 | ### builtin lists 522 | --default-banlist Use our builtin banlist. Works just like --ban 523 | and --banlist, but with pre-set lists. See the 524 | "Builtin Lists" section for details. 525 | --default-ignorelist Use our builtin ignorelist. Works just like 526 | --ignore and --ignorelist but with pre-set lists. 527 | See the "Builtin Lists" section for details. 528 | 529 | Examples: 530 | 531 | ### build a debian package of DBI and its prerequisites, 532 | ### don't bother running tests 533 | cpan2dist --format CPANPLUS::Dist::Deb --buildprereq --skiptest DBI 534 | 535 | ### build a debian package of DBI and its prerequisites and install them 536 | cpan2dist --format CPANPLUS::Dist::Deb --buildprereq --install DBI 537 | 538 | ### Build a package, whose format is determined by your config, of 539 | ### the local tarball, reloading cpanplus' indices first and using 540 | ### the tarballs Makefile.PL if it has one. 541 | cpan2dist --makefile --flushcache --archive /path/to/Cwd-1.0.tgz 542 | 543 | ### build a package from Net::FTP, but dont build any packages or 544 | ### dependencies whose name match 'Foo', 'Bar' or any of the 545 | ### patterns mentioned in /tmp/ban 546 | cpan2dist --ban Foo --ban Bar --banlist /tmp/ban Net::FTP 547 | 548 | ### build a package from Net::FTP, but ignore its listed dependency 549 | ### on IO::Socket, as it's shipped per default with the OS we're on 550 | cpan2dist --ignore IO::Socket Net::FTP 551 | 552 | ### building all modules listed, plus their prerequisites 553 | cpan2dist --ignorelist /tmp/modules.ignore --banlist /tmp/modules.ban 554 | --modulelist /tmp/modules.list --buildprereq --flushcache 555 | --makefile --defaults 556 | 557 | ### pass arbitrary options to the format's prepare()/create() routine 558 | cpan2dist --dist-opts deb_version=3 --dist-opts prefix=corp 559 | 560 | =cut 561 | 562 | $usage .= qq[ 563 | Builtin Lists: 564 | 565 | Ignore list:] . _default_ignore_list() . qq[ 566 | Ban list:] . _default_ban_list(); 567 | 568 | ### strip the pod directives 569 | $usage =~ s/=pod\n//g; 570 | 571 | return $usage; 572 | } 573 | 574 | =pod 575 | 576 | =head1 Built-In Filter Lists 577 | 578 | Some modules you'd rather not package. Some because they 579 | are part of core-perl and you dont want a new package. 580 | Some because they won't build on your system. Some because 581 | your package manager of choice already packages them for you. 582 | 583 | There may be a myriad of reasons. You can use the C<--ignore> 584 | and C<--ban> options for this, but we provide some built-in 585 | lists that catch common cases. You can use these built-in lists 586 | if you like, or supply your own if need be. 587 | 588 | =head2 Built-In Ignore List 589 | 590 | =pod 591 | 592 | You can use this list of regexes to ignore modules matching 593 | to be listed as prerequisites of a package. Particularly useful 594 | if they are bundled with core-perl anyway and they have known 595 | issues building. 596 | 597 | Toggle it by supplying the C<--default-ignorelist> option. 598 | 599 | =cut 600 | 601 | sub _default_ignore_list { 602 | 603 | my $list = << '=cut'; 604 | =pod 605 | 606 | ^IO$ # Provided with core anyway 607 | ^Cwd$ # Provided with core anyway 608 | ^File::Spec # Provided with core anyway 609 | ^Config$ # Perl's own config, not shipped separately 610 | ^ExtUtils::MakeMaker$ # Shipped with perl, recent versions 611 | # have bug 14721 (see rt.cpan.org) 612 | ^ExtUtils::Install$ # Part of of EU::MM, same reason 613 | 614 | =cut 615 | 616 | return $list; 617 | } 618 | 619 | =head2 Built-In Ban list 620 | 621 | You can use this list of regexes to disable building of these 622 | modules altogether. 623 | 624 | Toggle it by supplying the C<--default-banlist> option. 625 | 626 | =cut 627 | 628 | sub _default_ban_list { 629 | 630 | my $list = << '=cut'; 631 | =pod 632 | 633 | ^GD$ # Needs c libaries 634 | ^Berk.*DB # DB packages require specific options & linking 635 | ^DBD:: # DBD drivers require database files/headers 636 | ^XML:: # XML modules usually require expat libraries 637 | Apache # These usually require apache libraries 638 | SSL # These usually require SSL certificates & libs 639 | Image::Magick # Needs ImageMagick C libraries 640 | Mail::ClamAV # Needs ClamAV C Libraries 641 | ^Verilog # Needs Verilog C Libraries 642 | ^Authen::PAM$ # Needs PAM C libraries & Headers 643 | 644 | =cut 645 | 646 | return $list; 647 | } 648 | 649 | __END__ 650 | 651 | =head1 SEE ALSO 652 | 653 | L, L, L, 654 | C 655 | 656 | =head1 BUG REPORTS 657 | 658 | Please report bugs or other issues to Ebug-cpanplus@rt.cpan.org. 659 | 660 | =head1 AUTHOR 661 | 662 | This module by Jos Boumans Ekane@cpan.orgE. 663 | 664 | =head1 COPYRIGHT 665 | 666 | The CPAN++ interface (of which this module is a part of) is copyright (c) 667 | 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. 668 | 669 | This library is free software; you may redistribute and/or modify it 670 | under the same terms as Perl itself. 671 | 672 | =cut 673 | 674 | # Local variables: 675 | # c-indentation-style: bsd 676 | # c-basic-offset: 4 677 | # indent-tabs-mode: nil 678 | # End: 679 | # vim: expandtab shiftwidth=4: 680 | -------------------------------------------------------------------------------- /src/perl/patch-files/perl-5.14.1/cpan/CPANPLUS/lib/CPANPLUS/Dist.pm: -------------------------------------------------------------------------------- 1 | package CPANPLUS::Dist; 2 | 3 | use strict; 4 | 5 | use CPANPLUS::Error; 6 | use CPANPLUS::Internals::Constants; 7 | 8 | use Cwd (); 9 | use Object::Accessor; 10 | use Parse::CPAN::Meta; 11 | 12 | use IPC::Cmd qw[run]; 13 | use Params::Check qw[check]; 14 | use Module::Load::Conditional qw[can_load check_install]; 15 | use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; 16 | 17 | use base 'Object::Accessor'; 18 | 19 | local $Params::Check::VERBOSE = 1; 20 | 21 | =pod 22 | 23 | =head1 NAME 24 | 25 | CPANPLUS::Dist 26 | 27 | =head1 SYNOPSIS 28 | 29 | my $dist = CPANPLUS::Dist::YOUR_DIST_TYPE_HERE->new( 30 | module => $modobj, 31 | ); 32 | 33 | =head1 DESCRIPTION 34 | 35 | C is a base class for C 36 | and C. Developers of other C 37 | plugins should look at C. 38 | 39 | =head1 ACCESSORS 40 | 41 | =over 4 42 | 43 | =item parent() 44 | 45 | Returns the C object that parented this object. 46 | 47 | =item status() 48 | 49 | Returns the C object that keeps the status for 50 | this module. 51 | 52 | =back 53 | 54 | =head1 STATUS ACCESSORS 55 | 56 | All accessors can be accessed as follows: 57 | $deb->status->ACCESSOR 58 | 59 | =over 4 60 | 61 | =item created() 62 | 63 | Boolean indicating whether the dist was created successfully. 64 | Explicitly set to C<0> when failed, so a value of C may be 65 | interpreted as C. 66 | 67 | =item installed() 68 | 69 | Boolean indicating whether the dist was installed successfully. 70 | Explicitly set to C<0> when failed, so a value of C may be 71 | interpreted as C. 72 | 73 | =item uninstalled() 74 | 75 | Boolean indicating whether the dist was uninstalled successfully. 76 | Explicitly set to C<0> when failed, so a value of C may be 77 | interpreted as C. 78 | 79 | =item dist() 80 | 81 | The location of the final distribution. This may be a file or 82 | directory, depending on how your distribution plug in of choice 83 | works. This will be set upon a successful create. 84 | 85 | =cut 86 | 87 | =back 88 | 89 | =head2 $dist = CPANPLUS::Dist::YOUR_DIST_TYPE_HERE->new( module => MODOBJ ); 90 | 91 | Create a new C object based on the 92 | provided C. 93 | 94 | *** DEPRECATED *** 95 | The optional argument C is used to indicate what type of dist 96 | you would like to create (like C or 97 | C and so on ). 98 | 99 | C<< CPANPLUS::Dist->new >> is exclusively meant as a method to be 100 | inherited by C. 101 | 102 | Returns a C object on success 103 | and false on failure. 104 | 105 | =cut 106 | 107 | sub new { 108 | my $self = shift; 109 | my $class = ref $self || $self; 110 | my %hash = @_; 111 | 112 | ### first verify we got a module object ### 113 | my( $mod, $format ); 114 | my $tmpl = { 115 | module => { required => 1, allow => IS_MODOBJ, store => \$mod }, 116 | ### for backwards compatibility 117 | format => { default => $class, store => \$format, 118 | allow => [ __PACKAGE__->dist_types ], 119 | }, 120 | }; 121 | check( $tmpl, \%hash ) or return; 122 | 123 | unless( can_load( modules => { $format => '0.0' }, verbose => 1 ) ) { 124 | error(loc("'%1' not found -- you need '%2' version '%3' or higher ". 125 | "to detect plugins", $format, 'Module::Pluggable','2.4')); 126 | return; 127 | } 128 | 129 | ### get an empty o::a object for this class 130 | my $obj = $format->SUPER::new; 131 | 132 | $obj->mk_accessors( qw[parent status] ); 133 | 134 | ### set the parent 135 | $obj->parent( $mod ); 136 | 137 | ### create a status object ### 138 | { my $acc = Object::Accessor->new; 139 | $obj->status($acc); 140 | 141 | ### add minimum supported accessors 142 | $acc->mk_accessors( qw[prepared created installed uninstalled 143 | distdir dist] ); 144 | } 145 | 146 | ### get the conf object ### 147 | my $conf = $mod->parent->configure_object(); 148 | 149 | ### check if the format is available in this environment ### 150 | if( $conf->_get_build('sanity_check') and not $obj->format_available ) { 151 | error( loc( "Format '%1' is not available", $format) ); 152 | return; 153 | } 154 | 155 | ### now initialize it or admit failure 156 | unless( $obj->init ) { 157 | error(loc("Dist initialization of '%1' failed for '%2'", 158 | $format, $mod->module)); 159 | return; 160 | } 161 | 162 | ### return the object 163 | return $obj; 164 | } 165 | 166 | =head2 @dists = CPANPLUS::Dist->dist_types; 167 | 168 | Returns a list of the CPANPLUS::Dist::* classes available 169 | 170 | =cut 171 | 172 | ### returns a list of dist_types we support 173 | ### will get overridden by Module::Pluggable if loaded 174 | ### XXX add support for 'plugin' dir in config as well 175 | { my $Loaded; 176 | my @Dists = (INSTALLER_MM); 177 | my @Ignore = (); 178 | 179 | ### backdoor method to add more dist types 180 | sub _add_dist_types { my $self = shift; push @Dists, @_ }; 181 | 182 | ### backdoor method to exclude dist types 183 | sub _ignore_dist_types { my $self = shift; push @Ignore, @_ }; 184 | sub _reset_dist_ignore { @Ignore = () }; 185 | 186 | ### locally add the plugins dir to @INC, so we can find extra plugins 187 | #local @INC = @INC, File::Spec->catdir( 188 | # $conf->get_conf('base'), 189 | # $conf->_get_build('plugins') ); 190 | 191 | ### load any possible plugins 192 | sub dist_types { 193 | 194 | if ( !$Loaded++ and check_install( module => 'Module::Pluggable', 195 | version => '2.4') 196 | ) { 197 | require Module::Pluggable; 198 | 199 | my $only_re = __PACKAGE__ . '::\w+$'; 200 | my %except = map { $_ => 1 } 201 | INSTALLER_SAMPLE, 202 | INSTALLER_BASE; 203 | 204 | Module::Pluggable->import( 205 | sub_name => '_dist_types', 206 | search_path => __PACKAGE__, 207 | only => qr/$only_re/, 208 | require => 1, 209 | except => [ keys %except ] 210 | ); 211 | my %ignore = map { $_ => $_ } @Ignore; 212 | 213 | push @Dists, grep { not $ignore{$_} and not $except{$_} } 214 | __PACKAGE__->_dist_types; 215 | } 216 | 217 | return @Dists; 218 | } 219 | 220 | =head2 $bool = CPANPLUS::Dist->rescan_dist_types; 221 | 222 | Rescans C<@INC> for available dist types. Useful if you've installed new 223 | C classes and want to make them available to the 224 | current process. 225 | 226 | =cut 227 | 228 | sub rescan_dist_types { 229 | my $dist = shift; 230 | $Loaded = 0; # reset the flag; 231 | return $dist->dist_types; 232 | } 233 | } 234 | 235 | =head2 $bool = CPANPLUS::Dist->has_dist_type( $type ) 236 | 237 | Returns true if distribution type C<$type> is loaded/supported. 238 | 239 | =cut 240 | 241 | sub has_dist_type { 242 | my $dist = shift; 243 | my $type = shift or return; 244 | 245 | return scalar grep { $_ eq $type } CPANPLUS::Dist->dist_types; 246 | } 247 | 248 | =head2 $bool = $dist->prereq_satisfied( modobj => $modobj, version => $version_spec ) 249 | 250 | Returns true if this prereq is satisfied. Returns false if it's not. 251 | Also issues an error if it seems "unsatisfiable," i.e. if it can't be 252 | found on CPAN or the latest CPAN version doesn't satisfy it. 253 | 254 | =cut 255 | 256 | sub prereq_satisfied { 257 | my $dist = shift; 258 | my $cb = $dist->parent->parent; 259 | my %hash = @_; 260 | 261 | my($mod,$ver); 262 | my $tmpl = { 263 | version => { required => 1, store => \$ver }, 264 | modobj => { required => 1, store => \$mod, allow => IS_MODOBJ }, 265 | }; 266 | 267 | check( $tmpl, \%hash ) or return; 268 | 269 | return 1 if $mod->is_uptodate( version => $ver ); 270 | 271 | if ( $cb->_vcmp( $ver, $mod->version ) > 0 ) { 272 | 273 | error(loc( 274 | "This distribution depends on %1, but the latest version". 275 | " of %2 on CPAN (%3) doesn't satisfy the specific version". 276 | " dependency (%4). You may have to resolve this dependency ". 277 | "manually.", 278 | $mod->module, $mod->module, $mod->version, $ver )); 279 | 280 | } 281 | 282 | return; 283 | } 284 | 285 | =head2 $configure_requires = $dist->find_configure_requires( [file => /path/to/META.yml] ) 286 | 287 | Reads the configure_requires for this distribution from the META.yml or META.json 288 | file in the root directory and returns a hashref with module names 289 | and versions required. 290 | 291 | =cut 292 | 293 | sub find_configure_requires { 294 | my $self = shift; 295 | my $mod = $self->parent; 296 | my %hash = @_; 297 | 298 | my ($meta); 299 | my $href = {}; 300 | 301 | my $tmpl = { 302 | file => { store => \$meta }, 303 | }; 304 | 305 | check( $tmpl, \%hash ) or return; 306 | 307 | my $meth = 'configure_requires'; 308 | 309 | { 310 | 311 | ### the prereqs as we have them now 312 | my @args = ( 313 | defaults => $mod->status->$meth || {}, 314 | ); 315 | 316 | my @possibles = do { defined $mod->status->extract 317 | ? ( META_JSON->( $mod->status->extract ), 318 | META_YML->( $mod->status->extract ) ) 319 | : () 320 | }; 321 | 322 | unshift @possibles, $meta if $meta; 323 | 324 | META: foreach my $mfile ( grep { -e } @possibles ) { 325 | push @args, ( file => $mfile ); 326 | if ( $mfile =~ /\.json/ ) { 327 | $href = $self->_prereqs_from_meta_json( @args, keys => [ 'configure' ] ); 328 | } 329 | else { 330 | $href = $self->_prereqs_from_meta_file( @args, keys => [ $meth ] ); 331 | } 332 | last META; 333 | } 334 | 335 | } 336 | 337 | ### and store it in the module 338 | $mod->status->$meth( $href ); 339 | 340 | return { %$href }; 341 | } 342 | 343 | sub find_mymeta_requires { 344 | my $self = shift; 345 | my $mod = $self->parent; 346 | my %hash = @_; 347 | 348 | my ($meta); 349 | my $href = {}; 350 | 351 | my $tmpl = { 352 | file => { store => \$meta }, 353 | }; 354 | 355 | check( $tmpl, \%hash ) or return; 356 | 357 | my $meth = 'prereqs'; 358 | 359 | { 360 | 361 | ### the prereqs as we have them now 362 | my @args = ( 363 | defaults => $mod->status->$meth || {}, 364 | ); 365 | 366 | my @possibles = do { defined $mod->status->extract 367 | ? ( MYMETA_JSON->( $mod->status->extract ), 368 | MYMETA_YML->( $mod->status->extract ) ) 369 | : () 370 | }; 371 | 372 | unshift @possibles, $meta if $meta; 373 | 374 | META: foreach my $mfile ( grep { -e } @possibles ) { 375 | push @args, ( file => $mfile ); 376 | if ( $mfile =~ /\.json/ ) { 377 | $href = $self->_prereqs_from_meta_json( @args, 378 | keys => [ qw|build test runtime| ] ); 379 | } 380 | else { 381 | $href = $self->_prereqs_from_meta_file( @args, 382 | keys => [ qw|build_requires requires| ] ); 383 | } 384 | last META; 385 | } 386 | 387 | } 388 | 389 | ### and store it in the module 390 | $mod->status->$meth( $href ); 391 | 392 | return { %$href }; 393 | } 394 | 395 | sub _prereqs_from_meta_file { 396 | my $self = shift; 397 | my $mod = $self->parent; 398 | my %hash = @_; 399 | 400 | my( $meta, $defaults, $keys ); 401 | my $tmpl = { ### check if we have an extract path. if not, we 402 | ### get 'undef value' warnings from file::spec 403 | file => { default => do { defined $mod->status->extract 404 | ? META_YML->( $mod->status->extract ) 405 | : '' }, 406 | store => \$meta, 407 | }, 408 | defaults => { required => 1, default => {}, strict_type => 1, 409 | store => \$defaults }, 410 | keys => { required => 1, default => [], strict_type => 1, 411 | store => \$keys }, 412 | }; 413 | 414 | check( $tmpl, \%hash ) or return; 415 | 416 | ### if there's a meta file, we read it; 417 | if( -e $meta ) { 418 | 419 | ### Parse::CPAN::Meta uses exceptions for errors 420 | ### hash returned in list context!!! 421 | my ($doc) = eval { Parse::CPAN::Meta::LoadFile( $meta ) }; 422 | 423 | unless( $doc ) { 424 | error(loc( "Could not read %1: '%2'", $meta, $@ )); 425 | return $defaults; 426 | } 427 | 428 | ### read the keys now, make sure not to throw 429 | ### away anything that was already added 430 | for my $key ( @$keys ) { 431 | $defaults = { 432 | %$defaults, 433 | %{ $doc->{$key} }, 434 | } if $doc->{ $key }; 435 | } 436 | } 437 | 438 | ### and return a copy 439 | return \%{ $defaults }; 440 | } 441 | 442 | sub _prereqs_from_meta_json { 443 | my $self = shift; 444 | my $mod = $self->parent; 445 | my %hash = @_; 446 | 447 | my( $meta, $defaults, $keys ); 448 | my $tmpl = { ### check if we have an extract path. if not, we 449 | ### get 'undef value' warnings from file::spec 450 | file => { default => do { defined $mod->status->extract 451 | ? META_JSON->( $mod->status->extract ) 452 | : '' }, 453 | store => \$meta, 454 | }, 455 | defaults => { required => 1, default => {}, strict_type => 1, 456 | store => \$defaults }, 457 | keys => { required => 1, default => [], strict_type => 1, 458 | store => \$keys }, 459 | }; 460 | 461 | check( $tmpl, \%hash ) or return; 462 | 463 | ### if there's a meta file, we read it; 464 | if( -e $meta ) { 465 | 466 | ### Parse::CPAN::Meta uses exceptions for errors 467 | ### hash returned in list context!!! 468 | my ($doc) = eval { Parse::CPAN::Meta->load_file( $meta ) }; 469 | 470 | unless( $doc ) { 471 | error(loc( "Could not read %1: '%2'", $meta, $@ )); 472 | return $defaults; 473 | } 474 | 475 | ### read the keys now, make sure not to throw 476 | ### away anything that was already added 477 | #for my $key ( @$keys ) { 478 | # $defaults = { 479 | # %$defaults, 480 | # %{ $doc->{$key} }, 481 | # } if $doc->{ $key }; 482 | #} 483 | my $prereqs = $doc->{prereqs} || {}; 484 | for my $key ( @$keys ) { 485 | $defaults = { 486 | %$defaults, 487 | %{ $prereqs->{$key}->{requires} }, 488 | } if $prereqs->{ $key }->{requires}; 489 | } 490 | } 491 | 492 | ### and return a copy 493 | return \%{ $defaults }; 494 | } 495 | 496 | =head2 $bool = $dist->_resolve_prereqs( ... ) 497 | 498 | Makes sure prerequisites are resolved 499 | 500 | format The dist class to use to make the prereqs 501 | (ie. CPANPLUS::Dist::MM) 502 | 503 | prereqs Hash of the prerequisite modules and their versions 504 | 505 | target What to do with the prereqs. 506 | create => Just build them 507 | install => Install them 508 | ignore => Ignore them 509 | 510 | prereq_build If true, always build the prereqs even if already 511 | resolved 512 | 513 | verbose Be verbose 514 | 515 | force Force the prereq to be built, even if already resolved 516 | 517 | =cut 518 | 519 | sub _resolve_prereqs { 520 | my $dist = shift; 521 | my $self = $dist->parent; 522 | my $cb = $self->parent; 523 | my $conf = $cb->configure_object; 524 | my %hash = @_; 525 | 526 | my ($prereqs, $format, $verbose, $target, $force, $prereq_build); 527 | my $tmpl = { 528 | ### XXX perhaps this should not be required, since it may not be 529 | ### packaged, just installed... 530 | ### Let it be empty as well -- that means the $modobj->install 531 | ### routine will figure it out, which is fine if we didn't have any 532 | ### very specific wishes (it will even detect the favourite 533 | ### dist_type). 534 | format => { required => 1, store => \$format, 535 | allow => ['',__PACKAGE__->dist_types], }, 536 | prereqs => { required => 1, default => { }, 537 | strict_type => 1, store => \$prereqs }, 538 | verbose => { default => $conf->get_conf('verbose'), 539 | store => \$verbose }, 540 | force => { default => $conf->get_conf('force'), 541 | store => \$force }, 542 | ### make sure allow matches with $mod->install's list 543 | target => { default => '', store => \$target, 544 | allow => ['',qw[create ignore install]] }, 545 | prereq_build => { default => 0, store => \$prereq_build }, 546 | }; 547 | 548 | check( $tmpl, \%hash ) or return; 549 | 550 | ### so there are no prereqs? then don't even bother 551 | return 1 unless keys %$prereqs; 552 | 553 | ### Make sure we wound up where we started. 554 | my $original_wd = Cwd::cwd; 555 | 556 | ### so you didn't provide an explicit target. 557 | ### maybe your config can tell us what to do. 558 | $target ||= { 559 | PREREQ_ASK, TARGET_INSTALL, # we'll bail out if the user says no 560 | PREREQ_BUILD, TARGET_CREATE, 561 | PREREQ_IGNORE, TARGET_IGNORE, 562 | PREREQ_INSTALL, TARGET_INSTALL, 563 | }->{ $conf->get_conf('prereqs') } || ''; 564 | 565 | ### XXX BIG NASTY HACK XXX FIXME at some point. 566 | ### when installing Bundle::CPANPLUS::Dependencies, we want to 567 | ### install all packages matching 'cpanplus' to be installed last, 568 | ### as all CPANPLUS' prereqs are being installed as well, but are 569 | ### being loaded for bootstrapping purposes. This means CPANPLUS 570 | ### can find them, but for example cpanplus::dist::build won't, 571 | ### which gets messy FAST. So, here we sort our prereqs only IF 572 | ### the parent module is Bundle::CPANPLUS::Dependencies. 573 | ### Really, we would wnat some sort of sorted prereq mechanism, 574 | ### but Bundle:: doesn't support it, and we flatten everything 575 | ### to a hash internally. A sorted hash *might* do the trick if 576 | ### we got a transparent implementation.. that would mean we would 577 | ### just have to remove the 'sort' here, and all will be well 578 | my @sorted_prereqs; 579 | 580 | ### use regex, could either be a module name, or a package name 581 | if( $self->module =~ /^Bundle(::|-)CPANPLUS(::|-)Dependencies/ ) { 582 | my (@first, @last); 583 | for my $mod ( sort keys %$prereqs ) { 584 | $mod =~ /CPANPLUS/ 585 | ? push @last, $mod 586 | : push @first, $mod; 587 | } 588 | @sorted_prereqs = (@first, @last); 589 | } else { 590 | @sorted_prereqs = sort keys %$prereqs; 591 | } 592 | 593 | ### first, transfer this key/value pairing into a 594 | ### list of module objects + desired versions 595 | my @install_me; 596 | 597 | for my $mod ( @sorted_prereqs ) { 598 | ( my $version = $prereqs->{$mod} ) =~ s#[^0-9\._]+##g; 599 | 600 | ### 'perl' is a special case, there's no mod object for it 601 | if( $mod eq PERL_CORE ) { 602 | 603 | ### run a CLI invocation to see if the perl you specified is 604 | ### uptodate 605 | my $ok = run( command => "$^X -M$version -e1", verbose => 0 ); 606 | 607 | unless( $ok ) { 608 | error(loc( "Module '%1' needs perl version '%2', but you ". 609 | "only have version '%3' -- can not proceed", 610 | $self->module, $version, 611 | $cb->_perl_version( perl => $^X ) ) ); 612 | return; 613 | } 614 | 615 | next; 616 | } 617 | 618 | my $modobj = $cb->module_tree($mod); 619 | 620 | #### XXX we ignore the version, and just assume that the latest 621 | #### version from cpan will meet your requirements... dodgy =/ 622 | unless( $modobj ) { 623 | # Check if it is a core module 624 | my $sub = CPANPLUS::Module->can( 625 | 'module_is_supplied_with_perl_core' ); 626 | my $core = $sub->( $mod ); 627 | unless ( defined $core ) { 628 | error( loc( "No such module '%1' found on CPAN", $mod ) ); 629 | next; 630 | } 631 | if ( $cb->_vcmp( $version, $core ) > 0 ) { 632 | error(loc( "Version of core module '%1' ('%2') is too low for ". 633 | "'%3' (needs '%4') -- carrying on but this may be a problem", 634 | $mod, $core, 635 | $self->module, $version )); 636 | } 637 | next; 638 | } 639 | 640 | ### it's not uptodate, we need to install it 641 | if( !$dist->prereq_satisfied(modobj => $modobj, version => $version)) { 642 | msg(loc("Module '%1' requires '%2' version '%3' to be installed ", 643 | $self->module, $modobj->module, $version), $verbose ); 644 | 645 | push @install_me, [$modobj, $version]; 646 | 647 | ### it's not an MM or Build format, that means it's a package 648 | ### manager... we'll need to install it as well, via the PM 649 | } elsif ( INSTALL_VIA_PACKAGE_MANAGER->($format) and 650 | !$modobj->package_is_perl_core and 651 | ($target ne TARGET_IGNORE) 652 | ) { 653 | msg(loc("Module '%1' depends on '%2', may need to build a '%3' ". 654 | "package for it as well", $self->module, $modobj->module, 655 | $format)); 656 | push @install_me, [$modobj, $version]; 657 | } 658 | } 659 | 660 | 661 | 662 | ### so you just want to ignore prereqs? ### 663 | if( $target eq TARGET_IGNORE ) { 664 | 665 | ### but you have modules you need to install 666 | if( @install_me ) { 667 | msg(loc("Ignoring prereqs, this may mean your install will fail"), 668 | $verbose); 669 | msg(loc("'%1' listed the following dependencies:", $self->module), 670 | $verbose); 671 | 672 | for my $aref (@install_me) { 673 | my ($mod,$version) = @$aref; 674 | 675 | my $str = sprintf "\t%-35s %8s\n", $mod->module, $version; 676 | msg($str,$verbose); 677 | } 678 | 679 | return; 680 | 681 | ### ok, no problem, you have all needed prereqs anyway 682 | } else { 683 | return 1; 684 | } 685 | } 686 | 687 | my $flag; 688 | for my $aref (@install_me) { 689 | my($modobj,$version) = @$aref; 690 | 691 | ### another prereq may have already installed this one... 692 | ### so dont ask again if the module turns out to be uptodate 693 | ### see bug [#11840] 694 | ### if either force or prereq_build are given, the prereq 695 | ### should be built anyway 696 | next if ($cb->_callbacks->ignore_me->($modobj)) && 697 | $dist->prereq_satisfied(modobj => $modobj, version => $version); 698 | 699 | next if (!$force and !$prereq_build); 700 | 701 | ### either we're told to ignore the prereq, 702 | ### or the user wants us to ask him 703 | if( ( $conf->get_conf('prereqs') == PREREQ_ASK and not 704 | $cb->_callbacks->install_prerequisite->($self, $modobj) 705 | ) 706 | ) { 707 | msg(loc("Will not install prerequisite '%1' -- Note " . 708 | "that the overall install may fail due to this", 709 | $modobj->module), $verbose); 710 | next; 711 | } 712 | 713 | ### value set and false -- means failure ### 714 | if( defined $modobj->status->installed 715 | && !$modobj->status->installed 716 | ) { 717 | error( loc( "Prerequisite '%1' failed to install before in " . 718 | "this session", $modobj->module ) ); 719 | $flag++; 720 | last; 721 | } 722 | 723 | ### part of core? 724 | if( $modobj->package_is_perl_core ) { 725 | error(loc("Prerequisite '%1' is perl-core (%2) -- not ". 726 | "installing that. -- Note that the overall ". 727 | "install may fail due to this.", 728 | $modobj->module, $modobj->package ) ); 729 | next; 730 | } 731 | 732 | ### circular dependency code ### 733 | my $pending = $cb->_status->pending_prereqs || {}; 734 | 735 | ### recursive dependency ### 736 | if ( $pending->{ $modobj->module } ) { 737 | error( loc( "Recursive dependency detected (%1) -- skipping", 738 | $modobj->module ) ); 739 | next; 740 | } 741 | 742 | ### register this dependency as pending ### 743 | $pending->{ $modobj->module } = $modobj; 744 | $cb->_status->pending_prereqs( $pending ); 745 | 746 | ### call $modobj->install rather than doing 747 | ### CPANPLUS::Dist->new and the like ourselves, 748 | ### since ->install will take care of fetch && 749 | ### extract as well 750 | my $pa = $dist->status->_prepare_args || {}; 751 | my $ca = $dist->status->_create_args || {}; 752 | my $ia = $dist->status->_install_args || {}; 753 | 754 | unless( $modobj->install( %$pa, %$ca, %$ia, 755 | force => $force, 756 | verbose => $verbose, 757 | format => $format, 758 | target => $target ) 759 | ) { 760 | error(loc("Failed to install '%1' as prerequisite " . 761 | "for '%2'", $modobj->module, $self->module ) ); 762 | $flag++; 763 | } 764 | 765 | ### unregister the pending dependency ### 766 | $pending->{ $modobj->module } = 0; 767 | $cb->_status->pending_prereqs( $pending ); 768 | 769 | last if $flag; 770 | 771 | ### don't want us to install? ### 772 | if( $target ne TARGET_INSTALL ) { 773 | my $dir = $modobj->status->extract 774 | or error(loc("No extraction dir for '%1' found ". 775 | "-- weird", $modobj->module)); 776 | 777 | $modobj->add_to_includepath(); 778 | 779 | next; 780 | } 781 | } 782 | 783 | ### reset the $prereqs iterator, in case we bailed out early ### 784 | keys %$prereqs; 785 | 786 | ### chdir back to where we started 787 | $cb->_chdir( dir => $original_wd ); 788 | 789 | return 1 unless $flag; 790 | return; 791 | } 792 | 793 | 1; 794 | 795 | # Local variables: 796 | # c-indentation-style: bsd 797 | # c-basic-offset: 4 798 | # indent-tabs-mode: nil 799 | # End: 800 | # vim: expandtab shiftwidth=4: 801 | -------------------------------------------------------------------------------- /src/perl/patch-files/perl-5.14.1/cpan/CPANPLUS/lib/CPANPLUS/Internals.pm: -------------------------------------------------------------------------------- 1 | package CPANPLUS::Internals; 2 | 3 | ### we /need/ perl5.6.1 or higher -- we use coderefs in @INC, 4 | ### and 5.6.0 is just too buggy 5 | use 5.006001; 6 | 7 | use strict; 8 | use Config; 9 | 10 | 11 | use CPANPLUS::Error; 12 | 13 | use CPANPLUS::Selfupdate; 14 | 15 | use CPANPLUS::Internals::Extract; 16 | use CPANPLUS::Internals::Fetch; 17 | use CPANPLUS::Internals::Utils; 18 | use CPANPLUS::Internals::Constants; 19 | use CPANPLUS::Internals::Search; 20 | use CPANPLUS::Internals::Report; 21 | 22 | 23 | require base; 24 | use Cwd qw[cwd]; 25 | use Module::Load qw[load]; 26 | use Params::Check qw[check]; 27 | use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; 28 | use Module::Load::Conditional qw[can_load]; 29 | 30 | use Object::Accessor; 31 | 32 | 33 | local $Params::Check::VERBOSE = 1; 34 | 35 | use vars qw[@ISA $VERSION]; 36 | 37 | @ISA = qw[ 38 | CPANPLUS::Internals::Extract 39 | CPANPLUS::Internals::Fetch 40 | CPANPLUS::Internals::Utils 41 | CPANPLUS::Internals::Search 42 | CPANPLUS::Internals::Report 43 | ]; 44 | 45 | $VERSION = "0.9103"; 46 | 47 | =pod 48 | 49 | =head1 NAME 50 | 51 | CPANPLUS::Internals 52 | 53 | =head1 SYNOPSIS 54 | 55 | my $internals = CPANPLUS::Internals->_init( _conf => $conf ); 56 | my $backend = CPANPLUS::Internals->_retrieve_id( $ID ); 57 | 58 | =head1 DESCRIPTION 59 | 60 | This module is the guts of CPANPLUS -- it inherits from all other 61 | modules in the CPANPLUS::Internals::* namespace, thus defying normal 62 | rules of OO programming -- but if you're reading this, you already 63 | know what's going on ;) 64 | 65 | Please read the C documentation for the normal API. 66 | 67 | =head1 ACCESSORS 68 | 69 | =over 4 70 | 71 | =item _conf 72 | 73 | Get/set the configure object 74 | 75 | =item _id 76 | 77 | Get/set the id 78 | 79 | =cut 80 | 81 | ### autogenerate accessors ### 82 | for my $key ( qw[_conf _id _modules _hosts _methods _status 83 | _callbacks _selfupdate _mtree _atree] 84 | ) { 85 | no strict 'refs'; 86 | *{__PACKAGE__."::$key"} = sub { 87 | $_[0]->{$key} = $_[1] if @_ > 1; 88 | return $_[0]->{$key}; 89 | } 90 | } 91 | 92 | =pod 93 | 94 | =back 95 | 96 | =head1 METHODS 97 | 98 | =head2 $internals = CPANPLUS::Internals->_init( _conf => CONFIG_OBJ ) 99 | 100 | C<_init> creates a new CPANPLUS::Internals object. 101 | 102 | You have to pass it a valid C object. 103 | 104 | Returns the object on success, or dies on failure. 105 | 106 | =cut 107 | 108 | { ### NOTE: 109 | ### if extra callbacks are added, don't forget to update the 110 | ### 02-internals.t test script with them! 111 | my $callback_map = { 112 | ### name default value 113 | install_prerequisite => 1, # install prereqs when 'ask' is set? 114 | edit_test_report => 0, # edit the prepared test report? 115 | send_test_report => 1, # send the test report? 116 | # munge the test report 117 | munge_test_report => sub { return $_[1] }, 118 | # filter out unwanted prereqs 119 | filter_prereqs => sub { return $_[1] }, 120 | ignore_me => sub { return $_[1] }, 121 | # continue if 'make test' fails? 122 | proceed_on_test_failure => sub { return 0 }, 123 | munge_dist_metafile => sub { return $_[1] }, 124 | }; 125 | 126 | my $status = Object::Accessor->new; 127 | $status->mk_accessors(qw[pending_prereqs]); 128 | 129 | my $callback = Object::Accessor->new; 130 | $callback->mk_accessors(keys %$callback_map); 131 | 132 | my $conf; 133 | my $Tmpl = { 134 | _conf => { required => 1, store => \$conf, 135 | allow => IS_CONFOBJ }, 136 | _id => { default => '', no_override => 1 }, 137 | _authortree => { default => '', no_override => 1 }, 138 | _modtree => { default => '', no_override => 1 }, 139 | _hosts => { default => {}, no_override => 1 }, 140 | _methods => { default => {}, no_override => 1 }, 141 | _status => { default => '', no_override => 1 }, 142 | _callbacks => { default => '', no_override => 1 }, 143 | }; 144 | 145 | sub _init { 146 | my $class = shift; 147 | my %hash = @_; 148 | 149 | ### temporary warning until we fix the storing of multiple id's 150 | ### and their serialization: 151 | ### probably not going to happen --kane 152 | if( my $id = $class->_last_id ) { 153 | # make it a singleton. 154 | warn loc(q[%1 currently only supports one %2 object per ] . 155 | qq[running program\n], 'CPANPLUS', $class); 156 | 157 | return $class->_retrieve_id( $id ); 158 | } 159 | 160 | my $args = check($Tmpl, \%hash) 161 | or die loc(qq[Could not initialize '%1' object], $class); 162 | 163 | bless $args, $class; 164 | 165 | $args->{'_id'} = $args->_inc_id; 166 | $args->{'_status'} = $status; 167 | $args->{'_callbacks'} = $callback; 168 | 169 | ### initialize callbacks to default state ### 170 | for my $name ( $callback->ls_accessors ) { 171 | my $rv = ref $callback_map->{$name} ? 'sub return value' : 172 | $callback_map->{$name} ? 'true' : 'false'; 173 | 174 | $args->_callbacks->$name( 175 | sub { msg(loc("DEFAULT '%1' HANDLER RETURNING '%2'", 176 | $name, $rv), $args->_conf->get_conf('debug')); 177 | return ref $callback_map->{$name} 178 | ? $callback_map->{$name}->( @_ ) 179 | : $callback_map->{$name}; 180 | } 181 | ); 182 | } 183 | 184 | ### create a selfupdate object 185 | $args->_selfupdate( CPANPLUS::Selfupdate->new( $args ) ); 186 | 187 | ### initialize it as an empty hashref ### 188 | $args->_status->pending_prereqs( {} ); 189 | 190 | $conf->_set_build( startdir => cwd() ), 191 | or error( loc("couldn't locate current dir!") ); 192 | 193 | $ENV{FTP_PASSIVE} = 1, if $conf->get_conf('passive'); 194 | 195 | my $id = $args->_store_id( $args ); 196 | 197 | unless ( $id == $args->_id ) { 198 | error( loc("IDs do not match: %1 != %2. Storage failed!", 199 | $id, $args->_id) ); 200 | } 201 | 202 | ### different source engines available now, so set them here 203 | { my $store = $conf->get_conf( 'source_engine' ) 204 | || DEFAULT_SOURCE_ENGINE; 205 | 206 | unless( can_load( modules => { $store => '0.0' }, verbose => 1 ) ) { 207 | error( loc( "Could not load source engine '%1'", $store ) ); 208 | 209 | if( $store ne DEFAULT_SOURCE_ENGINE ) { 210 | msg( loc("Falling back to %1", DEFAULT_SOURCE_ENGINE), 1 ); 211 | 212 | load DEFAULT_SOURCE_ENGINE; 213 | 214 | base->import( DEFAULT_SOURCE_ENGINE ); 215 | } else { 216 | return; 217 | } 218 | } else { 219 | base->import( $store ); 220 | } 221 | } 222 | 223 | return $args; 224 | } 225 | 226 | =pod 227 | 228 | =head2 $bool = $internals->_flush( list => \@caches ) 229 | 230 | Flushes the designated caches from the C object. 231 | 232 | Returns true on success, false if one or more caches could not be 233 | be flushed. 234 | 235 | =cut 236 | 237 | sub _flush { 238 | my $self = shift; 239 | my $conf = $self->configure_object; 240 | my %hash = @_; 241 | 242 | my $aref; 243 | my $tmpl = { 244 | list => { required => 1, default => [], 245 | strict_type => 1, store => \$aref }, 246 | }; 247 | 248 | my $args = check( $tmpl, \%hash ) or return; 249 | 250 | my $flag = 0; 251 | for my $what (@$aref) { 252 | my $cache = '_' . $what; 253 | 254 | ### set the include paths back to their original ### 255 | if( $what eq 'lib' ) { 256 | $ENV{PERL5LIB} = $conf->_perl5lib || ''; 257 | @INC = @{$conf->_lib}; 258 | 259 | ### give all modules a new status object -- this is slightly 260 | ### costly, but the best way to make sure all statuses are 261 | ### forgotten --kane 262 | } elsif ( $what eq 'modules' ) { 263 | for my $modobj ( values %{$self->module_tree} ) { 264 | 265 | $modobj->_flush; 266 | } 267 | 268 | ### blow away the methods cache... currently, that's only 269 | ### File::Fetch's method fail list 270 | } elsif ( $what eq 'methods' ) { 271 | 272 | ### still fucking p4 :( ### 273 | $File'Fetch::METHOD_FAIL = $File'Fetch::METHOD_FAIL = {}; 274 | 275 | ### blow away the m::l::c cache, so modules can be (re)loaded 276 | ### again if they become available 277 | } elsif ( $what eq 'load' ) { 278 | undef $Module::Load::Conditional::CACHE; 279 | 280 | } else { 281 | unless ( exists $self->{$cache} && exists $Tmpl->{$cache} ) { 282 | error( loc( "No such cache: '%1'", $what ) ); 283 | $flag++; 284 | next; 285 | } else { 286 | $self->$cache( {} ); 287 | } 288 | } 289 | } 290 | return !$flag; 291 | } 292 | 293 | ### NOTE: 294 | ### if extra callbacks are added, don't forget to update the 295 | ### 02-internals.t test script with them! 296 | 297 | =pod 298 | 299 | =head2 $bool = $internals->_register_callback( name => CALLBACK_NAME, code => CODEREF ); 300 | 301 | Registers a callback for later use by the internal libraries. 302 | 303 | Here is a list of the currently used callbacks: 304 | 305 | =over 4 306 | 307 | =item install_prerequisite 308 | 309 | Is called when the user wants to be C about what to do with 310 | prerequisites. Should return a boolean indicating true to install 311 | the prerequisite and false to skip it. 312 | 313 | =item send_test_report 314 | 315 | Is called when the user should be prompted if he wishes to send the 316 | test report. Should return a boolean indicating true to send the 317 | test report and false to skip it. 318 | 319 | =item munge_test_report 320 | 321 | Is called when the test report message has been composed, giving 322 | the user a chance to programatically alter it. Should return the 323 | (munged) message to be sent. 324 | 325 | =item edit_test_report 326 | 327 | Is called when the user should be prompted to edit test reports 328 | about to be sent out by Test::Reporter. Should return a boolean 329 | indicating true to edit the test report in an editor and false 330 | to skip it. 331 | 332 | =item proceed_on_test_failure 333 | 334 | Is called when 'make test' or 'Build test' fails. Should return 335 | a boolean indicating whether the install should continue even if 336 | the test failed. 337 | 338 | =item munge_dist_metafile 339 | 340 | Is called when the C metafile is created, like 341 | C for C, giving the user a chance to 342 | programatically alter it. Should return the (munged) text to be 343 | written to the metafile. 344 | 345 | =back 346 | 347 | =cut 348 | 349 | sub _register_callback { 350 | my $self = shift or return; 351 | my %hash = @_; 352 | 353 | my ($name,$code); 354 | my $tmpl = { 355 | name => { required => 1, store => \$name, 356 | allow => [$callback->ls_accessors] }, 357 | code => { required => 1, allow => IS_CODEREF, 358 | store => \$code }, 359 | }; 360 | 361 | check( $tmpl, \%hash ) or return; 362 | 363 | $self->_callbacks->$name( $code ) or return; 364 | 365 | return 1; 366 | } 367 | 368 | # =head2 $bool = $internals->_add_callback( name => CALLBACK_NAME, code => CODEREF ); 369 | # 370 | # Adds a new callback to be used from anywhere in the system. If the callback 371 | # is already known, an error is raised and false is returned. If the callback 372 | # is not yet known, it is added, and the corresponding coderef is registered 373 | # using the 374 | # 375 | # =cut 376 | # 377 | # sub _add_callback { 378 | # my $self = shift or return; 379 | # my %hash = @_; 380 | # 381 | # my ($name,$code); 382 | # my $tmpl = { 383 | # name => { required => 1, store => \$name, }, 384 | # code => { required => 1, allow => IS_CODEREF, 385 | # store => \$code }, 386 | # }; 387 | # 388 | # check( $tmpl, \%hash ) or return; 389 | # 390 | # if( $callback->can( $name ) ) { 391 | # error(loc("Callback '%1' is already registered")); 392 | # return; 393 | # } 394 | # 395 | # $callback->mk_accessor( $name ); 396 | # 397 | # $self->_register_callback( name => $name, code => $code ) or return; 398 | # 399 | # return 1; 400 | # } 401 | 402 | } 403 | 404 | =pod 405 | 406 | =head2 $bool = $internals->_add_to_includepath( directories => \@dirs ) 407 | 408 | Adds a list of directories to the include path. 409 | This means they get added to C<@INC> as well as C<$ENV{PERL5LIB}>. 410 | 411 | Returns true on success, false on failure. 412 | 413 | =cut 414 | 415 | sub _add_to_includepath { 416 | my $self = shift; 417 | my %hash = @_; 418 | 419 | my $dirs; 420 | my $tmpl = { 421 | directories => { required => 1, default => [], store => \$dirs, 422 | strict_type => 1 }, 423 | }; 424 | 425 | check( $tmpl, \%hash ) or return; 426 | 427 | my $s = $Config{'path_sep'}; 428 | 429 | ### only add if it's not added yet 430 | for my $lib (@$dirs) { 431 | push @INC, $lib unless grep { $_ eq $lib } @INC; 432 | # 433 | ### it will be complaining if $ENV{PERL5LIB] is not defined (yet). 434 | local $^W; 435 | $ENV{'PERL5LIB'} .= $s . $lib 436 | unless $ENV{'PERL5LIB'} =~ qr|\Q$s$lib\E|; 437 | } 438 | 439 | return 1; 440 | } 441 | 442 | =pod 443 | 444 | =head2 $id = CPANPLUS::Internals->_last_id 445 | 446 | Return the id of the last object stored. 447 | 448 | =head2 $id = CPANPLUS::Internals->_store_id( $internals ) 449 | 450 | Store this object; return its id. 451 | 452 | =head2 $obj = CPANPLUS::Internals->_retrieve_id( $ID ) 453 | 454 | Retrieve an object based on its ID -- return false on error. 455 | 456 | =head2 CPANPLUS::Internals->_remove_id( $ID ) 457 | 458 | Remove the object marked by $ID from storage. 459 | 460 | =head2 @objs = CPANPLUS::Internals->_return_all_objects 461 | 462 | Return all stored objects. 463 | 464 | =cut 465 | 466 | 467 | ### code for storing multiple objects 468 | ### -- although we only support one right now 469 | ### XXX when support for multiple objects comes, saving source will have 470 | ### to change 471 | { 472 | my $idref = {}; 473 | my $count = 0; 474 | 475 | sub _inc_id { return ++$count; } 476 | 477 | sub _last_id { $count } 478 | 479 | sub _store_id { 480 | my $self = shift; 481 | my $obj = shift or return; 482 | 483 | unless( IS_INTERNALS_OBJ->($obj) ) { 484 | error( loc("The object you passed has the wrong ref type: '%1'", 485 | ref $obj) ); 486 | return; 487 | } 488 | 489 | $idref->{ $obj->_id } = $obj; 490 | return $obj->_id; 491 | } 492 | 493 | sub _retrieve_id { 494 | my $self = shift; 495 | my $id = shift or return; 496 | 497 | my $obj = $idref->{$id}; 498 | return $obj; 499 | } 500 | 501 | sub _remove_id { 502 | my $self = shift; 503 | my $id = shift or return; 504 | 505 | return delete $idref->{$id}; 506 | } 507 | 508 | sub _return_all_objects { return values %$idref } 509 | } 510 | 511 | 1; 512 | 513 | # Local variables: 514 | # c-indentation-style: bsd 515 | # c-basic-offset: 4 516 | # indent-tabs-mode: nil 517 | # End: 518 | # vim: expandtab shiftwidth=4: 519 | -------------------------------------------------------------------------------- /src/perl/patch-files/perl-5.14.2/cpan/CPANPLUS/bin/cpan2dist: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl -w 2 | use strict; 3 | use CPANPLUS::Backend; 4 | use CPANPLUS::Dist; 5 | use CPANPLUS::Internals::Constants; 6 | use Data::Dumper; 7 | use Getopt::Long; 8 | use File::Spec; 9 | use File::Temp qw|tempfile|; 10 | use File::Basename; 11 | use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; 12 | 13 | local $Data::Dumper::Indent = 1; 14 | 15 | use constant PREREQ_SKIP_CLASS => 'CPANPLUS::To::Dist::PREREQ_SKIP'; 16 | use constant ALARM_CLASS => 'CPANPLUS::To::Dist::ALARM'; 17 | 18 | ### print when you can 19 | $|++; 20 | 21 | my $cb = CPANPLUS::Backend->new 22 | or die loc("Could not create new CPANPLUS::Backend object"); 23 | my $conf = $cb->configure_object; 24 | 25 | my %formats = map { $_ => $_ } CPANPLUS::Dist->dist_types; 26 | 27 | my $opts = {}; 28 | GetOptions( $opts, 29 | 'format=s', 'archive', 30 | 'verbose!', 'force!', 31 | 'skiptest!', 'keepsource!', 32 | 'makefile!', 'buildprereq!', 33 | 'help', 'flushcache', 34 | 'ban=s@', 'banlist=s@', 35 | 'ignore=s@', 'ignorelist=s@', 36 | 'defaults', 'modulelist=s@', 37 | 'logfile=s', 'timeout=s', 38 | 'dist-opts=s%', 'set-config=s%', 39 | 'default-banlist!', 'set-program=s%', 40 | 'default-ignorelist!', 'edit-metafile!', 41 | 'install!' 42 | ); 43 | 44 | die usage() if exists $opts->{'help'}; 45 | 46 | ### parse options 47 | my $tarball = $opts->{'archive'} || 0; 48 | my $keep = $opts->{'keepsource'} ? 1 : 0; 49 | my $prereqbuild = exists $opts->{'buildprereq'} 50 | ? $opts->{'buildprereq'} 51 | : 0; 52 | my $timeout = exists $opts->{'timeout'} 53 | ? $opts->{'timeout'} 54 | : 300; 55 | 56 | ### use default answers? 57 | unless ( $ENV{'PERL_MM_USE_DEFAULT'} ) { 58 | $ENV{'PERL_MM_USE_DEFAULT'} = $opts->{'defaults'} ? 1 : 0; 59 | } 60 | 61 | my $format; 62 | ### if provided, we go with the command line option, fall back to conf setting 63 | { $format = $opts->{'format'} || $conf->get_conf('dist_type'); 64 | $conf->set_conf( dist_type => $format ); 65 | 66 | ### is this a valid format?? 67 | die loc("Invalid format: " . ($format || "[NONE]") ) . usage() 68 | unless $formats{$format}; 69 | 70 | ### any options to fix config entries 71 | { my $set_conf = $opts->{'set-config'} || {}; 72 | while( my($key,$val) = each %$set_conf ) { 73 | $conf->set_conf( $key => $val ); 74 | } 75 | } 76 | 77 | ### any options to fix program entries 78 | { my $set_prog = $opts->{'set-program'} || {}; 79 | while( my($key,$val) = each %$set_prog ) { 80 | $conf->set_program( $key => $val ); 81 | } 82 | } 83 | 84 | ### any other options passed 85 | { my %map = ( verbose => 'verbose', 86 | force => 'force', 87 | skiptest => 'skiptest', 88 | makefile => 'prefer_makefile' 89 | ); 90 | 91 | ### set config options from arguments 92 | while (my($key,$val) = each %map) { 93 | my $bool = exists $opts->{$key} 94 | ? $opts->{$key} 95 | : $conf->get_conf($val); 96 | $conf->set_conf( $val => $bool ); 97 | } 98 | } 99 | } 100 | 101 | my @modules = @ARGV; 102 | if( exists $opts->{'modulelist'} ) { 103 | push @modules, map { parse_file( $_ ) } @{ $opts->{'modulelist'} }; 104 | } 105 | 106 | die usage() unless @modules; 107 | 108 | ### set up munge callback if requested 109 | { if( $opts->{'edit-metafile'} ) { 110 | my $editor = $conf->get_program('editor'); 111 | 112 | if( $editor ) { 113 | 114 | ### register install callback ### 115 | $cb->_register_callback( 116 | name => 'munge_dist_metafile', 117 | code => sub { 118 | my $self = shift; 119 | my $text = shift or return; 120 | 121 | my($fh,$file) = tempfile( UNLINK => 1 ); 122 | 123 | unless( print $fh $text ) { 124 | warn "Could not print metafile information: $!"; 125 | return; 126 | } 127 | 128 | close $fh; 129 | 130 | system( $editor => $file ); 131 | 132 | my $cont = $cb->_get_file_contents( file => $file ); 133 | 134 | return $cont; 135 | }, 136 | ); 137 | 138 | } else { 139 | warn "No editor configured. Can not edit metafiles!\n"; 140 | } 141 | } 142 | } 143 | 144 | my $fh; 145 | LOGFILE: { 146 | if( my $file = $opts->{logfile} ) { 147 | open $fh, ">$file" or ( 148 | warn loc("Could not open '%1' for writing: %2", $file,$!), 149 | last LOGFILE 150 | ); 151 | 152 | warn "Logging to '$file'\n"; 153 | 154 | *STDERR = $fh; 155 | *STDOUT = $fh; 156 | } 157 | } 158 | 159 | ### reload indices if so desired 160 | $cb->reload_indices() if $opts->{'flushcache'}; 161 | 162 | { my @ban = exists $opts->{'ban'} 163 | ? map { qr/$_/ } @{ $opts->{'ban'} } 164 | : (); 165 | 166 | 167 | if( exists $opts->{'banlist'} ) { 168 | push @ban, map { parse_file( $_, 1 ) } @{ $opts->{'banlist'} }; 169 | } 170 | 171 | push @ban, map { s/\s+//; $_ } 172 | map { [split /\s*#\s*/]->[0] } 173 | grep { /#/ } 174 | map { split /\n/ } _default_ban_list() 175 | if $opts->{'default-banlist'}; 176 | 177 | ### use our prereq install callback 178 | $conf->set_conf( prereqs => PREREQ_ASK ); 179 | 180 | ### register install callback ### 181 | $cb->_register_callback( 182 | name => 'install_prerequisite', 183 | code => \&__ask_about_install, 184 | ); 185 | 186 | 187 | ### check for ban patterns when handling prereqs 188 | sub __ask_about_install { 189 | 190 | my $mod = shift or return; 191 | my $prereq = shift or return; 192 | 193 | 194 | ### die with an error object, so we can verify that 195 | ### the die came from this location, and that it's an 196 | ### 'acceptable' death 197 | my $pat = ban_me( $prereq ); 198 | die bless sub { loc("Module '%1' requires '%2' to be installed " . 199 | "but found in your ban list (%3) -- skipping", 200 | $mod->module, $prereq->module, $pat ) 201 | }, PREREQ_SKIP_CLASS if $pat; 202 | return 1; 203 | } 204 | 205 | ### should we skip this module? 206 | sub ban_me { 207 | my $mod = shift; 208 | 209 | for my $pat ( @ban ) { 210 | return $pat if $mod->module =~ /$pat/i; 211 | } 212 | return; 213 | } 214 | } 215 | 216 | ### patterns to strip from prereq lists 217 | { my @ignore = exists $opts->{'ignore'} 218 | ? map { qr/$_/ } @{ $opts->{'ignore'} } 219 | : (); 220 | 221 | if( exists $opts->{'ignorelist'} ) { 222 | push @ignore, map { parse_file( $_, 1 ) } @{ $opts->{'ignorelist'} }; 223 | } 224 | 225 | push @ignore, map { s/\s+//; $_ } 226 | map { [split /\s*#\s*/]->[0] } 227 | grep { /#/ } 228 | map { split /\n/ } _default_ignore_list() 229 | if $opts->{'default-ignorelist'}; 230 | 231 | 232 | ### register install callback ### 233 | $cb->_register_callback( 234 | name => 'filter_prereqs', 235 | code => \&__filter_prereqs, 236 | ); 237 | 238 | sub __filter_prereqs { 239 | my $cb = shift; 240 | my $href = shift; 241 | 242 | for my $name ( keys %$href ) { 243 | my $obj = $cb->parse_module( module => $name ) or ( 244 | warn "Cannot make a module object out of ". 245 | "'$name' -- skipping\n", 246 | next ); 247 | 248 | if( my $pat = ignore_me( $obj ) ) { 249 | warn loc("'%1' found in your ignore list (%2) ". 250 | "-- filtering it out\n", $name, $pat); 251 | 252 | delete $href->{ $name }; 253 | } 254 | } 255 | 256 | return $href; 257 | } 258 | 259 | 260 | $cb->_register_callback( 261 | name => 'ignore_me', 262 | code => \&ignore_me, 263 | ); 264 | 265 | ### should we skip this module? 266 | sub ignore_me { 267 | my $mod = shift; 268 | 269 | for my $pat ( @ignore ) { 270 | return $pat if $mod->module =~ /$pat/i; 271 | return $pat if $mod->package_name =~ /$pat/i; 272 | } 273 | return; 274 | } 275 | } 276 | 277 | 278 | my %done; 279 | for my $name (@modules) { 280 | 281 | my $obj; 282 | 283 | ### is it a tarball? then we get it locally and transform it 284 | ### and its dependencies into .debs 285 | if( $tarball ) { 286 | ### make sure we use an absolute path, so chdirs() dont 287 | ### mess things up 288 | $name = File::Spec->rel2abs( $name ); 289 | 290 | ### ENOTARBALL? 291 | unless( -e $name ) { 292 | warn loc("Archive '$name' does not exist"); 293 | next; 294 | } 295 | 296 | $obj = CPANPLUS::Module::Fake->new( 297 | module => basename($name), 298 | path => dirname($name), 299 | package => basename($name), 300 | ); 301 | 302 | ### if it's a traditional CPAN package, we can tidy 303 | ### up the module name some 304 | $obj->module( $obj->package_name ) if $obj->package_name; 305 | 306 | ### get the version from the package name 307 | $obj->version( $obj->package_version || 0 ); 308 | 309 | ### set the location of the tarball 310 | $obj->status->fetch($name); 311 | 312 | ### plain old cpan module? 313 | } else { 314 | 315 | ### find the corresponding module object ### 316 | $obj = $cb->parse_module( module => $name ) or ( 317 | warn "Cannot make a module object out of ". 318 | "'$name' -- skipping\n", 319 | next ); 320 | } 321 | 322 | ### you banned it? 323 | if( my $pat = ban_me( $obj ) ) { 324 | warn loc("'%1' found in your ban list (%2) -- skipping\n", 325 | $obj->module, $pat ); 326 | next; 327 | } 328 | 329 | ### or just ignored it? 330 | if( my $pat = ignore_me( $obj ) ) { 331 | warn loc("'%1' found in your ignore list (%2) -- skipping\n", 332 | $obj->module, $pat ); 333 | next; 334 | } 335 | 336 | 337 | my $target = $opts->{'install'} ? 'install' : 'create'; 338 | my $dist = eval { 339 | local $SIG{ALRM} = sub { die bless {}, ALARM_CLASS } 340 | if $timeout; 341 | 342 | alarm $timeout || 0; 343 | 344 | my $dist_opts = $opts->{'dist-opts'} || {}; 345 | 346 | my $rv = $obj->install( 347 | prereq_target => $target, 348 | target => $target, 349 | keep_source => $keep, 350 | prereq_build => $prereqbuild, 351 | 352 | ### any passed arbitrary options 353 | %$dist_opts, 354 | ); 355 | 356 | alarm 0; 357 | 358 | $rv; 359 | }; 360 | 361 | ### set here again, in case the install dies 362 | alarm 0; 363 | 364 | ### install failed due to a 'die' in our prereq skipper? 365 | if( $@ and ref $@ and $@->isa( PREREQ_SKIP_CLASS ) ) { 366 | warn loc("Dist creation of '%1' skipped: '%2'", 367 | $obj->module, $@->() ); 368 | next; 369 | 370 | } elsif ( $@ and ref $@ and $@->isa( ALARM_CLASS ) ) { 371 | warn loc("\nDist creation of '%1' skipped, build time exceeded: ". 372 | "%2 seconds\n", $obj->module, $timeout ); 373 | next; 374 | 375 | ### died for some other reason? just report and skip 376 | } elsif ( $@ ) { 377 | warn loc("Dist creation of '%1' failed: '%2'", 378 | $obj->module, $@ ); 379 | next; 380 | } 381 | 382 | ### we didn't get a dist object back? 383 | unless ($dist and $obj->status->dist) { 384 | warn loc("Unable to create '%1' dist of '%2'", $format, $obj->module); 385 | next 386 | } 387 | 388 | print "Created '$format' distribution for ", $obj->module, 389 | " to:\n\t", $obj->status->dist->status->dist, "\n"; 390 | } 391 | 392 | 393 | sub parse_file { 394 | my $file = shift or return; 395 | my $qr = shift() ? 1 : 0; 396 | 397 | my $fh = OPEN_FILE->( $file ) or return; 398 | 399 | my @rv; 400 | while( <$fh> ) { 401 | chomp; 402 | next if /^#/; # skip comments 403 | next unless /\S/; # skip empty lines 404 | s/^(\S+).*/$1/; # skip extra info 405 | push @rv, $qr ? qr/$_/ : $_; # add pattern to the list 406 | } 407 | 408 | return @rv; 409 | } 410 | 411 | =head1 NAME 412 | 413 | cpan2dist - The CPANPLUS distribution creator 414 | 415 | =head1 DESCRIPTION 416 | 417 | This script will create distributions of C modules of the format 418 | you specify, including its prerequisites. These packages can then be 419 | installed using the corresponding package manager for the format. 420 | 421 | Note, you can also do this interactively from the default shell, 422 | C. See the C documentation, 423 | as well as the documentation of your format of choice for any format 424 | specific documentation. 425 | 426 | =head1 USAGE 427 | 428 | =cut 429 | 430 | sub usage { 431 | my $me = basename($0); 432 | my $formats = join "\n", map { "\t\t$_" } sort keys %formats; 433 | 434 | my $usage = << '=cut'; 435 | =pod 436 | 437 | Usage: cpan2dist [--format FMT] [OPTS] Mod::Name [Mod::Name, ...] 438 | cpan2dist [--format FMT] [OPTS] --modulelist /tmp/mods.list 439 | cpan2dist [--format FMT] [OPTS] --archive /tmp/dist [/tmp/dist2] 440 | 441 | Will create a distribution of type FMT of the modules 442 | specified on the command line, and all their prerequisites. 443 | 444 | Can also create a distribution of type FMT from a local 445 | archive and all of its prerequisites. 446 | 447 | =cut 448 | 449 | $usage .= qq[ 450 | Possible formats are: 451 | $formats 452 | 453 | You can install more formats from CPAN! 454 | \n]; 455 | 456 | $usage .= << '=cut'; 457 | =pod 458 | 459 | Options: 460 | 461 | ### take no argument: 462 | --help Show this help message 463 | --install Install this package (and any prerequisites you built) 464 | after building it. 465 | --skiptest Skip tests. Can be negated using --noskiptest 466 | --force Force operation. Can be negated using --noforce 467 | --verbose Be verbose. Can be negated using --noverbose 468 | --keepsource Keep sources after building distribution. Can be 469 | negated by --nokeepsource. May not be supported 470 | by all formats 471 | --makefile Prefer Makefile.PL over Build.PL. Can be negated 472 | using --nomakefile. Defaults to your config setting 473 | --buildprereq Build packages of any prerequisites, even if they are 474 | already uptodate on the local system. Can be negated 475 | using --nobuildprereq. Defaults to false. 476 | --archive Indicate that all modules listed are actually archives 477 | --flushcache Update CPANPLUS' cache before commencing any operation 478 | --defaults Instruct ExtUtils::MakeMaker and Module::Build to use 479 | default answers during 'perl Makefile.PL' or 'perl 480 | Build.PL' calls where possible 481 | --edit-metafile Edit the distributions metafile(s) before the distribution 482 | is built. Requires a configured editor. 483 | 484 | ### take argument: 485 | --format Installer format to use (defaults to config setting) 486 | --ban Patterns of module names to skip during installation, 487 | case-insensitive (affects prerequisites too) 488 | May be given multiple times 489 | --banlist File containing patterns that could be given to --ban 490 | Are appended to the ban list built up by --ban 491 | May be given multiple times. 492 | --ignore Patterns of modules to exclude from prereq list. Useful 493 | for when a prereq listed by a CPAN module is resolved 494 | in another way than from its corresponding CPAN package 495 | (Match is done on both module name, and package name of 496 | the package the module is in, case-insensitive) 497 | --ignorelist File containing patterns that may be given to --ignore. 498 | Are appended to the ban list built up by --ignore. 499 | May be given multiple times. 500 | --modulelist File containing a list of modules that should be built. 501 | Are appended to the list of command line modules. 502 | May be given multiple times. 503 | --logfile File to log all output to. By default, all output goes 504 | to the console. 505 | --timeout The allowed time for buliding a distribution before 506 | aborting. This is useful to terminate any build that 507 | hang or happen to be interactive despite being told not 508 | to be. Defaults to 300 seconds. To turn off, you can 509 | set it to 0. 510 | --set-config Change any options as specified in your config for this 511 | invocation only. See CPANPLUS::Config for a list of 512 | supported options. 513 | --set-program Change any programs as specified in your config for this 514 | invocation only. See CPANPLUS::Config for a list of 515 | supported programs. 516 | --dist-opts Arbitrary options passed along to the chosen installer 517 | format's prepare()/create() routine. Please see the 518 | documentation of the installer of your choice for 519 | options it accepts. 520 | 521 | ### builtin lists 522 | --default-banlist Use our builtin banlist. Works just like --ban 523 | and --banlist, but with pre-set lists. See the 524 | "Builtin Lists" section for details. 525 | --default-ignorelist Use our builtin ignorelist. Works just like 526 | --ignore and --ignorelist but with pre-set lists. 527 | See the "Builtin Lists" section for details. 528 | 529 | Examples: 530 | 531 | ### build a debian package of DBI and its prerequisites, 532 | ### don't bother running tests 533 | cpan2dist --format CPANPLUS::Dist::Deb --buildprereq --skiptest DBI 534 | 535 | ### build a debian package of DBI and its prerequisites and install them 536 | cpan2dist --format CPANPLUS::Dist::Deb --buildprereq --install DBI 537 | 538 | ### Build a package, whose format is determined by your config, of 539 | ### the local tarball, reloading cpanplus' indices first and using 540 | ### the tarballs Makefile.PL if it has one. 541 | cpan2dist --makefile --flushcache --archive /path/to/Cwd-1.0.tgz 542 | 543 | ### build a package from Net::FTP, but dont build any packages or 544 | ### dependencies whose name match 'Foo', 'Bar' or any of the 545 | ### patterns mentioned in /tmp/ban 546 | cpan2dist --ban Foo --ban Bar --banlist /tmp/ban Net::FTP 547 | 548 | ### build a package from Net::FTP, but ignore its listed dependency 549 | ### on IO::Socket, as it's shipped per default with the OS we're on 550 | cpan2dist --ignore IO::Socket Net::FTP 551 | 552 | ### building all modules listed, plus their prerequisites 553 | cpan2dist --ignorelist /tmp/modules.ignore --banlist /tmp/modules.ban 554 | --modulelist /tmp/modules.list --buildprereq --flushcache 555 | --makefile --defaults 556 | 557 | ### pass arbitrary options to the format's prepare()/create() routine 558 | cpan2dist --dist-opts deb_version=3 --dist-opts prefix=corp 559 | 560 | =cut 561 | 562 | $usage .= qq[ 563 | Builtin Lists: 564 | 565 | Ignore list:] . _default_ignore_list() . qq[ 566 | Ban list:] . _default_ban_list(); 567 | 568 | ### strip the pod directives 569 | $usage =~ s/=pod\n//g; 570 | 571 | return $usage; 572 | } 573 | 574 | =pod 575 | 576 | =head1 Built-In Filter Lists 577 | 578 | Some modules you'd rather not package. Some because they 579 | are part of core-perl and you dont want a new package. 580 | Some because they won't build on your system. Some because 581 | your package manager of choice already packages them for you. 582 | 583 | There may be a myriad of reasons. You can use the C<--ignore> 584 | and C<--ban> options for this, but we provide some built-in 585 | lists that catch common cases. You can use these built-in lists 586 | if you like, or supply your own if need be. 587 | 588 | =head2 Built-In Ignore List 589 | 590 | =pod 591 | 592 | You can use this list of regexes to ignore modules matching 593 | to be listed as prerequisites of a package. Particularly useful 594 | if they are bundled with core-perl anyway and they have known 595 | issues building. 596 | 597 | Toggle it by supplying the C<--default-ignorelist> option. 598 | 599 | =cut 600 | 601 | sub _default_ignore_list { 602 | 603 | my $list = << '=cut'; 604 | =pod 605 | 606 | ^IO$ # Provided with core anyway 607 | ^Cwd$ # Provided with core anyway 608 | ^File::Spec # Provided with core anyway 609 | ^Config$ # Perl's own config, not shipped separately 610 | ^ExtUtils::MakeMaker$ # Shipped with perl, recent versions 611 | # have bug 14721 (see rt.cpan.org) 612 | ^ExtUtils::Install$ # Part of of EU::MM, same reason 613 | 614 | =cut 615 | 616 | return $list; 617 | } 618 | 619 | =head2 Built-In Ban list 620 | 621 | You can use this list of regexes to disable building of these 622 | modules altogether. 623 | 624 | Toggle it by supplying the C<--default-banlist> option. 625 | 626 | =cut 627 | 628 | sub _default_ban_list { 629 | 630 | my $list = << '=cut'; 631 | =pod 632 | 633 | ^GD$ # Needs c libaries 634 | ^Berk.*DB # DB packages require specific options & linking 635 | ^DBD:: # DBD drivers require database files/headers 636 | ^XML:: # XML modules usually require expat libraries 637 | Apache # These usually require apache libraries 638 | SSL # These usually require SSL certificates & libs 639 | Image::Magick # Needs ImageMagick C libraries 640 | Mail::ClamAV # Needs ClamAV C Libraries 641 | ^Verilog # Needs Verilog C Libraries 642 | ^Authen::PAM$ # Needs PAM C libraries & Headers 643 | 644 | =cut 645 | 646 | return $list; 647 | } 648 | 649 | __END__ 650 | 651 | =head1 SEE ALSO 652 | 653 | L, L, L, 654 | C 655 | 656 | =head1 BUG REPORTS 657 | 658 | Please report bugs or other issues to Ebug-cpanplus@rt.cpan.org. 659 | 660 | =head1 AUTHOR 661 | 662 | This module by Jos Boumans Ekane@cpan.orgE. 663 | 664 | =head1 COPYRIGHT 665 | 666 | The CPAN++ interface (of which this module is a part of) is copyright (c) 667 | 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. 668 | 669 | This library is free software; you may redistribute and/or modify it 670 | under the same terms as Perl itself. 671 | 672 | =cut 673 | 674 | # Local variables: 675 | # c-indentation-style: bsd 676 | # c-basic-offset: 4 677 | # indent-tabs-mode: nil 678 | # End: 679 | # vim: expandtab shiftwidth=4: 680 | -------------------------------------------------------------------------------- /src/perl/patch-files/perl-5.14.2/cpan/CPANPLUS/lib/CPANPLUS/Internals.pm: -------------------------------------------------------------------------------- 1 | package CPANPLUS::Internals; 2 | 3 | ### we /need/ perl5.6.1 or higher -- we use coderefs in @INC, 4 | ### and 5.6.0 is just too buggy 5 | use 5.006001; 6 | 7 | use strict; 8 | use Config; 9 | 10 | 11 | use CPANPLUS::Error; 12 | 13 | use CPANPLUS::Selfupdate; 14 | 15 | use CPANPLUS::Internals::Extract; 16 | use CPANPLUS::Internals::Fetch; 17 | use CPANPLUS::Internals::Utils; 18 | use CPANPLUS::Internals::Constants; 19 | use CPANPLUS::Internals::Search; 20 | use CPANPLUS::Internals::Report; 21 | 22 | 23 | require base; 24 | use Cwd qw[cwd]; 25 | use Module::Load qw[load]; 26 | use Params::Check qw[check]; 27 | use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; 28 | use Module::Load::Conditional qw[can_load]; 29 | 30 | use Object::Accessor; 31 | 32 | 33 | local $Params::Check::VERBOSE = 1; 34 | 35 | use vars qw[@ISA $VERSION]; 36 | 37 | @ISA = qw[ 38 | CPANPLUS::Internals::Extract 39 | CPANPLUS::Internals::Fetch 40 | CPANPLUS::Internals::Utils 41 | CPANPLUS::Internals::Search 42 | CPANPLUS::Internals::Report 43 | ]; 44 | 45 | $VERSION = "0.9103"; 46 | 47 | =pod 48 | 49 | =head1 NAME 50 | 51 | CPANPLUS::Internals 52 | 53 | =head1 SYNOPSIS 54 | 55 | my $internals = CPANPLUS::Internals->_init( _conf => $conf ); 56 | my $backend = CPANPLUS::Internals->_retrieve_id( $ID ); 57 | 58 | =head1 DESCRIPTION 59 | 60 | This module is the guts of CPANPLUS -- it inherits from all other 61 | modules in the CPANPLUS::Internals::* namespace, thus defying normal 62 | rules of OO programming -- but if you're reading this, you already 63 | know what's going on ;) 64 | 65 | Please read the C documentation for the normal API. 66 | 67 | =head1 ACCESSORS 68 | 69 | =over 4 70 | 71 | =item _conf 72 | 73 | Get/set the configure object 74 | 75 | =item _id 76 | 77 | Get/set the id 78 | 79 | =cut 80 | 81 | ### autogenerate accessors ### 82 | for my $key ( qw[_conf _id _modules _hosts _methods _status 83 | _callbacks _selfupdate _mtree _atree] 84 | ) { 85 | no strict 'refs'; 86 | *{__PACKAGE__."::$key"} = sub { 87 | $_[0]->{$key} = $_[1] if @_ > 1; 88 | return $_[0]->{$key}; 89 | } 90 | } 91 | 92 | =pod 93 | 94 | =back 95 | 96 | =head1 METHODS 97 | 98 | =head2 $internals = CPANPLUS::Internals->_init( _conf => CONFIG_OBJ ) 99 | 100 | C<_init> creates a new CPANPLUS::Internals object. 101 | 102 | You have to pass it a valid C object. 103 | 104 | Returns the object on success, or dies on failure. 105 | 106 | =cut 107 | 108 | { ### NOTE: 109 | ### if extra callbacks are added, don't forget to update the 110 | ### 02-internals.t test script with them! 111 | my $callback_map = { 112 | ### name default value 113 | install_prerequisite => 1, # install prereqs when 'ask' is set? 114 | edit_test_report => 0, # edit the prepared test report? 115 | send_test_report => 1, # send the test report? 116 | # munge the test report 117 | munge_test_report => sub { return $_[1] }, 118 | # filter out unwanted prereqs 119 | filter_prereqs => sub { return $_[1] }, 120 | ignore_me => sub { return $_[1] }, 121 | # continue if 'make test' fails? 122 | proceed_on_test_failure => sub { return 0 }, 123 | munge_dist_metafile => sub { return $_[1] }, 124 | }; 125 | 126 | my $status = Object::Accessor->new; 127 | $status->mk_accessors(qw[pending_prereqs]); 128 | 129 | my $callback = Object::Accessor->new; 130 | $callback->mk_accessors(keys %$callback_map); 131 | 132 | my $conf; 133 | my $Tmpl = { 134 | _conf => { required => 1, store => \$conf, 135 | allow => IS_CONFOBJ }, 136 | _id => { default => '', no_override => 1 }, 137 | _authortree => { default => '', no_override => 1 }, 138 | _modtree => { default => '', no_override => 1 }, 139 | _hosts => { default => {}, no_override => 1 }, 140 | _methods => { default => {}, no_override => 1 }, 141 | _status => { default => '', no_override => 1 }, 142 | _callbacks => { default => '', no_override => 1 }, 143 | }; 144 | 145 | sub _init { 146 | my $class = shift; 147 | my %hash = @_; 148 | 149 | ### temporary warning until we fix the storing of multiple id's 150 | ### and their serialization: 151 | ### probably not going to happen --kane 152 | if( my $id = $class->_last_id ) { 153 | # make it a singleton. 154 | warn loc(q[%1 currently only supports one %2 object per ] . 155 | qq[running program\n], 'CPANPLUS', $class); 156 | 157 | return $class->_retrieve_id( $id ); 158 | } 159 | 160 | my $args = check($Tmpl, \%hash) 161 | or die loc(qq[Could not initialize '%1' object], $class); 162 | 163 | bless $args, $class; 164 | 165 | $args->{'_id'} = $args->_inc_id; 166 | $args->{'_status'} = $status; 167 | $args->{'_callbacks'} = $callback; 168 | 169 | ### initialize callbacks to default state ### 170 | for my $name ( $callback->ls_accessors ) { 171 | my $rv = ref $callback_map->{$name} ? 'sub return value' : 172 | $callback_map->{$name} ? 'true' : 'false'; 173 | 174 | $args->_callbacks->$name( 175 | sub { msg(loc("DEFAULT '%1' HANDLER RETURNING '%2'", 176 | $name, $rv), $args->_conf->get_conf('debug')); 177 | return ref $callback_map->{$name} 178 | ? $callback_map->{$name}->( @_ ) 179 | : $callback_map->{$name}; 180 | } 181 | ); 182 | } 183 | 184 | ### create a selfupdate object 185 | $args->_selfupdate( CPANPLUS::Selfupdate->new( $args ) ); 186 | 187 | ### initialize it as an empty hashref ### 188 | $args->_status->pending_prereqs( {} ); 189 | 190 | $conf->_set_build( startdir => cwd() ), 191 | or error( loc("couldn't locate current dir!") ); 192 | 193 | $ENV{FTP_PASSIVE} = 1, if $conf->get_conf('passive'); 194 | 195 | my $id = $args->_store_id( $args ); 196 | 197 | unless ( $id == $args->_id ) { 198 | error( loc("IDs do not match: %1 != %2. Storage failed!", 199 | $id, $args->_id) ); 200 | } 201 | 202 | ### different source engines available now, so set them here 203 | { my $store = $conf->get_conf( 'source_engine' ) 204 | || DEFAULT_SOURCE_ENGINE; 205 | 206 | unless( can_load( modules => { $store => '0.0' }, verbose => 1 ) ) { 207 | error( loc( "Could not load source engine '%1'", $store ) ); 208 | 209 | if( $store ne DEFAULT_SOURCE_ENGINE ) { 210 | msg( loc("Falling back to %1", DEFAULT_SOURCE_ENGINE), 1 ); 211 | 212 | load DEFAULT_SOURCE_ENGINE; 213 | 214 | base->import( DEFAULT_SOURCE_ENGINE ); 215 | } else { 216 | return; 217 | } 218 | } else { 219 | base->import( $store ); 220 | } 221 | } 222 | 223 | return $args; 224 | } 225 | 226 | =pod 227 | 228 | =head2 $bool = $internals->_flush( list => \@caches ) 229 | 230 | Flushes the designated caches from the C object. 231 | 232 | Returns true on success, false if one or more caches could not be 233 | be flushed. 234 | 235 | =cut 236 | 237 | sub _flush { 238 | my $self = shift; 239 | my $conf = $self->configure_object; 240 | my %hash = @_; 241 | 242 | my $aref; 243 | my $tmpl = { 244 | list => { required => 1, default => [], 245 | strict_type => 1, store => \$aref }, 246 | }; 247 | 248 | my $args = check( $tmpl, \%hash ) or return; 249 | 250 | my $flag = 0; 251 | for my $what (@$aref) { 252 | my $cache = '_' . $what; 253 | 254 | ### set the include paths back to their original ### 255 | if( $what eq 'lib' ) { 256 | $ENV{PERL5LIB} = $conf->_perl5lib || ''; 257 | @INC = @{$conf->_lib}; 258 | 259 | ### give all modules a new status object -- this is slightly 260 | ### costly, but the best way to make sure all statuses are 261 | ### forgotten --kane 262 | } elsif ( $what eq 'modules' ) { 263 | for my $modobj ( values %{$self->module_tree} ) { 264 | 265 | $modobj->_flush; 266 | } 267 | 268 | ### blow away the methods cache... currently, that's only 269 | ### File::Fetch's method fail list 270 | } elsif ( $what eq 'methods' ) { 271 | 272 | ### still fucking p4 :( ### 273 | $File'Fetch::METHOD_FAIL = $File'Fetch::METHOD_FAIL = {}; 274 | 275 | ### blow away the m::l::c cache, so modules can be (re)loaded 276 | ### again if they become available 277 | } elsif ( $what eq 'load' ) { 278 | undef $Module::Load::Conditional::CACHE; 279 | 280 | } else { 281 | unless ( exists $self->{$cache} && exists $Tmpl->{$cache} ) { 282 | error( loc( "No such cache: '%1'", $what ) ); 283 | $flag++; 284 | next; 285 | } else { 286 | $self->$cache( {} ); 287 | } 288 | } 289 | } 290 | return !$flag; 291 | } 292 | 293 | ### NOTE: 294 | ### if extra callbacks are added, don't forget to update the 295 | ### 02-internals.t test script with them! 296 | 297 | =pod 298 | 299 | =head2 $bool = $internals->_register_callback( name => CALLBACK_NAME, code => CODEREF ); 300 | 301 | Registers a callback for later use by the internal libraries. 302 | 303 | Here is a list of the currently used callbacks: 304 | 305 | =over 4 306 | 307 | =item install_prerequisite 308 | 309 | Is called when the user wants to be C about what to do with 310 | prerequisites. Should return a boolean indicating true to install 311 | the prerequisite and false to skip it. 312 | 313 | =item send_test_report 314 | 315 | Is called when the user should be prompted if he wishes to send the 316 | test report. Should return a boolean indicating true to send the 317 | test report and false to skip it. 318 | 319 | =item munge_test_report 320 | 321 | Is called when the test report message has been composed, giving 322 | the user a chance to programatically alter it. Should return the 323 | (munged) message to be sent. 324 | 325 | =item edit_test_report 326 | 327 | Is called when the user should be prompted to edit test reports 328 | about to be sent out by Test::Reporter. Should return a boolean 329 | indicating true to edit the test report in an editor and false 330 | to skip it. 331 | 332 | =item proceed_on_test_failure 333 | 334 | Is called when 'make test' or 'Build test' fails. Should return 335 | a boolean indicating whether the install should continue even if 336 | the test failed. 337 | 338 | =item munge_dist_metafile 339 | 340 | Is called when the C metafile is created, like 341 | C for C, giving the user a chance to 342 | programatically alter it. Should return the (munged) text to be 343 | written to the metafile. 344 | 345 | =back 346 | 347 | =cut 348 | 349 | sub _register_callback { 350 | my $self = shift or return; 351 | my %hash = @_; 352 | 353 | my ($name,$code); 354 | my $tmpl = { 355 | name => { required => 1, store => \$name, 356 | allow => [$callback->ls_accessors] }, 357 | code => { required => 1, allow => IS_CODEREF, 358 | store => \$code }, 359 | }; 360 | 361 | check( $tmpl, \%hash ) or return; 362 | 363 | $self->_callbacks->$name( $code ) or return; 364 | 365 | return 1; 366 | } 367 | 368 | # =head2 $bool = $internals->_add_callback( name => CALLBACK_NAME, code => CODEREF ); 369 | # 370 | # Adds a new callback to be used from anywhere in the system. If the callback 371 | # is already known, an error is raised and false is returned. If the callback 372 | # is not yet known, it is added, and the corresponding coderef is registered 373 | # using the 374 | # 375 | # =cut 376 | # 377 | # sub _add_callback { 378 | # my $self = shift or return; 379 | # my %hash = @_; 380 | # 381 | # my ($name,$code); 382 | # my $tmpl = { 383 | # name => { required => 1, store => \$name, }, 384 | # code => { required => 1, allow => IS_CODEREF, 385 | # store => \$code }, 386 | # }; 387 | # 388 | # check( $tmpl, \%hash ) or return; 389 | # 390 | # if( $callback->can( $name ) ) { 391 | # error(loc("Callback '%1' is already registered")); 392 | # return; 393 | # } 394 | # 395 | # $callback->mk_accessor( $name ); 396 | # 397 | # $self->_register_callback( name => $name, code => $code ) or return; 398 | # 399 | # return 1; 400 | # } 401 | 402 | } 403 | 404 | =pod 405 | 406 | =head2 $bool = $internals->_add_to_includepath( directories => \@dirs ) 407 | 408 | Adds a list of directories to the include path. 409 | This means they get added to C<@INC> as well as C<$ENV{PERL5LIB}>. 410 | 411 | Returns true on success, false on failure. 412 | 413 | =cut 414 | 415 | sub _add_to_includepath { 416 | my $self = shift; 417 | my %hash = @_; 418 | 419 | my $dirs; 420 | my $tmpl = { 421 | directories => { required => 1, default => [], store => \$dirs, 422 | strict_type => 1 }, 423 | }; 424 | 425 | check( $tmpl, \%hash ) or return; 426 | 427 | my $s = $Config{'path_sep'}; 428 | 429 | ### only add if it's not added yet 430 | for my $lib (@$dirs) { 431 | push @INC, $lib unless grep { $_ eq $lib } @INC; 432 | # 433 | ### it will be complaining if $ENV{PERL5LIB] is not defined (yet). 434 | local $^W; 435 | $ENV{'PERL5LIB'} .= $s . $lib 436 | unless $ENV{'PERL5LIB'} =~ qr|\Q$s$lib\E|; 437 | } 438 | 439 | return 1; 440 | } 441 | 442 | =pod 443 | 444 | =head2 $id = CPANPLUS::Internals->_last_id 445 | 446 | Return the id of the last object stored. 447 | 448 | =head2 $id = CPANPLUS::Internals->_store_id( $internals ) 449 | 450 | Store this object; return its id. 451 | 452 | =head2 $obj = CPANPLUS::Internals->_retrieve_id( $ID ) 453 | 454 | Retrieve an object based on its ID -- return false on error. 455 | 456 | =head2 CPANPLUS::Internals->_remove_id( $ID ) 457 | 458 | Remove the object marked by $ID from storage. 459 | 460 | =head2 @objs = CPANPLUS::Internals->_return_all_objects 461 | 462 | Return all stored objects. 463 | 464 | =cut 465 | 466 | 467 | ### code for storing multiple objects 468 | ### -- although we only support one right now 469 | ### XXX when support for multiple objects comes, saving source will have 470 | ### to change 471 | { 472 | my $idref = {}; 473 | my $count = 0; 474 | 475 | sub _inc_id { return ++$count; } 476 | 477 | sub _last_id { $count } 478 | 479 | sub _store_id { 480 | my $self = shift; 481 | my $obj = shift or return; 482 | 483 | unless( IS_INTERNALS_OBJ->($obj) ) { 484 | error( loc("The object you passed has the wrong ref type: '%1'", 485 | ref $obj) ); 486 | return; 487 | } 488 | 489 | $idref->{ $obj->_id } = $obj; 490 | return $obj->_id; 491 | } 492 | 493 | sub _retrieve_id { 494 | my $self = shift; 495 | my $id = shift or return; 496 | 497 | my $obj = $idref->{$id}; 498 | return $obj; 499 | } 500 | 501 | sub _remove_id { 502 | my $self = shift; 503 | my $id = shift or return; 504 | 505 | return delete $idref->{$id}; 506 | } 507 | 508 | sub _return_all_objects { return values %$idref } 509 | } 510 | 511 | 1; 512 | 513 | # Local variables: 514 | # c-indentation-style: bsd 515 | # c-basic-offset: 4 516 | # indent-tabs-mode: nil 517 | # End: 518 | # vim: expandtab shiftwidth=4: 519 | -------------------------------------------------------------------------------- /src/perl/provides-5.26.0: -------------------------------------------------------------------------------- 1 | opt-perl(:MODULE_COMPAT_5.26.0) 2 | opt-perl(AnyDBM_File) = 1.01 3 | opt-perl(App::Cpan) = 1.66 4 | opt-perl(App::Prove) = 3.38 5 | opt-perl(App::Prove::State) = 3.38 6 | opt-perl(App::Prove::State::Result) = 3.38 7 | opt-perl(App::Prove::State::Result::Test) = 3.38 8 | opt-perl(Archive::Tar) = 2.24 9 | opt-perl(Archive::Tar::Constant) = 2.24 10 | opt-perl(Archive::Tar::File) = 2.24 11 | opt-perl(Attribute::Handlers) = 0.99 12 | opt-perl(AutoLoader) = 5.74 13 | opt-perl(AutoSplit) = 1.06 14 | opt-perl(B) = 1.68 15 | opt-perl(B::Concise) = 0.999 16 | opt-perl(B::Debug) = 1.24 17 | opt-perl(B::Deparse) = 1.40 18 | opt-perl(B::OBJECT) 19 | opt-perl(B::Op_private) = 5.026000 20 | opt-perl(B::Showlex) = 1.05 21 | opt-perl(B::Terse) = 1.07 22 | opt-perl(B::Xref) = 1.06 23 | opt-perl(Benchmark) = 1.22 24 | opt-perl(CPAN) = 2.18 25 | opt-perl(CPAN::Author) = 5.5002 26 | opt-perl(CPAN::Bundle) = 5.5003 27 | opt-perl(CPAN::CacheMgr) = 5.5002 28 | opt-perl(CPAN::Complete) = 5.5001 29 | opt-perl(CPAN::Debug) = 5.5001 30 | opt-perl(CPAN::DeferredCode) = 5.50 31 | opt-perl(CPAN::Distribution) = 2.18 32 | opt-perl(CPAN::Distroprefs) = 6.0001 33 | opt-perl(CPAN::Distroprefs::Iterator) 34 | opt-perl(CPAN::Distroprefs::Pref) 35 | opt-perl(CPAN::Distroprefs::Result) 36 | opt-perl(CPAN::Distroprefs::Result::Error) 37 | opt-perl(CPAN::Distroprefs::Result::Fatal) 38 | opt-perl(CPAN::Distroprefs::Result::Success) 39 | opt-perl(CPAN::Distroprefs::Result::Warning) 40 | opt-perl(CPAN::Distrostatus) = 5.5 41 | opt-perl(CPAN::Eval) 42 | opt-perl(CPAN::Exception::RecursiveDependency) = 5.5001 43 | opt-perl(CPAN::Exception::RecursiveDependency::na) 44 | opt-perl(CPAN::Exception::blocked_urllist) = 1.001 45 | opt-perl(CPAN::Exception::yaml_not_installed) = 5.5 46 | opt-perl(CPAN::Exception::yaml_process_error) = 5.5 47 | opt-perl(CPAN::FTP) = 5.5008 48 | opt-perl(CPAN::FTP::netrc) = 1.01 49 | opt-perl(CPAN::FirstTime) = 5.5310 50 | opt-perl(CPAN::HTTP::Client) = 1.9601 51 | opt-perl(CPAN::HTTP::Credentials) = 1.9601 52 | opt-perl(CPAN::HandleConfig) = 5.5008 53 | opt-perl(CPAN::Index) = 2.12 54 | opt-perl(CPAN::InfoObj) = 5.5 55 | opt-perl(CPAN::Kwalify) = 5.50 56 | opt-perl(CPAN::LWP::UserAgent) = 1.9601 57 | opt-perl(CPAN::Meta) = 2.150010 58 | opt-perl(CPAN::Meta::Converter) = 2.150010 59 | opt-perl(CPAN::Meta::Feature) = 2.150010 60 | opt-perl(CPAN::Meta::History) = 2.150010 61 | opt-perl(CPAN::Meta::Merge) = 2.150010 62 | opt-perl(CPAN::Meta::Prereqs) = 2.150010 63 | opt-perl(CPAN::Meta::Requirements) = 2.140 64 | opt-perl(CPAN::Meta::Spec) = 2.150010 65 | opt-perl(CPAN::Meta::Validator) = 2.150010 66 | opt-perl(CPAN::Meta::YAML) = 0.018 67 | opt-perl(CPAN::Mirrored::By) 68 | opt-perl(CPAN::Mirrors) = 2.12 69 | opt-perl(CPAN::Module) = 5.5003 70 | opt-perl(CPAN::Nox) = 5.5001 71 | opt-perl(CPAN::Plugin) = 0.96 72 | opt-perl(CPAN::Plugin::Specfile) = 0.01 73 | opt-perl(CPAN::Prompt) = 5.5 74 | opt-perl(CPAN::Queue) = 5.5002 75 | opt-perl(CPAN::Queue::Item) 76 | opt-perl(CPAN::Shell) = 5.5006 77 | opt-perl(CPAN::Tarzip) = 5.5012 78 | opt-perl(CPAN::URL) = 5.5 79 | opt-perl(CPAN::Version) = 5.5003 80 | opt-perl(Carp) = 1.42 81 | opt-perl(Carp::Heavy) = 1.42 82 | opt-perl(Class::Struct) = 0.65 83 | opt-perl(Class::Struct::Tie_ISA) 84 | opt-perl(Compress::Raw::Bzip2) = 2.074 85 | opt-perl(Compress::Raw::Zlib) = 2.074 86 | opt-perl(Compress::Zlib) = 2.074 87 | opt-perl(Config) = 5.026000 88 | opt-perl(Config::Extensions) = 0.01 89 | opt-perl(Config::Perl::V) = 0.28 90 | opt-perl(Cwd) = 3.67 91 | opt-perl(DB) 92 | opt-perl(DB) = 1.08 93 | opt-perl(DBM_Filter) = 0.06 94 | opt-perl(DBM_Filter::compress) = 0.03 95 | opt-perl(DBM_Filter::encode) = 0.03 96 | opt-perl(DBM_Filter::int32) = 0.03 97 | opt-perl(DBM_Filter::null) = 0.03 98 | opt-perl(DBM_Filter::utf8) = 0.03 99 | opt-perl(DB_File) = 1.840 100 | opt-perl(DB_File::BTREEINFO) 101 | opt-perl(DB_File::HASHINFO) 102 | opt-perl(DB_File::RECNOINFO) 103 | opt-perl(Data::Dumper) = 2.167 104 | opt-perl(Devel::PPPort) = 3.35 105 | opt-perl(Devel::Peek) = 1.26 106 | opt-perl(Devel::SelfStubber) = 1.06 107 | opt-perl(Digest) = 1.17 108 | opt-perl(Digest::MD5) = 2.55 109 | opt-perl(Digest::SHA) = 5.96 110 | opt-perl(Digest::base) = 1.16 111 | opt-perl(Digest::file) = 1.16 112 | opt-perl(DirHandle) = 1.04 113 | opt-perl(Dumpvalue) = 1.18 114 | opt-perl(DynaLoader) 115 | opt-perl(DynaLoader) = 1.42 116 | opt-perl(EVERY::LAST) 117 | opt-perl(Encode) = 2.88 118 | opt-perl(Encode::Alias) = 2.21 119 | opt-perl(Encode::Byte) = 2.4 120 | opt-perl(Encode::CJKConstants) = 2.2 121 | opt-perl(Encode::CN) = 2.3 122 | opt-perl(Encode::CN::HZ) = 2.8 123 | opt-perl(Encode::Config) = 2.5 124 | opt-perl(Encode::EBCDIC) = 2.2 125 | opt-perl(Encode::Encoder) = 2.3 126 | opt-perl(Encode::Encoding) = 2.7 127 | opt-perl(Encode::GSM0338) = 2.5 128 | opt-perl(Encode::Guess) = 2.6 129 | opt-perl(Encode::Internal) 130 | opt-perl(Encode::JP) = 2.4 131 | opt-perl(Encode::JP::H2Z) = 2.2 132 | opt-perl(Encode::JP::JIS7) = 2.5 133 | opt-perl(Encode::KR) = 2.3 134 | opt-perl(Encode::KR::2022_KR) = 2.3 135 | opt-perl(Encode::MIME::Header) = 2.24 136 | opt-perl(Encode::MIME::Header::ISO_2022_JP) = 1.7 137 | opt-perl(Encode::MIME::Name) = 1.2 138 | opt-perl(Encode::Symbol) = 2.2 139 | opt-perl(Encode::TW) = 2.3 140 | opt-perl(Encode::UTF_EBCDIC) 141 | opt-perl(Encode::Unicode) = 2.15 142 | opt-perl(Encode::Unicode::UTF7) = 2.8 143 | opt-perl(Encode::XS) 144 | opt-perl(Encode::utf8) 145 | opt-perl(English) = 1.10 146 | opt-perl(Env) = 1.04 147 | opt-perl(Env::Array) 148 | opt-perl(Env::Array::VMS) 149 | opt-perl(Errno) = 1.28 150 | opt-perl(Exporter) = 5.72 151 | opt-perl(Exporter::Heavy) 152 | opt-perl(ExtUtils::CBuilder) = 0.280225 153 | opt-perl(ExtUtils::CBuilder::Base) = 0.280225 154 | opt-perl(ExtUtils::CBuilder::Platform::Unix) = 0.280225 155 | opt-perl(ExtUtils::CBuilder::Platform::VMS) = 0.280225 156 | opt-perl(ExtUtils::CBuilder::Platform::Windows) = 0.280225 157 | opt-perl(ExtUtils::CBuilder::Platform::Windows::BCC) = 0.280225 158 | opt-perl(ExtUtils::CBuilder::Platform::Windows::GCC) = 0.280225 159 | opt-perl(ExtUtils::CBuilder::Platform::Windows::MSVC) = 0.280225 160 | opt-perl(ExtUtils::CBuilder::Platform::aix) = 0.280225 161 | opt-perl(ExtUtils::CBuilder::Platform::android) = 0.280225 162 | opt-perl(ExtUtils::CBuilder::Platform::cygwin) = 0.280225 163 | opt-perl(ExtUtils::CBuilder::Platform::darwin) = 0.280225 164 | opt-perl(ExtUtils::CBuilder::Platform::dec_osf) = 0.280225 165 | opt-perl(ExtUtils::CBuilder::Platform::os2) = 0.280225 166 | opt-perl(ExtUtils::Command) = 7.24 167 | opt-perl(ExtUtils::Command::MM) = 7.24 168 | opt-perl(ExtUtils::Constant) = 0.23 169 | opt-perl(ExtUtils::Constant::Base) = 0.05 170 | opt-perl(ExtUtils::Constant::ProxySubs) = 0.08 171 | opt-perl(ExtUtils::Constant::Utils) = 0.03 172 | opt-perl(ExtUtils::Constant::XS) = 0.03 173 | opt-perl(ExtUtils::Embed) = 1.34 174 | opt-perl(ExtUtils::Install) = 2.04 175 | opt-perl(ExtUtils::Install::Warn) 176 | opt-perl(ExtUtils::Installed) = 2.04 177 | opt-perl(ExtUtils::Liblist) = 7.24 178 | opt-perl(ExtUtils::Liblist::Kid) = 7.24 179 | opt-perl(ExtUtils::MM) = 7.24 180 | opt-perl(ExtUtils::MM_AIX) = 7.24 181 | opt-perl(ExtUtils::MM_Any) = 7.24 182 | opt-perl(ExtUtils::MM_BeOS) = 7.24 183 | opt-perl(ExtUtils::MM_Cygwin) = 7.24 184 | opt-perl(ExtUtils::MM_DOS) = 7.24 185 | opt-perl(ExtUtils::MM_Darwin) = 7.24 186 | opt-perl(ExtUtils::MM_MacOS) = 7.24 187 | opt-perl(ExtUtils::MM_NW5) = 7.24 188 | opt-perl(ExtUtils::MM_OS2) = 7.24 189 | opt-perl(ExtUtils::MM_QNX) = 7.24 190 | opt-perl(ExtUtils::MM_UWIN) = 7.24 191 | opt-perl(ExtUtils::MM_Unix) = 7.24 192 | opt-perl(ExtUtils::MM_VMS) = 7.24 193 | opt-perl(ExtUtils::MM_VOS) = 7.24 194 | opt-perl(ExtUtils::MM_Win32) = 7.24 195 | opt-perl(ExtUtils::MM_Win95) = 7.24 196 | opt-perl(ExtUtils::MY) = 7.24 197 | opt-perl(ExtUtils::MakeMaker) = 7.24 198 | opt-perl(ExtUtils::MakeMaker::Config) = 7.24 199 | opt-perl(ExtUtils::MakeMaker::Locale) = 7.24 200 | opt-perl(ExtUtils::MakeMaker::_version) 201 | opt-perl(ExtUtils::MakeMaker::version) = 7.24 202 | opt-perl(ExtUtils::Manifest) = 1.70 203 | opt-perl(ExtUtils::Miniperl) = 1.06 204 | opt-perl(ExtUtils::Mkbootstrap) = 7.24 205 | opt-perl(ExtUtils::Mksymlists) = 7.24 206 | opt-perl(ExtUtils::Packlist) = 2.04 207 | opt-perl(ExtUtils::ParseXS) = 3.34 208 | opt-perl(ExtUtils::ParseXS::Constants) = 3.34 209 | opt-perl(ExtUtils::ParseXS::CountLines) = 3.34 210 | opt-perl(ExtUtils::ParseXS::Eval) = 3.34 211 | opt-perl(ExtUtils::ParseXS::Utilities) = 3.34 212 | opt-perl(ExtUtils::Typemaps) = 3.34 213 | opt-perl(ExtUtils::Typemaps::Cmd) = 3.34 214 | opt-perl(ExtUtils::Typemaps::InputMap) = 3.34 215 | opt-perl(ExtUtils::Typemaps::OutputMap) = 3.34 216 | opt-perl(ExtUtils::Typemaps::Type) = 3.34 217 | opt-perl(ExtUtils::testlib) = 7.24 218 | opt-perl(Fatal) = 2.29 219 | opt-perl(Fcntl) = 1.13 220 | opt-perl(File::Basename) = 2.85 221 | opt-perl(File::Compare) = 1.1006 222 | opt-perl(File::Copy) = 2.32 223 | opt-perl(File::DosGlob) = 1.12 224 | opt-perl(File::Fetch) = 0.52 225 | opt-perl(File::Find) = 1.34 226 | opt-perl(File::Glob) = 1.28 227 | opt-perl(File::GlobMapper) = 1.000 228 | opt-perl(File::Path) = 2.12 229 | opt-perl(File::Spec) = 3.67 230 | opt-perl(File::Spec::AmigaOS) = 3.67 231 | opt-perl(File::Spec::Cygwin) = 3.67 232 | opt-perl(File::Spec::Epoc) = 3.67 233 | opt-perl(File::Spec::Functions) = 3.67 234 | opt-perl(File::Spec::Mac) = 3.67 235 | opt-perl(File::Spec::OS2) = 3.67 236 | opt-perl(File::Spec::Unix) = 3.67 237 | opt-perl(File::Spec::VMS) = 3.67 238 | opt-perl(File::Spec::Win32) = 3.67 239 | opt-perl(File::Temp) = 0.2304 240 | opt-perl(File::Temp::Dir) 241 | opt-perl(File::stat) = 1.07 242 | opt-perl(FileCache) = 1.09 243 | opt-perl(FileHandle) = 2.03 244 | opt-perl(Filter::Simple) = 0.93 245 | opt-perl(Filter::Util::Call) = 1.55 246 | opt-perl(FindBin) = 1.51 247 | opt-perl(GDBM_File) = 1.15 248 | opt-perl(Getopt::Long) = 2.49 249 | opt-perl(Getopt::Long::CallBack) 250 | opt-perl(Getopt::Long::Parser) 251 | opt-perl(Getopt::Std) = 1.12 252 | opt-perl(HTTP::Tiny) = 0.070 253 | opt-perl(Hash::Util) = 0.22 254 | opt-perl(Hash::Util::FieldHash) = 1.19 255 | opt-perl(I18N::Collate) = 1.02 256 | opt-perl(I18N::LangTags) = 0.42 257 | opt-perl(I18N::LangTags::Detect) = 1.06 258 | opt-perl(I18N::LangTags::List) = 0.39 259 | opt-perl(I18N::Langinfo) = 0.13 260 | opt-perl(IO) = 1.38 261 | opt-perl(IO::Compress::Adapter::Bzip2) = 2.074 262 | opt-perl(IO::Compress::Adapter::Deflate) = 2.074 263 | opt-perl(IO::Compress::Adapter::Identity) = 2.074 264 | opt-perl(IO::Compress::Base) = 2.074 265 | opt-perl(IO::Compress::Base::Common) = 2.074 266 | opt-perl(IO::Compress::Bzip2) = 2.074 267 | opt-perl(IO::Compress::Deflate) = 2.074 268 | opt-perl(IO::Compress::Gzip) = 2.074 269 | opt-perl(IO::Compress::Gzip::Constants) = 2.074 270 | opt-perl(IO::Compress::RawDeflate) = 2.074 271 | opt-perl(IO::Compress::Zip) = 2.074 272 | opt-perl(IO::Compress::Zip::Constants) = 2.074 273 | opt-perl(IO::Compress::Zlib::Constants) = 2.074 274 | opt-perl(IO::Compress::Zlib::Extra) = 2.074 275 | opt-perl(IO::Dir) = 1.10 276 | opt-perl(IO::File) = 1.16 277 | opt-perl(IO::Handle) = 1.36 278 | opt-perl(IO::Pipe) = 1.15 279 | opt-perl(IO::Pipe::End) 280 | opt-perl(IO::Poll) = 0.10 281 | opt-perl(IO::Seekable) = 1.10 282 | opt-perl(IO::Select) = 1.22 283 | opt-perl(IO::Socket) = 1.38 284 | opt-perl(IO::Socket::INET) = 1.35 285 | opt-perl(IO::Socket::IP) = 0.38 286 | opt-perl(IO::Socket::UNIX) = 1.26 287 | opt-perl(IO::Uncompress::Adapter::Bunzip2) = 2.074 288 | opt-perl(IO::Uncompress::Adapter::Identity) = 2.074 289 | opt-perl(IO::Uncompress::Adapter::Inflate) = 2.074 290 | opt-perl(IO::Uncompress::AnyInflate) = 2.074 291 | opt-perl(IO::Uncompress::AnyUncompress) = 2.074 292 | opt-perl(IO::Uncompress::Base) = 2.074 293 | opt-perl(IO::Uncompress::Bunzip2) = 2.074 294 | opt-perl(IO::Uncompress::Gunzip) = 2.074 295 | opt-perl(IO::Uncompress::Inflate) = 2.074 296 | opt-perl(IO::Uncompress::RawInflate) = 2.074 297 | opt-perl(IO::Uncompress::Unzip) = 2.074 298 | opt-perl(IO::Zlib) = 1.10 299 | opt-perl(IPC::Cmd) = 0.96 300 | opt-perl(IPC::Msg) = 2.07 301 | opt-perl(IPC::Msg::stat) 302 | opt-perl(IPC::Open2) = 1.04 303 | opt-perl(IPC::Open3) = 1.20 304 | opt-perl(IPC::Semaphore) = 2.07 305 | opt-perl(IPC::Semaphore::stat) 306 | opt-perl(IPC::SharedMem) = 2.07 307 | opt-perl(IPC::SharedMem::stat) 308 | opt-perl(IPC::SysV) = 2.07 309 | opt-perl(JSON::PP) = 2.27400 310 | opt-perl(JSON::PP::Boolean) 311 | opt-perl(JSON::PP::IncrParser) = 1.01 312 | opt-perl(List::Util) = 1.46 313 | opt-perl(List::Util::XS) = 1.46 314 | opt-perl(Locale::Codes) 315 | opt-perl(Locale::Codes::Constants) 316 | opt-perl(Locale::Codes::Country) 317 | opt-perl(Locale::Codes::Currency) 318 | opt-perl(Locale::Codes::LangExt) 319 | opt-perl(Locale::Codes::LangFam) 320 | opt-perl(Locale::Codes::LangVar) 321 | opt-perl(Locale::Codes::Language) 322 | opt-perl(Locale::Codes::Script) 323 | opt-perl(Locale::Country) 324 | opt-perl(Locale::Currency) 325 | opt-perl(Locale::Language) 326 | opt-perl(Locale::Maketext) = 1.28 327 | opt-perl(Locale::Maketext::Guts) = 1.20 328 | opt-perl(Locale::Maketext::GutsLoader) = 1.20 329 | opt-perl(Locale::Maketext::Simple) = 0.21 330 | opt-perl(Locale::Script) 331 | opt-perl(MIME::Base64) = 3.15 332 | opt-perl(MIME::QuotedPrint) = 3.13 333 | opt-perl(MM) 334 | opt-perl(MY) 335 | opt-perl(Math::BigFloat) = 1.999806 336 | opt-perl(Math::BigFloat::Trace) = 0.47 337 | opt-perl(Math::BigInt) 338 | opt-perl(Math::BigInt) = 1.999806 339 | opt-perl(Math::BigInt::Calc) = 1.999806 340 | opt-perl(Math::BigInt::CalcEmu) = 1.999806 341 | opt-perl(Math::BigInt::FastCalc) = 0.5005 342 | opt-perl(Math::BigInt::Lib) = 1.999806 343 | opt-perl(Math::BigInt::Trace) = 0.47 344 | opt-perl(Math::BigRat) = 0.2611 345 | opt-perl(Math::Complex) = 1.59 346 | opt-perl(Math::Trig) = 1.23 347 | opt-perl(Memoize) = 1.03 348 | opt-perl(Memoize::AnyDBM_File) = 1.03 349 | opt-perl(Memoize::Expire) = 1.03 350 | opt-perl(Memoize::ExpireFile) = 1.03 351 | opt-perl(Memoize::ExpireTest) = 1.03 352 | opt-perl(Memoize::NDBM_File) = 1.03 353 | opt-perl(Memoize::SDBM_File) = 1.03 354 | opt-perl(Memoize::Storable) = 1.03 355 | opt-perl(Module::CoreList) = 5.20170530 356 | opt-perl(Module::CoreList::TieHashDelta) = 5.20170530 357 | opt-perl(Module::CoreList::Utils) = 5.20170530 358 | opt-perl(Module::Load) = 0.32 359 | opt-perl(Module::Load::Conditional) = 0.68 360 | opt-perl(Module::Loaded) = 0.08 361 | opt-perl(Module::Metadata) = 1.000033 362 | opt-perl(NDBM_File) = 1.14 363 | opt-perl(NEXT) = 0.67 364 | opt-perl(NEXT::ACTUAL) 365 | opt-perl(NEXT::ACTUAL::DISTINCT) 366 | opt-perl(NEXT::ACTUAL::UNSEEN) 367 | opt-perl(NEXT::DISTINCT) 368 | opt-perl(NEXT::DISTINCT::ACTUAL) 369 | opt-perl(NEXT::UNSEEN) 370 | opt-perl(NEXT::UNSEEN::ACTUAL) 371 | opt-perl(Net::Cmd) = 3.10 372 | opt-perl(Net::Config) = 3.10 373 | opt-perl(Net::Domain) = 3.10 374 | opt-perl(Net::FTP) = 3.10 375 | opt-perl(Net::FTP::A) = 3.10 376 | opt-perl(Net::FTP::E) = 3.10 377 | opt-perl(Net::FTP::I) = 3.10 378 | opt-perl(Net::FTP::L) = 3.10 379 | opt-perl(Net::FTP::_SSL_SingleSessionCache) 380 | opt-perl(Net::FTP::dataconn) = 3.10 381 | opt-perl(Net::NNTP) = 3.10 382 | opt-perl(Net::NNTP::_SSL) 383 | opt-perl(Net::Netrc) = 3.10 384 | opt-perl(Net::POP3) = 3.10 385 | opt-perl(Net::POP3::_SSL) 386 | opt-perl(Net::Ping) = 2.55 387 | opt-perl(Net::SMTP) = 3.10 388 | opt-perl(Net::SMTP::_SSL) 389 | opt-perl(Net::Time) = 3.10 390 | opt-perl(Net::hostent) = 1.01 391 | opt-perl(Net::netent) = 1.00 392 | opt-perl(Net::protoent) = 1.00 393 | opt-perl(Net::servent) = 1.01 394 | opt-perl(O) = 1.01 395 | opt-perl(ODBM_File) = 1.14 396 | opt-perl(Opcode) = 1.39 397 | opt-perl(POSIX) = 1.76 398 | opt-perl(POSIX::SigAction) 399 | opt-perl(POSIX::SigRt) 400 | opt-perl(POSIX::SigSet) 401 | opt-perl(Params::Check) = 0.38 402 | opt-perl(Parse::CPAN::Meta) = 2.150010 403 | opt-perl(Perl::OSType) = 1.010 404 | opt-perl(PerlIO) = 1.10 405 | opt-perl(PerlIO::encoding) = 0.25 406 | opt-perl(PerlIO::mmap) = 0.016 407 | opt-perl(PerlIO::scalar) = 0.26 408 | opt-perl(PerlIO::via) = 0.16 409 | opt-perl(PerlIO::via::QuotedPrint) = 0.08 410 | opt-perl(Pod::Cache) 411 | opt-perl(Pod::Cache::Item) 412 | opt-perl(Pod::Checker) = 1.73 413 | opt-perl(Pod::Checker::Hyperlink) 414 | opt-perl(Pod::Escapes) = 1.07 415 | opt-perl(Pod::Find) = 1.63 416 | opt-perl(Pod::Functions) = 1.11 417 | opt-perl(Pod::Html) = 1.2202 418 | opt-perl(Pod::Hyperlink) 419 | opt-perl(Pod::InputObjects) = 1.63 420 | opt-perl(Pod::InputSource) 421 | opt-perl(Pod::InteriorSequence) 422 | opt-perl(Pod::List) 423 | opt-perl(Pod::Man) = 4.09 424 | opt-perl(Pod::Paragraph) 425 | opt-perl(Pod::ParseLink) = 4.09 426 | opt-perl(Pod::ParseTree) 427 | opt-perl(Pod::ParseUtils) = 1.63 428 | opt-perl(Pod::Parser) = 1.63 429 | opt-perl(Pod::Perldoc) = 3.28 430 | opt-perl(Pod::Perldoc::BaseTo) = 3.28 431 | opt-perl(Pod::Perldoc::GetOptsOO) = 3.28 432 | opt-perl(Pod::Perldoc::ToANSI) = 3.28 433 | opt-perl(Pod::Perldoc::ToChecker) = 3.28 434 | opt-perl(Pod::Perldoc::ToMan) = 3.28 435 | opt-perl(Pod::Perldoc::ToNroff) = 3.28 436 | opt-perl(Pod::Perldoc::ToPod) = 3.28 437 | opt-perl(Pod::Perldoc::ToRtf) = 3.28 438 | opt-perl(Pod::Perldoc::ToTerm) = 3.28 439 | opt-perl(Pod::Perldoc::ToText) = 3.28 440 | opt-perl(Pod::Perldoc::ToTk) = 3.28 441 | opt-perl(Pod::Perldoc::ToXml) = 3.28 442 | opt-perl(Pod::PlainText) = 2.07 443 | opt-perl(Pod::Select) = 1.63 444 | opt-perl(Pod::Simple) = 3.35 445 | opt-perl(Pod::Simple::BlackBox) = 3.35 446 | opt-perl(Pod::Simple::Checker) = 3.35 447 | opt-perl(Pod::Simple::Debug) = 3.35 448 | opt-perl(Pod::Simple::DumpAsText) = 3.35 449 | opt-perl(Pod::Simple::DumpAsXML) = 3.35 450 | opt-perl(Pod::Simple::HTML) = 3.35 451 | opt-perl(Pod::Simple::HTMLBatch) = 3.35 452 | opt-perl(Pod::Simple::HTMLLegacy) = 5.01 453 | opt-perl(Pod::Simple::LinkSection) = 3.35 454 | opt-perl(Pod::Simple::Methody) = 3.35 455 | opt-perl(Pod::Simple::Progress) = 3.35 456 | opt-perl(Pod::Simple::PullParser) = 3.35 457 | opt-perl(Pod::Simple::PullParserEndToken) = 3.35 458 | opt-perl(Pod::Simple::PullParserStartToken) = 3.35 459 | opt-perl(Pod::Simple::PullParserTextToken) = 3.35 460 | opt-perl(Pod::Simple::PullParserToken) = 3.35 461 | opt-perl(Pod::Simple::RTF) = 3.35 462 | opt-perl(Pod::Simple::Search) = 3.35 463 | opt-perl(Pod::Simple::SimpleTree) = 3.35 464 | opt-perl(Pod::Simple::Text) = 3.35 465 | opt-perl(Pod::Simple::TextContent) = 3.35 466 | opt-perl(Pod::Simple::TiedOutFH) = 3.35 467 | opt-perl(Pod::Simple::Transcode) = 3.35 468 | opt-perl(Pod::Simple::TranscodeDumb) = 3.35 469 | opt-perl(Pod::Simple::TranscodeSmart) = 3.35 470 | opt-perl(Pod::Simple::XHTML) = 3.35 471 | opt-perl(Pod::Simple::XHTML::LocalPodLinks) 472 | opt-perl(Pod::Simple::XMLOutStream) = 3.35 473 | opt-perl(Pod::Text) = 4.09 474 | opt-perl(Pod::Text::Color) = 4.09 475 | opt-perl(Pod::Text::Overstrike) = 4.09 476 | opt-perl(Pod::Text::Termcap) = 4.09 477 | opt-perl(Pod::Usage) = 1.69 478 | opt-perl(SDBM_File) = 1.14 479 | opt-perl(Safe) = 2.40 480 | opt-perl(Scalar::Util) = 1.46 481 | opt-perl(Search::Dict) = 1.07 482 | opt-perl(SelectSaver) = 1.02 483 | opt-perl(SelfLoader) = 1.23 484 | opt-perl(Socket) = 2.020 485 | opt-perl(Storable) = 2.62 486 | opt-perl(Sub::Util) = 1.46 487 | opt-perl(Symbol) = 1.08 488 | opt-perl(Sys::Hostname) = 1.20 489 | opt-perl(Sys::Syslog) = 0.35 490 | opt-perl(TAP::Base) = 3.38 491 | opt-perl(TAP::Formatter::Base) = 3.38 492 | opt-perl(TAP::Formatter::Color) = 3.38 493 | opt-perl(TAP::Formatter::Console) = 3.38 494 | opt-perl(TAP::Formatter::Console::ParallelSession) = 3.38 495 | opt-perl(TAP::Formatter::Console::Session) = 3.38 496 | opt-perl(TAP::Formatter::File) = 3.38 497 | opt-perl(TAP::Formatter::File::Session) = 3.38 498 | opt-perl(TAP::Formatter::Session) = 3.38 499 | opt-perl(TAP::Harness) = 3.38 500 | opt-perl(TAP::Harness::Env) = 3.38 501 | opt-perl(TAP::Object) = 3.38 502 | opt-perl(TAP::Parser) = 3.38 503 | opt-perl(TAP::Parser::Aggregator) = 3.38 504 | opt-perl(TAP::Parser::Grammar) = 3.38 505 | opt-perl(TAP::Parser::Iterator) = 3.38 506 | opt-perl(TAP::Parser::Iterator::Array) = 3.38 507 | opt-perl(TAP::Parser::Iterator::Process) = 3.38 508 | opt-perl(TAP::Parser::Iterator::Stream) = 3.38 509 | opt-perl(TAP::Parser::IteratorFactory) = 3.38 510 | opt-perl(TAP::Parser::Multiplexer) = 3.38 511 | opt-perl(TAP::Parser::Result) = 3.38 512 | opt-perl(TAP::Parser::Result::Bailout) = 3.38 513 | opt-perl(TAP::Parser::Result::Comment) = 3.38 514 | opt-perl(TAP::Parser::Result::Plan) = 3.38 515 | opt-perl(TAP::Parser::Result::Pragma) = 3.38 516 | opt-perl(TAP::Parser::Result::Test) = 3.38 517 | opt-perl(TAP::Parser::Result::Unknown) = 3.38 518 | opt-perl(TAP::Parser::Result::Version) = 3.38 519 | opt-perl(TAP::Parser::Result::YAML) = 3.38 520 | opt-perl(TAP::Parser::ResultFactory) = 3.38 521 | opt-perl(TAP::Parser::Scheduler) = 3.38 522 | opt-perl(TAP::Parser::Scheduler::Job) = 3.38 523 | opt-perl(TAP::Parser::Scheduler::Spinner) = 3.38 524 | opt-perl(TAP::Parser::Source) = 3.38 525 | opt-perl(TAP::Parser::SourceHandler) = 3.38 526 | opt-perl(TAP::Parser::SourceHandler::Executable) = 3.38 527 | opt-perl(TAP::Parser::SourceHandler::File) = 3.38 528 | opt-perl(TAP::Parser::SourceHandler::Handle) = 3.38 529 | opt-perl(TAP::Parser::SourceHandler::Perl) = 3.38 530 | opt-perl(TAP::Parser::SourceHandler::RawTAP) = 3.38 531 | opt-perl(TAP::Parser::YAMLish::Reader) = 3.38 532 | opt-perl(TAP::Parser::YAMLish::Writer) = 3.38 533 | opt-perl(Term::ANSIColor) = 4.06 534 | opt-perl(Term::Cap) = 1.17 535 | opt-perl(Term::Complete) = 1.403 536 | opt-perl(Term::ReadLine) = 1.16 537 | opt-perl(Term::ReadLine::Stub) 538 | opt-perl(Term::ReadLine::TermCap) 539 | opt-perl(Term::ReadLine::Tk) 540 | opt-perl(Test) = 1.30 541 | opt-perl(Test2) = 1.302073 542 | opt-perl(Test2::API) = 1.302073 543 | opt-perl(Test2::API::Breakage) = 1.302073 544 | opt-perl(Test2::API::Context) = 1.302073 545 | opt-perl(Test2::API::Instance) = 1.302073 546 | opt-perl(Test2::API::Stack) = 1.302073 547 | opt-perl(Test2::Event) = 1.302073 548 | opt-perl(Test2::Event::Bail) = 1.302073 549 | opt-perl(Test2::Event::Diag) = 1.302073 550 | opt-perl(Test2::Event::Encoding) = 1.302073 551 | opt-perl(Test2::Event::Exception) = 1.302073 552 | opt-perl(Test2::Event::Generic) = 1.302073 553 | opt-perl(Test2::Event::Info) = 1.302073 554 | opt-perl(Test2::Event::Note) = 1.302073 555 | opt-perl(Test2::Event::Ok) = 1.302073 556 | opt-perl(Test2::Event::Plan) = 1.302073 557 | opt-perl(Test2::Event::Skip) = 1.302073 558 | opt-perl(Test2::Event::Subtest) = 1.302073 559 | opt-perl(Test2::Event::TAP::Version) = 1.302073 560 | opt-perl(Test2::Event::Waiting) = 1.302073 561 | opt-perl(Test2::Formatter) = 1.302073 562 | opt-perl(Test2::Formatter::TAP) = 1.302073 563 | opt-perl(Test2::Hub) = 1.302073 564 | opt-perl(Test2::Hub::Interceptor) = 1.302073 565 | opt-perl(Test2::Hub::Interceptor::Terminator) = 1.302073 566 | opt-perl(Test2::Hub::Subtest) = 1.302073 567 | opt-perl(Test2::IPC) = 1.302073 568 | opt-perl(Test2::IPC::Driver) = 1.302073 569 | opt-perl(Test2::IPC::Driver::Files) = 1.302073 570 | opt-perl(Test2::Tools::Tiny) = 1.302073 571 | opt-perl(Test2::Util) = 1.302073 572 | opt-perl(Test2::Util::ExternalMeta) = 1.302073 573 | opt-perl(Test2::Util::HashBase) = 0.002 574 | opt-perl(Test2::Util::Trace) = 1.302073 575 | opt-perl(Test::Builder) = 1.302073 576 | opt-perl(Test::Builder::Formatter) = 1.302073 577 | opt-perl(Test::Builder::IO::Scalar) = 2.113 578 | opt-perl(Test::Builder::Module) = 1.302073 579 | opt-perl(Test::Builder::Tester) = 1.302073 580 | opt-perl(Test::Builder::Tester::Color) = 1.302073 581 | opt-perl(Test::Builder::Tester::Tie) 582 | opt-perl(Test::Builder::TodoDiag) = 1.302073 583 | opt-perl(Test::Harness) = 3.38 584 | opt-perl(Test::More) = 1.302073 585 | opt-perl(Test::Simple) = 1.302073 586 | opt-perl(Test::Tester) = 1.302073 587 | opt-perl(Test::Tester::Capture) = 1.302073 588 | opt-perl(Test::Tester::CaptureRunner) = 1.302073 589 | opt-perl(Test::Tester::Delegate) = 1.302073 590 | opt-perl(Test::use::ok) = 1.302073 591 | opt-perl(Text::Abbrev) = 1.02 592 | opt-perl(Text::Balanced) = 2.03 593 | opt-perl(Text::Balanced::ErrorMsg) 594 | opt-perl(Text::Balanced::Extractor) 595 | opt-perl(Text::ParseWords) = 3.30 596 | opt-perl(Text::Tabs) = 2013.0523 597 | opt-perl(Text::Wrap) = 2013.0523 598 | opt-perl(Thread) = 3.04 599 | opt-perl(Thread::Queue) = 3.12 600 | opt-perl(Thread::Semaphore) = 2.13 601 | opt-perl(Tie::Array) = 1.06 602 | opt-perl(Tie::ExtraHash) 603 | opt-perl(Tie::File) = 1.02 604 | opt-perl(Tie::File::Cache) 605 | opt-perl(Tie::File::Heap) 606 | opt-perl(Tie::Handle) = 4.2 607 | opt-perl(Tie::Hash) 608 | opt-perl(Tie::Hash) = 1.05 609 | opt-perl(Tie::Hash::NamedCapture) = 0.10 610 | opt-perl(Tie::Memoize) = 1.1 611 | opt-perl(Tie::RefHash) = 1.39 612 | opt-perl(Tie::RefHash::Nestable) 613 | opt-perl(Tie::Scalar) = 1.04 614 | opt-perl(Tie::StdArray) 615 | opt-perl(Tie::StdHandle) = 4.4 616 | opt-perl(Tie::StdHash) 617 | opt-perl(Tie::StdScalar) 618 | opt-perl(Tie::SubstrHash) = 1.00 619 | opt-perl(Time::HiRes) = 1.9741 620 | opt-perl(Time::Local) = 1.25 621 | opt-perl(Time::Piece) = 1.31 622 | opt-perl(Time::Seconds) = 1.31 623 | opt-perl(Time::gmtime) = 1.03 624 | opt-perl(Time::localtime) = 1.02 625 | opt-perl(Time::tm) = 1.00 626 | opt-perl(U64) 627 | opt-perl(UNIVERSAL) = 1.13 628 | opt-perl(Unicode::Collate) = 1.19 629 | opt-perl(Unicode::Collate::CJK::Big5) = 1.19 630 | opt-perl(Unicode::Collate::CJK::GB2312) = 1.19 631 | opt-perl(Unicode::Collate::CJK::JISX0208) = 1.19 632 | opt-perl(Unicode::Collate::CJK::Korean) = 1.19 633 | opt-perl(Unicode::Collate::CJK::Pinyin) = 1.19 634 | opt-perl(Unicode::Collate::CJK::Stroke) = 1.19 635 | opt-perl(Unicode::Collate::CJK::Zhuyin) = 1.19 636 | opt-perl(Unicode::Collate::Locale) = 1.19 637 | opt-perl(Unicode::Normalize) = 1.25 638 | opt-perl(Unicode::UCD) = 0.68 639 | opt-perl(User::grent) = 1.01 640 | opt-perl(User::pwent) = 1.00 641 | opt-perl(XSLoader) = 0.27 642 | opt-perl(Zlib::OldDeflate) 643 | opt-perl(Zlib::OldInflate) 644 | opt-perl(_charnames) = 1.44 645 | opt-perl(arybase) = 0.12 646 | opt-perl(attributes) = 0.29 647 | opt-perl(autodie) = 2.29 648 | opt-perl(autodie::Scope::Guard) = 2.29 649 | opt-perl(autodie::Scope::GuardStack) = 2.29 650 | opt-perl(autodie::Util) = 2.29 651 | opt-perl(autodie::exception) = 2.29 652 | opt-perl(autodie::exception::system) = 2.29 653 | opt-perl(autodie::hints) = 2.29 654 | opt-perl(autodie::skip) = 2.29 655 | opt-perl(autouse) = 1.11 656 | opt-perl(base) = 2.25 657 | opt-perl(bigint) = 0.47 658 | opt-perl(bignum) = 0.47 659 | opt-perl(bigrat) = 0.47 660 | opt-perl(blib) = 1.06 661 | opt-perl(bytes) = 1.05 662 | opt-perl(charnames) 663 | opt-perl(charnames) = 1.44 664 | opt-perl(constant) = 1.33 665 | opt-perl(deprecate) = 0.03 666 | opt-perl(diagnostics) = 1.36 667 | opt-perl(encoding) = 2.19 668 | opt-perl(encoding::warnings) = 0.13 669 | opt-perl(experimental) = 0.016 670 | opt-perl(feature) = 1.47 671 | opt-perl(fields) = 2.23 672 | opt-perl(filetest) = 1.03 673 | opt-perl(if) = 0.0606 674 | opt-perl(integer) = 1.01 675 | opt-perl(less) = 0.03 676 | opt-perl(lib) = 0.64 677 | opt-perl(locale) = 1.09 678 | opt-perl(mro) = 1.20 679 | opt-perl(ok) = 1.302073 680 | opt-perl(open) = 1.11 681 | opt-perl(ops) = 1.02 682 | opt-perl(overload) = 1.28 683 | opt-perl(overload::numbers) 684 | opt-perl(overloading) = 0.02 685 | opt-perl(parent) = 0.236 686 | opt-perl(perlfaq) = 5.021011 687 | opt-perl(re) = 0.34 688 | opt-perl(sigtrap) = 1.08 689 | opt-perl(sort) = 2.02 690 | opt-perl(strict) = 1.11 691 | opt-perl(subs) = 1.02 692 | opt-perl(threads) = 2.15 693 | opt-perl(threads::shared) = 1.56 694 | opt-perl(utf8) = 1.19 695 | opt-perl(vars) = 1.03 696 | opt-perl(version) = 0.9917 697 | opt-perl(version::regex) = 0.9917 698 | opt-perl(vmsish) = 1.04 699 | opt-perl(warnings) = 1.37 700 | opt-perl(warnings::register) = 1.04 701 | -------------------------------------------------------------------------------- /src/perl/version.mk.in: -------------------------------------------------------------------------------- 1 | PKGROOT = /opt/perl 2 | NAME = opt-perl 3 | ARCHIVE_NAME = perl 4 | ## Note: Version should be updated in Makefile, too 5 | VERSION = 5.26.0 6 | PERLVERSION = 5.014002 7 | RELEASE = 1 8 | EXTUTILS_MM = ExtUtils-MakeMaker 9 | EXTUTILS_MM_VERSION = 6.62 10 | TARBALL_POSTFIX = tar.gz 11 | RPM.FILES = $(PKGROOT) 12 | -------------------------------------------------------------------------------- /src/sunos.mk: -------------------------------------------------------------------------------- 1 | SRCDIRS = `find * -prune\ 2 | -type d \ 3 | ! -name CVS \ 4 | ! -name . \ 5 | ! -name usersguide` 6 | -------------------------------------------------------------------------------- /src/usersguide/Makefile: -------------------------------------------------------------------------------- 1 | # $Id: Makefile,v 1.4 2012/11/27 00:49:12 phil Exp $ 2 | # 3 | # @Copyright@ 4 | # 5 | # Rocks(r) 6 | # www.rocksclusters.org 7 | # version 6.2 (SideWinder) 8 | # version 7.0 (Manzanita) 9 | # 10 | # Copyright (c) 2000 - 2017 The Regents of the University of California. 11 | # All rights reserved. 12 | # 13 | # Redistribution and use in source and binary forms, with or without 14 | # modification, are permitted provided that the following conditions are 15 | # met: 16 | # 17 | # 1. Redistributions of source code must retain the above copyright 18 | # notice, this list of conditions and the following disclaimer. 19 | # 20 | # 2. Redistributions in binary form must reproduce the above copyright 21 | # notice unmodified and in its entirety, this list of conditions and the 22 | # following disclaimer in the documentation and/or other materials provided 23 | # with the distribution. 24 | # 25 | # 3. All advertising and press materials, printed or electronic, mentioning 26 | # features or use of this software must display the following acknowledgement: 27 | # 28 | # "This product includes software developed by the Rocks(r) 29 | # Cluster Group at the San Diego Supercomputer Center at the 30 | # University of California, San Diego and its contributors." 31 | # 32 | # 4. Except as permitted for the purposes of acknowledgment in paragraph 3, 33 | # neither the name or logo of this software nor the names of its 34 | # authors may be used to endorse or promote products derived from this 35 | # software without specific prior written permission. The name of the 36 | # software includes the following terms, and any derivatives thereof: 37 | # "Rocks", "Rocks Clusters", and "Avalanche Installer". For licensing of 38 | # the associated name, interested parties should contact Technology 39 | # Transfer & Intellectual Property Services, University of California, 40 | # San Diego, 9500 Gilman Drive, Mail Code 0910, La Jolla, CA 92093-0910, 41 | # Ph: (858) 534-5815, FAX: (858) 534-7345, E-MAIL:invent@ucsd.edu 42 | # 43 | # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' 44 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 45 | # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 46 | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS 47 | # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 48 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 49 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 50 | # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 51 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 52 | # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 53 | # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 54 | # 55 | # @Copyright@ 56 | # 57 | # $Log: Makefile,v $ 58 | # Revision 1.4 2012/11/27 00:49:12 phil 59 | # Copyright Storm for Emerald Boa 60 | # 61 | # Revision 1.3 2012/05/06 05:49:19 phil 62 | # Copyright Storm for Mamba 63 | # 64 | # Revision 1.2 2011/07/23 02:31:15 phil 65 | # Viper Copyright 66 | # 67 | # Revision 1.1 2011/06/16 18:00:28 anoop 68 | # Start of a perl roll 69 | # 70 | 71 | PKGROOT = /var/www/html/roll-documentation/perl/$(VERSION) 72 | REDHAT.ROOT = $(PWD)/../../ 73 | -include $(ROCKSROOT)/etc/Rules.mk 74 | include Rules.mk 75 | 76 | default: $(NAME).spec ../$(NAME)-$(VERSION).tar.gz 77 | 78 | html: predoc 79 | jw --backend html --dsl $(PWD)/rocks.dsl#html index.sgml 80 | 81 | pdf: predoc 82 | jw --backend pdf --dsl $(PWD)/rocks.dsl#print index.sgml 83 | 84 | build: html pdf 85 | 86 | install:: build 87 | mkdir -p $(ROOT)/$(PKGROOT)/images 88 | mkdir -p $(ROOT)/$(PKGROOT)/stylesheet-images 89 | install -ma+r index.pdf $(ROOT)/$(PKGROOT)/$(NAME).pdf 90 | install -ma+r *.html $(ROOT)/$(PKGROOT)/ 91 | install -ma+r images/*.png $(ROOT)/$(PKGROOT)/images/ 92 | install -ma+r stylesheet-images/{*.gif,*.png} \ 93 | $(ROOT)/$(PKGROOT)/stylesheet-images/ 94 | install -ma+r rocks.css $(ROOT)/$(PKGROOT)/ 95 | 96 | clean:: 97 | rm -f *.html 98 | rm -f index.pdf 99 | 100 | 101 | -------------------------------------------------------------------------------- /src/usersguide/copyrights.sgml: -------------------------------------------------------------------------------- 1 | 2 | Copyrights 3 |
Copyrights 4 | 5 | This product includes software developed by the Rocks Clusters Group at 6 | UC San Diego. 7 | 8 | 9 | 10 | This product also contains software from 11 | Perl 12 | and from CPAN 13 | which are distributed under the GPL+ and Perl Artistic License. 14 | 15 | 16 | The software contained in this distribution is released under the academic 17 | license agreement which requires to acknowledge the use of the software 18 | that results in any published work. 19 | 20 |
21 | &source-roll-ggplv2-copyright; 22 | &source-roll-artistic-copyright; 23 |
24 | -------------------------------------------------------------------------------- /src/usersguide/images/i-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rocksclusters/perl/16d0a74db951bafe6ae000685fb59933d6ef37c6/src/usersguide/images/i-01.png -------------------------------------------------------------------------------- /src/usersguide/index.sgml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | %entities; 8 | ]> 9 | 10 | 11 | 12 | 13 | perl Roll: Users Guide 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | &document-version; 24 | 25 | &document-pubdate; 26 | 27 | 28 | &document-year; 29 | The copyright holder, and UC Regents 30 | 31 | 32 | 33 | (PDF version) 34 | 35 | 36 | 37 | 38 | &preface; 39 | &installing; 40 | &using; 41 | ©rights; 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/usersguide/installing.sgml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Installing the Perl Roll 5 | 6 | &source-roll-installing-standard; 7 | &source-roll-installing-onthefly; 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/usersguide/preface.sgml: -------------------------------------------------------------------------------- 1 | 2 | Preface 3 | 4 | 5 | 6 | The perl Roll installs the perl RPM, CPAN support utilities 7 | and various CPAN modules that are used for creating Rocks based 8 | RPMs from CPAN modules. 9 | 10 | 11 | 12 | 13 | Please visit the Perl site 14 | and the CPAN site 15 | to learn more about their release and the individual 16 | software components. 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/usersguide/using.sgml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Using the perl Roll 5 | 6 |
7 | Using the perl Roll 8 | 9 | 10 | The version of perl installed with this release of the Perl Roll 11 | is Perl 5.14.1. 12 | 13 | 14 | The various CPAN modules that are included with this roll, are 15 | compiled and installed against the aforementioned version of Perl. 16 | 17 | 18 | 19 | Tutorials for using Perl and its components are available 20 | from the Perl site 21 | and from CPAN 22 | 23 | 24 |
25 | Perl Location 26 | 27 | 28 | The Perl roll installs Perl 5.14.1 in /opt/perl. 29 | 30 | All the CPAN modules that are provided in the Perl roll are also installed 31 | in /opt/perl. 32 | 33 |
34 | 35 |
36 | Creating RPM from CPAN modules 37 | The Perl roll introduces an experimental feature of creating Rocks RPMS from 38 | CPAN modules. We believe this is a better method of distributing CPAN modules across 39 | a cluster than using CPAN by hand on every single node that requires it. 40 | 41 | 42 | 43 | With the release of the Perl roll, both Makefile.PL and Build.PL methods of building 44 | and installing CPAN modules are supported. 45 | 46 | 47 | 48 | To build an RPM from CPAN, we will use the cpan2dist utility that 49 | comes with the core of Perl. 50 | 51 | To build an RPM from CPAN, we need to make sure that when running 52 | cpan2dist, we don't create RPMS for modules that are 53 | already installed on the system. So we create a file called modules.ignore 54 | that contains a list of all modules that we want to ignore during a build. 55 | 56 | 57 | The easiest way to create modules.ignore is to obtain information 58 | about installed modules from the RPMS that are already present and installed on 59 | the system. 60 | 61 | # for i in `rpm -qa | grep -G "^opt-perl"`; do \ 62 | rpm -q --provides $i | grep -E "^perl\(" | \ 63 | sed -r -e 's/^perl\(/^/' -e 's/\)[ \t]*(=[ \t]*[.0-9]+)*$/$/'; 64 | done | sort | uniq > modules.ignore 65 | 66 | 67 | 68 | Now that we have our ignore list, we can try to build an RPM from CPAN. For this 69 | example, we will use the Params::Validate module from CPAN. 70 | 71 | Running cpan2dist to create Rocks RPM 72 | 97 | 98 | When you see the last line that states that the Params::Validate RPM was 99 | created successfully, and its location, you may use the RPM to install the CPAN 100 | module across your entire cluster. 101 | 102 | The cpan2dist command in the above example has an option 103 | --buildprereq. This option builds any prerequisites 104 | that the module has, and creates RPMS for those prerequisites as well. These RPMS 105 | are in various subdirectories in your build directory. 106 | 107 | For more information about using the cpan2dist command, please 108 | run the /opt/perl/bin/cpan2dist command without any arguments. 109 | 110 |
111 | 112 |
113 | 114 |
115 | -------------------------------------------------------------------------------- /src/usersguide/version.mk: -------------------------------------------------------------------------------- 1 | ROLL = perl 2 | NAME = roll-$(ROLL)-usersguide 3 | RELEASE = 0 4 | 5 | SUMMARY_COMPATIBLE = $(VERSION) 6 | SUMMARY_MAINTAINER = Rocks Group 7 | SUMMARY_ARCHITECTURE = i386, x86_64 8 | 9 | ROLL_REQUIRES = base kernel os 10 | ROLL_CONFLICTS = 11 | RPM.FILES = /var/www/html/roll-documentation/* 12 | -------------------------------------------------------------------------------- /version.mk: -------------------------------------------------------------------------------- 1 | ROLLNAME = perl 2 | RELEASE = 0 3 | COLOR = orange 4 | 5 | REDHAT.ROOT = $(CURDIR) 6 | --------------------------------------------------------------------------------