You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1671 lines
42 KiB

bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
bpo-36763: Implement the PEP 587 (GH-13592) * Add a whole new documentation page: "Python Initialization Configuration" * PyWideStringList_Append() return type is now PyStatus, instead of int * PyInterpreterState_New() now calls PyConfig_Clear() if PyConfig_InitPythonConfig() fails. * Rename files: * Python/coreconfig.c => Python/initconfig.c * Include/cpython/coreconfig.h => Include/cpython/initconfig.h * Include/internal/: pycore_coreconfig.h => pycore_initconfig.h * Rename structures * _PyCoreConfig => PyConfig * _PyPreConfig => PyPreConfig * _PyInitError => PyStatus * _PyWstrList => PyWideStringList * Rename PyConfig fields: * use_module_search_paths => module_search_paths_set * module_search_path_env => pythonpath_env * Rename PyStatus field: _func => func * PyInterpreterState: rename core_config field to config * Rename macros and functions: * _PyCoreConfig_SetArgv() => PyConfig_SetBytesArgv() * _PyCoreConfig_SetWideArgv() => PyConfig_SetArgv() * _PyCoreConfig_DecodeLocale() => PyConfig_SetBytesString() * _PyInitError_Failed() => PyStatus_Exception() * _Py_INIT_ERROR_TYPE_xxx enums => _PyStatus_TYPE_xxx * _Py_UnixMain() => Py_BytesMain() * _Py_ExitInitError() => Py_ExitStatusException() * _Py_PreInitializeFromArgs() => Py_PreInitializeFromBytesArgs() * _Py_PreInitializeFromWideArgs() => Py_PreInitializeFromArgs() * _Py_PreInitialize() => Py_PreInitialize() * _Py_RunMain() => Py_RunMain() * _Py_InitializeFromConfig() => Py_InitializeFromConfig() * _Py_INIT_XXX() => _PyStatus_XXX() * _Py_INIT_FAILED() => _PyStatus_EXCEPTION() * Rename 'err' PyStatus variables to 'status' * Convert RUN_CODE() macro to config_run_code() static inline function * Remove functions: * _Py_InitializeFromArgs() * _Py_InitializeFromWideArgs() * _PyInterpreterState_GetCoreConfig()
7 years ago
  1. #ifndef Py_BUILD_CORE_MODULE
  2. # define Py_BUILD_CORE_MODULE
  3. #endif
  4. /* Always enable assertion (even in release mode) */
  5. #undef NDEBUG
  6. #include <Python.h>
  7. #include "pycore_initconfig.h" /* _PyConfig_InitCompatConfig() */
  8. #include "pycore_pystate.h" /* _PyRuntime */
  9. #include <Python.h>
  10. #include "pythread.h"
  11. #include <inttypes.h>
  12. #include <stdio.h>
  13. #include <wchar.h>
  14. /*********************************************************
  15. * Embedded interpreter tests that need a custom exe
  16. *
  17. * Executed via 'EmbeddingTests' in Lib/test/test_capi.py
  18. *********************************************************/
  19. /* Use path starting with "./" avoids a search along the PATH */
  20. #define PROGRAM_NAME L"./_testembed"
  21. static void _testembed_Py_Initialize(void)
  22. {
  23. Py_SetProgramName(PROGRAM_NAME);
  24. Py_Initialize();
  25. }
  26. /*****************************************************
  27. * Test repeated initialisation and subinterpreters
  28. *****************************************************/
  29. static void print_subinterp(void)
  30. {
  31. /* Output information about the interpreter in the format
  32. expected in Lib/test/test_capi.py (test_subinterps). */
  33. PyThreadState *ts = PyThreadState_Get();
  34. PyInterpreterState *interp = ts->interp;
  35. int64_t id = PyInterpreterState_GetID(interp);
  36. printf("interp %" PRId64 " <0x%" PRIXPTR ">, thread state <0x%" PRIXPTR ">: ",
  37. id, (uintptr_t)interp, (uintptr_t)ts);
  38. fflush(stdout);
  39. PyRun_SimpleString(
  40. "import sys;"
  41. "print('id(modules) =', id(sys.modules));"
  42. "sys.stdout.flush()"
  43. );
  44. }
  45. static int test_repeated_init_and_subinterpreters(void)
  46. {
  47. PyThreadState *mainstate, *substate;
  48. PyGILState_STATE gilstate;
  49. int i, j;
  50. for (i=0; i<15; i++) {
  51. printf("--- Pass %d ---\n", i);
  52. _testembed_Py_Initialize();
  53. mainstate = PyThreadState_Get();
  54. PyEval_ReleaseThread(mainstate);
  55. gilstate = PyGILState_Ensure();
  56. print_subinterp();
  57. PyThreadState_Swap(NULL);
  58. for (j=0; j<3; j++) {
  59. substate = Py_NewInterpreter();
  60. print_subinterp();
  61. Py_EndInterpreter(substate);
  62. }
  63. PyThreadState_Swap(mainstate);
  64. print_subinterp();
  65. PyGILState_Release(gilstate);
  66. PyEval_RestoreThread(mainstate);
  67. Py_Finalize();
  68. }
  69. return 0;
  70. }
  71. /*****************************************************
  72. * Test forcing a particular IO encoding
  73. *****************************************************/
  74. static void check_stdio_details(const char *encoding, const char * errors)
  75. {
  76. /* Output info for the test case to check */
  77. if (encoding) {
  78. printf("Expected encoding: %s\n", encoding);
  79. } else {
  80. printf("Expected encoding: default\n");
  81. }
  82. if (errors) {
  83. printf("Expected errors: %s\n", errors);
  84. } else {
  85. printf("Expected errors: default\n");
  86. }
  87. fflush(stdout);
  88. /* Force the given IO encoding */
  89. Py_SetStandardStreamEncoding(encoding, errors);
  90. _testembed_Py_Initialize();
  91. PyRun_SimpleString(
  92. "import sys;"
  93. "print('stdin: {0.encoding}:{0.errors}'.format(sys.stdin));"
  94. "print('stdout: {0.encoding}:{0.errors}'.format(sys.stdout));"
  95. "print('stderr: {0.encoding}:{0.errors}'.format(sys.stderr));"
  96. "sys.stdout.flush()"
  97. );
  98. Py_Finalize();
  99. }
  100. static int test_forced_io_encoding(void)
  101. {
  102. /* Check various combinations */
  103. printf("--- Use defaults ---\n");
  104. check_stdio_details(NULL, NULL);
  105. printf("--- Set errors only ---\n");
  106. check_stdio_details(NULL, "ignore");
  107. printf("--- Set encoding only ---\n");
  108. check_stdio_details("iso8859-1", NULL);
  109. printf("--- Set encoding and errors ---\n");
  110. check_stdio_details("iso8859-1", "replace");
  111. /* Check calling after initialization fails */
  112. Py_Initialize();
  113. if (Py_SetStandardStreamEncoding(NULL, NULL) == 0) {
  114. printf("Unexpected success calling Py_SetStandardStreamEncoding");
  115. }
  116. Py_Finalize();
  117. return 0;
  118. }
  119. /*********************************************************
  120. * Test parts of the C-API that work before initialization
  121. *********************************************************/
  122. /* The pre-initialization tests tend to break by segfaulting, so explicitly
  123. * flushed progress messages make the broken API easier to find when they fail.
  124. */
  125. #define _Py_EMBED_PREINIT_CHECK(msg) \
  126. do {printf(msg); fflush(stdout);} while (0);
  127. static int test_pre_initialization_api(void)
  128. {
  129. /* the test doesn't support custom memory allocators */
  130. putenv("PYTHONMALLOC=");
  131. /* Leading "./" ensures getpath.c can still find the standard library */
  132. _Py_EMBED_PREINIT_CHECK("Checking Py_DecodeLocale\n");
  133. wchar_t *program = Py_DecodeLocale("./spam", NULL);
  134. if (program == NULL) {
  135. fprintf(stderr, "Fatal error: cannot decode program name\n");
  136. return 1;
  137. }
  138. _Py_EMBED_PREINIT_CHECK("Checking Py_SetProgramName\n");
  139. Py_SetProgramName(program);
  140. _Py_EMBED_PREINIT_CHECK("Initializing interpreter\n");
  141. Py_Initialize();
  142. _Py_EMBED_PREINIT_CHECK("Check sys module contents\n");
  143. PyRun_SimpleString("import sys; "
  144. "print('sys.executable:', sys.executable)");
  145. _Py_EMBED_PREINIT_CHECK("Finalizing interpreter\n");
  146. Py_Finalize();
  147. _Py_EMBED_PREINIT_CHECK("Freeing memory allocated by Py_DecodeLocale\n");
  148. PyMem_RawFree(program);
  149. return 0;
  150. }
  151. /* bpo-33042: Ensure embedding apps can predefine sys module options */
  152. static int test_pre_initialization_sys_options(void)
  153. {
  154. /* We allocate a couple of the options dynamically, and then delete
  155. * them before calling Py_Initialize. This ensures the interpreter isn't
  156. * relying on the caller to keep the passed in strings alive.
  157. */
  158. const wchar_t *static_warnoption = L"once";
  159. const wchar_t *static_xoption = L"also_not_an_option=2";
  160. size_t warnoption_len = wcslen(static_warnoption);
  161. size_t xoption_len = wcslen(static_xoption);
  162. wchar_t *dynamic_once_warnoption = \
  163. (wchar_t *) calloc(warnoption_len+1, sizeof(wchar_t));
  164. wchar_t *dynamic_xoption = \
  165. (wchar_t *) calloc(xoption_len+1, sizeof(wchar_t));
  166. wcsncpy(dynamic_once_warnoption, static_warnoption, warnoption_len+1);
  167. wcsncpy(dynamic_xoption, static_xoption, xoption_len+1);
  168. _Py_EMBED_PREINIT_CHECK("Checking PySys_AddWarnOption\n");
  169. PySys_AddWarnOption(L"default");
  170. _Py_EMBED_PREINIT_CHECK("Checking PySys_ResetWarnOptions\n");
  171. PySys_ResetWarnOptions();
  172. _Py_EMBED_PREINIT_CHECK("Checking PySys_AddWarnOption linked list\n");
  173. PySys_AddWarnOption(dynamic_once_warnoption);
  174. PySys_AddWarnOption(L"module");
  175. PySys_AddWarnOption(L"default");
  176. _Py_EMBED_PREINIT_CHECK("Checking PySys_AddXOption\n");
  177. PySys_AddXOption(L"not_an_option=1");
  178. PySys_AddXOption(dynamic_xoption);
  179. /* Delete the dynamic options early */
  180. free(dynamic_once_warnoption);
  181. dynamic_once_warnoption = NULL;
  182. free(dynamic_xoption);
  183. dynamic_xoption = NULL;
  184. _Py_EMBED_PREINIT_CHECK("Initializing interpreter\n");
  185. _testembed_Py_Initialize();
  186. _Py_EMBED_PREINIT_CHECK("Check sys module contents\n");
  187. PyRun_SimpleString("import sys; "
  188. "print('sys.warnoptions:', sys.warnoptions); "
  189. "print('sys._xoptions:', sys._xoptions); "
  190. "warnings = sys.modules['warnings']; "
  191. "latest_filters = [f[0] for f in warnings.filters[:3]]; "
  192. "print('warnings.filters[:3]:', latest_filters)");
  193. _Py_EMBED_PREINIT_CHECK("Finalizing interpreter\n");
  194. Py_Finalize();
  195. return 0;
  196. }
  197. /* bpo-20891: Avoid race condition when initialising the GIL */
  198. static void bpo20891_thread(void *lockp)
  199. {
  200. PyThread_type_lock lock = *((PyThread_type_lock*)lockp);
  201. PyGILState_STATE state = PyGILState_Ensure();
  202. if (!PyGILState_Check()) {
  203. fprintf(stderr, "PyGILState_Check failed!");
  204. abort();
  205. }
  206. PyGILState_Release(state);
  207. PyThread_release_lock(lock);
  208. PyThread_exit_thread();
  209. }
  210. static int test_bpo20891(void)
  211. {
  212. /* the test doesn't support custom memory allocators */
  213. putenv("PYTHONMALLOC=");
  214. /* bpo-20891: Calling PyGILState_Ensure in a non-Python thread must not
  215. crash. */
  216. PyThread_type_lock lock = PyThread_allocate_lock();
  217. if (!lock) {
  218. fprintf(stderr, "PyThread_allocate_lock failed!");
  219. return 1;
  220. }
  221. _testembed_Py_Initialize();
  222. unsigned long thrd = PyThread_start_new_thread(bpo20891_thread, &lock);
  223. if (thrd == PYTHREAD_INVALID_THREAD_ID) {
  224. fprintf(stderr, "PyThread_start_new_thread failed!");
  225. return 1;
  226. }
  227. PyThread_acquire_lock(lock, WAIT_LOCK);
  228. Py_BEGIN_ALLOW_THREADS
  229. /* wait until the thread exit */
  230. PyThread_acquire_lock(lock, WAIT_LOCK);
  231. Py_END_ALLOW_THREADS
  232. PyThread_free_lock(lock);
  233. return 0;
  234. }
  235. static int test_initialize_twice(void)
  236. {
  237. _testembed_Py_Initialize();
  238. /* bpo-33932: Calling Py_Initialize() twice should do nothing
  239. * (and not crash!). */
  240. Py_Initialize();
  241. Py_Finalize();
  242. return 0;
  243. }
  244. static int test_initialize_pymain(void)
  245. {
  246. wchar_t *argv[] = {L"PYTHON", L"-c",
  247. (L"import sys; "
  248. L"print(f'Py_Main() after Py_Initialize: "
  249. L"sys.argv={sys.argv}')"),
  250. L"arg2"};
  251. _testembed_Py_Initialize();
  252. /* bpo-34008: Calling Py_Main() after Py_Initialize() must not crash */
  253. Py_Main(Py_ARRAY_LENGTH(argv), argv);
  254. Py_Finalize();
  255. return 0;
  256. }
  257. static void
  258. dump_config(void)
  259. {
  260. (void) PyRun_SimpleStringFlags(
  261. "import _testinternalcapi, json; "
  262. "print(json.dumps(_testinternalcapi.get_configs()))",
  263. 0);
  264. }
  265. static int test_init_initialize_config(void)
  266. {
  267. _testembed_Py_Initialize();
  268. dump_config();
  269. Py_Finalize();
  270. return 0;
  271. }
  272. static void config_set_string(PyConfig *config, wchar_t **config_str, const wchar_t *str)
  273. {
  274. PyStatus status = PyConfig_SetString(config, config_str, str);
  275. if (PyStatus_Exception(status)) {
  276. PyConfig_Clear(config);
  277. Py_ExitStatusException(status);
  278. }
  279. }
  280. static void config_set_argv(PyConfig *config, Py_ssize_t argc, wchar_t * const *argv)
  281. {
  282. PyStatus status = PyConfig_SetArgv(config, argc, argv);
  283. if (PyStatus_Exception(status)) {
  284. PyConfig_Clear(config);
  285. Py_ExitStatusException(status);
  286. }
  287. }
  288. static void
  289. config_set_wide_string_list(PyConfig *config, PyWideStringList *list,
  290. Py_ssize_t length, wchar_t **items)
  291. {
  292. PyStatus status = PyConfig_SetWideStringList(config, list, length, items);
  293. if (PyStatus_Exception(status)) {
  294. PyConfig_Clear(config);
  295. Py_ExitStatusException(status);
  296. }
  297. }
  298. static void config_set_program_name(PyConfig *config)
  299. {
  300. const wchar_t *program_name = PROGRAM_NAME;
  301. config_set_string(config, &config->program_name, program_name);
  302. }
  303. static void init_from_config_clear(PyConfig *config)
  304. {
  305. PyStatus status = Py_InitializeFromConfig(config);
  306. PyConfig_Clear(config);
  307. if (PyStatus_Exception(status)) {
  308. Py_ExitStatusException(status);
  309. }
  310. }
  311. static int check_init_compat_config(int preinit)
  312. {
  313. PyStatus status;
  314. if (preinit) {
  315. PyPreConfig preconfig;
  316. _PyPreConfig_InitCompatConfig(&preconfig);
  317. status = Py_PreInitialize(&preconfig);
  318. if (PyStatus_Exception(status)) {
  319. Py_ExitStatusException(status);
  320. }
  321. }
  322. PyConfig config;
  323. _PyConfig_InitCompatConfig(&config);
  324. config_set_program_name(&config);
  325. init_from_config_clear(&config);
  326. dump_config();
  327. Py_Finalize();
  328. return 0;
  329. }
  330. static int test_preinit_compat_config(void)
  331. {
  332. return check_init_compat_config(1);
  333. }
  334. static int test_init_compat_config(void)
  335. {
  336. return check_init_compat_config(0);
  337. }
  338. static int test_init_global_config(void)
  339. {
  340. /* FIXME: test Py_IgnoreEnvironmentFlag */
  341. putenv("PYTHONUTF8=0");
  342. Py_UTF8Mode = 1;
  343. /* Test initialization from global configuration variables (Py_xxx) */
  344. Py_SetProgramName(L"./globalvar");
  345. /* Py_IsolatedFlag is not tested */
  346. Py_NoSiteFlag = 1;
  347. Py_BytesWarningFlag = 1;
  348. putenv("PYTHONINSPECT=");
  349. Py_InspectFlag = 1;
  350. putenv("PYTHONOPTIMIZE=0");
  351. Py_InteractiveFlag = 1;
  352. putenv("PYTHONDEBUG=0");
  353. Py_OptimizeFlag = 2;
  354. /* Py_DebugFlag is not tested */
  355. putenv("PYTHONDONTWRITEBYTECODE=");
  356. Py_DontWriteBytecodeFlag = 1;
  357. putenv("PYTHONVERBOSE=0");
  358. Py_VerboseFlag = 1;
  359. Py_QuietFlag = 1;
  360. Py_NoUserSiteDirectory = 1;
  361. putenv("PYTHONUNBUFFERED=");
  362. Py_UnbufferedStdioFlag = 1;
  363. Py_FrozenFlag = 1;
  364. /* FIXME: test Py_LegacyWindowsFSEncodingFlag */
  365. /* FIXME: test Py_LegacyWindowsStdioFlag */
  366. Py_Initialize();
  367. dump_config();
  368. Py_Finalize();
  369. return 0;
  370. }
  371. static int test_init_from_config(void)
  372. {
  373. PyPreConfig preconfig;
  374. _PyPreConfig_InitCompatConfig(&preconfig);
  375. putenv("PYTHONMALLOC=malloc_debug");
  376. preconfig.allocator = PYMEM_ALLOCATOR_MALLOC;
  377. putenv("PYTHONUTF8=0");
  378. Py_UTF8Mode = 0;
  379. preconfig.utf8_mode = 1;
  380. PyStatus status = Py_PreInitialize(&preconfig);
  381. if (PyStatus_Exception(status)) {
  382. Py_ExitStatusException(status);
  383. }
  384. PyConfig config;
  385. _PyConfig_InitCompatConfig(&config);
  386. config.install_signal_handlers = 0;
  387. /* FIXME: test use_environment */
  388. putenv("PYTHONHASHSEED=42");
  389. config.use_hash_seed = 1;
  390. config.hash_seed = 123;
  391. /* dev_mode=1 is tested in test_init_dev_mode() */
  392. putenv("PYTHONFAULTHANDLER=");
  393. config.faulthandler = 1;
  394. putenv("PYTHONTRACEMALLOC=0");
  395. config.tracemalloc = 2;
  396. putenv("PYTHONPROFILEIMPORTTIME=0");
  397. config.import_time = 1;
  398. config.show_ref_count = 1;
  399. /* FIXME: test dump_refs: bpo-34223 */
  400. putenv("PYTHONMALLOCSTATS=0");
  401. config.malloc_stats = 1;
  402. putenv("PYTHONPYCACHEPREFIX=env_pycache_prefix");
  403. config_set_string(&config, &config.pycache_prefix, L"conf_pycache_prefix");
  404. Py_SetProgramName(L"./globalvar");
  405. config_set_string(&config, &config.program_name, L"./conf_program_name");
  406. wchar_t* argv[] = {
  407. L"python3",
  408. L"-W",
  409. L"cmdline_warnoption",
  410. L"-X",
  411. L"cmdline_xoption",
  412. L"-c",
  413. L"pass",
  414. L"arg2",
  415. };
  416. config_set_argv(&config, Py_ARRAY_LENGTH(argv), argv);
  417. config.parse_argv = 1;
  418. wchar_t* xoptions[3] = {
  419. L"config_xoption1=3",
  420. L"config_xoption2=",
  421. L"config_xoption3",
  422. };
  423. config_set_wide_string_list(&config, &config.xoptions,
  424. Py_ARRAY_LENGTH(xoptions), xoptions);
  425. wchar_t* warnoptions[1] = {
  426. L"config_warnoption",
  427. };
  428. config_set_wide_string_list(&config, &config.warnoptions,
  429. Py_ARRAY_LENGTH(warnoptions), warnoptions);
  430. /* FIXME: test pythonpath_env */
  431. /* FIXME: test home */
  432. /* FIXME: test path config: module_search_path .. dll_path */
  433. putenv("PYTHONVERBOSE=0");
  434. Py_VerboseFlag = 0;
  435. config.verbose = 1;
  436. Py_NoSiteFlag = 0;
  437. config.site_import = 0;
  438. Py_BytesWarningFlag = 0;
  439. config.bytes_warning = 1;
  440. putenv("PYTHONINSPECT=");
  441. Py_InspectFlag = 0;
  442. config.inspect = 1;
  443. Py_InteractiveFlag = 0;
  444. config.interactive = 1;
  445. putenv("PYTHONOPTIMIZE=0");
  446. Py_OptimizeFlag = 1;
  447. config.optimization_level = 2;
  448. /* FIXME: test parser_debug */
  449. putenv("PYTHONDONTWRITEBYTECODE=");
  450. Py_DontWriteBytecodeFlag = 0;
  451. config.write_bytecode = 0;
  452. Py_QuietFlag = 0;
  453. config.quiet = 1;
  454. config.configure_c_stdio = 1;
  455. putenv("PYTHONUNBUFFERED=");
  456. Py_UnbufferedStdioFlag = 0;
  457. config.buffered_stdio = 0;
  458. putenv("PYTHONIOENCODING=cp424");
  459. Py_SetStandardStreamEncoding("ascii", "ignore");
  460. #ifdef MS_WINDOWS
  461. /* Py_SetStandardStreamEncoding() sets Py_LegacyWindowsStdioFlag to 1.
  462. Force it to 0 through the config. */
  463. config.legacy_windows_stdio = 0;
  464. #endif
  465. config_set_string(&config, &config.stdio_encoding, L"iso8859-1");
  466. config_set_string(&config, &config.stdio_errors, L"replace");
  467. putenv("PYTHONNOUSERSITE=");
  468. Py_NoUserSiteDirectory = 0;
  469. config.user_site_directory = 0;
  470. config_set_string(&config, &config.check_hash_pycs_mode, L"always");
  471. Py_FrozenFlag = 0;
  472. config.pathconfig_warnings = 0;
  473. init_from_config_clear(&config);
  474. dump_config();
  475. Py_Finalize();
  476. return 0;
  477. }
  478. static int check_init_parse_argv(int parse_argv)
  479. {
  480. PyConfig config;
  481. PyConfig_InitPythonConfig(&config);
  482. config.parse_argv = parse_argv;
  483. wchar_t* argv[] = {
  484. L"./argv0",
  485. L"-E",
  486. L"-c",
  487. L"pass",
  488. L"arg1",
  489. L"-v",
  490. L"arg3",
  491. };
  492. config_set_argv(&config, Py_ARRAY_LENGTH(argv), argv);
  493. init_from_config_clear(&config);
  494. dump_config();
  495. Py_Finalize();
  496. return 0;
  497. }
  498. static int test_init_parse_argv(void)
  499. {
  500. return check_init_parse_argv(1);
  501. }
  502. static int test_init_dont_parse_argv(void)
  503. {
  504. return check_init_parse_argv(0);
  505. }
  506. static void set_most_env_vars(void)
  507. {
  508. putenv("PYTHONHASHSEED=42");
  509. putenv("PYTHONMALLOC=malloc");
  510. putenv("PYTHONTRACEMALLOC=2");
  511. putenv("PYTHONPROFILEIMPORTTIME=1");
  512. putenv("PYTHONMALLOCSTATS=1");
  513. putenv("PYTHONUTF8=1");
  514. putenv("PYTHONVERBOSE=1");
  515. putenv("PYTHONINSPECT=1");
  516. putenv("PYTHONOPTIMIZE=2");
  517. putenv("PYTHONDONTWRITEBYTECODE=1");
  518. putenv("PYTHONUNBUFFERED=1");
  519. putenv("PYTHONPYCACHEPREFIX=env_pycache_prefix");
  520. putenv("PYTHONNOUSERSITE=1");
  521. putenv("PYTHONFAULTHANDLER=1");
  522. putenv("PYTHONIOENCODING=iso8859-1:replace");
  523. }
  524. static void set_all_env_vars(void)
  525. {
  526. set_most_env_vars();
  527. putenv("PYTHONWARNINGS=EnvVar");
  528. putenv("PYTHONPATH=/my/path");
  529. }
  530. static int test_init_compat_env(void)
  531. {
  532. /* Test initialization from environment variables */
  533. Py_IgnoreEnvironmentFlag = 0;
  534. set_all_env_vars();
  535. _testembed_Py_Initialize();
  536. dump_config();
  537. Py_Finalize();
  538. return 0;
  539. }
  540. static int test_init_python_env(void)
  541. {
  542. set_all_env_vars();
  543. PyConfig config;
  544. PyConfig_InitPythonConfig(&config);
  545. config_set_program_name(&config);
  546. init_from_config_clear(&config);
  547. dump_config();
  548. Py_Finalize();
  549. return 0;
  550. }
  551. static void set_all_env_vars_dev_mode(void)
  552. {
  553. putenv("PYTHONMALLOC=");
  554. putenv("PYTHONFAULTHANDLER=");
  555. putenv("PYTHONDEVMODE=1");
  556. }
  557. static int test_init_env_dev_mode(void)
  558. {
  559. /* Test initialization from environment variables */
  560. Py_IgnoreEnvironmentFlag = 0;
  561. set_all_env_vars_dev_mode();
  562. _testembed_Py_Initialize();
  563. dump_config();
  564. Py_Finalize();
  565. return 0;
  566. }
  567. static int test_init_env_dev_mode_alloc(void)
  568. {
  569. /* Test initialization from environment variables */
  570. Py_IgnoreEnvironmentFlag = 0;
  571. set_all_env_vars_dev_mode();
  572. putenv("PYTHONMALLOC=malloc");
  573. _testembed_Py_Initialize();
  574. dump_config();
  575. Py_Finalize();
  576. return 0;
  577. }
  578. static int test_init_isolated_flag(void)
  579. {
  580. /* Test PyConfig.isolated=1 */
  581. PyConfig config;
  582. PyConfig_InitPythonConfig(&config);
  583. Py_IsolatedFlag = 0;
  584. config.isolated = 1;
  585. config_set_program_name(&config);
  586. set_all_env_vars();
  587. init_from_config_clear(&config);
  588. dump_config();
  589. Py_Finalize();
  590. return 0;
  591. }
  592. /* PyPreConfig.isolated=1, PyConfig.isolated=0 */
  593. static int test_preinit_isolated1(void)
  594. {
  595. PyPreConfig preconfig;
  596. _PyPreConfig_InitCompatConfig(&preconfig);
  597. preconfig.isolated = 1;
  598. PyStatus status = Py_PreInitialize(&preconfig);
  599. if (PyStatus_Exception(status)) {
  600. Py_ExitStatusException(status);
  601. }
  602. PyConfig config;
  603. _PyConfig_InitCompatConfig(&config);
  604. config_set_program_name(&config);
  605. set_all_env_vars();
  606. init_from_config_clear(&config);
  607. dump_config();
  608. Py_Finalize();
  609. return 0;
  610. }
  611. /* PyPreConfig.isolated=0, PyConfig.isolated=1 */
  612. static int test_preinit_isolated2(void)
  613. {
  614. PyPreConfig preconfig;
  615. _PyPreConfig_InitCompatConfig(&preconfig);
  616. preconfig.isolated = 0;
  617. PyStatus status = Py_PreInitialize(&preconfig);
  618. if (PyStatus_Exception(status)) {
  619. Py_ExitStatusException(status);
  620. }
  621. /* Test PyConfig.isolated=1 */
  622. PyConfig config;
  623. _PyConfig_InitCompatConfig(&config);
  624. Py_IsolatedFlag = 0;
  625. config.isolated = 1;
  626. config_set_program_name(&config);
  627. set_all_env_vars();
  628. init_from_config_clear(&config);
  629. dump_config();
  630. Py_Finalize();
  631. return 0;
  632. }
  633. static int test_preinit_dont_parse_argv(void)
  634. {
  635. PyPreConfig preconfig;
  636. PyPreConfig_InitIsolatedConfig(&preconfig);
  637. preconfig.isolated = 0;
  638. /* -X dev must be ignored by isolated preconfiguration */
  639. wchar_t *argv[] = {L"python3",
  640. L"-E",
  641. L"-I",
  642. L"-X", L"dev",
  643. L"-X", L"utf8",
  644. L"script.py"};
  645. PyStatus status = Py_PreInitializeFromArgs(&preconfig,
  646. Py_ARRAY_LENGTH(argv), argv);
  647. if (PyStatus_Exception(status)) {
  648. Py_ExitStatusException(status);
  649. }
  650. PyConfig config;
  651. PyConfig_InitIsolatedConfig(&config);
  652. config.isolated = 0;
  653. /* Pre-initialize implicitly using argv: make sure that -X dev
  654. is used to configure the allocation in preinitialization */
  655. config_set_argv(&config, Py_ARRAY_LENGTH(argv), argv);
  656. config_set_program_name(&config);
  657. init_from_config_clear(&config);
  658. dump_config();
  659. Py_Finalize();
  660. return 0;
  661. }
  662. static int test_preinit_parse_argv(void)
  663. {
  664. PyConfig config;
  665. PyConfig_InitPythonConfig(&config);
  666. /* Pre-initialize implicitly using argv: make sure that -X dev
  667. is used to configure the allocation in preinitialization */
  668. wchar_t *argv[] = {L"python3", L"-X", L"dev", L"script.py"};
  669. config_set_argv(&config, Py_ARRAY_LENGTH(argv), argv);
  670. config_set_program_name(&config);
  671. init_from_config_clear(&config);
  672. dump_config();
  673. Py_Finalize();
  674. return 0;
  675. }
  676. static void set_all_global_config_variables(void)
  677. {
  678. Py_IsolatedFlag = 0;
  679. Py_IgnoreEnvironmentFlag = 0;
  680. Py_BytesWarningFlag = 2;
  681. Py_InspectFlag = 1;
  682. Py_InteractiveFlag = 1;
  683. Py_OptimizeFlag = 1;
  684. Py_DebugFlag = 1;
  685. Py_VerboseFlag = 1;
  686. Py_QuietFlag = 1;
  687. Py_FrozenFlag = 0;
  688. Py_UnbufferedStdioFlag = 1;
  689. Py_NoSiteFlag = 1;
  690. Py_DontWriteBytecodeFlag = 1;
  691. Py_NoUserSiteDirectory = 1;
  692. #ifdef MS_WINDOWS
  693. Py_LegacyWindowsStdioFlag = 1;
  694. #endif
  695. }
  696. static int check_preinit_isolated_config(int preinit)
  697. {
  698. PyStatus status;
  699. PyPreConfig *rt_preconfig;
  700. /* environment variables must be ignored */
  701. set_all_env_vars();
  702. /* global configuration variables must be ignored */
  703. set_all_global_config_variables();
  704. if (preinit) {
  705. PyPreConfig preconfig;
  706. PyPreConfig_InitIsolatedConfig(&preconfig);
  707. status = Py_PreInitialize(&preconfig);
  708. if (PyStatus_Exception(status)) {
  709. Py_ExitStatusException(status);
  710. }
  711. rt_preconfig = &_PyRuntime.preconfig;
  712. assert(rt_preconfig->isolated == 1);
  713. assert(rt_preconfig->use_environment == 0);
  714. }
  715. PyConfig config;
  716. PyConfig_InitIsolatedConfig(&config);
  717. config_set_program_name(&config);
  718. init_from_config_clear(&config);
  719. rt_preconfig = &_PyRuntime.preconfig;
  720. assert(rt_preconfig->isolated == 1);
  721. assert(rt_preconfig->use_environment == 0);
  722. dump_config();
  723. Py_Finalize();
  724. return 0;
  725. }
  726. static int test_preinit_isolated_config(void)
  727. {
  728. return check_preinit_isolated_config(1);
  729. }
  730. static int test_init_isolated_config(void)
  731. {
  732. return check_preinit_isolated_config(0);
  733. }
  734. static int check_init_python_config(int preinit)
  735. {
  736. /* global configuration variables must be ignored */
  737. set_all_global_config_variables();
  738. Py_IsolatedFlag = 1;
  739. Py_IgnoreEnvironmentFlag = 1;
  740. Py_FrozenFlag = 1;
  741. Py_UnbufferedStdioFlag = 1;
  742. Py_NoSiteFlag = 1;
  743. Py_DontWriteBytecodeFlag = 1;
  744. Py_NoUserSiteDirectory = 1;
  745. #ifdef MS_WINDOWS
  746. Py_LegacyWindowsStdioFlag = 1;
  747. #endif
  748. if (preinit) {
  749. PyPreConfig preconfig;
  750. PyPreConfig_InitPythonConfig(&preconfig);
  751. PyStatus status = Py_PreInitialize(&preconfig);
  752. if (PyStatus_Exception(status)) {
  753. Py_ExitStatusException(status);
  754. }
  755. }
  756. PyConfig config;
  757. PyConfig_InitPythonConfig(&config);
  758. config_set_program_name(&config);
  759. init_from_config_clear(&config);
  760. dump_config();
  761. Py_Finalize();
  762. return 0;
  763. }
  764. static int test_preinit_python_config(void)
  765. {
  766. return check_init_python_config(1);
  767. }
  768. static int test_init_python_config(void)
  769. {
  770. return check_init_python_config(0);
  771. }
  772. static int test_init_dont_configure_locale(void)
  773. {
  774. PyPreConfig preconfig;
  775. PyPreConfig_InitPythonConfig(&preconfig);
  776. preconfig.configure_locale = 0;
  777. preconfig.coerce_c_locale = 1;
  778. preconfig.coerce_c_locale_warn = 1;
  779. PyStatus status = Py_PreInitialize(&preconfig);
  780. if (PyStatus_Exception(status)) {
  781. Py_ExitStatusException(status);
  782. }
  783. PyConfig config;
  784. PyConfig_InitPythonConfig(&config);
  785. config_set_program_name(&config);
  786. init_from_config_clear(&config);
  787. dump_config();
  788. Py_Finalize();
  789. return 0;
  790. }
  791. static int test_init_dev_mode(void)
  792. {
  793. PyConfig config;
  794. PyConfig_InitPythonConfig(&config);
  795. putenv("PYTHONFAULTHANDLER=");
  796. putenv("PYTHONMALLOC=");
  797. config.dev_mode = 1;
  798. config_set_program_name(&config);
  799. init_from_config_clear(&config);
  800. dump_config();
  801. Py_Finalize();
  802. return 0;
  803. }
  804. static PyObject *_open_code_hook(PyObject *path, void *data)
  805. {
  806. if (PyUnicode_CompareWithASCIIString(path, "$$test-filename") == 0) {
  807. return PyLong_FromVoidPtr(data);
  808. }
  809. PyObject *io = PyImport_ImportModule("_io");
  810. if (!io) {
  811. return NULL;
  812. }
  813. return PyObject_CallMethod(io, "open", "Os", path, "rb");
  814. }
  815. static int test_open_code_hook(void)
  816. {
  817. int result = 0;
  818. /* Provide a hook */
  819. result = PyFile_SetOpenCodeHook(_open_code_hook, &result);
  820. if (result) {
  821. printf("Failed to set hook\n");
  822. return 1;
  823. }
  824. /* A second hook should fail */
  825. result = PyFile_SetOpenCodeHook(_open_code_hook, &result);
  826. if (!result) {
  827. printf("Should have failed to set second hook\n");
  828. return 2;
  829. }
  830. Py_IgnoreEnvironmentFlag = 0;
  831. _testembed_Py_Initialize();
  832. result = 0;
  833. PyObject *r = PyFile_OpenCode("$$test-filename");
  834. if (!r) {
  835. PyErr_Print();
  836. result = 3;
  837. } else {
  838. void *cmp = PyLong_AsVoidPtr(r);
  839. Py_DECREF(r);
  840. if (cmp != &result) {
  841. printf("Did not get expected result from hook\n");
  842. result = 4;
  843. }
  844. }
  845. if (!result) {
  846. PyObject *io = PyImport_ImportModule("_io");
  847. PyObject *r = io
  848. ? PyObject_CallMethod(io, "open_code", "s", "$$test-filename")
  849. : NULL;
  850. if (!r) {
  851. PyErr_Print();
  852. result = 5;
  853. } else {
  854. void *cmp = PyLong_AsVoidPtr(r);
  855. Py_DECREF(r);
  856. if (cmp != &result) {
  857. printf("Did not get expected result from hook\n");
  858. result = 6;
  859. }
  860. }
  861. Py_XDECREF(io);
  862. }
  863. Py_Finalize();
  864. return result;
  865. }
  866. static int _audit_hook(const char *event, PyObject *args, void *userdata)
  867. {
  868. if (strcmp(event, "_testembed.raise") == 0) {
  869. PyErr_SetString(PyExc_RuntimeError, "Intentional error");
  870. return -1;
  871. } else if (strcmp(event, "_testembed.set") == 0) {
  872. if (!PyArg_ParseTuple(args, "n", userdata)) {
  873. return -1;
  874. }
  875. return 0;
  876. }
  877. return 0;
  878. }
  879. static int _test_audit(Py_ssize_t setValue)
  880. {
  881. Py_ssize_t sawSet = 0;
  882. Py_IgnoreEnvironmentFlag = 0;
  883. PySys_AddAuditHook(_audit_hook, &sawSet);
  884. _testembed_Py_Initialize();
  885. if (PySys_Audit("_testembed.raise", NULL) == 0) {
  886. printf("No error raised");
  887. return 1;
  888. }
  889. if (PySys_Audit("_testembed.nop", NULL) != 0) {
  890. printf("Nop event failed");
  891. /* Exception from above may still remain */
  892. PyErr_Clear();
  893. return 2;
  894. }
  895. if (!PyErr_Occurred()) {
  896. printf("Exception not preserved");
  897. return 3;
  898. }
  899. PyErr_Clear();
  900. if (PySys_Audit("_testembed.set", "n", setValue) != 0) {
  901. PyErr_Print();
  902. printf("Set event failed");
  903. return 4;
  904. }
  905. if (sawSet != 42) {
  906. printf("Failed to see *userData change\n");
  907. return 5;
  908. }
  909. return 0;
  910. }
  911. static int test_audit(void)
  912. {
  913. int result = _test_audit(42);
  914. Py_Finalize();
  915. return result;
  916. }
  917. static volatile int _audit_subinterpreter_interpreter_count = 0;
  918. static int _audit_subinterpreter_hook(const char *event, PyObject *args, void *userdata)
  919. {
  920. printf("%s\n", event);
  921. if (strcmp(event, "cpython.PyInterpreterState_New") == 0) {
  922. _audit_subinterpreter_interpreter_count += 1;
  923. }
  924. return 0;
  925. }
  926. static int test_audit_subinterpreter(void)
  927. {
  928. Py_IgnoreEnvironmentFlag = 0;
  929. PySys_AddAuditHook(_audit_subinterpreter_hook, NULL);
  930. _testembed_Py_Initialize();
  931. Py_NewInterpreter();
  932. Py_NewInterpreter();
  933. Py_NewInterpreter();
  934. Py_Finalize();
  935. switch (_audit_subinterpreter_interpreter_count) {
  936. case 3: return 0;
  937. case 0: return -1;
  938. default: return _audit_subinterpreter_interpreter_count;
  939. }
  940. }
  941. typedef struct {
  942. const char* expected;
  943. int exit;
  944. } AuditRunCommandTest;
  945. static int _audit_hook_run(const char *eventName, PyObject *args, void *userData)
  946. {
  947. AuditRunCommandTest *test = (AuditRunCommandTest*)userData;
  948. if (strcmp(eventName, test->expected)) {
  949. return 0;
  950. }
  951. if (test->exit) {
  952. PyObject *msg = PyUnicode_FromFormat("detected %s(%R)", eventName, args);
  953. if (msg) {
  954. printf("%s\n", PyUnicode_AsUTF8(msg));
  955. Py_DECREF(msg);
  956. }
  957. exit(test->exit);
  958. }
  959. PyErr_Format(PyExc_RuntimeError, "detected %s(%R)", eventName, args);
  960. return -1;
  961. }
  962. static int test_audit_run_command(void)
  963. {
  964. AuditRunCommandTest test = {"cpython.run_command"};
  965. wchar_t *argv[] = {PROGRAM_NAME, L"-c", L"pass"};
  966. Py_IgnoreEnvironmentFlag = 0;
  967. PySys_AddAuditHook(_audit_hook_run, (void*)&test);
  968. return Py_Main(Py_ARRAY_LENGTH(argv), argv);
  969. }
  970. static int test_audit_run_file(void)
  971. {
  972. AuditRunCommandTest test = {"cpython.run_file"};
  973. wchar_t *argv[] = {PROGRAM_NAME, L"filename.py"};
  974. Py_IgnoreEnvironmentFlag = 0;
  975. PySys_AddAuditHook(_audit_hook_run, (void*)&test);
  976. return Py_Main(Py_ARRAY_LENGTH(argv), argv);
  977. }
  978. static int run_audit_run_test(int argc, wchar_t **argv, void *test)
  979. {
  980. PyConfig config;
  981. PyConfig_InitPythonConfig(&config);
  982. config.argv.length = argc;
  983. config.argv.items = argv;
  984. config.parse_argv = 1;
  985. config.program_name = argv[0];
  986. config.interactive = 1;
  987. config.isolated = 0;
  988. config.use_environment = 1;
  989. config.quiet = 1;
  990. PySys_AddAuditHook(_audit_hook_run, test);
  991. PyStatus status = Py_InitializeFromConfig(&config);
  992. if (PyStatus_Exception(status)) {
  993. Py_ExitStatusException(status);
  994. }
  995. return Py_RunMain();
  996. }
  997. static int test_audit_run_interactivehook(void)
  998. {
  999. AuditRunCommandTest test = {"cpython.run_interactivehook", 10};
  1000. wchar_t *argv[] = {PROGRAM_NAME};
  1001. return run_audit_run_test(Py_ARRAY_LENGTH(argv), argv, &test);
  1002. }
  1003. static int test_audit_run_startup(void)
  1004. {
  1005. AuditRunCommandTest test = {"cpython.run_startup", 10};
  1006. wchar_t *argv[] = {PROGRAM_NAME};
  1007. return run_audit_run_test(Py_ARRAY_LENGTH(argv), argv, &test);
  1008. }
  1009. static int test_audit_run_stdin(void)
  1010. {
  1011. AuditRunCommandTest test = {"cpython.run_stdin"};
  1012. wchar_t *argv[] = {PROGRAM_NAME};
  1013. return run_audit_run_test(Py_ARRAY_LENGTH(argv), argv, &test);
  1014. }
  1015. static int test_init_read_set(void)
  1016. {
  1017. PyStatus status;
  1018. PyConfig config;
  1019. PyConfig_InitPythonConfig(&config);
  1020. status = PyConfig_SetBytesString(&config, &config.program_name,
  1021. "./init_read_set");
  1022. if (PyStatus_Exception(status)) {
  1023. goto fail;
  1024. }
  1025. status = PyConfig_Read(&config);
  1026. if (PyStatus_Exception(status)) {
  1027. goto fail;
  1028. }
  1029. status = PyWideStringList_Insert(&config.module_search_paths,
  1030. 1, L"test_path_insert1");
  1031. if (PyStatus_Exception(status)) {
  1032. goto fail;
  1033. }
  1034. status = PyWideStringList_Append(&config.module_search_paths,
  1035. L"test_path_append");
  1036. if (PyStatus_Exception(status)) {
  1037. goto fail;
  1038. }
  1039. /* override executable computed by PyConfig_Read() */
  1040. config_set_string(&config, &config.executable, L"my_executable");
  1041. init_from_config_clear(&config);
  1042. dump_config();
  1043. Py_Finalize();
  1044. return 0;
  1045. fail:
  1046. Py_ExitStatusException(status);
  1047. }
  1048. static int test_init_sys_add(void)
  1049. {
  1050. PySys_AddXOption(L"sysadd_xoption");
  1051. PySys_AddXOption(L"faulthandler");
  1052. PySys_AddWarnOption(L"ignore:::sysadd_warnoption");
  1053. PyConfig config;
  1054. PyConfig_InitPythonConfig(&config);
  1055. wchar_t* argv[] = {
  1056. L"python3",
  1057. L"-W",
  1058. L"ignore:::cmdline_warnoption",
  1059. L"-X",
  1060. L"cmdline_xoption",
  1061. };
  1062. config_set_argv(&config, Py_ARRAY_LENGTH(argv), argv);
  1063. config.parse_argv = 1;
  1064. PyStatus status;
  1065. status = PyWideStringList_Append(&config.xoptions,
  1066. L"config_xoption");
  1067. if (PyStatus_Exception(status)) {
  1068. goto fail;
  1069. }
  1070. status = PyWideStringList_Append(&config.warnoptions,
  1071. L"ignore:::config_warnoption");
  1072. if (PyStatus_Exception(status)) {
  1073. goto fail;
  1074. }
  1075. config_set_program_name(&config);
  1076. init_from_config_clear(&config);
  1077. dump_config();
  1078. Py_Finalize();
  1079. return 0;
  1080. fail:
  1081. PyConfig_Clear(&config);
  1082. Py_ExitStatusException(status);
  1083. }
  1084. static int test_init_setpath(void)
  1085. {
  1086. char *env = getenv("TESTPATH");
  1087. if (!env) {
  1088. fprintf(stderr, "missing TESTPATH env var\n");
  1089. return 1;
  1090. }
  1091. wchar_t *path = Py_DecodeLocale(env, NULL);
  1092. if (path == NULL) {
  1093. fprintf(stderr, "failed to decode TESTPATH\n");
  1094. return 1;
  1095. }
  1096. Py_SetPath(path);
  1097. PyMem_RawFree(path);
  1098. putenv("TESTPATH=");
  1099. Py_Initialize();
  1100. dump_config();
  1101. Py_Finalize();
  1102. return 0;
  1103. }
  1104. static int test_init_setpath_config(void)
  1105. {
  1106. PyPreConfig preconfig;
  1107. PyPreConfig_InitPythonConfig(&preconfig);
  1108. /* Explicitly preinitializes with Python preconfiguration to avoid
  1109. Py_SetPath() implicit preinitialization with compat preconfiguration. */
  1110. PyStatus status = Py_PreInitialize(&preconfig);
  1111. if (PyStatus_Exception(status)) {
  1112. Py_ExitStatusException(status);
  1113. }
  1114. char *env = getenv("TESTPATH");
  1115. if (!env) {
  1116. fprintf(stderr, "missing TESTPATH env var\n");
  1117. return 1;
  1118. }
  1119. wchar_t *path = Py_DecodeLocale(env, NULL);
  1120. if (path == NULL) {
  1121. fprintf(stderr, "failed to decode TESTPATH\n");
  1122. return 1;
  1123. }
  1124. Py_SetPath(path);
  1125. PyMem_RawFree(path);
  1126. putenv("TESTPATH=");
  1127. PyConfig config;
  1128. PyConfig_InitPythonConfig(&config);
  1129. config_set_string(&config, &config.program_name, L"conf_program_name");
  1130. config_set_string(&config, &config.executable, L"conf_executable");
  1131. init_from_config_clear(&config);
  1132. dump_config();
  1133. Py_Finalize();
  1134. return 0;
  1135. }
  1136. static int test_init_setpythonhome(void)
  1137. {
  1138. char *env = getenv("TESTHOME");
  1139. if (!env) {
  1140. fprintf(stderr, "missing TESTHOME env var\n");
  1141. return 1;
  1142. }
  1143. wchar_t *home = Py_DecodeLocale(env, NULL);
  1144. if (home == NULL) {
  1145. fprintf(stderr, "failed to decode TESTHOME\n");
  1146. return 1;
  1147. }
  1148. Py_SetPythonHome(home);
  1149. PyMem_RawFree(home);
  1150. putenv("TESTHOME=");
  1151. Py_Initialize();
  1152. dump_config();
  1153. Py_Finalize();
  1154. return 0;
  1155. }
  1156. static int test_init_warnoptions(void)
  1157. {
  1158. putenv("PYTHONWARNINGS=ignore:::env1,ignore:::env2");
  1159. PySys_AddWarnOption(L"ignore:::PySys_AddWarnOption1");
  1160. PySys_AddWarnOption(L"ignore:::PySys_AddWarnOption2");
  1161. PyConfig config;
  1162. PyConfig_InitPythonConfig(&config);
  1163. config.dev_mode = 1;
  1164. config.bytes_warning = 1;
  1165. config_set_program_name(&config);
  1166. PyStatus status;
  1167. status = PyWideStringList_Append(&config.warnoptions,
  1168. L"ignore:::PyConfig_BeforeRead");
  1169. if (PyStatus_Exception(status)) {
  1170. Py_ExitStatusException(status);
  1171. }
  1172. wchar_t* argv[] = {
  1173. L"python3",
  1174. L"-Wignore:::cmdline1",
  1175. L"-Wignore:::cmdline2"};
  1176. config_set_argv(&config, Py_ARRAY_LENGTH(argv), argv);
  1177. config.parse_argv = 1;
  1178. status = PyConfig_Read(&config);
  1179. if (PyStatus_Exception(status)) {
  1180. Py_ExitStatusException(status);
  1181. }
  1182. status = PyWideStringList_Append(&config.warnoptions,
  1183. L"ignore:::PyConfig_AfterRead");
  1184. if (PyStatus_Exception(status)) {
  1185. Py_ExitStatusException(status);
  1186. }
  1187. status = PyWideStringList_Insert(&config.warnoptions,
  1188. 0, L"ignore:::PyConfig_Insert0");
  1189. if (PyStatus_Exception(status)) {
  1190. Py_ExitStatusException(status);
  1191. }
  1192. init_from_config_clear(&config);
  1193. dump_config();
  1194. Py_Finalize();
  1195. return 0;
  1196. }
  1197. static void configure_init_main(PyConfig *config)
  1198. {
  1199. wchar_t* argv[] = {
  1200. L"python3", L"-c",
  1201. (L"import _testinternalcapi, json; "
  1202. L"print(json.dumps(_testinternalcapi.get_configs()))"),
  1203. L"arg2"};
  1204. config->parse_argv = 1;
  1205. config_set_argv(config, Py_ARRAY_LENGTH(argv), argv);
  1206. config_set_string(config, &config->program_name, L"./python3");
  1207. }
  1208. static int test_init_run_main(void)
  1209. {
  1210. PyConfig config;
  1211. PyConfig_InitPythonConfig(&config);
  1212. configure_init_main(&config);
  1213. init_from_config_clear(&config);
  1214. return Py_RunMain();
  1215. }
  1216. static int test_init_main(void)
  1217. {
  1218. PyConfig config;
  1219. PyConfig_InitPythonConfig(&config);
  1220. configure_init_main(&config);
  1221. config._init_main = 0;
  1222. init_from_config_clear(&config);
  1223. /* sys.stdout don't exist yet: it is created by _Py_InitializeMain() */
  1224. int res = PyRun_SimpleString(
  1225. "import sys; "
  1226. "print('Run Python code before _Py_InitializeMain', "
  1227. "file=sys.stderr)");
  1228. if (res < 0) {
  1229. exit(1);
  1230. }
  1231. PyStatus status = _Py_InitializeMain();
  1232. if (PyStatus_Exception(status)) {
  1233. Py_ExitStatusException(status);
  1234. }
  1235. return Py_RunMain();
  1236. }
  1237. static int test_run_main(void)
  1238. {
  1239. PyConfig config;
  1240. PyConfig_InitPythonConfig(&config);
  1241. wchar_t *argv[] = {L"python3", L"-c",
  1242. (L"import sys; "
  1243. L"print(f'Py_RunMain(): sys.argv={sys.argv}')"),
  1244. L"arg2"};
  1245. config_set_argv(&config, Py_ARRAY_LENGTH(argv), argv);
  1246. config_set_string(&config, &config.program_name, L"./python3");
  1247. init_from_config_clear(&config);
  1248. return Py_RunMain();
  1249. }
  1250. /* *********************************************************
  1251. * List of test cases and the function that implements it.
  1252. *
  1253. * Names are compared case-sensitively with the first
  1254. * argument. If no match is found, or no first argument was
  1255. * provided, the names of all test cases are printed and
  1256. * the exit code will be -1.
  1257. *
  1258. * The int returned from test functions is used as the exit
  1259. * code, and test_capi treats all non-zero exit codes as a
  1260. * failed test.
  1261. *********************************************************/
  1262. struct TestCase
  1263. {
  1264. const char *name;
  1265. int (*func)(void);
  1266. };
  1267. static struct TestCase TestCases[] = {
  1268. {"test_forced_io_encoding", test_forced_io_encoding},
  1269. {"test_repeated_init_and_subinterpreters", test_repeated_init_and_subinterpreters},
  1270. {"test_pre_initialization_api", test_pre_initialization_api},
  1271. {"test_pre_initialization_sys_options", test_pre_initialization_sys_options},
  1272. {"test_bpo20891", test_bpo20891},
  1273. {"test_initialize_twice", test_initialize_twice},
  1274. {"test_initialize_pymain", test_initialize_pymain},
  1275. {"test_init_initialize_config", test_init_initialize_config},
  1276. {"test_preinit_compat_config", test_preinit_compat_config},
  1277. {"test_init_compat_config", test_init_compat_config},
  1278. {"test_init_global_config", test_init_global_config},
  1279. {"test_init_from_config", test_init_from_config},
  1280. {"test_init_parse_argv", test_init_parse_argv},
  1281. {"test_init_dont_parse_argv", test_init_dont_parse_argv},
  1282. {"test_init_compat_env", test_init_compat_env},
  1283. {"test_init_python_env", test_init_python_env},
  1284. {"test_init_env_dev_mode", test_init_env_dev_mode},
  1285. {"test_init_env_dev_mode_alloc", test_init_env_dev_mode_alloc},
  1286. {"test_init_dont_configure_locale", test_init_dont_configure_locale},
  1287. {"test_init_dev_mode", test_init_dev_mode},
  1288. {"test_init_isolated_flag", test_init_isolated_flag},
  1289. {"test_preinit_isolated_config", test_preinit_isolated_config},
  1290. {"test_init_isolated_config", test_init_isolated_config},
  1291. {"test_preinit_python_config", test_preinit_python_config},
  1292. {"test_init_python_config", test_init_python_config},
  1293. {"test_preinit_isolated1", test_preinit_isolated1},
  1294. {"test_preinit_isolated2", test_preinit_isolated2},
  1295. {"test_preinit_parse_argv", test_preinit_parse_argv},
  1296. {"test_preinit_dont_parse_argv", test_preinit_dont_parse_argv},
  1297. {"test_init_read_set", test_init_read_set},
  1298. {"test_init_run_main", test_init_run_main},
  1299. {"test_init_main", test_init_main},
  1300. {"test_init_sys_add", test_init_sys_add},
  1301. {"test_init_setpath", test_init_setpath},
  1302. {"test_init_setpath_config", test_init_setpath_config},
  1303. {"test_init_setpythonhome", test_init_setpythonhome},
  1304. {"test_init_warnoptions", test_init_warnoptions},
  1305. {"test_run_main", test_run_main},
  1306. {"test_open_code_hook", test_open_code_hook},
  1307. {"test_audit", test_audit},
  1308. {"test_audit_subinterpreter", test_audit_subinterpreter},
  1309. {"test_audit_run_command", test_audit_run_command},
  1310. {"test_audit_run_file", test_audit_run_file},
  1311. {"test_audit_run_interactivehook", test_audit_run_interactivehook},
  1312. {"test_audit_run_startup", test_audit_run_startup},
  1313. {"test_audit_run_stdin", test_audit_run_stdin},
  1314. {NULL, NULL}
  1315. };
  1316. int main(int argc, char *argv[])
  1317. {
  1318. if (argc > 1) {
  1319. for (struct TestCase *tc = TestCases; tc && tc->name; tc++) {
  1320. if (strcmp(argv[1], tc->name) == 0)
  1321. return (*tc->func)();
  1322. }
  1323. }
  1324. /* No match found, or no test name provided, so display usage */
  1325. printf("Python " PY_VERSION " _testembed executable for embedded interpreter tests\n"
  1326. "Normally executed via 'EmbeddingTests' in Lib/test/test_embed.py\n\n"
  1327. "Usage: %s TESTNAME\n\nAll available tests:\n", argv[0]);
  1328. for (struct TestCase *tc = TestCases; tc && tc->name; tc++) {
  1329. printf(" %s\n", tc->name);
  1330. }
  1331. /* Non-zero exit code will cause test_embed.py tests to fail.
  1332. This is intentional. */
  1333. return -1;
  1334. }