summaryrefslogtreecommitdiff
blob: c934b4135a13561fb48d173e119f19d525822e98 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
--- perl.c.orig	2003-07-10 22:09:00.000000000 -0700
+++ perl.c	2003-07-10 22:30:21.000000000 -0700
@@ -3932,9 +3932,9 @@
     incpush(APPLLIB_EXP, TRUE, TRUE, TRUE);
 #endif
 
-#ifdef ARCHLIB_EXP
-    incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE);
-#endif
+    /* for configuration where /usr is mounted ro (CPAN::Config, Net::Config) */
+    incpush("/etc/perl", FALSE, FALSE, TRUE);
+
 #ifdef MACOS_TRADITIONAL
     {
 	Stat_t tmpstatbuf;
@@ -3961,8 +3961,6 @@
 #endif
 #if defined(WIN32)
     incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE);
-#else
-    incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE);
 #endif
 
 #ifdef SITEARCH_EXP
@@ -4006,6 +4004,60 @@
     incpush(PERL_VENDORLIB_STEM, FALSE, TRUE, TRUE);
 #endif
 
+    incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE);
+    incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE);
+
+    /* Non-versioned site directory for local modules and for
+       compatability with the previous packages' site dirs */
+
+    incpush("/usr/local/lib/site_perl", TRUE, FALSE, TRUE);
+
+#ifdef PERL_INC_VERSION_LIST
+{
+  struct stat s;
+
+  /* add small buffer in case old versions are longer than the current version */
+  char sitearch[sizeof(SITEARCH_EXP)+16] = SITEARCH_EXP;
+  char sitelib[sizeof(SITELIB_EXP)+16] = SITELIB_EXP;
+  char const *vers[] = { PERL_INC_VERSION_LIST };
+  char const **p;
+
+  char *arch_vers = strrchr(sitearch, '/');
+  char *lib_vers = strrchr(sitelib, '/');
+
+  if (arch_vers && isdigit(*++arch_vers))
+    *arch_vers = 0;
+  else
+    arch_vers = 0;
+
+  if (lib_vers && isdigit(*++lib_vers))
+    *lib_vers = 0;
+  else
+    lib_vers = 0;
+
+  /* there is some duplication here as incpush does something similar
+     internally, but required as sitearch is not a subdirectory of
+     sitelib */
+
+  for (p = vers; *p; p++)
+    {
+      if (arch_vers)
+	{
+	  strcpy(arch_vers, *p);
+	  if (PerlLIO_stat(sitearch, &s) >= 0 && S_ISDIR(s.st_mode))
+	    incpush(sitearch, FALSE, FALSE, TRUE);
+	}
+
+      if (lib_vers)
+	{
+	  strcpy(lib_vers, *p);
+	  if (PerlLIO_stat(sitelib, &s) >= 0 && S_ISDIR(s.st_mode))
+	    incpush(sitelib, FALSE, FALSE, TRUE);
+	}
+    }
+}
+#endif
+
 #ifdef PERL_OTHERLIBDIRS
     incpush(PERL_OTHERLIBDIRS, TRUE, TRUE, TRUE);
 #endif