Attached is a patch that I think sufficiently updates use.perl to handle
the state of the world in -current, without boning things for -stable.
It also moves some duplicate code up out of the functions.

There are certainly other possible ways to solve this problem, but I've
tested the attached patch, moving back and forth between system and
port, and it works fine. The other alternative I considered is to rely
on something like:

if (-f /usr/bin/perl-wrapper) { blah }

but decided against it because the current script uses the concept of
leaving /usr/bin/perl5 as whatever is installed on the system, so I
figured that staying with that would be less of a pola violation. 

Comments/suggestions welcome.

-- 
   "We have known freedom's price. We have shown freedom's power.
      And in this great conflict, ...  we will see freedom's victory."
        - George W. Bush, President of the United States
          State of the Union, January 28, 2002

         Do YOU Yahoo!?
Index: use.perl
===================================================================
RCS file: /home/ncvs/ports/lang/perl5/files/use.perl,v
retrieving revision 1.2
diff -u -r1.2 use.perl
--- use.perl    20 May 2002 00:03:07 -0000      1.2
+++ use.perl    9 Jun 2002 10:58:05 -0000
@@ -14,6 +14,11 @@
        exit 2;
 }
 
+my $port_perl = '%%PREFIX%%/bin/perl';
+$port_perl =~ tr|/|/|s;
+
+my $ident = `/usr/bin/ident /usr/bin/perl5`;
+
 @ARGV == 1 or usage();
 if ($ARGV[0] eq 'port') {
        switch_to_port();
@@ -24,18 +29,25 @@
 }
 exit 0;
 
+# Both functions depend on the idea that switch_to_port leaves
+# perl5 alone.  If the wrapper is installed on a -current system,
+# /usr/bin/perl5 will also be the wrapper.
+
 sub switch_to_system
 {
-       my $port_perl = '%%PREFIX%%/bin/perl';
-       $port_perl =~ tr|/|/|s;
-
        # protect against cases where people use PREFIX=/usr
        if ($port_perl ne '/usr/bin/perl') {
                unlink '/usr/bin/perl', '/usr/bin/suidperl',
                        '/usr/bin/perl%%PERL_VERSION%%';
 
                link '/usr/bin/perl5', '/usr/bin/perl';
-               link '/usr/bin/sperl5', '/usr/bin/suidperl';
+               link '/usr/bin/perl5', '/usr/bin/perl%%PERL_VERSION%%';
+
+               if ($ident =~ m#src/usr.bin/perl/perl.c#) {
+                       link '/usr/bin/perl5', '/usr/bin/suidperl';
+               } else {
+                       link '/usr/bin/sperl5', '/usr/bin/suidperl';
+               }
        }
 
        open MK, ">> /etc/make.conf" or die "/etc/make.conf: $!";
@@ -47,6 +59,7 @@
 .undef PERL_VERSION
 .undef PERL_ARCH
 .undef NOPERL
+.undef NO_PERL
 
 EOF
        close MK;
@@ -54,13 +67,15 @@
 
 sub switch_to_port
 {
-       my $port_perl = '%%PREFIX%%/bin/perl';
-       $port_perl =~ tr|/|/|s;
-
        # protect against cases where people use PREFIX=/usr
        if ($port_perl ne '/usr/bin/perl') {
-               unlink '/usr/bin/perl', '/usr/bin/suidperl',
-                       '/usr/bin/perl%%PERL_VERSION%%';
+               if ($ident =~ m#src/usr.bin/perl/perl.c#) {
+                       rename '/usr/bin/perl', '/usr/bin/perl-wrapper';
+               } else {
+                       unlink '/usr/bin/perl';
+               }
+
+               unlink '/usr/bin/suidperl', '/usr/bin/perl%%PERL_VERSION%%';
 
                symlink '%%PREFIX%%/bin/perl', '/usr/bin/perl';
                symlink '%%PREFIX%%/bin/suidperl', '/usr/bin/suidperl';
@@ -76,6 +91,8 @@
 PERL_VERSION=%%PERL_VERSION%%
 PERL_ARCH=%%PERL_ARCH%%
 NOPERL=yo
+NO_PERL=yo
+NO_PERL_WRAPPER=yo
 
 EOF
        close MK;

Reply via email to