├── .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 |
--------------------------------------------------------------------------------