By default, the "vendor" area is not used, so Perl's installation
procedure forgot to create its top-level paths, too. In OpenPKG we use
the "vendor" area, so make sure it is created the same way the "site"
area is.

Index: installperl
--- installperl.orig	2003-09-02 15:40:21.000000000 +0200
+++ installperl	2003-09-26 09:23:15.000000000 +0200
@@ -189,6 +189,8 @@
 my $installarchlib = "$destdir$Config{installarchlib}";
 my $installsitelib = "$destdir$Config{installsitelib}";
 my $installsitearch = "$destdir$Config{installsitearch}";
+my $installvendorlib = "$destdir$Config{installvendorlib}";
+my $installvendorarch = "$destdir$Config{installvendorarch}";
 my $installman1dir = "$destdir$Config{installman1dir}";
 my $man1ext = $Config{man1ext};
 my $libperl = $Config{libperl};
@@ -379,6 +381,8 @@
 mkpath($installarchlib, $verbose, 0777);
 mkpath($installsitelib, $verbose, 0777) if ($installsitelib);
 mkpath($installsitearch, $verbose, 0777) if ($installsitearch);
+mkpath($installvendorlib, $verbose, 0777) if ($installvendorlib);
+mkpath($installvendorarch, $verbose, 0777) if ($installvendorarch);
 
 if (chdir "lib") {
     $do_installarchlib = ! samepath($installarchlib, '.');

-----------------------------------------------------------------------------

By default, the Perl module search order is "use lib, -I, PERL[5]LIB,
perl, site, vendor, other". This means that in OpenPKG both the modules
installed via CPAN shell (in "site" area) and the "perl-xxx" packages
(in "vendor" area) cannot override the (sometimes obsoleted) module
versions distributed with Perl (in "perl" area). Hence, we change
the search order to a more reasonable one for OpenPKG: "use lib, -I,
PERL[5]LIB, site, vendor, perl, other".

Index: perl.c
--- perl.c.orig	2003-09-11 23:42:33.000000000 +0200
+++ perl.c	2003-09-26 09:25:11.000000000 +0200
@@ -3978,39 +3978,6 @@
     incpush(APPLLIB_EXP, TRUE, TRUE, TRUE);
 #endif
 
-#ifdef ARCHLIB_EXP
-    incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE);
-#endif
-#ifdef MACOS_TRADITIONAL
-    {
-	Stat_t tmpstatbuf;
-    	SV * privdir = NEWSV(55, 0);
-	char * macperl = PerlEnv_getenv("MACPERL");
-	
-	if (!macperl)
-	    macperl = "";
-	
-	Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
-	if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
-	    incpush(SvPVX(privdir), TRUE, FALSE, TRUE);
-	Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
-	if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
-	    incpush(SvPVX(privdir), TRUE, FALSE, TRUE);
-	
-   	SvREFCNT_dec(privdir);
-    }
-    if (!PL_tainting)
-	incpush(":", FALSE, FALSE, TRUE);
-#else
-#ifndef PRIVLIB_EXP
-#  define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
-#endif
-#if defined(WIN32)
-    incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE);
-#else
-    incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE);
-#endif
-
 #ifdef SITEARCH_EXP
     /* sitearch is always relative to sitelib on Windows for
      * DLL-based path intuition to work correctly */
@@ -4052,6 +4019,39 @@
     incpush(PERL_VENDORLIB_STEM, FALSE, TRUE, TRUE);
 #endif
 
+#ifdef ARCHLIB_EXP
+    incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE);
+#endif
+#ifdef MACOS_TRADITIONAL
+    {
+	Stat_t tmpstatbuf;
+    	SV * privdir = NEWSV(55, 0);
+	char * macperl = PerlEnv_getenv("MACPERL");
+	
+	if (!macperl)
+	    macperl = "";
+	
+	Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
+	if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
+	    incpush(SvPVX(privdir), TRUE, FALSE, TRUE);
+	Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
+	if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
+	    incpush(SvPVX(privdir), TRUE, FALSE, TRUE);
+	
+   	SvREFCNT_dec(privdir);
+    }
+    if (!PL_tainting)
+	incpush(":", FALSE, FALSE, TRUE);
+#else
+#ifndef PRIVLIB_EXP
+#  define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
+#endif
+#if defined(WIN32)
+    incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE);
+#else
+    incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE);
+#endif
+
 #ifdef PERL_OTHERLIBDIRS
     incpush(PERL_OTHERLIBDIRS, TRUE, TRUE, TRUE);
 #endif

-----------------------------------------------------------------------------

Port to [Open]Darwin 6.6.2:

1. In OpenPKG, Perl does not use the vendor GCC and our GCC does not
   understand "-no-cpp-precomp", so remove this build option.

2. The <sys/mman.h> indirectly includes system specific headers
   which in turn have fields named "environ" while Perl uses
   a define of "environ" internally. So wrap the inclusion.

3. Darwin 6 no longer accepts the non-standard "#import" statements,
   so replace with "#include" and circumvent some header problem
   related to the non-standard "__private_extern__" attribute.

Index: hints/darwin.sh
--- hints/darwin.sh.orig	2004-05-25 22:52:21 +0200
+++ hints/darwin.sh	2004-11-08 20:52:45 +0100
@@ -120,9 +120,6 @@
   *-2147483648) ccflags="${ccflags} -DINT32_MIN_BROKEN -DINT64_MIN_BROKEN" ;;
 esac
 
-# Avoid Apple's cpp precompiler, better for extensions
-cppflags="${cppflags} -no-cpp-precomp"
-
 # This is necessary because perl's build system doesn't
 # apply cppflags to cc compile lines as it should.
 ccflags="${ccflags} ${cppflags}"
@@ -162,8 +159,7 @@
 esac
 ldlibpthname='DYLD_LIBRARY_PATH';
 
-# useshrplib=true results in much slower startup times.
-# 'false' is the default value.  Use Configure -Duseshrplib to override.
+useshrplib='true'
 
 cat > UU/archname.cbu <<'EOCBU'
 # This script UU/archname.cbu will get 'called-back' by Configure 
Index: perlio.c
--- perlio.c.orig	2003-09-24 22:50:22.000000000 +0200
+++ perlio.c	2003-10-28 17:03:59.000000000 +0100
@@ -432,7 +432,14 @@
 #include <unistd.h>
 #endif
 #ifdef HAS_MMAP
+#ifdef PERL_DARWIN
+#define environ_safe environ
+#undef environ
 #include <sys/mman.h>
+#define environ environ_safe
+#else
+#include <sys/mman.h>
+#endif
 #endif
 
 /*
Index: ext/DynaLoader/dl_dyld.xs
--- ext/DynaLoader/dl_dyld.xs.orig	2003-09-02 15:39:27.000000000 +0200
+++ ext/DynaLoader/dl_dyld.xs	2003-10-28 17:07:31.000000000 +0100
@@ -45,7 +45,13 @@
 
 #undef environ
 #undef bool
+#ifdef PERL_DARWIN
+#define __private_extern__ extern
+#include <mach-o/dyld.h>
+#undef __private_extern__
+#else
 #import <mach-o/dyld.h>
+#endif
 
 static char *dlerror()
 {

-----------------------------------------------------------------------------

Port to Tru64 5.1:

Under Tru64 our gcc has to be built without binutils and the system
ld(1) does not accept a "-O" option, so remove the whole passing of
optimization flags to ld(1). Under a brain-dead platform like Tru64 we
really don't need any more optimization because we are already happy if
it works at all.

Index: hints/dec_osf.sh
--- hints/dec_osf.sh.orig	2004-03-24 23:59:53.000000000 +0100
+++ hints/dec_osf.sh	2004-04-22 09:58:40.000000000 +0200
@@ -237,15 +237,6 @@
 *)            if $test "X$optimize" = "X$undef"; then
                       lddlflags="$lddlflags -msym"
               else
-		  case "$myosvers" in
-		  *4.0D*)
-		      # QAR 56761: -O4 + .so may produce broken code,
-		      # fixed in 4.0E or better.
-		      ;;
-		  *)    
-                      lddlflags="$lddlflags $optimize"
-		      ;;
-		  esac
 		  # -msym: If using a sufficiently recent /sbin/loader,
 		  # keep the module symbols with the modules.
                   lddlflags="$lddlflags -msym -std"

-----------------------------------------------------------------------------

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2004-0976
    Multiple scripts in the perl package in Trustix Secure Linux 1.5
    through 2.1, and possibly other operating systems, allows local
    users to overwrite files via a symlink attack on temporary files.

--- lib/CGI/Cookie.pm	2001-03-04 06:53:20.000000000 +1100
+++ lib/CGI/Cookie.pm	2004-12-22 22:29:46.000000000 +1100
@@ -363,7 +363,7 @@
 You may also retrieve cookies that were stored in some external
 form using the parse() class method:
 
-       $COOKIES = `cat /usr/tmp/Cookie_stash`;
+       $COOKIES = `cat /var/run/www/Cookie_stash`;
        %cookies = parse CGI::Cookie($COOKIES);
 
 =head2 Manipulating Cookies

--- lib/ExtUtils/MakeMaker.pm	2001-02-23 13:57:55.000000000 +1100
+++ lib/ExtUtils/MakeMaker.pm	2004-12-22 22:33:57.000000000 +1100
@@ -898,7 +898,7 @@
 The Makefile to be produced may be altered by adding arguments of the
 form C<KEY=VALUE>. E.g.
 
-  perl Makefile.PL PREFIX=/tmp/myperl5
+  perl Makefile.PL PREFIX=~/myperl5
 
 Other interesting targets in the generated Makefile are
 

--- lib/Shell.pm.orig	2004-06-01 11:42:17 +0200
+++ lib/Shell.pm	2005-01-11 15:07:37 +0100
@@ -127,7 +127,7 @@
    use Shell qw(cat ps cp);
    $passwd = cat('</etc/passwd');
    @pslines = ps('-ww'),
-   cp("/etc/passwd", "/tmp/passwd");
+   cp("/etc/passwd", "/etc/passwd.orig");
 
    # object oriented 
    my $sh = Shell->new;


Index: Configure
--- Configure.orig	2005-09-21 10:56:01.133363000 +0000
+++ Configure	2005-09-21 12:15:36.836486000 +0000
@@ -7630,7 +7630,7 @@
 			      ;;	
 			linux|irix*|gnu*)	dflt='-shared' ;;
 			next)  dflt='none' ;;
-			solaris) dflt='-G' ;;
+			solaris) dflt='-shared' ;;
 			sunos) dflt='-assert nodefinitions' ;;
 			svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
 	        *)     dflt='none' ;;
Index: utils/h2ph.PL
--- utils/h2ph.PL.orig	2005-04-04 23:47:17 +0200
+++ utils/h2ph.PL	2005-09-21 17:08:46 +0200
@@ -734,8 +734,9 @@
 # non-GCC?) C compilers, but gcc uses an additional include directory.
 sub inc_dirs
 {
-    my $from_gcc    = `$Config{cc} -v 2>&1`;
+    my $from_gcc    = `$Config{cc} -v 2>&1; $Config{cc} -print-search-dirs 2>&1`;
     $from_gcc       =~ s:^Reading specs from (.*?)/specs\b.*:$1/include:s;
+    $from_gcc       =~ s;^install:\s+([^\n\s]+).*;$1/include;s;
 
     length($from_gcc) ? ($from_gcc, $Config{usrinc}) : ($Config{usrinc});
 }
Index: hints/solaris_2.sh
--- hints/solaris_2.sh.orig	2005-04-04 22:03:12 +0200
+++ hints/solaris_2.sh	2005-09-21 16:59:42 +0200
@@ -211,7 +211,7 @@
 	# Indent to avoid propagation to config.sh
 	verbose=`${cc:-cc} -v -o try try.c 2>&1`
 
-if echo "$verbose" | grep '^Reading specs from' >/dev/null 2>&1; then
+if echo "$verbose" | egrep '^(Reading specs from|Using built-in specs)' >/dev/null 2>&1; then
 	#
 	# Using gcc.
 	#
