summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael G. Schwern <schwern@pobox.com>2001-12-19 02:42:54 -0500
committerJarkko Hietaniemi <jhi@iki.fi>2001-12-19 13:51:37 +0000
commite7bf5e490c5477fd9e68987efa76ba1bae48429c (patch)
tree286f65707a0994a30ebfca3b254dd129dc0b041b
parent6b3a527f256d1d626e9edc37b54e2be5edf41276 (diff)
downloadperl-e7bf5e490c5477fd9e68987efa76ba1bae48429c.tar.gz
portability snag
Message-ID: <20011219124254.GF8630@blackrider> p4raw-id: //depot/perl@13799
-rw-r--r--MANIFEST1
-rw-r--r--lib/lib.t75
-rw-r--r--lib/lib_pm.PL9
3 files changed, 85 insertions, 0 deletions
diff --git a/MANIFEST b/MANIFEST
index 8e8318b05a..293c2d4075 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1045,6 +1045,7 @@ lib/IPC/SysV.t See if IPC::SysV works
lib/less.pm For "use less"
lib/less.t See if less support works
lib/lib_pm.PL For "use lib", produces lib/lib.pm
+lib/lib.t For "use lib" testing
lib/locale.pm For "use locale"
lib/locale.t See if locale support works
lib/Locale/Codes/t/all.t See if Locale::Codes work
diff --git a/lib/lib.t b/lib/lib.t
new file mode 100644
index 0000000000..9a86ac7424
--- /dev/null
+++ b/lib/lib.t
@@ -0,0 +1,75 @@
+#!./perl -w
+
+BEGIN {
+ chdir 't';
+ @INC = '../lib';
+ @OrigINC = @INC;
+}
+
+use Test::More tests => 12;
+use Config;
+use File::Spec;
+use File::Path;
+
+#set up files and directories
+my @lib_dir;
+my $Lib_Dir;
+my $Arch_Dir;
+my $Auto_Dir;
+my $Module;
+BEGIN {
+ # lib.pm is documented to only work with Unix filepaths.
+ @lib_dir = qw(stuff moo);
+ $Lib_Dir = join "/", @lib_dir;
+ $Arch_Dir = join "/", @lib_dir, $Config{archname};
+
+ # create the auto/ directory and a module
+ $Auto_Dir = File::Spec->catdir(@lib_dir, $Config{archname},'auto');
+ $Module = File::Spec->catfile(@lib_dir, 'Yup.pm');
+
+ mkpath [$Auto_Dir];
+
+ open(MOD, ">$Module") || DIE $!;
+ print MOD <<'MODULE';
+package Yup;
+$Plan = 9;
+return '42';
+MODULE
+
+ close MOD;
+}
+
+END {
+ # cleanup the auto/ directory we created.
+ rmtree([$lib_dir[0]]);
+}
+
+
+use lib $Lib_Dir;
+use lib $Lib_Dir;
+
+BEGIN { use_ok('Yup') }
+
+BEGIN {
+ is( $INC[1], $Lib_Dir, 'lib adding at end of @INC' );
+ print "# \@INC == @INC\n";
+ is( $INC[0], $Arch_Dir, ' auto/ dir in front of that' );
+ is( grep(/^\Q$Lib_Dir\E$/, @INC), 1, ' no duplicates' );
+
+ # Yes, %INC uses Unixy filepaths.
+ is( $INC{'Yup.pm'}, join("/",$Lib_Dir, 'Yup.pm'), '%INC set properly' );
+
+ is( eval { do 'Yup.pm' }, 42, 'do() works' );
+ ok( eval { require Yup; }, ' require()' );
+ ok( eval "use Yup; 1;", ' use()' );
+ is( $@, '' );
+
+ is_deeply(\@OrigINC, \@lib::ORIG_INC, '@lib::ORIG_INC' );
+}
+
+no lib $Lib_Dir;
+
+BEGIN {
+ is( grep(/stuff/, @INC), 0, 'no lib' );
+ ok( !do 'Yup.pm', ' do() effected' );
+}
diff --git a/lib/lib_pm.PL b/lib/lib_pm.PL
index 2c9eb6654d..d7786732b7 100644
--- a/lib/lib_pm.PL
+++ b/lib/lib_pm.PL
@@ -171,6 +171,15 @@ can say
@INC = @lib::ORIG_INC;
+=head1 CAVEATS
+
+In order to keep lib.pm small and simple, it only works with Unix
+filepaths. This doesn't mean it only works on Unix, but non-Unix
+users must first translate their file paths to Unix conventions.
+
+ # VMS users wanting to put [.stuff.moo] into
+ # their @INC would write
+ use lib 'stuff/moo';
=head1 SEE ALSO