##// END OF EJS Templates
import-checker: allow symbol imports from mercurial.pycompat...
import-checker: allow symbol imports from mercurial.pycompat Currently, the source transformer inserts `from mercurial.pycompat import delattr, getattr, hasattr, setattr, open, unicode` to the top of every file. As part of getting rid of the source transformer, we'll need to have source code call these wrappers directly. Rather than rewrite all call sites to call pycompat.*, I think it makes sense to import needed symbols via explicit imports. That requires loosening the import checker to allow this. Differential Revision: https://phab.mercurial-scm.org/D7004

File last commit:

r41049:ef103c96 default
r43354:c2e284ce default
Show More
pyutil.cc
49 lines | 1.2 KiB | text/x-c | CppLexer
#include "pyutil.h"
#include <string>
namespace contrib
{
static char cpypath[8192] = "\0";
static PyObject *mainmod;
static PyObject *globals;
/* TODO: use Python 3 for this fuzzing? */
PyMODINIT_FUNC initparsers(void);
void initpy(const char *cselfpath)
{
const std::string subdir = "/sanpy/lib/python2.7";
/* HACK ALERT: we need a full Python installation built without
pymalloc and with ASAN, so we dump one in
$OUT/sanpy/lib/python2.7. This helps us wire that up. */
std::string selfpath(cselfpath);
std::string pypath;
auto pos = selfpath.rfind("/");
if (pos == std::string::npos) {
char wd[8192];
getcwd(wd, 8192);
pypath = std::string(wd) + subdir;
} else {
pypath = selfpath.substr(0, pos) + subdir;
}
strncpy(cpypath, pypath.c_str(), pypath.size());
setenv("PYTHONPATH", cpypath, 1);
setenv("PYTHONNOUSERSITE", "1", 1);
/* prevent Python from looking up users in the fuzz environment */
setenv("PYTHONUSERBASE", cpypath, 1);
Py_SetPythonHome(cpypath);
Py_InitializeEx(0);
mainmod = PyImport_AddModule("__main__");
globals = PyModule_GetDict(mainmod);
initparsers();
}
PyObject *pyglobals()
{
return globals;
}
} // namespace contrib