diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-01-31 21:49:05 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-01-31 21:49:05 +0100 |
commit | 94073167e3aa8cbe18380e93a2fc8e8165438cc8 (patch) | |
tree | 2e7c3078ffc53518b95979a118b16403699381ae /src | |
parent | 1dd45fb4f3371f0256653b2186c8b4b3d26b3f41 (diff) | |
download | vim-git-94073167e3aa8cbe18380e93a2fc8e8165438cc8.tar.gz |
patch 8.0.1451: difficult to set the python home directories properlyv8.0.1451
Problem: It is difficult to set the python home directory properly for
Python 2.7 and 3.5 since both use $PYTHONHOME.
Solution: Add the 'pythonhome' and 'pythonthreehome' options. (Kazuki
Sakamoto, closes #1266)
Diffstat (limited to 'src')
-rw-r--r-- | src/if_python.c | 13 | ||||
-rw-r--r-- | src/if_python3.c | 15 | ||||
-rw-r--r-- | src/option.c | 18 | ||||
-rw-r--r-- | src/option.h | 6 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 48 insertions, 6 deletions
diff --git a/src/if_python.c b/src/if_python.c index f9fc5e1a5..ab9c854b2 100644 --- a/src/if_python.c +++ b/src/if_python.c @@ -912,6 +912,8 @@ python_loaded(void) } #endif +static char *py_home_buf = NULL; + static int Python_Init(void) { @@ -929,10 +931,15 @@ Python_Init(void) } #endif + if (*p_pyhome != NUL) + { + /* The string must not change later, make a copy in static memory. */ + py_home_buf = (char *)vim_strsave(p_pyhome); + if (py_home_buf != NULL) + Py_SetPythonHome(py_home_buf); + } #ifdef PYTHON_HOME -# ifdef DYNAMIC_PYTHON - if (mch_getenv((char_u *)"PYTHONHOME") == NULL) -# endif + else if (mch_getenv((char_u *)"PYTHONHOME") == NULL) Py_SetPythonHome(PYTHON_HOME); #endif diff --git a/src/if_python3.c b/src/if_python3.c index 7aa5f03e1..02d913492 100644 --- a/src/if_python3.c +++ b/src/if_python3.c @@ -842,6 +842,8 @@ python3_loaded(void) } #endif +static wchar_t *py_home_buf = NULL; + static int Python3_Init(void) { @@ -857,11 +859,18 @@ Python3_Init(void) init_structs(); + if (*p_py3home != NUL) + { + size_t len = mbstowcs(NULL, (char *)p_py3home, 0) + 1; + /* The string must not change later, make a copy in static memory. */ + py_home_buf = (wchar_t *)alloc(len * sizeof(wchar_t)); + if (py_home_buf != NULL && mbstowcs( + py_home_buf, (char *)p_py3home, len) != (size_t)-1) + Py_SetPythonHome(py_home_buf); + } #ifdef PYTHON3_HOME -# ifdef DYNAMIC_PYTHON3 - if (mch_getenv((char_u *)"PYTHONHOME") == NULL) -# endif + else if (mch_getenv((char_u *)"PYTHONHOME") == NULL) Py_SetPythonHome(PYTHON3_HOME); #endif diff --git a/src/option.c b/src/option.c index 08fb789da..ce5436996 100644 --- a/src/option.c +++ b/src/option.c @@ -2248,6 +2248,15 @@ static struct vimoption options[] = {(char_u *)NULL, (char_u *)0L} #endif SCRIPTID_INIT}, + {"pythonthreehome", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, +#if defined(FEAT_PYTHON3) + (char_u *)&p_py3home, PV_NONE, + {(char_u *)"", (char_u *)0L} +#else + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} +#endif + SCRIPTID_INIT}, {"pythondll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, #if defined(DYNAMIC_PYTHON) (char_u *)&p_pydll, PV_NONE, @@ -2257,6 +2266,15 @@ static struct vimoption options[] = {(char_u *)NULL, (char_u *)0L} #endif SCRIPTID_INIT}, + {"pythonhome", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, +#if defined(FEAT_PYTHON) + (char_u *)&p_pyhome, PV_NONE, + {(char_u *)"", (char_u *)0L} +#else + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} +#endif + SCRIPTID_INIT}, {"pyxversion", "pyx", P_NUM|P_VI_DEF|P_SECURE, #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) (char_u *)&p_pyx, PV_NONE, diff --git a/src/option.h b/src/option.h index c9fa4d35f..21be3a39f 100644 --- a/src/option.h +++ b/src/option.h @@ -696,9 +696,15 @@ EXTERN char_u *p_perldll; /* 'perldll' */ #if defined(DYNAMIC_PYTHON3) EXTERN char_u *p_py3dll; /* 'pythonthreedll' */ #endif +#ifdef FEAT_PYTHON3 +EXTERN char_u *p_py3home; /* 'pythonthreehome' */ +#endif #if defined(DYNAMIC_PYTHON) EXTERN char_u *p_pydll; /* 'pythondll' */ #endif +#ifdef FEAT_PYTHON +EXTERN char_u *p_pyhome; /* 'pythonhome' */ +#endif #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) EXTERN long p_pyx; /* 'pyxversion' */ #endif diff --git a/src/version.c b/src/version.c index ea5dbefc0..e01f2be79 100644 --- a/src/version.c +++ b/src/version.c @@ -772,6 +772,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1451, +/**/ 1450, /**/ 1449, |