bpo-35239: _PySys_EndInit() copies module_search_path (GH-10532)


* The _PySys_EndInit() function now copies the
  config->module_search_path list, so config is longer modified when
  sys.path is updated.
* config->warnoptions list and config->xoptions dict are also copied
* test_embed: InitConfigTests now also tests
  main_config['module_search_path']
* Fix _Py_InitializeMainInterpreter(): don't use config->warnoptions
   but sys.warnoptions to decide if the warnings module should
   be imported at startup.
(cherry picked from commit 37cd982df02795905886ab36a2378ed557cb6f60)

Co-authored-by: Victor Stinner <vstinner@redhat.com>
diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
index 81f64f5..e6c8c80 100644
--- a/Lib/test/test_embed.py
+++ b/Lib/test/test_embed.py
@@ -301,10 +301,6 @@
     }
 
     # main config
-    UNTESTED_MAIN_CONFIG = (
-        # FIXME: untested main configuration variables
-        'module_search_path',
-    )
     COPY_MAIN_CONFIG = (
         # Copy core config to main config for expected values
         'argv',
@@ -315,7 +311,8 @@
         'install_signal_handlers',
         'prefix',
         'warnoptions',
-        # xoptions is created from core_config in check_main_config()
+        # xoptions is created from core_config in check_main_config().
+        # 'module_search_paths' is copied to 'module_search_path'.
     )
 
     # global config
@@ -389,12 +386,10 @@
         main_config = config['main_config']
 
         # main config
-        for key in self.UNTESTED_MAIN_CONFIG:
-            del main_config[key]
-
         expected_main = {}
         for key in self.COPY_MAIN_CONFIG:
             expected_main[key] = core_config[key]
+        expected_main['module_search_path'] = core_config['module_search_paths']
         expected_main['xoptions'] = self.main_xoptions(core_config['xoptions'])
         self.assertEqual(main_config, expected_main)