bpo-34170: Add _PyCoreConfig.isolated (GH-8417)

* _PyCoreConfig: add isolated and site_import attributes
* Replace Py_IgnoreEnvironment with config->ignore_environment when
  reading the current configuration
* _PyCoreConfig_Read() now sets ignore_environment, utf8_mode,
  isolated and site_import from Py_IgnoreEnvironment, Py_UTF8Mode,
  Py_IsolatedFlag and Py_NoSiteFlag
* _Py_InitializeCore() now sets Py_xxx flags from the configuration
* pymain_read_conf() now uses _PyCoreConfig_Copy() to save/restore
  the configuration.
* Rename _disable_importlib of _PyCoreConfig to _install_importlib
* _PyCoreConfig_SetGlobalConfig() now also set
  Py_HashRandomizationFlag
* Replace !Py_NoSiteFlag with core_config->site_import
diff --git a/Include/internal/pystate.h b/Include/internal/pystate.h
index 6cee272..e041d37 100644
--- a/Include/internal/pystate.h
+++ b/Include/internal/pystate.h
@@ -52,17 +52,17 @@
     wchar_t *program_name;
     /* Set by Py_SetPythonHome() or PYTHONHOME environment variable */
     wchar_t *home;
-    /* isolated and no_site_import are used to set Py_IsolatedFlag and
+    /* isolated and site_import are used to set Py_IsolatedFlag and
        Py_NoSiteFlag flags on Windows in read_pth_file(). These fields
        are ignored when their value are equal to -1 (unset). */
     int isolated;
-    int no_site_import;
+    int site_import;
 } _PyPathConfig;
 
 #define _PyPathConfig_INIT \
     {.module_search_path = NULL, \
      .isolated = -1, \
-     .no_site_import = -1}
+     .site_import = -1}
 /* Note: _PyPathConfig_INIT sets other fields to 0/NULL */
 
 PyAPI_DATA(_PyPathConfig) _Py_path_config;
diff --git a/Include/pylifecycle.h b/Include/pylifecycle.h
index 2fbc4f9..3e43a98 100644
--- a/Include/pylifecycle.h
+++ b/Include/pylifecycle.h
@@ -54,20 +54,16 @@
 PyAPI_FUNC(_PyInitError) _Py_InitializeCore(const _PyCoreConfig *);
 PyAPI_FUNC(int) _Py_IsCoreInitialized(void);
 
-PyAPI_FUNC(_PyInitError) _PyCoreConfig_Read(
-    _PyCoreConfig *config,
-    int *isolated,
-    int *no_site_import);
+PyAPI_FUNC(_PyInitError) _PyCoreConfig_Read(_PyCoreConfig *config);
 PyAPI_FUNC(void) _PyCoreConfig_Clear(_PyCoreConfig *);
 PyAPI_FUNC(int) _PyCoreConfig_Copy(
     _PyCoreConfig *config,
     const _PyCoreConfig *config2);
-PyAPI_FUNC(_PyInitError) _PyCoreConfig_InitPathConfig(
-    _PyCoreConfig *config,
-    int *isolated,
-    int *no_site_import);
+PyAPI_FUNC(_PyInitError) _PyCoreConfig_InitPathConfig(_PyCoreConfig *config);
 PyAPI_FUNC(_PyInitError) _PyCoreConfig_SetPathConfig(
     const _PyCoreConfig *config);
+PyAPI_FUNC(void) _PyCoreConfig_SetGlobalConfig(const _PyCoreConfig *config);
+
 
 PyAPI_FUNC(_PyInitError) _PyMainInterpreterConfig_Read(
     _PyMainInterpreterConfig *config,
diff --git a/Include/pystate.h b/Include/pystate.h
index ac09dc3..609f9c6 100644
--- a/Include/pystate.h
+++ b/Include/pystate.h
@@ -28,7 +28,7 @@
 typedef struct {
     int install_signal_handlers;  /* Install signal handlers? -1 means unset */
 
-    int ignore_environment; /* -E, Py_IgnoreEnvironmentFlag */
+    int ignore_environment; /* -E, Py_IgnoreEnvironmentFlag, -1 means unset */
     int use_hash_seed;      /* PYTHONHASHSEED=x */
     unsigned long hash_seed;
     const char *allocator;  /* Memory allocator: _PyMem_SetupAllocators() */
@@ -75,18 +75,42 @@
     wchar_t *dll_path;      /* Windows DLL path */
 #endif
 
-    /* Private fields */
-    int _disable_importlib; /* Needed by freeze_importlib */
+    /* If greater than 0, enable isolated mode: sys.path contains
+       neither the script's directory nor the user's site-packages directory.
+
+       Set to 1 by the -I command line option. If set to -1 (default), inherit
+       Py_IsolatedFlag value. */
+    int isolated;
+
+    /* If equal to zero, disable the import of the module site and the
+       site-dependent manipulations of sys.path that it entails. Also disable
+       these manipulations if site is explicitly imported later (call
+       site.main() if you want them to be triggered).
+
+       Set to 0 by the -S command line option. If set to -1 (default), set to
+       the negative value of Py_NoSiteFlag. */
+    int site_import;
+
+    /* --- Private fields -------- */
+
+    /* Install importlib? If set to 0, importlib is not initialized at all.
+       Needed by freeze_importlib: see install_importlib argument of
+       _Py_InitializeEx_Private(). */
+    int _install_importlib;
 } _PyCoreConfig;
 
 #define _PyCoreConfig_INIT \
     (_PyCoreConfig){ \
         .install_signal_handlers = -1, \
+        .ignore_environment = -1, \
         .use_hash_seed = -1, \
         .coerce_c_locale = -1, \
         .utf8_mode = -1, \
         .argc = -1, \
-        .nmodule_search_path = -1}
+        .nmodule_search_path = -1, \
+        .isolated = -1, \
+        .site_import = -1, \
+        ._install_importlib = 1}
 /* Note: _PyCoreConfig_INIT sets other fields to 0/NULL */
 
 /* Placeholders while working on the new configuration API