From f523cac300df52d94ef85936b28236eb61059382 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Jun 09 2014 08:41:53 +0000 Subject: import perl516-1.1-3.el7 --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.gitignore diff --git a/.perl516.metadata b/.perl516.metadata new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.perl516.metadata diff --git a/README.md b/README.md deleted file mode 100644 index ce46a88..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -\ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/LICENSE b/SOURCES/LICENSE new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/SOURCES/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/SOURCES/README b/SOURCES/README new file mode 100644 index 0000000..3538100 --- /dev/null +++ b/SOURCES/README @@ -0,0 +1,40 @@ +Package %{scl_name} provides Perl programming language delivered as a Software +Collection. For more information about Software Collections, +see the scl(1) man page. By installing the %{scl_name} collection, +you will get the minimum working set of packages to have a working Perl +programming language. + +Usage: scl enable %{scl} 'perl' + +Software Collections allow you to build and execute applications +which are not located in the filesystem root hierarchy, +but are stored in an alternative location, which is %{_scl_root} +in case of the %{scl_name} collection. + +Perl is a high-level programming language with roots in C, sed, awk and shell +scripting. Perl is good at handling processes and files, and is especially +good at handling text. Perl's hallmarks are practicality and efficiency. +While it is used to do a lot of different things, Perl's most common +applications are system administration utilities and web programming. A large +proportion of the CGI scripts on the web are written in Perl. + +When you want to work with the %{scl_name} collection, use the scl +utility (see the scl(1) man page for usage) to enable the scl +environment. + +Examples: +scl enable %{scl_name} 'command --arg' + Run a specific command with the argument --arg within the %{scl_name} + software collections environment. + +scl enable %{scl_name} 'perl program.pl' + Execute program.pl by Perl from the %{scl_name} software collection. + +scl enable %{scl_name} bash + Run an interactive shell with the %{scl_name} software collection enabled. + +scl enable %{scl_name} 'man perl' + Show man pages for the perl command, which is a part of the + %{scl_name} software collection. + +Report bugs to . diff --git a/SOURCES/macro-build b/SOURCES/macro-build new file mode 100644 index 0000000..dc3d198 --- /dev/null +++ b/SOURCES/macro-build @@ -0,0 +1,16 @@ +# %%perl_bootstrap 1 + +# If macros for tests sub-package are not define on the system +# the wil be defined +%{!?tests_req:%tests_req() %{?@SCL@tests_req}} +%{!?tests_subpackage_requires:%tests_subpackage_requires() %{?@SCL@tests_subpackage_requires}} +%{!?perl_default_subpackage_tests:%perl_default_subpackage_tests %{?@SCL@perl_default_subpackage_tests}} +%{!?perl_default_filter:%perl_default_filter %{?@SCL@perl_default_filter}} + +%scl_package_override() %{expand: \ +%global __perl %_scl_root/usr/bin/perl \ +%global __perl_requires /usr/lib/rpm/perl.req.stack \ +%global __perl_provides /usr/lib/rpm/perl.prov.stack \ +%global __perllib_requires /usr/lib/rpm/perl.req.stack \ +%global __perllib_provides /usr/lib/rpm/perl.prov.stack \ +} diff --git a/SOURCES/perl.attr b/SOURCES/perl.attr new file mode 100644 index 0000000..24c8d8c --- /dev/null +++ b/SOURCES/perl.attr @@ -0,0 +1,3 @@ +%__perl_requires %{_rpmconfigdir}/perl.req.stack +%__perl_magic ^.*[Pp]erl .*$ +%__perl_flags exeonly diff --git a/SOURCES/perl.prov.stack b/SOURCES/perl.prov.stack new file mode 100755 index 0000000..3c30871 --- /dev/null +++ b/SOURCES/perl.prov.stack @@ -0,0 +1,204 @@ +#!/usr/bin/perl + +# RPM (and it's source code) is covered under two separate licenses. + +# The entire code base may be distributed under the terms of the GNU +# General Public License (GPL), which appears immediately below. +# Alternatively, all of the source code in the lib subdirectory of the +# RPM source code distribution as well as any code derived from that +# code may instead be distributed under the GNU Library General Public +# License (LGPL), at the choice of the distributor. The complete text +# of the LGPL appears at the bottom of this file. + +# This alternative is allowed to enable applications to be linked +# against the RPM library (commonly called librpm) without forcing +# such applications to be distributed under the GPL. + +# Any questions regarding the licensing of RPM should be addressed to +# Erik Troan . + +# a simple script to print the proper name for perl libraries. + +# To save development time I do not parse the perl grammar but +# instead just lex it looking for what I want. I take special care to +# ignore comments and pod's. + +# it would be much better if perl could tell us the proper name of a +# given script. + +# The filenames to scan are either passed on the command line or if +# that is empty they are passed via stdin. + +# If there are lines in the file which match the pattern +# (m/^\s*\$VERSION\s*=\s+/) +# then these are taken to be the version numbers of the modules. +# Special care is taken with a few known idioms for specifying version +# numbers of files under rcs/cvs control. + +# If there are strings in the file which match the pattern +# m/^\s*\$RPM_Provides\s*=\s*["'](.*)['"]/i +# then these are treated as additional names which are provided by the +# file and are printed as well. + +# I plan to rewrite this in C so that perl is not required by RPM at +# build time. + +# by Ken Estes Mail.com kestes@staff.mail.com + +my $perl_prov ="__SCL_NAME__"; + +if ("@ARGV") { + foreach (@ARGV) { + process_file($_); + } +} else { + + # notice we are passed a list of filenames NOT as common in unix the + # contents of the file. + + foreach (<>) { + process_file($_); + } +} + + +foreach $module (sort keys %require) { + if (length($require{$module}) == 0) { + print "$perl_prov($module)\n"; + } else { + + # I am not using rpm3.0 so I do not want spaces around my + # operators. Also I will need to change the processing of the + # $RPM_* variable when I upgrade. + + print "$perl_prov($module) = $require{$module}\n"; + } +} + +exit 0; + + + +sub process_file { + + my ($file) = @_; + chomp $file; + + if (!open(FILE, $file)) { + warn("$0: Warning: Could not open file '$file' for reading: $!\n"); + return; + } + + my ($package, $version, $incomment, $inover) = (); + + while () { + + # skip the documentation + + # we should not need to have item in this if statement (it + # properly belongs in the over/back section) but people do not + # read the perldoc. + + if (m/^=(head[1-4]|pod|for|item)/) { + $incomment = 1; + } + + if (m/^=(cut)/) { + $incomment = 0; + $inover = 0; + } + + if (m/^=(over)/) { + $inover = 1; + } + + if (m/^=(back)/) { + $inover = 0; + } + + if ($incomment || $inover) { + next; + } + + # skip the data section + if (m/^__(DATA|END)__$/) { + last; + } + + # not everyone puts the package name of the file as the first + # package name so we report all namespaces except some common + # false positives as if they were provided packages (really ugly). + + if (m/^\s*package\s+([_:a-zA-Z0-9]+)\s*;/) { + $package = $1; + undef $version; + if ($package eq 'main') { + undef $package; + } else { + # If $package already exists in the $require hash, it means + # the package definition is broken up over multiple blocks. + # In that case, don't stomp a previous $VERSION we might have + # found. (See BZ#214496.) + $require{$package} = undef unless (exists $require{$package}); + } + } + + # after we found the package name take the first assignment to + # $VERSION as the version number. Exporter requires that the + # variable be called VERSION so we are safe. + + # here are examples of VERSION lines from the perl distribution + + #FindBin.pm:$VERSION = $VERSION = sprintf("%d.%02d", q$Revision: 1.9 $ =~ /(\d+)\.(\d+)/); + #ExtUtils/Install.pm:$VERSION = substr q$Revision: 1.9 $, 10; + #CGI/Apache.pm:$VERSION = (qw$Revision: 1.9 $)[1]; + #DynaLoader.pm:$VERSION = $VERSION = "1.03"; # avoid typo warning + #General.pm:$Config::General::VERSION = 2.33; + # + # or with the new "our" pragma you could (read will) see: + # + # our $VERSION = '1.00' + if ($package && m/^\s*(our\s+)?\$(\Q$package\E::)?VERSION\s*=\s+/) { + + # first see if the version string contains the string + # '$Revision' this often causes bizarre strings and is the most + # common method of non static numbering. + + if (m/\$Revision: (\d+[.0-9]+)/) { + $version = $1; + } elsif (m/['"]?(\d+[.0-9]+)['"]?/) { + + # look for a static number hard coded in the script + + $version = $1; + } + $require{$package} = $version; + } + + # Allow someone to have a variable that defines virtual packages + # The variable is called $RPM_Provides. It must be scoped with + # "our", but not "local" or "my" (just would not make sense). + # + # For instance: + # + # $RPM_Provides = "blah bleah" + # + # Will generate provides for "blah" and "bleah". + # + # Each keyword can appear multiple times. Don't + # bother with datastructures to store these strings, + # if we need to print it print it now. + + if (m/^\s*(our\s+)?\$RPM_Provides\s*=\s*["'](.*)['"]/i) { + foreach $_ (split(/\s+/, $2)) { + print "$_\n"; + } + } + + } + + close(FILE) || + die("$0: Could not close file: '$file' : $!\n"); + + return; +} diff --git a/SOURCES/perl.req.stack b/SOURCES/perl.req.stack new file mode 100755 index 0000000..e8430cb --- /dev/null +++ b/SOURCES/perl.req.stack @@ -0,0 +1,289 @@ +#!/usr/bin/perl + +# RPM (and its source code) is covered under two separate licenses. + +# The entire code base may be distributed under the terms of the GNU +# General Public License (GPL), which appears immediately below. +# Alternatively, all of the source code in the lib subdirectory of the +# RPM source code distribution as well as any code derived from that +# code may instead be distributed under the GNU Library General Public +# License (LGPL), at the choice of the distributor. The complete text +# of the LGPL appears at the bottom of this file. + +# This alternatively is allowed to enable applications to be linked +# against the RPM library (commonly called librpm) without forcing +# such applications to be distributed under the GPL. + +# Any questions regarding the licensing of RPM should be addressed to +# Erik Troan . + +# a simple makedepend like script for perl. + +# To save development time I do not parse the perl grammar but +# instead just lex it looking for what I want. I take special care to +# ignore comments and pod's. + +# It would be much better if perl could tell us the dependencies of a +# given script. + +# The filenames to scan are either passed on the command line or if +# that is empty they are passed via stdin. + +# If there are strings in the file which match the pattern +# m/^\s*\$RPM_Requires\s*=\s*["'](.*)['"]/i +# then these are treated as additional names which are required by the +# file and are printed as well. + +# I plan to rewrite this in C so that perl is not required by RPM at +# build time. + +# by Ken Estes Mail.com kestes@staff.mail.com + +my $perl_req = "__SCL_NAME__"; + +$HAVE_VERSION = 0; +eval { require version; $HAVE_VERSION = 1; }; + + +if ("@ARGV") { + foreach (@ARGV) { + process_file($_); + } +} else { + + # notice we are passed a list of filenames NOT as common in unix the + # contents of the file. + + foreach (<>) { + process_file($_); + } +} + + +foreach $perlver (sort keys %perlreq) { + print "$perl_req >= $perlver\n"; +} +foreach $module (sort keys %require) { + if (length($require{$module}) == 0) { + print "$perl_req($module)\n"; + } else { + + # I am not using rpm3.0 so I do not want spaces around my + # operators. Also I will need to change the processing of the + # $RPM_* variable when I upgrade. + + print "$perl_req($module) >= $require{$module}\n"; + } +} + +exit 0; + + + +sub add_require { + my ($module, $newver) = @_; + my $oldver = $require{$module}; + if ($oldver) { + $require{$module} = $newver + if ($HAVE_VERSION && $newver && version->new($oldver) < $newver); + } + else { + $require{$module} = $newver; + } +} + +sub process_file { + + my ($file) = @_; + chomp $file; + + if (!open(FILE, $file)) { + warn("$0: Warning: Could not open file '$file' for reading: $!\n"); + return; + } + + while () { + + # skip the "= <<" block + + if (m/^\s*\$(?:.*)\s*=\s*<<\s*(["'`])(.+?)\1/ || + m/^\s*\$(.*)\s*=\s*<<(\w+)\s*;/) { + $tag = $2; + while () { + chomp; + ( $_ eq $tag ) && last; + } + $_ = ; + } + + # skip q{} quoted sections - just hope we don't have curly brackets + # within the quote, nor an escaped hash mark that isn't a comment + # marker, such as occurs right here. Draw the line somewhere. + if ( m/^.*\Wq[qxwr]?\s*([{([#|\/])[^})\]#|\/]*$/ && ! m/^\s*(require|use)\s/ ) { + $tag = $1; + $tag =~ tr/{\(\[\#|\//})]#|\//; + $tag = quotemeta($tag); + while () { + ( $_ =~ m/$tag/ ) && last; + } + } + + # skip the documentation + + # we should not need to have item in this if statement (it + # properly belongs in the over/back section) but people do not + # read the perldoc. + + if (/^=(head[1-4]|pod|for|item)/) { + /^=cut/ && next while ; + } + + if (/^=over/) { + /^=back/ && next while ; + } + + # skip the data section + if (m/^__(DATA|END)__$/) { + last; + } + + # Each keyword can appear multiple times. Don't + # bother with datastructures to store these strings, + # if we need to print it print it now. + # + # Again allow for "our". + if (m/^\s*(our\s+)?\$RPM_Requires\s*=\s*["'](.*)['"]/i) { + foreach $_ (split(/\s+/, $2)) { + print "$_\n"; + } + } + + my $modver_re = qr/[.0-9]+/; + + if ( + +# ouch could be in a eval, perhaps we do not want these since we catch +# an exception they must not be required + +# eval { require Term::ReadLine } or die $@; +# eval "require Term::Rendezvous;" or die $@; +# eval { require Carp } if defined $^S; # If error/warning during compilation, + + + (m/^(\s*) # we hope the inclusion starts the line + (require|use)\s+(?!\{) # do not want 'do {' loops + # quotes around name are always legal + ['"]?([^; '"\t#]+)['"]?[\t; ] + # the syntax for 'use' allows version requirements + # the latter part is for "use base qw(Foo)" and friends special case + \s*($modver_re|(qw\s*[(\/'"]\s*|['"])[^)\/"'\$]*?\s*[)\/"'])? + /x) + ) { + my ($whitespace, $statement, $module, $version) = ($1, $2, $3, $4); + + # we only consider require statements that are flushed against + # the left edge. any other require statements give too many + # false positives, as they are usually inside of an if statement + # as a fallback module or a rarely used option + + ($whitespace ne "" && $statement eq "require") && next; + + # if there is some interpolation of variables just skip this + # dependency, we do not want + # do "$ENV{LOGDIR}/$rcfile"; + + ($module =~ m/\$/) && next; + + # skip if the phrase was "use of" -- shows up in gimp-perl, et al. + next if $module eq 'of'; + + # if the module ends in a comma we probably caught some + # documentation of the form 'check stuff,\n do stuff, clean + # stuff.' there are several of these in the perl distribution + + ($module =~ m/[,>]$/) && next; + + # if the module name starts in a dot it is not a module name. + # Is this necessary? Please give me an example if you turn this + # back on. + + # ($module =~ m/^\./) && next; + + # if the module starts with /, it is an absolute path to a file + if ($module =~ m(^/)) { + print "$module\n"; + next; + } + + # sometimes people do use POSIX qw(foo), or use POSIX(qw(foo)) etc. + # we can strip qw.*$, as well as (.*$: + $module =~ s/qw.*$//; + $module =~ s/\(.*$//; + + # if the module ends with .pm, strip it to leave only basename. + $module =~ s/\.pm$//; + + # some perl programmers write 'require URI/URL;' when + # they mean 'require URI::URL;' + + $module =~ s/\//::/; + + # trim off trailing parentheses if any. Sometimes people pass + # the module an empty list. + + $module =~ s/\(\s*\)$//; + + if ( $module =~ m/^v?([0-9._]+)$/ ) { + # if module is a number then both require and use interpret that + # to mean that a particular version of perl is specified + + my $ver = $1; + if ($ver =~ /5.00/) { + $perlreq{"0:$ver"} = 1; + next; + } + else { + $perlreq{"1:$ver"} = 1; + next; + } + + }; + + # ph files do not use the package name inside the file. + # perlmodlib documentation says: + + # the .ph files made by h2ph will probably end up as + # extension modules made by h2xs. + + # so do not expend much effort on these. + + + # there is no easy way to find out if a file named systeminfo.ph + # will be included with the name sys/systeminfo.ph so only use the + # basename of *.ph files + + ($module =~ m/\.ph$/) && next; + + # use base|parent qw(Foo) dependencies + if ($statement eq "use" && ($module eq "base" || $module eq "parent")) { + add_require($module, undef); + if ($version =~ /^qw\s*[(\/'"]\s*([^)\/"']+?)\s*[)\/"']/) { + add_require($_, undef) for split(' ', $1); + } + elsif ($version =~ /(["'])([^"']+)\1/) { + add_require($2, undef); + } + next; + } + $version = undef unless $version =~ /^$modver_re$/o; + + add_require($module, $version); + } + + } + + close(FILE) || + die("$0: Could not close file: '$file' : $!\n"); + + return; +} diff --git a/SOURCES/perllib.attr b/SOURCES/perllib.attr new file mode 100644 index 0000000..907e00b --- /dev/null +++ b/SOURCES/perllib.attr @@ -0,0 +1,3 @@ +%__perllib_provides %{_rpmconfigdir}/perl.prov.stack +%__perllib_requires %{_rpmconfigdir}/perl.req.stack +%__perllib_magic ^Perl[[:digit:]] module source.* diff --git a/SPECS/perl516.spec b/SPECS/perl516.spec new file mode 100644 index 0000000..21f656f --- /dev/null +++ b/SPECS/perl516.spec @@ -0,0 +1,215 @@ +%global scl_name_base perl +%global scl_name_version 516 +%global scl %{scl_name_base}%{scl_name_version} +%scl_package %scl + +%global install_scl 1 + +# do not produce empty debuginfo package +%global debug_package %{nil} + +Summary: Package that installs %scl +Name: %scl_name +Version: 1.1 +Release: 3%{?dist} +License: GPLv2+ +Source0: macro-build +Source1: perl.prov.stack +Source2: perl.req.stack +Source3: perl.attr +Source4: perllib.attr +Source5: README +Source6: LICENSE +BuildRequires: help2man + +%if 0%{?install_scl} +Requires: %{scl_prefix}perl +%endif +BuildRequires: scl-utils-build +BuildRequires: iso-codes + +%description +This is the main package for %scl Software Collection. + +%package runtime +Summary: Package that handles %scl Software Collection +Requires: scl-utils + +%description runtime +Package shipping essential scripts to work with %scl Software Collection. + +%package build +Summary: Package shipping basic build configuration +Requires: scl-utils-build +Requires: %{name}-scldevel = %{version}-%{release} + +%description build +Package shipping essential configuration macros to build %scl Software Collection. + +%package scldevel +Summary: Package shipping development files for %scl + +%description scldevel +Package shipping development files, especially usefull for development of +packages depending on %scl Software Collection. + +%prep +%setup -c -T + +# This section generates README file from a template and creates man page +# from that file, expanding RPM macros in the template file. +cat >README <<'EOF' +%{expand:%(cat %{SOURCE5})} +EOF + +# copy the license file so %%files section sees it +cp %{SOURCE6} . + +%build +# generate a helper script that will be used by help2man +cat >h2m_helper <<'EOF' +#!/bin/bash +[ "$1" == "--version" ] && echo "%{scl_name} %{version} Software Collection" || cat README +EOF +chmod a+x h2m_helper + +# generate the man page +help2man -N --section 7 ./h2m_helper -o %{scl_name}.7 + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot}%{_scl_scripts}/root +cat >> %{buildroot}%{_scl_scripts}/enable << EOF +export PATH=%{_bindir}\${PATH:+:\${PATH}} +export LD_LIBRARY_PATH=%{_libdir}\${LD_LIBRARY_PATH:+:\${LD_LIBRARY_PATH}} +export MANPATH=%{_mandir}:\${MANPATH} +EOF +%scl_install + +# Add the aditional macros to macros.%%{scl}-config +cat %{SOURCE0} >> %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl}-config +sed -i 's|@SCL@|%{scl}|g' %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl}-config + +cat >> %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel << EOF +%%scl_%{scl_name_base} %{scl} +%%scl_prefix_%{scl_name_base} %{scl_prefix} +EOF + +install -D -m 755 %{SOURCE1} %{buildroot}%{_root_prefix}/lib/rpm/perl.prov.stack +install -D -m 755 %{SOURCE2} %{buildroot}%{_root_prefix}/lib/rpm/perl.req.stack +sed -i 's|__SCL_NAME__|%{scl}-perl|g' %{buildroot}%{_root_prefix}/lib/rpm/perl.prov.stack +sed -i 's|__SCL_NAME__|%{scl}-perl|g' %{buildroot}%{_root_prefix}/lib/rpm/perl.req.stack + +%if ( 0%{?rhel} && 0%{?rhel} < 7 ) +mkdir -p %{buildroot}/usr/lib/rpm/fileattrs/ +install -m 644 %{SOURCE3} %{buildroot}%{_root_prefix}/lib/rpm/fileattrs/perl.attr +install -m 644 %{SOURCE4} %{buildroot}%{_root_prefix}/lib/rpm/fileattrs/perllib.attr +%endif + +# install generated man page +mkdir -p %{buildroot}%{_mandir}/man7/ +install -m 644 %{scl_name}.7 %{buildroot}%{_mandir}/man7/%{scl_name}.7 + +%files + +%files runtime -f filesystem +%doc README LICENSE +%scl_files +%{_mandir}/man7/%{scl_name}.* + +%files build +%{_root_sysconfdir}/rpm/macros.%{scl}-config + +%files scldevel +%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel +%{_root_prefix}/lib/rpm/perl.req.stack +%{_root_prefix}/lib/rpm/perl.prov.stack +%if ( 0%{?rhel} && 0%{?rhel} < 7 ) +%{_root_prefix}/lib/rpm/fileattrs/perl.attr +%{_root_prefix}/lib/rpm/fileattrs/perllib.attr +%endif + +%changelog +* Fri Mar 28 2014 Jitka Plesnikova - 1.1-3 +- Wrong macro in README +- Resolves: rhbz#1061453 + +* Tue Mar 25 2014 Jitka Plesnikova - 1.1-2 +- Use "-f filesystem" for files section of -runtime on RHEL 7 +- Resolves: rhbz#1079938 + +* Mon Feb 17 2014 Jitka Plesnikova - 1.1-1 +- Introduce README and LICENSE. +- Change version to 1.1. +- Resolves: rhbz#1061453 + +* Wed Feb 05 2014 Jitka Plesnikova - 1-21 +- Update dependencies of sub-package build +- Resolves: rhbz#1063206 + +* Mon Jan 20 2014 Jitka Plesnikova - 1-20 +- Changed name of sub-package devel to scldevel +- Added the file macros.%%{scl_name_base}-scldevel +- Resolves: rhbz#1055580 + +* Mon Jan 20 2014 Jitka Plesnikova - 1-19 +- Rebuilt against new scl-utils +- Resolves: rhbz#1054726 + +* Tue Jan 14 2014 Jitka Plesnikova - 1-18 +- Moved perl.(prov|req).stack and file*.attr to sub-package devel +- Resolves: rhbz#1052183 + +* Wed Jan 08 2014 Jitka Plesnikova - 1-17 +- Define macros for tests sub-package +- Resolves: rhbz#1049366 + +* Mon Nov 25 2013 Jitka Plesnikova - 1-16 +- Disable macro perl_bootstrap + +* Tue Nov 12 2013 Jitka Plesnikova - 1-15 +- Enable macro perl_bootstrap + +* Mon Nov 04 2013 Jitka Plesnikova - 1-14 +- Override %%__pkgconfig_path to solve problems with invalid perl provides + +* Wed Oct 30 2013 Jitka Plesnikova - 1-13 +- Update %%scl_package_override + +* Wed Oct 30 2013 Jitka Plesnikova - 1-12 +- Define %%prep section +- Create macro-build + +* Mon Jun 17 2013 Jitka Plesnikova - 1-11 +- Disable macro perl_bootstrap + +* Thu May 23 2013 Jitka Plesnikova - 1-10 +- Update definition of MANPATH (rhbz#966388) + +* Tue May 21 2013 Jitka Plesnikova - 1-9 +- Do not remove /opt/rh/perl516 to prevent removing of any user data + +* Mon May 13 2013 Jitka Plesnikova - 1-8 +- Remove the directory /opt/rh/perl516 after uninstalling rpm (rhbz#956215) + +* Sun Apr 28 2013 Jitka Plesnikova - 1-7 +- Remove extra colon from path definition + +* Thu Apr 25 2013 Jitka Plesnikova - 1-6 +- Update setting of environment variable in the script enable + +* Wed Feb 6 2013 Jitka Plesnikova 1-5 +- enable macro perl_bootstrap + +* Fri Oct 5 2012 Marcela Mašláňová 1-4 +- update to new version of Perl 5.16 +- package perl.{prov,req}.stack as executables + +* Mon Jul 23 2012 Marcela Mašláňová 1-3 +- change permission from 700 to 644 on perl.{prov,req} + +* Tue Mar 6 2012 Marcela Mašláňová 1.2 +- fix dependency on collection *-runtime + +* Tue Dec 06 2011 Marcela Mašláňová 1.1 +- initial packaging of meta perl514 package