Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
allendowney
GitHub Repository: allendowney/cpython
Path: blob/main/Include/internal/pycore_initconfig.h
12 views
1
#ifndef Py_INTERNAL_CORECONFIG_H
2
#define Py_INTERNAL_CORECONFIG_H
3
#ifdef __cplusplus
4
extern "C" {
5
#endif
6
7
#ifndef Py_BUILD_CORE
8
# error "this header requires Py_BUILD_CORE define"
9
#endif
10
11
/* Forward declaration */
12
struct pyruntimestate;
13
14
/* --- PyStatus ----------------------------------------------- */
15
16
/* Almost all errors causing Python initialization to fail */
17
#ifdef _MSC_VER
18
/* Visual Studio 2015 doesn't implement C99 __func__ in C */
19
# define _PyStatus_GET_FUNC() __FUNCTION__
20
#else
21
# define _PyStatus_GET_FUNC() __func__
22
#endif
23
24
#define _PyStatus_OK() \
25
(PyStatus){._type = _PyStatus_TYPE_OK,}
26
/* other fields are set to 0 */
27
#define _PyStatus_ERR(ERR_MSG) \
28
(PyStatus){ \
29
._type = _PyStatus_TYPE_ERROR, \
30
.func = _PyStatus_GET_FUNC(), \
31
.err_msg = (ERR_MSG)}
32
/* other fields are set to 0 */
33
#define _PyStatus_NO_MEMORY() _PyStatus_ERR("memory allocation failed")
34
#define _PyStatus_EXIT(EXITCODE) \
35
(PyStatus){ \
36
._type = _PyStatus_TYPE_EXIT, \
37
.exitcode = (EXITCODE)}
38
#define _PyStatus_IS_ERROR(err) \
39
((err)._type == _PyStatus_TYPE_ERROR)
40
#define _PyStatus_IS_EXIT(err) \
41
((err)._type == _PyStatus_TYPE_EXIT)
42
#define _PyStatus_EXCEPTION(err) \
43
((err)._type != _PyStatus_TYPE_OK)
44
#define _PyStatus_UPDATE_FUNC(err) \
45
do { (err).func = _PyStatus_GET_FUNC(); } while (0)
46
47
/* --- PyWideStringList ------------------------------------------------ */
48
49
#define _PyWideStringList_INIT (PyWideStringList){.length = 0, .items = NULL}
50
51
#ifndef NDEBUG
52
PyAPI_FUNC(int) _PyWideStringList_CheckConsistency(const PyWideStringList *list);
53
#endif
54
PyAPI_FUNC(void) _PyWideStringList_Clear(PyWideStringList *list);
55
PyAPI_FUNC(int) _PyWideStringList_Copy(PyWideStringList *list,
56
const PyWideStringList *list2);
57
PyAPI_FUNC(PyStatus) _PyWideStringList_Extend(PyWideStringList *list,
58
const PyWideStringList *list2);
59
PyAPI_FUNC(PyObject*) _PyWideStringList_AsList(const PyWideStringList *list);
60
61
62
/* --- _PyArgv ---------------------------------------------------- */
63
64
typedef struct _PyArgv {
65
Py_ssize_t argc;
66
int use_bytes_argv;
67
char * const *bytes_argv;
68
wchar_t * const *wchar_argv;
69
} _PyArgv;
70
71
PyAPI_FUNC(PyStatus) _PyArgv_AsWstrList(const _PyArgv *args,
72
PyWideStringList *list);
73
74
75
/* --- Helper functions ------------------------------------------- */
76
77
PyAPI_FUNC(int) _Py_str_to_int(
78
const char *str,
79
int *result);
80
PyAPI_FUNC(const wchar_t*) _Py_get_xoption(
81
const PyWideStringList *xoptions,
82
const wchar_t *name);
83
PyAPI_FUNC(const char*) _Py_GetEnv(
84
int use_environment,
85
const char *name);
86
PyAPI_FUNC(void) _Py_get_env_flag(
87
int use_environment,
88
int *flag,
89
const char *name);
90
91
/* Py_GetArgcArgv() helper */
92
PyAPI_FUNC(void) _Py_ClearArgcArgv(void);
93
94
95
/* --- _PyPreCmdline ------------------------------------------------- */
96
97
typedef struct {
98
PyWideStringList argv;
99
PyWideStringList xoptions; /* "-X value" option */
100
int isolated; /* -I option */
101
int use_environment; /* -E option */
102
int dev_mode; /* -X dev and PYTHONDEVMODE */
103
int warn_default_encoding; /* -X warn_default_encoding and PYTHONWARNDEFAULTENCODING */
104
} _PyPreCmdline;
105
106
#define _PyPreCmdline_INIT \
107
(_PyPreCmdline){ \
108
.use_environment = -1, \
109
.isolated = -1, \
110
.dev_mode = -1}
111
/* Note: _PyPreCmdline_INIT sets other fields to 0/NULL */
112
113
extern void _PyPreCmdline_Clear(_PyPreCmdline *cmdline);
114
extern PyStatus _PyPreCmdline_SetArgv(_PyPreCmdline *cmdline,
115
const _PyArgv *args);
116
extern PyStatus _PyPreCmdline_SetConfig(
117
const _PyPreCmdline *cmdline,
118
PyConfig *config);
119
extern PyStatus _PyPreCmdline_Read(_PyPreCmdline *cmdline,
120
const PyPreConfig *preconfig);
121
122
123
/* --- PyPreConfig ----------------------------------------------- */
124
125
PyAPI_FUNC(void) _PyPreConfig_InitCompatConfig(PyPreConfig *preconfig);
126
extern void _PyPreConfig_InitFromConfig(
127
PyPreConfig *preconfig,
128
const PyConfig *config);
129
extern PyStatus _PyPreConfig_InitFromPreConfig(
130
PyPreConfig *preconfig,
131
const PyPreConfig *config2);
132
extern PyObject* _PyPreConfig_AsDict(const PyPreConfig *preconfig);
133
extern void _PyPreConfig_GetConfig(PyPreConfig *preconfig,
134
const PyConfig *config);
135
extern PyStatus _PyPreConfig_Read(PyPreConfig *preconfig,
136
const _PyArgv *args);
137
extern PyStatus _PyPreConfig_Write(const PyPreConfig *preconfig);
138
139
140
/* --- PyConfig ---------------------------------------------- */
141
142
typedef enum {
143
/* Py_Initialize() API: backward compatibility with Python 3.6 and 3.7 */
144
_PyConfig_INIT_COMPAT = 1,
145
_PyConfig_INIT_PYTHON = 2,
146
_PyConfig_INIT_ISOLATED = 3
147
} _PyConfigInitEnum;
148
149
PyAPI_FUNC(void) _PyConfig_InitCompatConfig(PyConfig *config);
150
extern PyStatus _PyConfig_Copy(
151
PyConfig *config,
152
const PyConfig *config2);
153
extern PyStatus _PyConfig_InitPathConfig(
154
PyConfig *config,
155
int compute_path_config);
156
extern PyStatus _PyConfig_InitImportConfig(PyConfig *config);
157
extern PyStatus _PyConfig_Read(PyConfig *config, int compute_path_config);
158
extern PyStatus _PyConfig_Write(const PyConfig *config,
159
struct pyruntimestate *runtime);
160
extern PyStatus _PyConfig_SetPyArgv(
161
PyConfig *config,
162
const _PyArgv *args);
163
164
PyAPI_FUNC(PyObject*) _PyConfig_AsDict(const PyConfig *config);
165
PyAPI_FUNC(int) _PyConfig_FromDict(PyConfig *config, PyObject *dict);
166
167
extern void _Py_DumpPathConfig(PyThreadState *tstate);
168
169
PyAPI_FUNC(PyObject*) _Py_Get_Getpath_CodeObject(void);
170
171
172
/* --- Function used for testing ---------------------------------- */
173
174
PyAPI_FUNC(PyObject*) _Py_GetConfigsAsDict(void);
175
176
#ifdef __cplusplus
177
}
178
#endif
179
#endif /* !Py_INTERNAL_CORECONFIG_H */
180
181