2019-06-19 00:48:09 +02:00
|
|
|
#ifndef Py_LIMITED_API
|
|
|
|
|
#ifndef Py_INTERNAL_IMPORT_H
|
|
|
|
|
#define Py_INTERNAL_IMPORT_H
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C" {
|
|
|
|
|
#endif
|
|
|
|
|
|
2023-08-21 19:15:52 +02:00
|
|
|
#ifndef Py_BUILD_CORE
|
|
|
|
|
# error "this header requires Py_BUILD_CORE define"
|
|
|
|
|
#endif
|
|
|
|
|
|
2023-07-28 14:39:08 -06:00
|
|
|
#include "pycore_hashtable.h" // _Py_hashtable_t
|
2025-03-20 00:13:25 +01:00
|
|
|
#include "pycore_interp_structs.h" // _import_state
|
2023-07-02 00:27:18 +02:00
|
|
|
|
2023-07-04 01:02:07 +02:00
|
|
|
extern int _PyImport_IsInitialized(PyInterpreterState *);
|
|
|
|
|
|
2023-08-24 18:06:53 +02:00
|
|
|
// Export for 'pyexpat' shared extension
|
2023-07-04 01:02:07 +02:00
|
|
|
PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module);
|
2023-08-24 18:06:53 +02:00
|
|
|
|
2023-07-25 03:44:11 +02:00
|
|
|
extern int _PyImport_SetModuleString(const char *name, PyObject* module);
|
2023-07-04 01:02:07 +02:00
|
|
|
|
|
|
|
|
extern void _PyImport_AcquireLock(PyInterpreterState *interp);
|
2024-06-06 13:40:58 -04:00
|
|
|
extern void _PyImport_ReleaseLock(PyInterpreterState *interp);
|
2024-11-12 20:53:58 +00:00
|
|
|
extern void _PyImport_ReInitLock(PyInterpreterState *interp);
|
2023-07-04 01:02:07 +02:00
|
|
|
|
2024-04-23 08:25:50 -06:00
|
|
|
// This is used exclusively for the sys and builtins modules:
|
2023-07-04 01:02:07 +02:00
|
|
|
extern int _PyImport_FixupBuiltin(
|
2024-04-24 09:55:48 -06:00
|
|
|
PyThreadState *tstate,
|
2023-07-04 01:02:07 +02:00
|
|
|
PyObject *mod,
|
|
|
|
|
const char *name, /* UTF-8 encoded string */
|
|
|
|
|
PyObject *modules
|
|
|
|
|
);
|
|
|
|
|
|
2023-02-15 15:32:31 -07:00
|
|
|
#ifdef HAVE_DLOPEN
|
2023-08-21 20:05:59 +02:00
|
|
|
# include <dlfcn.h> // RTLD_NOW, RTLD_LAZY
|
2023-02-15 15:32:31 -07:00
|
|
|
# if HAVE_DECL_RTLD_NOW
|
|
|
|
|
# define _Py_DLOPEN_FLAGS RTLD_NOW
|
|
|
|
|
# else
|
|
|
|
|
# define _Py_DLOPEN_FLAGS RTLD_LAZY
|
|
|
|
|
# endif
|
|
|
|
|
# define DLOPENFLAGS_INIT .dlopenflags = _Py_DLOPEN_FLAGS,
|
|
|
|
|
#else
|
|
|
|
|
# define _Py_DLOPEN_FLAGS 0
|
|
|
|
|
# define DLOPENFLAGS_INIT
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#define IMPORTS_INIT \
|
|
|
|
|
{ \
|
|
|
|
|
DLOPENFLAGS_INIT \
|
2023-03-09 09:46:21 -07:00
|
|
|
.find_and_load = { \
|
|
|
|
|
.header = 1, \
|
|
|
|
|
}, \
|
2023-02-15 15:32:31 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern void _PyImport_ClearCore(PyInterpreterState *interp);
|
|
|
|
|
|
|
|
|
|
extern Py_ssize_t _PyImport_GetNextModuleIndex(void);
|
|
|
|
|
extern const char * _PyImport_ResolveNameWithPackageContext(const char *name);
|
|
|
|
|
extern const char * _PyImport_SwapPackageContext(const char *newcontext);
|
|
|
|
|
|
|
|
|
|
extern int _PyImport_GetDLOpenFlags(PyInterpreterState *interp);
|
|
|
|
|
extern void _PyImport_SetDLOpenFlags(PyInterpreterState *interp, int new_val);
|
|
|
|
|
|
|
|
|
|
extern PyObject * _PyImport_InitModules(PyInterpreterState *interp);
|
|
|
|
|
extern PyObject * _PyImport_GetModules(PyInterpreterState *interp);
|
2025-04-28 12:46:22 -06:00
|
|
|
extern PyObject * _PyImport_GetModulesRef(PyInterpreterState *interp);
|
2023-02-15 15:32:31 -07:00
|
|
|
extern void _PyImport_ClearModules(PyInterpreterState *interp);
|
|
|
|
|
|
|
|
|
|
extern void _PyImport_ClearModulesByIndex(PyInterpreterState *interp);
|
|
|
|
|
|
|
|
|
|
extern int _PyImport_InitDefaultImportFunc(PyInterpreterState *interp);
|
|
|
|
|
extern int _PyImport_IsDefaultImportFunc(
|
|
|
|
|
PyInterpreterState *interp,
|
|
|
|
|
PyObject *func);
|
|
|
|
|
|
|
|
|
|
extern PyObject * _PyImport_GetImportlibLoader(
|
|
|
|
|
PyInterpreterState *interp,
|
|
|
|
|
const char *loader_name);
|
|
|
|
|
extern PyObject * _PyImport_GetImportlibExternalLoader(
|
|
|
|
|
PyInterpreterState *interp,
|
|
|
|
|
const char *loader_name);
|
|
|
|
|
extern PyObject * _PyImport_BlessMyLoader(
|
|
|
|
|
PyInterpreterState *interp,
|
|
|
|
|
PyObject *module_globals);
|
|
|
|
|
extern PyObject * _PyImport_ImportlibModuleRepr(
|
|
|
|
|
PyInterpreterState *interp,
|
|
|
|
|
PyObject *module);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern PyStatus _PyImport_Init(void);
|
|
|
|
|
extern void _PyImport_Fini(void);
|
|
|
|
|
extern void _PyImport_Fini2(void);
|
|
|
|
|
|
|
|
|
|
extern PyStatus _PyImport_InitCore(
|
|
|
|
|
PyThreadState *tstate,
|
|
|
|
|
PyObject *sysmod,
|
|
|
|
|
int importlib);
|
|
|
|
|
extern PyStatus _PyImport_InitExternal(PyThreadState *tstate);
|
|
|
|
|
extern void _PyImport_FiniCore(PyInterpreterState *interp);
|
|
|
|
|
extern void _PyImport_FiniExternal(PyInterpreterState *interp);
|
|
|
|
|
|
2022-11-11 14:16:28 -07:00
|
|
|
|
2023-02-15 15:32:31 -07:00
|
|
|
extern PyObject* _PyImport_GetBuiltinModuleNames(void);
|
2019-06-19 00:48:09 +02:00
|
|
|
|
2021-10-05 11:26:37 -06:00
|
|
|
struct _module_alias {
|
|
|
|
|
const char *name; /* ASCII encoded string */
|
|
|
|
|
const char *orig; /* ASCII encoded string */
|
|
|
|
|
};
|
|
|
|
|
|
2023-08-24 18:06:53 +02:00
|
|
|
// Export these 3 symbols for test_ctypes
|
2023-07-25 05:48:04 +02:00
|
|
|
PyAPI_DATA(const struct _frozen*) _PyImport_FrozenBootstrap;
|
|
|
|
|
PyAPI_DATA(const struct _frozen*) _PyImport_FrozenStdlib;
|
|
|
|
|
PyAPI_DATA(const struct _frozen*) _PyImport_FrozenTest;
|
|
|
|
|
|
2021-10-05 11:26:37 -06:00
|
|
|
extern const struct _module_alias * _PyImport_FrozenAliases;
|
|
|
|
|
|
2023-07-25 03:44:11 +02:00
|
|
|
extern int _PyImport_CheckSubinterpIncompatibleExtensionAllowed(
|
2023-02-15 18:16:00 -07:00
|
|
|
const char *name);
|
|
|
|
|
|
|
|
|
|
|
2023-07-25 03:44:11 +02:00
|
|
|
// Export for '_testinternalcapi' shared extension
|
2023-07-25 05:48:04 +02:00
|
|
|
PyAPI_FUNC(int) _PyImport_ClearExtension(PyObject *name, PyObject *filename);
|
2023-02-15 16:05:07 -07:00
|
|
|
|
2024-05-06 20:07:23 -07:00
|
|
|
#ifdef Py_GIL_DISABLED
|
|
|
|
|
// Assuming that the GIL is enabled from a call to
|
|
|
|
|
// _PyEval_EnableGILTransient(), resolve the transient request depending on the
|
|
|
|
|
// state of the module argument:
|
|
|
|
|
// - If module is NULL or a PyModuleObject with md_gil == Py_MOD_GIL_NOT_USED,
|
|
|
|
|
// call _PyEval_DisableGIL().
|
|
|
|
|
// - Otherwise, call _PyEval_EnableGILPermanent(). If the GIL was not already
|
|
|
|
|
// enabled permanently, issue a warning referencing the module's name.
|
|
|
|
|
//
|
|
|
|
|
// This function may raise an exception.
|
|
|
|
|
extern int _PyImport_CheckGILForModule(PyObject *module, PyObject *module_name);
|
|
|
|
|
#endif
|
|
|
|
|
|
2019-06-19 00:48:09 +02:00
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#endif /* !Py_INTERNAL_IMPORT_H */
|
|
|
|
|
#endif /* !Py_LIMITED_API */
|