This repository has been archived by the owner on Jun 1, 2023. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Introduce macros to simplify @inc setting
Distro trends to customize @inc, and to maintain patches to change the order of @inc or add custom entries. The goal of this patch is to abstract calls to 'S_incpush_use_sep' and simplify reordering @inc. This commit makes the code from perl.c more comfortable to read by introducing several 'INCPUSH_*' macros for every 'S_incpush_use_sep' call so we can easily reorder them.
- Loading branch information
Showing
3 changed files
with
205 additions
and
124 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,190 @@ | ||
/* just define a list of macros to push elements in INC | ||
* so we can easily use them and change order on demand | ||
* | ||
* list of available INCPUSH macros | ||
* - INCPUSH_APPLLIB_EXP | ||
* - INCPUSH_SITEARCH_EXP | ||
* - INCPUSH_SITELIB_EXP | ||
* - INCPUSH_PERL_VENDORARCH_EXP | ||
* - INCPUSH_PERL_VENDORLIB_EXP | ||
* - INCPUSH_ARCHLIB_EXP | ||
* - INCPUSH_PRIVLIB_EXP | ||
* - INCPUSH_PERL_OTHERLIBDIRS | ||
* - INCPUSH_PERL5LIB | ||
* - INCPUSH_APPLLIB_OLD_EXP | ||
* - INCPUSH_SITELIB_STEM | ||
* - INCPUSH_PERL_VENDORLIB_STEM | ||
* - INCPUSH_PERL_OTHERLIBDIRS_ARCHONLY | ||
*/ | ||
|
||
#ifndef DEFINE_INC_MACROS | ||
|
||
/* protect against multiple inclusions */ | ||
#define DEFINE_INC_MACROS 1 | ||
|
||
#ifdef APPLLIB_EXP | ||
# define INCPUSH_APPLLIB_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(APPLLIB_EXP), \ | ||
INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE); | ||
#endif | ||
|
||
#ifdef SITEARCH_EXP | ||
/* sitearch is always relative to sitelib on Windows for | ||
* DLL-based path intuition to work correctly */ | ||
# if !defined(WIN32) | ||
# define INCPUSH_SITEARCH_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(SITEARCH_EXP), \ | ||
INCPUSH_CAN_RELOCATE); | ||
# endif | ||
#endif | ||
|
||
#ifdef SITELIB_EXP | ||
# if defined(WIN32) | ||
/* this picks up sitearch as well */ | ||
# define INCPUSH_SITELIB_EXP s = PerlEnv_sitelib_path(PERL_FS_VERSION, &len); \ | ||
if (s) incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE); | ||
# else | ||
# define INCPUSH_SITELIB_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(SITELIB_EXP), \ | ||
INCPUSH_CAN_RELOCATE); | ||
# endif | ||
#endif | ||
|
||
#ifdef PERL_VENDORARCH_EXP | ||
/* vendorarch is always relative to vendorlib on Windows for | ||
* DLL-based path intuition to work correctly */ | ||
# if !defined(WIN32) | ||
# define INCPUSH_PERL_VENDORARCH_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_VENDORARCH_EXP), INCPUSH_CAN_RELOCATE); | ||
# endif | ||
#endif | ||
|
||
#ifdef PERL_VENDORLIB_EXP | ||
# if defined(WIN32) | ||
/* this picks up vendorarch as well */ | ||
# define INCPUSH_PERL_VENDORLIB_EXP s = PerlEnv_vendorlib_path(PERL_FS_VERSION, &len); \ | ||
if (s) incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE); | ||
# else | ||
# define INCPUSH_PERL_VENDORLIB_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_VENDORLIB_EXP), INCPUSH_CAN_RELOCATE); | ||
# endif | ||
#endif | ||
|
||
#ifdef ARCHLIB_EXP | ||
# define INCPUSH_ARCHLIB_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(ARCHLIB_EXP), INCPUSH_CAN_RELOCATE); | ||
#endif | ||
|
||
/* used by INCPUSH_PRIVLIB_EXP */ | ||
#ifndef PRIVLIB_EXP | ||
# define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl" | ||
#endif | ||
|
||
#if defined(WIN32) | ||
# define INCPUSH_PRIVLIB_EXP s = PerlEnv_lib_path(PERL_FS_VERSION, &len); \ | ||
if (s) incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE); | ||
#elif defined(NETWARE) | ||
# define INCPUSH_PRIVLIB_EXP S_incpush_use_sep(aTHX_ PRIVLIB_EXP, 0, INCPUSH_CAN_RELOCATE); | ||
#else | ||
# define INCPUSH_PRIVLIB_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(PRIVLIB_EXP), INCPUSH_CAN_RELOCATE); | ||
#endif | ||
|
||
#ifdef PERL_OTHERLIBDIRS | ||
# define INCPUSH_PERL_OTHERLIBDIRS S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_OTHERLIBDIRS), \ | ||
INCPUSH_ADD_VERSIONED_SUB_DIRS|INCPUSH_NOT_BASEDIR|INCPUSH_CAN_RELOCATE); | ||
#endif | ||
|
||
|
||
/* submacros for INCPUSH_PERL5LIB */ | ||
|
||
#if defined(PERL_USE_SAFE_PUTENV) && ! defined(HAS_UNSETENV) | ||
# define _INCPUSH_PERL5LIB_IF if (perl5lib && *perl5lib != '\0') | ||
#else | ||
# define _INCPUSH_PERL5LIB_IF if (perl5lib) | ||
#endif | ||
|
||
#ifndef VMS | ||
/* | ||
* It isn't possible to delete an environment variable with | ||
* PERL_USE_SAFE_PUTENV set unless unsetenv() is also available, so in that | ||
* case we treat PERL5LIB as undefined if it has a zero-length value. | ||
*/ | ||
# define _INCPUSH_PERL5LIB_ADD _INCPUSH_PERL5LIB_IF incpush_use_sep(perl5lib, 0, INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR); | ||
#else | ||
/* VMS */ | ||
/* Treat PERL5?LIB as a possible search list logical name -- the | ||
* "natural" VMS idiom for a Unix path string. We allow each | ||
* element to be a set of |-separated directories for compatibility. | ||
*/ | ||
# define _INCPUSH_PERL5LIB_ADD char buf[256]; \ | ||
int idx = 0; \ | ||
if (vmstrnenv("PERL5LIB",buf,0,NULL,0)) \ | ||
do { \ | ||
incpush_use_sep(buf, 0, \ | ||
INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR); \ | ||
} while (vmstrnenv("PERL5LIB",buf,++idx,NULL,0)); | ||
#endif | ||
|
||
/* this macro is special and use submacros from above */ | ||
#define INCPUSH_PERL5LIB if (!TAINTING_get) { _INCPUSH_PERL5LIB_ADD } | ||
|
||
/* Use the ~-expanded versions of APPLLIB (undocumented), | ||
SITELIB and VENDORLIB for older versions | ||
*/ | ||
#ifdef APPLLIB_EXP | ||
# define INCPUSH_APPLLIB_OLD_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(APPLLIB_EXP), \ | ||
INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR|INCPUSH_CAN_RELOCATE); | ||
#endif | ||
|
||
#if defined(SITELIB_STEM) && defined(PERL_INC_VERSION_LIST) | ||
/* Search for version-specific dirs below here */ | ||
# define INCPUSH_SITELIB_STEM S_incpush_use_sep(aTHX_ STR_WITH_LEN(SITELIB_STEM), \ | ||
INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE); | ||
#endif | ||
|
||
|
||
#if defined(PERL_VENDORLIB_STEM) && defined(PERL_INC_VERSION_LIST) | ||
/* Search for version-specific dirs below here */ | ||
# define INCPUSH_PERL_VENDORLIB_STEM S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_VENDORLIB_STEM), \ | ||
INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE); | ||
#endif | ||
|
||
#ifdef PERL_OTHERLIBDIRS | ||
# define INCPUSH_PERL_OTHERLIBDIRS_ARCHONLY S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_OTHERLIBDIRS), \ | ||
INCPUSH_ADD_OLD_VERS|INCPUSH_ADD_ARCHONLY_SUB_DIRS|INCPUSH_CAN_RELOCATE); | ||
#endif | ||
|
||
|
||
/* define all undefined macros... */ | ||
#ifndef INCPUSH_APPLLIB_EXP | ||
#define INCPUSH_APPLLIB_EXP | ||
#endif | ||
#ifndef INCPUSH_SITEARCH_EXP | ||
#define INCPUSH_SITEARCH_EXP | ||
#endif | ||
#ifndef INCPUSH_SITELIB_EXP | ||
#define INCPUSH_SITELIB_EXP | ||
#endif | ||
#ifndef INCPUSH_PERL_VENDORARCH_EXP | ||
#define INCPUSH_PERL_VENDORARCH_EXP | ||
#endif | ||
#ifndef INCPUSH_PERL_VENDORLIB_EXP | ||
#define INCPUSH_PERL_VENDORLIB_EXP | ||
#endif | ||
#ifndef INCPUSH_PRIVLIB_EXP | ||
#define INCPUSH_PRIVLIB_EXP | ||
#endif | ||
#ifndef INCPUSH_PERL_OTHERLIBDIRS | ||
#define INCPUSH_PERL_OTHERLIBDIRS | ||
#endif | ||
#ifndef INCPUSH_PERL5LIB | ||
#define INCPUSH_PERL5LIB | ||
#endif | ||
#ifndef INCPUSH_APPLLIB_OLD_EXP | ||
#define INCPUSH_APPLLIB_OLD_EXP | ||
#endif | ||
#ifndef INCPUSH_SITELIB_STEM | ||
#define INCPUSH_SITELIB_STEM | ||
#endif | ||
#ifndef INCPUSH_PERL_VENDORLIB_STEM | ||
#define INCPUSH_PERL_VENDORLIB_STEM | ||
#endif | ||
#ifndef INCPUSH_PERL_OTHERLIBDIRS_ARCHONLY | ||
#define INCPUSH_PERL_OTHERLIBDIRS_ARCHONLY | ||
#endif | ||
|
||
#endif /* DEFINE_INC_MACROS */ |