[meego-commits] 6661: Changes to Trunk:Testing/perl-File-Which
Wang Quanxian
quanxian.wang at intel.com
Mon Aug 16 09:12:02 UTC 2010
Hi,
I have made the following changes to perl-File-Which in project Trunk:Testing. Please review and accept ASAP.
Thank You,
Wang Quanxian
[This message was auto-generated]
---
Request #6661:
submit: devel:languages:perl/perl-File-Which(r6) -> Trunk:Testing/perl-File-Which
Message:
upgrade from 0.05 to 1.09
State: superseded 2010-08-15T17:19:36 quanxianwang
Comment: superseded by 6670
History: new 2010-08-15T17:02:06 quanxianwang
changes files:
--------------
--- perl-File-Which.changes
+++ perl-File-Which.changes
@@ -1,2 +1,3 @@
-* Wed June 30 2010 Quanxian Wang <quanxian.wang at intel.com>
-- Add %doc before man file entry
+* Wed Jul 28 2010 Quanxian Wang <quanxian.wang at intel.com> 1.09
+- update to 1.09
+
old:
----
File-Which-0.05.tar.gz
new:
----
File-Which-1.09.tar.gz
perl-File-Which.yaml
spec files:
-----------
--- perl-File-Which.spec
+++ perl-File-Which.spec
@@ -1,17 +1,23 @@
+#
+# Do not Edit! Generated by:
+# spectacle version 0.18
+#
+# >> macros
+# << macros
+
Name: perl-File-Which
-Version: 0.05
-Release: 5
Summary: Portable implementation of the 'which' utility
-
+Version: 1.09
+Release: 5
Group: Development/Libraries
License: GPL+ or Artistic
+BuildArch: noarch
URL: http://search.cpan.org/dist/File-Which/
Source0: http://www.cpan.org/authors/id/P/PE/PEREINAR/File-Which-%{version}.tar.gz
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-
-BuildArch: noarch
-BuildRequires: perl(ExtUtils::MakeMaker)
+Source100: perl-File-Which.yaml
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
+BuildRequires: perl(ExtUtils::MakeMaker) perl(Test::More)
+
%description
File::Which is a portable implementation (in Perl) of 'which', and can
@@ -21,56 +27,65 @@
as 'which'.
+
+
%prep
%setup -q -n File-Which-%{version}
+# >> setup
+# << setup
%build
-%{__perl} Makefile.PL INSTALLDIRS=vendor
-make %{?_smp_mflags}
+# >> build pre
+# << build pre
+if test -f Makefile.PL; then
+%{__perl} Makefile.PL INSTALLDIRS=vendor
+make %{?jobs:-j%jobs}
+else
+%{__perl} Build.PL --installdirs vendor
+./Build
+fi
+# >> build post
+# << build post
%install
-rm -rf $RPM_BUILD_ROOT
-make pure_install PERL_INSTALL_ROOT=$RPM_BUILD_ROOT
-find $RPM_BUILD_ROOT -type f -name .packlist -exec rm -f {} ';'
-find $RPM_BUILD_ROOT -depth -type d -exec rmdir {} 2>/dev/null ';'
+rm -rf %{buildroot}
+# >> install pre
+# << install pre
+if test -f Makefile.PL; then
+make pure_install PERL_INSTALL_ROOT=%{buildroot}
+else
+./Build install --installdirs vendor
+fi
+find %{buildroot} -type f -name .packlist -exec rm -f {} ';'
+find %{buildroot} -depth -type d -exec rmdir {} 2>/dev/null ';'
+find %{buildroot} -type f -name '*.bs' -empty -exec rm -f {} ';'
+%{_fixperms} %{buildroot}/*
+
+# >> install post
chmod -R u+w $RPM_BUILD_ROOT/*
+# << install post
%check
-make test
+# >> check
+#make test
+# << check
+
+
-%clean
-rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
+# >> files
%doc Changes README
%{_bindir}/pwhich
%{perl_vendorlib}/File/
%doc %{_mandir}/man1/*.1*
%doc %{_mandir}/man3/*.3pm*
+# << files
-%changelog
-* Thu Feb 26 2009 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.05-5
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
-
-* Wed Feb 27 2008 Tom "spot" Callaway <tcallawa at redhat.com> - 0.05-4
-- Rebuild for perl 5.10 (again)
-
-* Fri Jan 11 2008 Tom "spot" Callaway <tcallawa at redhat.com> - 0.05-3
-- rebuild for new perl
-
-* Mon Oct 15 2007 Tom "spot" Callaway <tcallawa at redhat.com> - 0.05-2.1
-- correct license tag
-- add BR: perl(ExtUtils::MakeMaker)
-
-* Mon Dec 18 2006 Jose Pedro Oliveira <jpo at di.uminho.pt> - 0.05-2
-- find: fixed arguments order.
-
-* Sun Dec 17 2006 Jose Pedro Oliveira <jpo at di.uminho.pt> - 0.05-1
-- First build.
other changes:
--------------
++++++ File-Which-0.05.tar.gz -> File-Which-1.09.tar.gz
--- Changes
+++ Changes
@@ -1,44 +1,65 @@
Revision history for File::Which.
-0.05 Mon 24 Jun 23:06:45 CET 2002
- - Made sure the file wasn't a directory, as directories usually
- have x set.
- - made pwhich say so if it didn't find a file.
- - improve file searching: file doesn't have to be -x on MacOS,
- only -e. Same thing on DOSish, but only if the file extension is
- in PATHEXT (so we don't look for non-executable files that
- happen to be in PATH).
- - For DOSish, VMS and Mac, add current directory in front of path,
- as (on Win32) this one is searched first. (could someone tell me
- if this assumption is true on VMS and MacOS too?)
- - large updates to test suite: we now emulate executable files
- inside t/test-bin/. Like this we have more control. I hope
- this test suite will be better, but it is probably still
- shaky. Any reports would do me a lot of good.
-
-0.04 Thu 20 Jun 21:50:30 CET 2002
- - Re-wrote some parts for more platform-specific code (Mac and VMS
- primarily). Thanks to Abigail and the PPT `which':
- http://www.perl.com/language/ppt/src/which/index.html
- - Removed the '~' handling: was probably broken anyway.
- - fixed a bug with pwhich -a where it would return the number of
- results instead of the results
-
-0.03 Wed 24 Apr 14:48:50 CET 2002
- - Changed the '~' handling: last version was buggy, it needs to
- only replace it on Unix and if $ENV{HOME} exists, replacing it
- then with $ENV{HOME} (removes File::HomeDir dependency).
- - Added documentation to pwhich (you can run perldoc on it now)
-
-0.02 Fri 19 Apr 02:52:15 CET 2002
- - Some documentation changes
- - Added where($short_exec_name) as an alias for
- which($short_exec_name, { all => 1 }).
- [Request from Jerrad Pierce <belg4mit (at) mit.edu>]
- - Added the which option --all. Other options just bloat everything.
- - Added `pwhich', perl-only replacement for `which'.
-
-0.01 Sun 14 Apr 23:05:37 CET 2002
- - original version; extracted from DocSet. Only plain which() with
- docs and tests.
+1.09 Sun 27 Sep 2009
+ - Set svn:executable for the exe files so cygwin tests work
+1.08 Tue 15 Sep 2009
+ - Fixing pwhich
+ - Adding a proper test for it
+ - Adds a dependency on Test::Script 1.08
+
+1.07 Tue 28 Jul 2009
+ - CPAN Testers looks good for 1.06_01, moving to production release
+
+1.06_01 Sat 25 Jul 2009
+ - Taking over this hugely old and very popular module to clean it
+ up a bit.
+ - Moved from Test.pm to Test::More.
+ - Updated Changes
+ - Cleaned up some code a bit to make it more readable.
+ - Added an explicit minimum Perl version
+ - Changed platform detection code to constants for less code size
+ and compile-time if () optimisation.
+ - Removed non-leading tabs and other whitespace nigglies.
+
+0.05 Mon 24 Jun 2002
+ - Made sure the file wasn't a directory, as directories usually
+ have x set.
+ - made pwhich say so if it didn't find a file.
+ - improve file searching: file doesn't have to be -x on MacOS,
+ only -e. Same thing on DOSish, but only if the file extension is
+ in PATHEXT (so we don't look for non-executable files that
+ happen to be in PATH).
+ - For DOSish, VMS and Mac, add current directory in front of path,
+ as (on Win32) this one is searched first. (could someone tell me
+ if this assumption is true on VMS and MacOS too?)
+ - large updates to test suite: we now emulate executable files
+ inside t/test-bin/. Like this we have more control. I hope
+ this test suite will be better, but it is probably still
+ shaky. Any reports would do me a lot of good.
+
+0.04 Thu 20 Jun 2002
+ - Re-wrote some parts for more platform-specific code (Mac and VMS
+ primarily). Thanks to Abigail and the PPT `which':
+ http://www.perl.com/language/ppt/src/which/index.html
+ - Removed the '~' handling: was probably broken anyway.
+ - fixed a bug with pwhich -a where it would return the number of
+ results instead of the results
+
+0.03 Wed 24 Apr 2002
+ - Changed the '~' handling: last version was buggy, it needs to
+ only replace it on Unix and if $ENV{HOME} exists, replacing it
+ then with $ENV{HOME} (removes File::HomeDir dependency).
+ - Added documentation to pwhich (you can run perldoc on it now)
+
+0.02 Fri 19 Apr 2002
+ - Some documentation changes
+ - Added where($short_exec_name) as an alias for
+ which($short_exec_name, { all => 1 }).
+ [Request from Jerrad Pierce <belg4mit (at) mit.edu>]
+ - Added the which option --all. Other options just bloat everything.
+ - Added `pwhich', perl-only replacement for `which'.
+
+0.01 Sun 14 Apr 2002
+ - original version; extracted from DocSet. Only plain which() with
+ docs and tests.
--- LICENSE
+++ LICENSE
+
+Terms of Perl itself
+
+a) the GNU General Public License as published by the Free
+ Software Foundation; either version 1, or (at your option) any
+ later version, or
+b) the "Artistic License"
+
+----------------------------------------------------------------------------
+
+The General Public License (GPL)
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave,
+Cambridge, MA 02139, 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 Library 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
+
+
+----------------------------------------------------------------------------
+
+The Artistic License
+
+Preamble
+
+The intent of this document is to state the conditions under which a Package
+may be copied, such that the Copyright Holder maintains some semblance of
+artistic control over the development of the package, while giving the users of the
+package the right to use and distribute the Package in a more-or-less customary
+fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+- "Package" refers to the collection of files distributed by the Copyright
+ Holder, and derivatives of that collection of files created through textual
+ modification.
+- "Standard Version" refers to such a Package if it has not been modified,
+ or has been modified in accordance with the wishes of the Copyright
+ Holder.
+- "Copyright Holder" is whoever is named in the copyright or copyrights for
+ the package.
+- "You" is you, if you're thinking about copying or distributing this Package.
+- "Reasonable copying fee" is whatever you can justify on the basis of
+ media cost, duplication charges, time of people involved, and so on. (You
+ will not be required to justify it to the Copyright Holder, but only to the
+ computing community at large as a market that must bear the fee.)
+- "Freely Available" means that no fee is charged for the item itself, though
+ there may be fees involved in handling the item. It also means that
+ recipients of the item may redistribute it under the same conditions they
+ received it.
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you duplicate
+all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived from
+the Public Domain or from the Copyright Holder. A Package modified in such a
+way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided
+that you insert a prominent notice in each changed file stating how and when
+you changed that file, and provided that you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise
+ make them Freely Available, such as by posting said modifications
+ to Usenet or an equivalent medium, or placing the modifications on
+ a major archive site such as ftp.uu.net, or by allowing the
+ Copyright Holder to include your modifications in the Standard
+ Version of the Package.
+
+ b) use the modified Package only within your corporation or
+ organization.
+
+ c) rename any non-standard executables so the names do not
+ conflict with standard executables, which must also be provided,
+ and provide a separate manual page for each non-standard
+ executable that clearly documents how it differs from the Standard
+ Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable
+form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library
+ files, together with instructions (in the manual page or equivalent)
+ on where to get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of
+ the Package with your modifications.
+
+ c) accompany any non-standard executables with their
+ corresponding Standard Version executables, giving the
+ non-standard executables non-standard names, and clearly
+ documenting the differences in manual pages (or equivalent),
+ together with instructions on where to get the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this Package.
+You may charge any fee you choose for support of this Package. You may not
+charge a fee for this Package itself. However, you may distribute this Package in
+aggregate with other (possibly commercial) programs as part of a larger
+(possibly commercial) software distribution provided that you do not advertise
+this Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as output from
+the programs of this Package do not automatically fall under the copyright of this
+Package, but belong to whomever generated them, and may be sold
+commercially, and may be aggregated with this Package.
+
+7. C or perl subroutines supplied by you and linked into this Package shall not
+be considered part of this Package.
+
+8. The name of the Copyright Holder may not be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.
+
+The End
+
+
--- MANIFEST
+++ MANIFEST
@@ -1,17 +1,23 @@
Changes
+lib/File/Which.pm
+LICENSE
Makefile.PL
-MANIFEST
+MANIFEST This list of files
README
-Which.pm
-bin/pwhich
-t/load.t
-t/simple.t
-t/all.t
+script/pwhich
+t/01_compile.t
+t/02_all.t
+t/03_simple.t
+t/04_pwhich.t
+t/97_meta.t
+t/98_pod.t
+t/99_pmv.t
+t/test-bin/all
+t/test-bin/all.bat
+t/test-bin/all.exe
+t/test-bin/README.txt
t/test-bin/test1.exe
t/test-bin/test2.bat
t/test-bin/test3
t/test-bin/test4/foo.txt
-t/test-bin/all
-t/test-bin/all.bat
-t/test-bin/all.exe
-t/test-bin/README.txt
\ No newline at end of file
+META.yml Module meta-data (added by MakeMaker)
--- META.yml
+++ META.yml
+--- #YAML:1.0
+name: File-Which
+version: 1.09
+abstract: Portable implementation of the "which" utility
+author:
+ - Adam Kennedy <adamk at cpan.org>
+license: perl
+distribution_type: module
+configure_requires:
+ ExtUtils::MakeMaker: 0
+build_requires:
+ ExtUtils::MakeMaker: 0
+requires:
+ Exporter: 0
+ File::Spec: 0.60
+ Getopt::Std: 0
+ Test::More: 0.80
+ Test::Script: 1.05
+no_index:
+ directory:
+ - t
+ - inc
+generated_by: ExtUtils::MakeMaker version 6.50
+meta-spec:
+ url: http://module-build.sourceforge.net/META-spec-v1.4.html
+ version: 1.4
--- Makefile.PL
+++ Makefile.PL
@@ -1,13 +1,25 @@
+use 5.004;
+use strict;
use ExtUtils::MakeMaker;
WriteMakefile(
- 'NAME' => 'File::Which',
- 'VERSION_FROM' => 'Which.pm', # finds $VERSION
- 'PREREQ_PM' => {
- 'File::Spec' => 0.60, # The version coming with perl-5.005_03
- },
- 'EXE_FILES' => ['bin/pwhich'],
- ($] >= 5.005 ?
- (ABSTRACT_FROM => 'Which.pm', # retrieve abstract from module
- AUTHOR => 'Per Einar Ellefsen <per.einar (at) skynet.be>') : ()),
+ 'NAME' => 'File::Which',
+ 'ABSTRACT' => 'Portable implementation of the "which" utility',
+ 'VERSION_FROM' => 'lib/File/Which.pm',
+ 'PREREQ_PM' => {
+ 'Exporter' => 0,
+ 'Getopt::Std' => 0,
+ 'File::Spec' => '0.60',
+ 'Test::More' => '0.80',
+ 'Test::Script' => '1.05',
+ },
+ 'EXE_FILES' => [
+ 'script/pwhich',
+ ],
+ ( $] >= 5.005 ? (
+ AUTHOR => 'Adam Kennedy <adamk at cpan.org>',
+ ) : () ),
+ ( $ExtUtils::MakeMaker::VERSION ge '6.31' ? (
+ LICENSE => 'perl',
+ ) : () ),
);
--- README
+++ README
@@ -1,56 +1,109 @@
-File::Which
-===========
+NAME
+ File::Which - Portable implementation of the `which' utility
-File::Which is a portable implementation (in Perl) of `which', and can
-be used to get the absolute filename of an executable program
-installed somewhere in your PATH, or just check for its existence. It
-includes the command-line utility `pwhich' which has the same function
-as `which'.
-
-INSTALLATION
-
-To install this module type the following (on Windows, use `nmake',
-which can be obtained freely from Microsoft: see ActivePerl
-documentation):
-
- $ tar zxvf File-Which-x.xx.tar.gz (replace x.xx with the correct version number)
- $ cd File-Which-x.xx
- $ perl Makefile.PL
- $ make
- $ make test
- $ make install
-
-Using the CPAN shell:
-
- $ perl -MCPAN -eshell
- cpan> install File::Which
- cpan> exit
-
-TESTING
-
-When you run `make test', File::Which will test some of its
-functionality. It uses the t/test-bin/ directory for this, treating
-the files below it as programs.
-
-The tests might still be a bit shaky because there is a bit of magic
-involved in doing this -- please report any problems you might have.
-
-Furthermore, the files under t/test-bin/ are *not* supposed to be
-executed: do so at your own risk. Especially, the *.exe files are not
-valid applications as they aren't compiled and might make your system
-crash or whatever. Execute them at your own risk. (But don't worry,
-this package doesn't bite otherwise :)
-
-DEPENDENCIES
-
-This module requires these other modules and libraries:
-
- File::Spec - distributed with perl.
-
-COPYRIGHT AND LICENCE
-
-Copyright (C) 2002 Per Einar Ellefsen <per.einar (at) skynet.be>
-
-This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
+SYNOPSIS
+ use File::Which; # exports which()
+ use File::Which qw(which where); # exports which() and where()
+
+ my $exe_path = which('perldoc');
+
+ my @paths = where('perl');
+ - Or -
+ my @paths = which('perl'); # an array forces search for all of them
+
+DESCRIPTION
+ "File::Which" was created to be able to get the paths to executable
+ programs on systems under which the `which' program wasn't implemented
+ in the shell.
+
+ "File::Which" searches the directories of the user's "PATH" (as returned
+ by "File::Spec->path()"), looking for executable files having the name
+ specified as a parameter to "which()". Under Win32 systems, which do not
+ have a notion of directly executable files, but uses special extensions
+ such as ".exe" and ".bat" to identify them, "File::Which" takes extra
+ steps to assure that you will find the correct file (so for example, you
+ might be searching for "perl", it'll try perl.exe, perl.bat, etc.)
+
+Steps Used on Win32, DOS, OS2 and VMS
+ Windows NT
+ Windows NT has a special environment variable called "PATHEXT", which is
+ used by the shell to look for executable files. Usually, it will contain
+ a list in the form ".EXE;.BAT;.COM;.JS;.VBS" etc. If "File::Which" finds
+ such an environment variable, it parses the list and uses it as the
+ different extensions.
+
+ Windows 9x and other ancient Win/DOS/OS2
+ This set of operating systems don't have the "PATHEXT" variable, and
+ usually you will find executable files there with the extensions ".exe",
+ ".bat" and (less likely) ".com". "File::Which" uses this hardcoded list
+ if it's running under Win32 but does not find a "PATHEXT" variable.
+
+ VMS
+ Same case as Windows 9x: uses ".exe" and ".com" (in that order).
+
+Functions
+ which($short_exe_name)
+ Exported by default.
+
+ $short_exe_name is the name used in the shell to call the program (for
+ example, "perl").
+
+ If it finds an executable with the name you specified, "which()" will
+ return the absolute path leading to this executable (for example,
+ /usr/bin/perl or C:\Perl\Bin\perl.exe).
+
+ If it does *not* find the executable, it returns "undef".
+
+ If "which()" is called in list context, it will return *all* the
+ matches.
+
+ where($short_exe_name)
+ Not exported by default.
+
+ Same as "which($short_exe_name)" in array context. Same as the `where'
+ utility, will return an array containing all the path names matching
+ $short_exe_name.
+
+BUGS AND CAVEATS
+ Not tested on VMS or MacOS, although there is platform specific code for
+ those. Anyone who haves a second would be very kind to send me a report
+ of how it went.
+
+ File::Spec adds the current directory to the front of PATH if on Win32,
+ VMS or MacOS. I have no knowledge of those so don't know if the current
+ directory is searced first or not. Could someone please tell me?
+
+SUPPORT
+ Bugs should be reported via the CPAN bug tracker at
+
+ <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=File-Which>
+
+ For other issues, contact the maintainer.
+
+AUTHOR
+ Adam Kennedy <adamk at cpan.org>
+
+ Per Einar Ellefsen <pereinar at cpan.org>
+
+ Originated in modperl-2.0/lib/Apache/Build.pm. Changed for use in DocSet
+ (for the mod_perl site) and Win32-awareness by me, with slight
+ modifications by Stas Bekman, then extracted to create "File::Which".
+
+ Version 0.04 had some significant platform-related changes, taken from
+ the Perl Power Tools `which' implementation by Abigail with enhancements
+ from Peter Prymmer. See
+ <http://www.perl.com/language/ppt/src/which/index.html> for more
+ information.
+
+COPYRIGHT
+ Copyright 2002 Per Einar Ellefsen.
+
+ Some parts copyright 2009 Adam Kennedy.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the same terms as Perl itself.
+
+SEE ALSO
+ File::Spec, which(1), Perl Power Tools:
+ <http://www.perl.com/language/ppt/index.html>.
--- Which.pm
+++ Which.pm
-package File::Which;
-
-use strict;
-
-require Exporter;
-
- at File::Which::ISA = qw(Exporter);
-
- at File::Which::EXPORT = qw(which);
- at File::Which::EXPORT_OK = qw(where);
-
-$File::Which::VERSION = '0.05';
-
-use File::Spec;
-
-my $Is_VMS = ($^O eq 'VMS');
-my $Is_MacOS = ($^O eq 'MacOS');
-my $Is_DOSish = (($^O eq 'MSWin32') or
- ($^O eq 'dos') or
- ($^O eq 'os2'));
-
-# For Win32 systems, stores the extensions used for
-# executable files
-# For others, the empty string is used
-# because 'perl' . '' eq 'perl' => easier
-my @path_ext = ('');
-if ($Is_DOSish) {
- if ($ENV{PATHEXT} and $Is_DOSish) { # WinNT. PATHEXT might be set on Cygwin, but not used.
- push @path_ext, split ';', $ENV{PATHEXT};
- }
- else {
- push @path_ext, qw(.com .exe .bat); # Win9X or other: doesn't have PATHEXT, so needs hardcoded.
- }
-}
-elsif ($Is_VMS) {
- push @path_ext, qw(.exe .com);
-}
-
-sub which {
- my ($exec) = @_;
-
- return undef unless $exec;
-
- my $all = wantarray;
- my @results = ();
-
- # check for aliases first
- if ($Is_VMS) {
- my $symbol = `SHOW SYMBOL $exec`;
- chomp($symbol);
- if (!$?) {
- return $symbol unless $all;
- push @results, $symbol;
- }
- }
- if ($Is_MacOS) {
- my @aliases = split /\,/, $ENV{Aliases};
- foreach my $alias (@aliases) {
- # This has not been tested!!
- # PPT which says MPW-Perl cannot resolve `Alias $alias`,
- # let's just hope it's fixed
- if (lc($alias) eq lc($exec)) {
- chomp(my $file = `Alias $alias`);
- last unless $file; # if it failed, just go on the normal way
- return $file unless $all;
- push @results, $file;
- # we can stop this loop as if it finds more aliases matching,
- # it'll just be the same result anyway
- last;
- }
- }
- }
-
- my @path = File::Spec->path();
- unshift @path, File::Spec->curdir if $Is_DOSish or $Is_VMS or $Is_MacOS;
-
- for my $base (map { File::Spec->catfile($_, $exec) } @path) {
- for my $ext (@path_ext) {
- my $file = $base.$ext;
-# print STDERR "$file\n";
-
- if ((-x $file or # executable, normal case
- ($Is_MacOS || # MacOS doesn't mark as executable so we check -e
- ($Is_DOSish and grep { $file =~ /$_$/i } @path_ext[1..$#path_ext])
- # DOSish systems don't pass -x on non-exe/bat/com files.
- # so we check -e. However, we don't want to pass -e on files
- # that aren't in PATHEXT, like README.
- and -e _)
- ) and !-d _)
- { # and finally, we don't want dirs to pass (as they are -x)
-
-# print STDERR "-x: ", -x $file, " -e: ", -e _, " -d: ", -d _, "\n";
-
- return $file unless $all;
- push @results, $file; # Make list to return later
- }
- }
- }
-
- if($all) {
- return @results;
- } else {
- return undef;
- }
-}
-
-sub where {
- my @res = which($_[0]); # force wantarray
- return @res;
-}
-
-1;
-__END__
-
-=head1 NAME
-
-File::Which - Portable implementation of the `which' utility
-
-=head1 SYNOPSIS
-
- use File::Which; # exports which()
- use File::Which qw(which where); # exports which() and where()
-
- my $exe_path = which('perldoc');
-
- my @paths = where('perl');
- - Or -
- my @paths = which('perl'); # an array forces search for all of them
-
-=head1 DESCRIPTION
-
-C<File::Which> was created to be able to get the paths to executable programs
-on systems under which the `which' program wasn't implemented in the shell.
-
-C<File::Which> searches the directories of the user's C<PATH> (as returned by
-C<File::Spec-E<gt>path()>), looking for executable files having the name specified
-as a parameter to C<which()>. Under Win32 systems, which do not have a notion of
-directly executable files, but uses special extensions such as C<.exe> and
-C<.bat> to identify them, C<File::Which> takes extra steps to assure that you
-will find the correct file (so for example, you might be searching for C<perl>,
-it'll try C<perl.exe>, C<perl.bat>, etc.)
-
-=head1 Steps Used on Win32, DOS, OS2 and VMS
-
-=head2 Windows NT
-
-Windows NT has a special environment variable called C<PATHEXT>, which is used
-by the shell to look for executable files. Usually, it will contain a list in
-the form C<.EXE;.BAT;.COM;.JS;.VBS> etc. If C<File::Which> finds such an
-environment variable, it parses the list and uses it as the different extensions.
-
-=head2 Windows 9x and other ancient Win/DOS/OS2
-
-This set of operating systems don't have the C<PATHEXT> variable, and usually
-you will find executable files there with the extensions C<.exe>, C<.bat> and
-(less likely) C<.com>. C<File::Which> uses this hardcoded list if it's running
-under Win32 but does not find a C<PATHEXT> variable.
-
-=head2 VMS
-
-Same case as Windows 9x: uses C<.exe> and C<.com> (in that order).
-
-=head1 Functions
-
-=head2 which($short_exe_name)
-
-Exported by default.
-
-C<$short_exe_name> is the name used in the shell to call the program (for
-example, C<perl>).
-
-If it finds an executable with the name you specified, C<which()> will return
-the absolute path leading to this executable (for example, C</usr/bin/perl> or
-C<C:\Perl\Bin\perl.exe>).
-
-If it does I<not> find the executable, it returns C<undef>.
-
-If C<which()> is called in list context, it will return I<all> the
-matches.
-
-=head2 where($short_exe_name)
-
-Not exported by default.
-
-Same as C<which($short_exe_name)> in array context. Same as the
-C<`where'> utility, will return an array containing all the path names
-matching C<$short_exe_name>.
-
-
-=head1 Bugs and Caveats
-
-Not tested on VMS or MacOS, although there is platform specific code
-for those. Anyone who haves a second would be very kind to send me a
-report of how it went.
-
-File::Spec adds the current directory to the front of PATH if on
-Win32, VMS or MacOS. I have no knowledge of those so don't know if the
-current directory is searced first or not. Could someone please tell
-me?
-
-=head1 Author
-
-Per Einar Ellefsen, E<lt>per.einar (at) skynet.beE<gt>
-
-Originated in I<modperl-2.0/lib/Apache/Build.pm>. Changed for use in DocSet
-(for the mod_perl site) and Win32-awareness by me, with slight modifications
-by Stas Bekman, then extracted to create C<File::Which>.
-
-Version 0.04 had some significant platform-related changes, taken from
-the Perl Power Tools C<`which'> implementation by Abigail with
-enhancements from Peter Prymmer. See
-http://www.perl.com/language/ppt/src/which/index.html for more
-information.
-
-=head1 License
-
-This library is free software; you can redistribute it and/or modify it under
-the same terms as Perl itself.
-
-=head1 See Also
-
-L<File::Spec>, L<which(1)>, Perl Power Tools:
-http://www.perl.com/language/ppt/index.html .
-
-=cut
--- bin
+++ bin
-(directory)
--- bin/pwhich
+++ bin/pwhich
-#!/usr/bin/perl -w
-
-use strict;
-
-use File::Which;
-use Getopt::Std;
-
-my %opts = ();
-
-getopts('av', \%opts);
-
-my @files = @ARGV;
-
-if ($opts{v}) {
- print <<"END";
-This is pwhich running File::Which version $File::Which::VERSION
-
-Copyright 2002 Per Einar Ellefsen.
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-END
-
- exit;
-}
-
-unless(@files) {
- print <<"EOS";
-Usage: $0 [-a] [-v] programname [programname ...]
- -a Print all matches in PATH, not just the first.
- -v Prints version and exits
-
-EOS
-
- exit;
-}
-
-for my $file (@files) {
- my @result = $opts{a} ? which($file) : scalar which($file); # need to force scalar
- @result = () unless defined $result[0]; # we might end up with @result = (undef) -> 1 elem
- for my $result (@result) {
- print "$result\n" if $result;
- }
- print STDERR "pwhich: no $file in PATH\n" unless @result;
-}
-
-__END__
-
-=head1 NAME
-
-pwhich - Perl-only `which'
-
-=head1 Synopsis
-
- $ pwhich perl
- $ pwhich -a perl # print all matches
- $ pwhich perl perldoc ... # look for multiple programs
- $ pwhich -a perl perldoc ...
-
-=head1 DESCRIPTION
-
-`pwhich' is a command-line utility program for finding paths to other
-programs based on the user's C<PATH>. It is similar to the usualy Unix
-tool `which', and tries to emulate its functionality, but is written
-purely in Perl (uses the module C<File::Which>), so is portable.
-
-
-=head1 Calling syntax
-
- $ pwhich [-a] [-v] programname [programname ...]
-
-=head2 Options
-
-=over
-
-=item -a
-
-The option I<-a> will make C<pwhich> print all matches found in the
-C<PATH> variable instead of just the first one. Each match is printed
-on a separate line.
-
-=item -v
-
-Prints version (of C<File::Which>) and copyright notice and exits.
-
-=back
-
-=head1 License
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=head1 See Also
-
-L<perl>, L<File::Which>, L<which(1)>
-
-=head1 Author
-
-Per Einar Ellefsen, E<lt>per.einar (at) skynet.beE<gt>
-
-=cut
-
--- lib
+++ lib
+(directory)
--- lib/File
+++ lib/File
+(directory)
--- lib/File/Which.pm
+++ lib/File/Which.pm
+package File::Which;
+
+use 5.004;
+use strict;
+use Exporter ();
+use File::Spec ();
+
+use vars qw{$VERSION @ISA @EXPORT @EXPORT_OK};
+BEGIN {
+ $VERSION = '1.09';
+ @ISA = 'Exporter';
+ @EXPORT = 'which';
+ @EXPORT_OK = 'where';
+}
+
+use constant IS_VMS => ($^O eq 'VMS');
+use constant IS_MAC => ($^O eq 'MacOS');
+use constant IS_DOS => ($^O eq 'MSWin32' or $^O eq 'dos' or $^O eq 'os2');
+
+# For Win32 systems, stores the extensions used for
+# executable files
+# For others, the empty string is used
+# because 'perl' . '' eq 'perl' => easier
+my @PATHEXT = ('');
+if ( IS_DOS ) {
+ # WinNT. PATHEXT might be set on Cygwin, but not used.
+ if ( $ENV{PATHEXT} ) {
+ push @PATHEXT, split ';', $ENV{PATHEXT};
+ } else {
+ # Win9X or other: doesn't have PATHEXT, so needs hardcoded.
+ push @PATHEXT, qw{.com .exe .bat};
+ }
+} elsif ( IS_VMS ) {
+ push @PATHEXT, qw{.exe .com};
+}
+
+sub which {
+ my ($exec) = @_;
+
+ return undef unless $exec;
+
+ my $all = wantarray;
+ my @results = ();
+
+ # check for aliases first
+ if ( IS_VMS ) {
+ my $symbol = `SHOW SYMBOL $exec`;
+ chomp($symbol);
+ unless ( $? ) {
+ return $symbol unless $all;
+ push @results, $symbol;
+ }
+ }
+ if ( IS_MAC ) {
+ my @aliases = split /\,/, $ENV{Aliases};
+ foreach my $alias ( @aliases ) {
+ # This has not been tested!!
+ # PPT which says MPW-Perl cannot resolve `Alias $alias`,
+ # let's just hope it's fixed
+ if ( lc($alias) eq lc($exec) ) {
+ chomp(my $file = `Alias $alias`);
+ last unless $file; # if it failed, just go on the normal way
+ return $file unless $all;
+ push @results, $file;
+ # we can stop this loop as if it finds more aliases matching,
+ # it'll just be the same result anyway
+ last;
+ }
+ }
+ }
+
+ my @path = File::Spec->path;
+ if ( IS_DOS or IS_VMS or IS_MAC ) {
+ unshift @path, File::Spec->curdir;
+ }
+
+ foreach my $base ( map { File::Spec->catfile($_, $exec) } @path ) {
+ for my $ext ( @PATHEXT ) {
+ my $file = $base.$ext;
+
+ # We don't want dirs (as they are -x)
+ next if -d $file;
+
+ if (
+ # Executable, normal case
+ -x _
+ or (
+ # MacOS doesn't mark as executable so we check -e
+ IS_MAC
+ ||
+ (
+ IS_DOS
+ and
+ grep {
+ $file =~ /$_\z/i
+ } @PATHEXT[1..$#PATHEXT]
+ )
+ # DOSish systems don't pass -x on
+ # non-exe/bat/com files. so we check -e.
+ # However, we don't want to pass -e on files
+ # that aren't in PATHEXT, like README.
+ and -e _
+ )
+ ) {
+ return $file unless $all;
+ push @results, $file;
+ }
+ }
+ }
+
+ if ( $all ) {
+ return @results;
+ } else {
+ return undef;
+ }
+}
+
+sub where {
+ # force wantarray
+ my @res = which($_[0]);
+ return @res;
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+File::Which - Portable implementation of the `which' utility
+
+=head1 SYNOPSIS
+
+ use File::Which; # exports which()
+ use File::Which qw(which where); # exports which() and where()
+
+ my $exe_path = which('perldoc');
+
+ my @paths = where('perl');
+ - Or -
+ my @paths = which('perl'); # an array forces search for all of them
+
+=head1 DESCRIPTION
+
+C<File::Which> was created to be able to get the paths to executable programs
+on systems under which the `which' program wasn't implemented in the shell.
+
+C<File::Which> searches the directories of the user's C<PATH> (as returned by
+C<File::Spec-E<gt>path()>), looking for executable files having the name
+specified as a parameter to C<which()>. Under Win32 systems, which do not have a
+notion of directly executable files, but uses special extensions such as C<.exe>
+and C<.bat> to identify them, C<File::Which> takes extra steps to assure that
+you will find the correct file (so for example, you might be searching for
+C<perl>, it'll try F<perl.exe>, F<perl.bat>, etc.)
+
+=head1 Steps Used on Win32, DOS, OS2 and VMS
+
+=head2 Windows NT
+
+Windows NT has a special environment variable called C<PATHEXT>, which is used
+by the shell to look for executable files. Usually, it will contain a list in
+the form C<.EXE;.BAT;.COM;.JS;.VBS> etc. If C<File::Which> finds such an
+environment variable, it parses the list and uses it as the different
+extensions.
+
+=head2 Windows 9x and other ancient Win/DOS/OS2
+
+This set of operating systems don't have the C<PATHEXT> variable, and usually
+you will find executable files there with the extensions C<.exe>, C<.bat> and
+(less likely) C<.com>. C<File::Which> uses this hardcoded list if it's running
+under Win32 but does not find a C<PATHEXT> variable.
+
+=head2 VMS
+
+Same case as Windows 9x: uses C<.exe> and C<.com> (in that order).
+
+=head1 Functions
+
+=head2 which($short_exe_name)
+
+Exported by default.
+
+C<$short_exe_name> is the name used in the shell to call the program (for
+example, C<perl>).
+
+If it finds an executable with the name you specified, C<which()> will return
+the absolute path leading to this executable (for example, F</usr/bin/perl> or
+F<C:\Perl\Bin\perl.exe>).
+
+If it does I<not> find the executable, it returns C<undef>.
+
+If C<which()> is called in list context, it will return I<all> the
+matches.
+
+=head2 where($short_exe_name)
+
+Not exported by default.
+
+Same as C<which($short_exe_name)> in array context. Same as the
+C<`where'> utility, will return an array containing all the path names
+matching C<$short_exe_name>.
+
+=head1 BUGS AND CAVEATS
+
+Not tested on VMS or MacOS, although there is platform specific code
+for those. Anyone who haves a second would be very kind to send me a
+report of how it went.
+
+File::Spec adds the current directory to the front of PATH if on
+Win32, VMS or MacOS. I have no knowledge of those so don't know if the
+current directory is searced first or not. Could someone please tell
+me?
+
+=head1 SUPPORT
+
+Bugs should be reported via the CPAN bug tracker at
+
+L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=File-Which>
+
+For other issues, contact the maintainer.
+
+=head1 AUTHOR
+
+Adam Kennedy E<lt>adamk at cpan.orgE<gt>
+
+Per Einar Ellefsen E<lt>pereinar at cpan.orgE<gt>
+
+Originated in F<modperl-2.0/lib/Apache/Build.pm>. Changed for use in DocSet
+(for the mod_perl site) and Win32-awareness by me, with slight modifications
+by Stas Bekman, then extracted to create C<File::Which>.
+
+Version 0.04 had some significant platform-related changes, taken from
+the Perl Power Tools C<`which'> implementation by Abigail with
+enhancements from Peter Prymmer. See
+L<http://www.perl.com/language/ppt/src/which/index.html> for more
+information.
+
+=head1 COPYRIGHT
+
+Copyright 2002 Per Einar Ellefsen.
+
+Some parts copyright 2009 Adam Kennedy.
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+L<File::Spec>, L<which(1)>, Perl Power Tools:
+L<http://www.perl.com/language/ppt/index.html>.
+
+=cut
--- script
+++ script
+(directory)
--- script/pwhich
+++ script/pwhich
+#!/usr/bin/perl
+
+use 5.004;
+use strict;
+use File::Which ();
+use Getopt::Std ();
+
+use vars qw{$VERSION};
+BEGIN {
+ $VERSION = '1.09';
+}
+
+# Handle options
+my %opts = ();
+Getopt::Std::getopts('av', \%opts);
+
+if ( $opts{v} ) {
+ print <<"END_TEXT";
+This is pwhich running File::Which version $File::Which::VERSION
+
+Copyright 2002 Per Einar Ellefsen.
+
+Some parts copyright 2009 Adam Kennedy.
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+END_TEXT
+
+ exit(0);
+}
+
+unless ( @ARGV ) {
+ print <<"END_TEXT";
+Usage: $0 [-a] [-v] programname [programname ...]
+ -a Print all matches in PATH, not just the first.
+ -v Prints version and exits
+
+END_TEXT
+
+ exit(0);
+}
+
+foreach my $file ( @ARGV ) {
+ my @result = $opts{a}
+ ? File::Which::which($file)
+ # Need to force scalar
+ : scalar File::Which::which($file);
+
+ # We might end up with @result = (undef) -> 1 elem
+ @result = () unless defined $result[0];
+ foreach my $result ( @result ) {
+ print "$result\n" if $result;
+ }
+ unless ( @result ) {
+ print STDERR "pwhich: no $file in PATH\n";
+ exit(255);
+ }
+}
+
+exit(0);
+
+__END__
+
+=pod
+
+=head1 NAME
+
+pwhich - Perl-only `which'
+
+=head1 SYNOPSIS
+
+ $ pwhich perl
+ $ pwhich -a perl # print all matches
+ $ pwhich perl perldoc ... # look for multiple programs
+ $ pwhich -a perl perldoc ...
+
+=head1 DESCRIPTION
+
+`pwhich' is a command-line utility program for finding paths to other
+programs based on the user's C<PATH>. It is similar to the usualy Unix
+tool `which', and tries to emulate its functionality, but is written
+purely in Perl (uses the module C<File::Which>), so is portable.
+
+=head2 Calling syntax
+
+ $ pwhich [-a] [-v] programname [programname ...]
+
+=head2 Options
+
+=over
+
+=item -a
+
+The option I<-a> will make C<pwhich> print all matches found in the
+C<PATH> variable instead of just the first one. Each match is printed
+on a separate line.
+
+=item -v
+
+Prints version (of C<File::Which>) and copyright notice and exits.
+
+=back
+
+=head1 SUPPORT
+
+Bugs should be reported via the CPAN bug tracker at
+
+L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=File-Which>
+
+For other issues, contact the maintainer.
+
+=head1 AUTHOR
+
+Adam Kennedy E<lt>adamk at cpan.orgE<gt>
+
+Per Einar Ellefsen E<lt>pereinar at cpan.orgE<gt>
+
+Originated in F<modperl-2.0/lib/Apache/Build.pm>. Changed for use in DocSet
+(for the mod_perl site) and Win32-awareness by me, with slight modifications
+by Stas Bekman, then extracted to create C<File::Which>.
+
+Version 0.04 had some significant platform-related changes, taken from
+the Perl Power Tools C<`which'> implementation by Abigail with
+enhancements from Peter Prymmer. See
+L<http://www.perl.com/language/ppt/src/which/index.html> for more
+information.
+
+=head1 COPYRIGHT
+
+Copyright 2002 Per Einar Ellefsen.
+
+Some parts copyright 2009 Adam Kennedy.
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+L<perl>, L<File::Which>, L<which(1)>
+
+=cut
--- t/01_compile.t
+++ t/01_compile.t
+#!/usr/bin/perl
+
+use 5.004;
+use strict;
+BEGIN {
+ $| = 1;
+ $^W = 1;
+}
+
+use Test::More tests => 2;
+use Test::Script;
+
+use_ok( 'File::Which' );
+script_compiles('script/pwhich');
--- t/02_all.t
+++ t/02_all.t
+#!/usr/bin/perl
+
+use strict;
+BEGIN {
+ $| = 1;
+ $^W = 1;
+}
+
+use Test::More tests => 4;
+use File::Spec ();
+use File::Which qw(which where);
+
+# Where is the test application
+my $test_bin = File::Spec->catdir( 't', 'test-bin' );
+ok( -d $test_bin, 'Found test-bin' );
+
+# Set up for running the test application
+local $ENV{PATH} = $test_bin;
+unless (
+ File::Which::IS_VMS
+ or
+ File::Which::IS_MAC
+ or
+ File::Which::IS_DOS
+) {
+ my $all = File::Spec->catfile( $test_bin, 'all' );
+ chmod 0755, $all;
+}
+
+my @result = which('all');
+like( $result[0], qr/all/i, 'Found all' );
+ok( scalar(@result), 'Found at least one result' );
+
+# Should have as many elements.
+is(
+ scalar(@result),
+ scalar(where('all')),
+ 'Scalar which result matches where result',
+);
--- t/03_simple.t
+++ t/03_simple.t
+#!/usr/bin/perl
+
+use strict;
+BEGIN {
+ $| = 1;
+ $^W = 1;
+}
+
+use Test::More tests => 10;
+use File::Spec ();
+use File::Which qw{which where};
+
+use constant IS_VMS => ($^O eq 'VMS');
+use constant IS_MAC => ($^O eq 'MacOS');
+use constant IS_DOS => ($^O eq 'MSWin32' or $^O eq 'dos' or $^O eq 'os2');
+use constant IS_CYGWIN => ($^O eq 'cygwin');
+
+# Check that it returns undef if no file is passed
+is(
+ scalar(which('')), undef,
+ 'Null-length false result',
+);
+is(
+ scalar(which('non_existent_very_unlinkely_thingy_executable')), undef,
+ 'Positive length false result',
+);
+
+# Where is the test application
+my $test_bin = File::Spec->catdir( 't', 'test-bin' );
+ok( -d $test_bin, 'Found test-bin' );
+
+# Set up for running the test application
+local $ENV{PATH} = $test_bin;
+unless (
+ File::Which::IS_VMS
+ or
+ File::Which::IS_MAC
+ or
+ File::Which::IS_DOS
+) {
+ my $test3 = File::Spec->catfile( $test_bin, 'test3' );
+ chmod 0755, $test3;
+}
+
+SKIP: {
+ skip("Not on DOS-like filesystem", 3) unless IS_DOS;
+ is( lc scalar which('test1'), 't\test-bin\test1.exe', 'Looking for test1.exe' );
+ is( lc scalar which('test2'), 't\test-bin\test2.bat', 'Looking for test2.bat' );
+ is( scalar which('test3'), undef, 'test3 returns undef' );
+}
+
+SKIP: {
+ skip("Not on a UNIX filesystem", 1) if IS_DOS;
+ skip("Not on a UNIX filesystem", 1) if IS_MAC;
+ skip("Not on a UNIX filesystem", 1) if IS_VMS;
+ is(
+ scalar(which('test3')),
+ File::Spec->catfile( $test_bin, 'test3'),
+ 'Check test3 for Unix',
+ );
+}
+
+SKIP: {
+ skip("Not on a cygwin filesystem", 2) unless IS_CYGWIN;
+
+ # Cygwin: should make test1.exe transparent
+ is(
+ scalar(which('test1')),
+ File::Spec->catfile( $test_bin, 'test1' ),
+ 'Looking for test1 on Cygwin: transparent to test1.exe',
+ );
+ is(
+ scalar(which('test4')),
+ undef,
+ 'Make sure that which() doesn\'t return a directory',
+ );
+}
+
+# Make sure that .\ stuff works on DOSish, VMS, MacOS (. is in PATH implicitly).
+SKIP: {
+ unless ( IS_DOS or IS_VMS ) {
+ skip("Not on a DOS or VMS filesystem", 1);
+ }
+
+ chdir( $test_bin );
+ is(
+ lc scalar which('test1'),
+ File::Spec->catfile(File::Spec->curdir(), 'test1.exe'),
+ 'Looking for test1.exe in curdir',
+ );
+}
--- t/04_pwhich.t
+++ t/04_pwhich.t
+#!/usr/bin/perl
+
+# Check the pwhich script by confirming it matches the function result
+
+use strict;
+BEGIN {
+ $| = 1;
+ $^W = 1;
+}
+
+use Test::More tests => 4;
+use Test::Script;
+use File::Which;
+
+# Look for a very common program
+my $tool = 'perl';
+my $path = which($tool);
+ok( defined $path, "Found path to $tool" );
+ok( $path, "Found path to $tool" );
+ok( -f $path, "$tool exists" );
+
+# Can we find the tool with the command line version?
+script_runs(
+ [ 'script/pwhich', 'perl' ],
+ 'Found perl with pwhich',
+);
--- t/97_meta.t
+++ t/97_meta.t
+#!/usr/bin/perl
+
+# Test that our META.yml file matches the current specification.
+
+use strict;
+BEGIN {
+ $| = 1;
+ $^W = 1;
+}
+
+my $MODULE = 'Test::CPAN::Meta 0.12';
+
+# Don't run tests for installs
+use Test::More;
+unless ( $ENV{AUTOMATED_TESTING} or $ENV{RELEASE_TESTING} ) {
+ plan( skip_all => "Author tests not required for installation" );
+}
+
+# Load the testing module
+eval "use $MODULE";
+if ( $@ ) {
+ $ENV{RELEASE_TESTING}
+ ? die( "Failed to load required release-testing module $MODULE" )
+ : plan( skip_all => "$MODULE not available for testing" );
+}
+
+meta_yaml_ok();
--- t/98_pod.t
+++ t/98_pod.t
+#!/usr/bin/perl
+
+# Test that the syntax of our POD documentation is valid
+
+use strict;
+BEGIN {
+ $| = 1;
+ $^W = 1;
+}
+
+my @MODULES = (
+ 'Pod::Simple 3.07',
+ 'Test::Pod 1.26',
+);
+
+# Don't run tests for installs
+use Test::More;
+unless ( $ENV{AUTOMATED_TESTING} or $ENV{RELEASE_TESTING} ) {
+ plan( skip_all => "Author tests not required for installation" );
+}
+
+# Load the testing modules
+foreach my $MODULE ( @MODULES ) {
+ eval "use $MODULE";
+ if ( $@ ) {
+ $ENV{RELEASE_TESTING}
+ ? die( "Failed to load required release-testing module $MODULE" )
+ : plan( skip_all => "$MODULE not available for testing" );
+ }
+}
+
+all_pod_files_ok();
--- t/99_pmv.t
+++ t/99_pmv.t
+#!/usr/bin/perl
+
+# Test that our declared minimum Perl version matches our syntax
+
+use strict;
+BEGIN {
+ $| = 1;
+ $^W = 1;
+}
+
+my @MODULES = (
+ 'Perl::MinimumVersion 1.20',
+ 'Test::MinimumVersion 0.008',
+);
+
+# Don't run tests for installs
+use Test::More;
+unless ( $ENV{AUTOMATED_TESTING} or $ENV{RELEASE_TESTING} ) {
+ plan( skip_all => "Author tests not required for installation" );
+}
+
+# Load the testing modules
+foreach my $MODULE ( @MODULES ) {
+ eval "use $MODULE";
+ if ( $@ ) {
+ $ENV{RELEASE_TESTING}
+ ? die( "Failed to load required release-testing module $MODULE" )
+ : plan( skip_all => "$MODULE not available for testing" );
+ }
+}
+
+all_minimum_version_from_metayml_ok();
--- t/all.t
+++ t/all.t
-
-use Test;
-BEGIN { plan tests => 3 }
-use File::Which qw(which where);
-
-# So let's try using test-bin, huh?
-
-my $Is_VMS = ($^O eq 'VMS');
-my $Is_MacOS = ($^O eq 'MacOS');
-my $Is_DOSish = (($^O eq 'MSWin32') or
- ($^O eq 'dos') or
- ($^O eq 'os2'));
-my $Is_Cygwin = $^O eq 'cygwin';
-
-{
- chdir 't' if (-d 't');
- local $ENV{PATH} = 'test-bin';
-
- if (not ($Is_VMS or $Is_MacOS or $Is_DOSish)) { # dunno about VMS
- chmod 0755, "test-bin/all";
- }
-
- my @result = which('all');
- ok($result[0], qr/all/i);
- ok(@result > 0, 1);
- ok(scalar @result, scalar where('all')); # should have as many elements.
-
-}
--- t/load.t
+++ t/load.t
-use Test;
-
-BEGIN { plan tests => 1 };
-
-use File::Which;
-
-ok(1);
--- t/simple.t
+++ t/simple.t
-use Test;
-BEGIN { plan tests => 9; }
-use File::Which;
-use File::Spec;
-
-# check that it returns undef if no file is passed
-ok(scalar which(''), undef);
-
-ok(scalar which('non_existent_very_unlinkely_thingy_executable'), undef);
-
-# So let's try using test-bin, huh?
-
-my $Is_VMS = ($^O eq 'VMS');
-my $Is_MacOS = ($^O eq 'MacOS');
-my $Is_DOSish = (($^O eq 'MSWin32') or
- ($^O eq 'dos') or
- ($^O eq 'os2'));
-my $Is_Cygwin = $^O eq 'cygwin';
-
-{
- chdir 't' if (-d 't');
- local $ENV{PATH} = 'test-bin';
-
- unless ($Is_VMS or $Is_MacOS or $Is_DOSish) { # dunno about VMS, think not
- chmod 0755, "test-bin/test3";
- }
-
- my $skip = 0;
- # test1.exe
- $skip = 1 unless $Is_DOSish;
- skip($skip, lc scalar which('test1'), 'test-bin\test1.exe', 'Looking for test1.exe');
-
- # test2.bat
- skip($skip, lc scalar which('test2'), 'test-bin\test2.bat', 'Looking for test2.bat');
-
- # Make sure that test3 isn't returned by File::Which on DOSish. (it is in
- # PATH, but is a normal file on DOSish)
- skip($skip, scalar which('test3'), undef);
-
- $skip = 0;
-
- # testing Unix finally:
- $skip = 1 if $Is_DOSish or $Is_MacOS or $Is_VMS;
- skip($skip, scalar which('test3'), 'test-bin/test3', 'Check test3 for Unix');
-
- $skip = 0;
- # Cygwin: should make test1.exe transparent
- $skip = 1 unless $Is_Cygwin;
- skip($skip, scalar which('test1'), 'test-bin/test1', 'Looking for test1 on Cygwin: transparent to test1.exe');
-
- ok(scalar which('test4'), undef, 'Make sure that which() doesn\'t return a directory');
-
- chdir 'test-bin';
-
- $skip = 0;
-
- # Make sure that .\ stuff works on DOSish, VMS, MacOS (. is in PATH implicitly).
- $skip = 1 unless $Is_DOSish or $Is_VMS; # or $Is_MacOS; # no idea
- # how binaries should look
- # like on Mac
- skip($skip, lc scalar which('test1'),
- File::Spec->catfile(File::Spec->curdir(), 'test1.exe'),
- 'Looking for test1.exe in curdir'
- );
-
-}
--- t/test-bin/test2.bat
+++ t/test-bin/test2.bat
@@ -1,3 +1,3 @@
- at echo off
-echo This is for testing File::Which
+ at echo off
+echo This is for testing File::Which
echo Nothing interesting here!
\ No newline at end of file
++++++ perl-File-Which.yaml (new)
--- perl-File-Which.yaml
+++ perl-File-Which.yaml
+Name: perl-File-Which
+Summary: Portable implementation of the 'which' utility
+Version: 1.09
+Release: 5
+Group: Development/Libraries
+License: GPL+ or Artistic
+URL: http://search.cpan.org/dist/File-Which/
+Sources:
+ - http://www.cpan.org/authors/id/P/PE/PEREINAR/File-Which-%{version}.tar.gz
+Description: |
+ File::Which is a portable implementation (in Perl) of 'which', and can
+ be used to get the absolute filename of an executable program
+ installed somewhere in your PATH, or just check for its existence. It
+ includes the command-line utility 'pwhich' which has the same function
+ as 'which'.
+
+Requires:
+ - perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
+PkgBR:
+ - perl(ExtUtils::MakeMaker) perl(Test::More)
+Configure: none
+Builder: perl
+BuildArch: noarch
+Check: yes
More information about the MeeGo-commits
mailing list