| 1 | /* just define a list of macros to push elements in INC |
| 2 | * so we can easily use them and change order on demand |
| 3 | * |
| 4 | * list of available INCPUSH macros |
| 5 | * - INCPUSH_APPLLIB_EXP |
| 6 | * - INCPUSH_SITEARCH_EXP |
| 7 | * - INCPUSH_SITELIB_EXP |
| 8 | * - INCPUSH_PERL_VENDORARCH_EXP |
| 9 | * - INCPUSH_PERL_VENDORLIB_EXP |
| 10 | * - INCPUSH_ARCHLIB_EXP |
| 11 | * - INCPUSH_PRIVLIB_EXP |
| 12 | * - INCPUSH_PERL_OTHERLIBDIRS |
| 13 | * - INCPUSH_PERL5LIB |
| 14 | * - INCPUSH_APPLLIB_OLD_EXP |
| 15 | * - INCPUSH_SITELIB_STEM |
| 16 | * - INCPUSH_PERL_VENDORLIB_STEM |
| 17 | * - INCPUSH_PERL_OTHERLIBDIRS_ARCHONLY |
| 18 | */ |
| 19 | |
| 20 | #ifndef DEFINE_INC_MACROS |
| 21 | |
| 22 | /* protect against multiple inclusions */ |
| 23 | #define DEFINE_INC_MACROS 1 |
| 24 | |
| 25 | #ifdef APPLLIB_EXP |
| 26 | # define INCPUSH_APPLLIB_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(APPLLIB_EXP), \ |
| 27 | INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE); |
| 28 | #endif |
| 29 | |
| 30 | #ifdef SITEARCH_EXP |
| 31 | /* sitearch is always relative to sitelib on Windows for |
| 32 | * DLL-based path intuition to work correctly */ |
| 33 | # if !defined(WIN32) |
| 34 | # define INCPUSH_SITEARCH_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(SITEARCH_EXP), \ |
| 35 | INCPUSH_CAN_RELOCATE); |
| 36 | # endif |
| 37 | #endif |
| 38 | |
| 39 | #ifdef SITELIB_EXP |
| 40 | # if defined(WIN32) |
| 41 | /* this picks up sitearch as well */ |
| 42 | # define INCPUSH_SITELIB_EXP s = PerlEnv_sitelib_path(PERL_FS_VERSION, &len); \ |
| 43 | if (s) incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE); |
| 44 | # else |
| 45 | # define INCPUSH_SITELIB_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(SITELIB_EXP), \ |
| 46 | INCPUSH_CAN_RELOCATE); |
| 47 | # endif |
| 48 | #endif |
| 49 | |
| 50 | #ifdef PERL_VENDORARCH_EXP |
| 51 | /* vendorarch is always relative to vendorlib on Windows for |
| 52 | * DLL-based path intuition to work correctly */ |
| 53 | # if !defined(WIN32) |
| 54 | # define INCPUSH_PERL_VENDORARCH_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_VENDORARCH_EXP), INCPUSH_CAN_RELOCATE); |
| 55 | # endif |
| 56 | #endif |
| 57 | |
| 58 | #ifdef PERL_VENDORLIB_EXP |
| 59 | # if defined(WIN32) |
| 60 | /* this picks up vendorarch as well */ |
| 61 | # define INCPUSH_PERL_VENDORLIB_EXP s = PerlEnv_vendorlib_path(PERL_FS_VERSION, &len); \ |
| 62 | if (s) incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE); |
| 63 | # else |
| 64 | # define INCPUSH_PERL_VENDORLIB_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_VENDORLIB_EXP), INCPUSH_CAN_RELOCATE); |
| 65 | # endif |
| 66 | #endif |
| 67 | |
| 68 | #ifdef ARCHLIB_EXP |
| 69 | # define INCPUSH_ARCHLIB_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(ARCHLIB_EXP), INCPUSH_CAN_RELOCATE); |
| 70 | #endif |
| 71 | |
| 72 | /* used by INCPUSH_PRIVLIB_EXP */ |
| 73 | #ifndef PRIVLIB_EXP |
| 74 | # define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl" |
| 75 | #endif |
| 76 | |
| 77 | #if defined(WIN32) |
| 78 | # define INCPUSH_PRIVLIB_EXP s = PerlEnv_lib_path(PERL_FS_VERSION, &len); \ |
| 79 | if (s) incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE); |
| 80 | #elif defined(NETWARE) |
| 81 | # define INCPUSH_PRIVLIB_EXP S_incpush_use_sep(aTHX_ PRIVLIB_EXP, 0, INCPUSH_CAN_RELOCATE); |
| 82 | #else |
| 83 | # define INCPUSH_PRIVLIB_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(PRIVLIB_EXP), INCPUSH_CAN_RELOCATE); |
| 84 | #endif |
| 85 | |
| 86 | #ifdef PERL_OTHERLIBDIRS |
| 87 | # define INCPUSH_PERL_OTHERLIBDIRS S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_OTHERLIBDIRS), \ |
| 88 | INCPUSH_ADD_VERSIONED_SUB_DIRS|INCPUSH_NOT_BASEDIR|INCPUSH_CAN_RELOCATE); |
| 89 | #endif |
| 90 | |
| 91 | |
| 92 | /* submacros for INCPUSH_PERL5LIB */ |
| 93 | |
| 94 | #if defined(PERL_USE_SAFE_PUTENV) && ! defined(HAS_UNSETENV) |
| 95 | # define _INCPUSH_PERL5LIB_IF if (perl5lib && *perl5lib != '\0') |
| 96 | #else |
| 97 | # define _INCPUSH_PERL5LIB_IF if (perl5lib) |
| 98 | #endif |
| 99 | |
| 100 | #ifndef VMS |
| 101 | /* |
| 102 | * It isn't possible to delete an environment variable with |
| 103 | * PERL_USE_SAFE_PUTENV set unless unsetenv() is also available, so in that |
| 104 | * case we treat PERL5LIB as undefined if it has a zero-length value. |
| 105 | */ |
| 106 | # define _INCPUSH_PERL5LIB_ADD _INCPUSH_PERL5LIB_IF incpush_use_sep(perl5lib, 0, INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR); |
| 107 | #else |
| 108 | /* VMS */ |
| 109 | /* Treat PERL5?LIB as a possible search list logical name -- the |
| 110 | * "natural" VMS idiom for a Unix path string. We allow each |
| 111 | * element to be a set of |-separated directories for compatibility. |
| 112 | */ |
| 113 | # define _INCPUSH_PERL5LIB_ADD char buf[256]; \ |
| 114 | int idx = 0; \ |
| 115 | if (vmstrnenv("PERL5LIB",buf,0,NULL,0)) \ |
| 116 | do { \ |
| 117 | incpush_use_sep(buf, 0, \ |
| 118 | INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR); \ |
| 119 | } while (vmstrnenv("PERL5LIB",buf,++idx,NULL,0)); |
| 120 | #endif |
| 121 | |
| 122 | /* this macro is special and use submacros from above */ |
| 123 | #define INCPUSH_PERL5LIB if (!TAINTING_get) { _INCPUSH_PERL5LIB_ADD } |
| 124 | |
| 125 | /* Use the ~-expanded versions of APPLLIB (undocumented), |
| 126 | SITELIB and VENDORLIB for older versions |
| 127 | */ |
| 128 | #ifdef APPLLIB_EXP |
| 129 | # define INCPUSH_APPLLIB_OLD_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(APPLLIB_EXP), \ |
| 130 | INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR|INCPUSH_CAN_RELOCATE); |
| 131 | #endif |
| 132 | |
| 133 | #if defined(SITELIB_STEM) && defined(PERL_INC_VERSION_LIST) |
| 134 | /* Search for version-specific dirs below here */ |
| 135 | # define INCPUSH_SITELIB_STEM S_incpush_use_sep(aTHX_ STR_WITH_LEN(SITELIB_STEM), \ |
| 136 | INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE); |
| 137 | #endif |
| 138 | |
| 139 | |
| 140 | #if defined(PERL_VENDORLIB_STEM) && defined(PERL_INC_VERSION_LIST) |
| 141 | /* Search for version-specific dirs below here */ |
| 142 | # define INCPUSH_PERL_VENDORLIB_STEM S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_VENDORLIB_STEM), \ |
| 143 | INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE); |
| 144 | #endif |
| 145 | |
| 146 | #ifdef PERL_OTHERLIBDIRS |
| 147 | # define INCPUSH_PERL_OTHERLIBDIRS_ARCHONLY S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_OTHERLIBDIRS), \ |
| 148 | INCPUSH_ADD_OLD_VERS|INCPUSH_ADD_ARCHONLY_SUB_DIRS|INCPUSH_CAN_RELOCATE); |
| 149 | #endif |
| 150 | |
| 151 | |
| 152 | /* define all undefined macros... */ |
| 153 | #ifndef INCPUSH_APPLLIB_EXP |
| 154 | #define INCPUSH_APPLLIB_EXP |
| 155 | #endif |
| 156 | #ifndef INCPUSH_SITEARCH_EXP |
| 157 | #define INCPUSH_SITEARCH_EXP |
| 158 | #endif |
| 159 | #ifndef INCPUSH_SITELIB_EXP |
| 160 | #define INCPUSH_SITELIB_EXP |
| 161 | #endif |
| 162 | #ifndef INCPUSH_PERL_VENDORARCH_EXP |
| 163 | #define INCPUSH_PERL_VENDORARCH_EXP |
| 164 | #endif |
| 165 | #ifndef INCPUSH_PERL_VENDORLIB_EXP |
| 166 | #define INCPUSH_PERL_VENDORLIB_EXP |
| 167 | #endif |
| 168 | #ifndef INCPUSH_ARCHLIB_EXP |
| 169 | #define INCPUSH_ARCHLIB_EXP |
| 170 | #endif |
| 171 | #ifndef INCPUSH_PRIVLIB_EXP |
| 172 | #define INCPUSH_PRIVLIB_EXP |
| 173 | #endif |
| 174 | #ifndef INCPUSH_PERL_OTHERLIBDIRS |
| 175 | #define INCPUSH_PERL_OTHERLIBDIRS |
| 176 | #endif |
| 177 | #ifndef INCPUSH_PERL5LIB |
| 178 | #define INCPUSH_PERL5LIB |
| 179 | #endif |
| 180 | #ifndef INCPUSH_APPLLIB_OLD_EXP |
| 181 | #define INCPUSH_APPLLIB_OLD_EXP |
| 182 | #endif |
| 183 | #ifndef INCPUSH_SITELIB_STEM |
| 184 | #define INCPUSH_SITELIB_STEM |
| 185 | #endif |
| 186 | #ifndef INCPUSH_PERL_VENDORLIB_STEM |
| 187 | #define INCPUSH_PERL_VENDORLIB_STEM |
| 188 | #endif |
| 189 | #ifndef INCPUSH_PERL_OTHERLIBDIRS_ARCHONLY |
| 190 | #define INCPUSH_PERL_OTHERLIBDIRS_ARCHONLY |
| 191 | #endif |
| 192 | |
| 193 | #endif /* DEFINE_INC_MACROS */ |