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.

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