jvdias 766b4a2
--- perl-5.8.7/perl.c.orig	2005-04-22 17:14:27.000000000 +0300
jvdias 766b4a2
+++ perl-5.8.7/perl.c	2005-06-17 22:31:31.000000000 +0300
jvdias 766b4a2
@@ -109,6 +109,7 @@
jvdias 766b4a2
 #endif
jvdias 766b4a2
 
jvdias 766b4a2
 static I32 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen);
jvdias 766b4a2
+STATIC void incpush_oldversion(pTHX_ char *dir);
jvdias 766b4a2
 
jvdias 766b4a2
 #ifdef IAMSUID
jvdias 766b4a2
 #ifndef DOSUID
jvdias 766b4a2
@@ -4435,6 +4436,7 @@
jvdias 766b4a2
      * DLL-based path intuition to work correctly */
jvdias 766b4a2
 #  if !defined(WIN32)
jvdias 766b4a2
     incpush(SITEARCH_EXP, FALSE, FALSE, TRUE);
jvdias 766b4a2
+    incpush_oldversion(aTHX_ SITEARCH_EXP);
jvdias 766b4a2
 #  endif
jvdias 766b4a2
 #endif
jvdias 766b4a2
 
jvdias 766b4a2
@@ -4456,6 +4458,7 @@
jvdias 766b4a2
      * DLL-based path intuition to work correctly */
jvdias 766b4a2
 #  if !defined(WIN32)
jvdias 766b4a2
     incpush(PERL_VENDORARCH_EXP, FALSE, FALSE, TRUE);
jvdias 766b4a2
+    incpush_oldversion(aTHX_ PERL_VENDORARCH_EXP);
jvdias 766b4a2
 #  endif
jvdias 766b4a2
 #endif
jvdias 766b4a2
 
jvdias 766b4a2
@@ -4497,6 +4500,36 @@
jvdias 766b4a2
 #  define PERLLIB_MANGLE(s,n) (s)
jvdias 766b4a2
 #endif
jvdias 766b4a2
 
jvdias 766b4a2
+#define VERSION_DIRECTORY_STRING  "/" STRINGIFY(PERL_REVISION) "." STRINGIFY(PERL_VERSION) "." STRINGIFY(PERL_SUBVERSION)
jvdias 766b4a2
+STATIC void
jvdias 766b4a2
+incpush_oldversion(pTHX_ char *dir)
jvdias 766b4a2
+{
jvdias 766b4a2
+#ifdef PERL_INC_VERSION_LIST
jvdias 766b4a2
+  const char *incverlist[] = { PERL_INC_VERSION_LIST };
jvdias 766b4a2
+  const char **incver;
jvdias 766b4a2
+  const char *verdir;
jvdias 766b4a2
+
jvdias 766b4a2
+  verdir = strstr(dir, VERSION_DIRECTORY_STRING);
jvdias 766b4a2
+  if (!verdir)
jvdias 766b4a2
+    return;
jvdias 766b4a2
+
jvdias 766b4a2
+  for (incver = incverlist; *incver; incver++) {
jvdias 766b4a2
+    char *new_dir = malloc(strlen(dir) + strlen(*incver) + 2);
jvdias 766b4a2
+    char *p = new_dir;
jvdias 766b4a2
+
jvdias 766b4a2
+    strcpy(new_dir, dir);
jvdias 766b4a2
+    p += verdir - dir + 1; /* advance to char following '/' in VERSION_DIRECTORY_STRING */
jvdias 766b4a2
+    memcpy(p, *incver, strlen(*incver)); /* copy incver there instead */
jvdias 766b4a2
+    p += strlen(*incver);	/* advance past version we just copied */
jvdias 766b4a2
+    strcpy(p, verdir + strlen(VERSION_DIRECTORY_STRING)); /* and copy the rest of the original dir */
jvdias 766b4a2
+
jvdias 766b4a2
+    incpush(new_dir, FALSE, FALSE, FALSE);
jvdias 766b4a2
+    free(new_dir);
jvdias 766b4a2
+  }
jvdias 766b4a2
+#endif
jvdias 766b4a2
+}
jvdias 766b4a2
+
jvdias 766b4a2
+
jvdias 766b4a2
 /* Push a directory onto @INC if it exists.
jvdias 766b4a2
    Generate a new SV if we do this, to save needing to copy the SV we push
jvdias 766b4a2
    onto @INC  */