diff -Naur Python-3.8.0-orig/Lib/distutils/spawn.py Python-3.8.0/Lib/distutils/spawn.py --- Python-3.8.0-orig/Lib/distutils/spawn.py 2019-10-14 16:34:47.000000000 +0300 +++ Python-3.8.0/Lib/distutils/spawn.py 2019-10-22 10:00:23.260677500 +0300 @@ -12,6 +12,7 @@ from distutils.errors import DistutilsPlatformError, DistutilsExecError from distutils.debug import DEBUG from distutils import log +from subprocess import list2cmdline def spawn(cmd, search_path=1, verbose=0, dry_run=0): """Run another program, specified as a command list 'cmd', in a new process. @@ -43,17 +44,13 @@ def _nt_quote_args(args): """Quote command-line arguments for DOS/Windows conventions. - Just wraps every argument which contains blanks in double quotes, and - returns a new argument list. + Defer to subprocess module's list2cmdline as the logic is + complex. The previous implementation here failed to handle + -DG_LOG_DOMAIN="GEGL-"__FILE__ which was encountered in MSYS2 + while building the gobject-introspection part of GEGL 0.3.4. """ - # XXX this doesn't seem very robust to me -- but if the Windows guys - # say it'll work, I guess I'll have to accept it. (What if an arg - # contains quotes? What other magic characters, other than spaces, - # have to be escaped? Is there an escaping mechanism other than - # quoting?) for i, arg in enumerate(args): - if ' ' in arg: - args[i] = '"%s"' % arg + args[i] = list2cmdline([args[i]]) return args def _spawn_nt(cmd, search_path=1, verbose=0, dry_run=0): diff -Naur Python-3.8.0-orig/setup.py Python-3.8.0/setup.py --- Python-3.8.0-orig/setup.py 2019-10-14 16:34:47.000000000 +0300 +++ Python-3.8.0/setup.py 2019-10-22 10:00:23.666278200 +0300 @@ -1421,11 +1421,7 @@ '_sqlite/statement.c', '_sqlite/util.c', ] - sqlite_defines = [] - if not MS_WINDOWS: - sqlite_defines.append(('MODULE_NAME', '"sqlite3"')) - else: - sqlite_defines.append(('MODULE_NAME', '\\"sqlite3\\"')) + sqlite_defines = [('MODULE_NAME', '"sqlite3"')] # Enable support for loadable extensions in the sqlite3 module # if --enable-loadable-sqlite-extensions configure option is used.