From f56d132deb9fff861439ed56ed7414d22e4e4bb9 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Wed, 17 Jan 2024 21:52:23 +0000 Subject: [PATCH] gh-112984 Update Windows build and installer for free-threaded builds (GH-113129) --- .github/workflows/build_msi.yml | 2 + .github/workflows/reusable-windows.yml | 4 +- Doc/using/win_install_freethreaded.png | Bin 0 -> 236250 bytes Doc/using/windows.rst | 64 ++- Lib/test/test_ctypes/test_loading.py | 2 +- Lib/test/test_launcher.py | 40 +- Lib/test/test_regrtest.py | 4 + Lib/test/test_venv.py | 16 +- Lib/venv/__init__.py | 260 +++++---- ...-12-19-22-32-28.gh-issue-112984.F7kFMl.rst | 1 + PC/layout/main.py | 110 +++- PC/layout/support/constants.py | 3 + PC/layout/support/nuspec.py | 9 +- PC/layout/support/options.py | 19 +- PC/pyconfig.h.in | 19 +- PC/venvlauncher.c | 510 ++++++++++++++++++ PCbuild/_asyncio.vcxproj | 2 +- PCbuild/_bz2.vcxproj | 2 +- PCbuild/_ctypes.vcxproj | 2 +- PCbuild/_ctypes_test.vcxproj | 2 +- PCbuild/_decimal.vcxproj | 2 +- PCbuild/_elementtree.vcxproj | 2 +- PCbuild/_hashlib.vcxproj | 2 +- PCbuild/_lzma.vcxproj | 2 +- PCbuild/_multiprocessing.vcxproj | 2 +- PCbuild/_overlapped.vcxproj | 2 +- PCbuild/_queue.vcxproj | 2 +- PCbuild/_socket.vcxproj | 2 +- PCbuild/_sqlite3.vcxproj | 2 +- PCbuild/_ssl.vcxproj | 2 +- PCbuild/_testbuffer.vcxproj | 2 +- PCbuild/_testcapi.vcxproj | 2 +- PCbuild/_testclinic.vcxproj | 4 +- PCbuild/_testclinic_limited.vcxproj | 2 +- PCbuild/_testconsole.vcxproj | 2 +- PCbuild/_testimportmultiple.vcxproj | 2 +- PCbuild/_testinternalcapi.vcxproj | 2 +- PCbuild/_testmultiphase.vcxproj | 2 +- PCbuild/_testsinglephase.vcxproj | 2 +- PCbuild/_tkinter.vcxproj | 2 +- PCbuild/_uuid.vcxproj | 2 +- PCbuild/_wmi.vcxproj | 2 +- PCbuild/_zoneinfo.vcxproj | 2 +- PCbuild/pyexpat.vcxproj | 2 +- PCbuild/pyproject.props | 13 +- PCbuild/python.props | 70 ++- PCbuild/python.vcxproj | 5 +- PCbuild/python3dll.vcxproj | 2 +- PCbuild/pythonw.vcxproj | 1 + PCbuild/rt.bat | 7 +- PCbuild/select.vcxproj | 2 +- PCbuild/sqlite3.vcxproj | 2 +- PCbuild/unicodedata.vcxproj | 2 +- PCbuild/venvlauncher.vcxproj | 9 +- PCbuild/venvlauncher.vcxproj.filters | 2 +- PCbuild/venvwlauncher.vcxproj | 9 +- PCbuild/venvwlauncher.vcxproj.filters | 2 +- PCbuild/winsound.vcxproj | 2 +- PCbuild/xxlimited.vcxproj | 2 +- PCbuild/xxlimited_35.vcxproj | 2 +- Tools/msi/build.bat | 17 + Tools/msi/bundle/Default.thm | 1 + Tools/msi/bundle/Default.wxl | 1 + Tools/msi/bundle/bundle.targets | 1 + Tools/msi/bundle/bundle.wxs | 10 + .../msi/bundle/packagegroups/freethreaded.wxs | 62 +++ Tools/msi/freethreaded/freethreaded.wixproj | 20 + Tools/msi/freethreaded/freethreaded.wxs | 18 + Tools/msi/freethreaded/freethreaded_d.wixproj | 20 + Tools/msi/freethreaded/freethreaded_d.wxs | 16 + .../freethreaded_en-US.wxl_template | 8 + Tools/msi/freethreaded/freethreaded_files.wxs | 175 ++++++ .../msi/freethreaded/freethreaded_pdb.wixproj | 20 + Tools/msi/freethreaded/freethreaded_pdb.wxs | 15 + Tools/msi/lib/lib_files.wxs | 12 +- Tools/msi/msi.props | 33 +- 76 files changed, 1437 insertions(+), 245 deletions(-) create mode 100644 Doc/using/win_install_freethreaded.png create mode 100644 Misc/NEWS.d/next/Windows/2023-12-19-22-32-28.gh-issue-112984.F7kFMl.rst create mode 100644 PC/venvlauncher.c create mode 100644 Tools/msi/bundle/packagegroups/freethreaded.wxs create mode 100644 Tools/msi/freethreaded/freethreaded.wixproj create mode 100644 Tools/msi/freethreaded/freethreaded.wxs create mode 100644 Tools/msi/freethreaded/freethreaded_d.wixproj create mode 100644 Tools/msi/freethreaded/freethreaded_d.wxs create mode 100644 Tools/msi/freethreaded/freethreaded_en-US.wxl_template create mode 100644 Tools/msi/freethreaded/freethreaded_files.wxs create mode 100644 Tools/msi/freethreaded/freethreaded_pdb.wixproj create mode 100644 Tools/msi/freethreaded/freethreaded_pdb.wxs diff --git a/.github/workflows/build_msi.yml b/.github/workflows/build_msi.yml index 29282dffa37..65d32c734e7 100644 --- a/.github/workflows/build_msi.yml +++ b/.github/workflows/build_msi.yml @@ -32,6 +32,8 @@ jobs: strategy: matrix: type: [x86, x64, arm64] + env: + IncludeFreethreaded: true steps: - uses: actions/checkout@v4 - name: Build CPython installer diff --git a/.github/workflows/reusable-windows.yml b/.github/workflows/reusable-windows.yml index ae27c108d83..c0209e0e1c9 100644 --- a/.github/workflows/reusable-windows.yml +++ b/.github/workflows/reusable-windows.yml @@ -20,7 +20,7 @@ jobs: - name: Display build info run: .\python.bat -m test.pythoninfo - name: Tests - run: .\PCbuild\rt.bat -p Win32 -d -q --fast-ci + run: .\PCbuild\rt.bat -p Win32 -d -q --fast-ci ${{ inputs.free-threading && '--disable-gil' || '' }} build_win_amd64: name: 'build and test (x64)' @@ -37,7 +37,7 @@ jobs: - name: Display build info run: .\python.bat -m test.pythoninfo - name: Tests - run: .\PCbuild\rt.bat -p x64 -d -q --fast-ci + run: .\PCbuild\rt.bat -p x64 -d -q --fast-ci ${{ inputs.free-threading && '--disable-gil' || '' }} build_win_arm64: name: 'build (arm64)' diff --git a/Doc/using/win_install_freethreaded.png b/Doc/using/win_install_freethreaded.png new file mode 100644 index 0000000000000000000000000000000000000000..0aa01c1df6e051b1585228b0f963c5aaf2d0da5e GIT binary patch literal 236250 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%0A@>J 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%0DWC0rb;oy@MC+ebM>c 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 literal 0 HcmV?d00001 diff --git a/Doc/using/windows.rst b/Doc/using/windows.rst index 598bf3ca9bc..2a0e7b4b06f 100644 --- a/Doc/using/windows.rst +++ b/Doc/using/windows.rst @@ -307,6 +307,46 @@ settings and replace any that have been removed or modified. "Uninstall" will remove Python entirely, with the exception of the :ref:`launcher`, which has its own entry in Programs and Features. +.. _install-freethreaded-windows: + +Installing Free-threaded Binaries +--------------------------------- + +.. versionadded:: 3.13 (Experimental) + +.. note:: + + Everything described in this section is considered experimental, + and should be expected to change in future releases. + +To install pre-built binaries with free-threading enabled (see :pep:`703`), you +should select "Customize installation". The second page of options includes the +"Download free-threaded binaries" checkbox. + +.. image:: win_install_freethreaded.png + +Selecting this option will download and install additional binaries to the same +location as the main Python install. The main executable is called +``python3.13t.exe``, and other binaries either receive a ``t`` suffix or a full +ABI suffix. Python source files and bundled third-party dependencies are shared +with the main install. + +The free-threaded version is registered as a regular Python install with the +tag ``3.13t`` (with a ``-32`` or ``-arm64`` suffix as normal for those +platforms). This allows tools to discover it, and for the :ref:`launcher` to +support ``py.exe -3.13t``. Note that the launcher will interpret ``py.exe -3`` +(or a ``python3`` shebang) as "the latest 3.x install", which will prefer the +free-threaded binaries over the regular ones, while ``py.exe -3.13`` will not. +If you use the short style of option, you may prefer to not install the +free-threaded binaries at this time. + +To specify the install option at the command line, use +``Include_freethreaded=1``. See :ref:`install-layout-option` for instructions on +pre-emptively downloading the additional binaries for offline install. The +options to include debug symbols and binaries also apply to the free-threaded +builds. + +Free-threaded binaries are also available :ref:`on nuget.org `. .. _windows-store: @@ -450,9 +490,29 @@ automatically use the headers and import libraries in your build. The package information pages on nuget.org are `www.nuget.org/packages/python `_ -for the 64-bit version and `www.nuget.org/packages/pythonx86 -`_ for the 32-bit version. +for the 64-bit version, `www.nuget.org/packages/pythonx86 +`_ for the 32-bit version, and +`www.nuget.org/packages/pythonarm64 +`_ for the ARM64 version +Free-threaded packages +---------------------- + +.. versionadded:: 3.13 (Experimental) + +.. note:: + + Everything described in this section is considered experimental, + and should be expected to change in future releases. + +Packages containing free-threaded binaries are named +`python-freethreaded `_ +for the 64-bit version, `pythonx86-freethreaded +`_ for the 32-bit +version, and `pythonarm64-freethreaded +`_ for the ARM64 +version. These packages contain both the ``python3.13t.exe`` and +``python.exe`` entry points, both of which run free threaded. .. _windows-embeddable: diff --git a/Lib/test/test_ctypes/test_loading.py b/Lib/test/test_ctypes/test_loading.py index 22db97b818c..9f0547f4c95 100644 --- a/Lib/test/test_ctypes/test_loading.py +++ b/Lib/test/test_ctypes/test_loading.py @@ -141,7 +141,7 @@ class LoaderTest(unittest.TestCase): def test_load_dll_with_flags(self): _sqlite3 = import_helper.import_module("_sqlite3") src = _sqlite3.__file__ - if src.lower().endswith("_d.pyd"): + if src.partition(".")[0].lower().endswith("_d"): ext = "_d.dll" else: ext = ".dll" diff --git a/Lib/test/test_launcher.py b/Lib/test/test_launcher.py index bcd4ed63bf2..3da6173cfd3 100644 --- a/Lib/test/test_launcher.py +++ b/Lib/test/test_launcher.py @@ -19,8 +19,10 @@ import winreg PY_EXE = "py.exe" +DEBUG_BUILD = False if sys.executable.casefold().endswith("_d.exe".casefold()): PY_EXE = "py_d.exe" + DEBUG_BUILD = True # Registry data to create. On removal, everything beneath top-level names will # be deleted. @@ -232,7 +234,7 @@ class RunPyMixin: p.stdin.close() p.wait(10) out = p.stdout.read().decode("utf-8", "replace") - err = p.stderr.read().decode("ascii", "replace") + err = p.stderr.read().decode("ascii", "replace").replace("\uFFFD", "?") if p.returncode != expect_returncode and support.verbose and not allow_fail: print("++ COMMAND ++") print([self.py_exe, *args]) @@ -273,7 +275,7 @@ class RunPyMixin: def fake_venv(self): venv = Path.cwd() / "Scripts" venv.mkdir(exist_ok=True, parents=True) - venv_exe = (venv / Path(sys.executable).name) + venv_exe = (venv / ("python_d.exe" if DEBUG_BUILD else "python.exe")) venv_exe.touch() try: yield venv_exe, {"VIRTUAL_ENV": str(venv.parent)} @@ -521,6 +523,9 @@ class TestLauncher(unittest.TestCase, RunPyMixin): self.assertEqual(str(venv_exe), m.group(1)) break else: + if support.verbose: + print(data["stdout"]) + print(data["stderr"]) self.fail("did not find active venv path") data = self.run_py(["-0"], env=env) @@ -616,25 +621,29 @@ class TestLauncher(unittest.TestCase, RunPyMixin): self.assertEqual("True", data["SearchInfo.oldStyleTag"]) def test_search_path(self): - stem = Path(sys.executable).stem + exe = Path("arbitrary-exe-name.exe").absolute() + exe.touch() + self.addCleanup(exe.unlink) with self.py_ini(TEST_PY_DEFAULTS): - with self.script(f"#! /usr/bin/env {stem} -prearg") as script: + with self.script(f"#! /usr/bin/env {exe.stem} -prearg") as script: data = self.run_py( [script, "-postarg"], - env={"PATH": f"{Path(sys.executable).parent};{os.getenv('PATH')}"}, + env={"PATH": f"{exe.parent};{os.getenv('PATH')}"}, ) - self.assertEqual(f"{sys.executable} -prearg {script} -postarg", data["stdout"].strip()) + self.assertEqual(f"{exe} -prearg {script} -postarg", data["stdout"].strip()) def test_search_path_exe(self): # Leave the .exe on the name to ensure we don't add it a second time - name = Path(sys.executable).name + exe = Path("arbitrary-exe-name.exe").absolute() + exe.touch() + self.addCleanup(exe.unlink) with self.py_ini(TEST_PY_DEFAULTS): - with self.script(f"#! /usr/bin/env {name} -prearg") as script: + with self.script(f"#! /usr/bin/env {exe.name} -prearg") as script: data = self.run_py( [script, "-postarg"], - env={"PATH": f"{Path(sys.executable).parent};{os.getenv('PATH')}"}, + env={"PATH": f"{exe.parent};{os.getenv('PATH')}"}, ) - self.assertEqual(f"{sys.executable} -prearg {script} -postarg", data["stdout"].strip()) + self.assertEqual(f"{exe} -prearg {script} -postarg", data["stdout"].strip()) def test_recursive_search_path(self): stem = self.get_py_exe().stem @@ -727,15 +736,18 @@ class TestLauncher(unittest.TestCase, RunPyMixin): data = self.run_py([script], expect_returncode=103) with self.fake_venv() as (venv_exe, env): - # Put a real Python (ourselves) on PATH as a distraction. + # Put a "normal" Python on PATH as a distraction. # The active VIRTUAL_ENV should be preferred when the name isn't an # exact match. - env["PATH"] = f"{Path(sys.executable).parent};{os.environ['PATH']}" + exe = Path(Path(venv_exe).name).absolute() + exe.touch() + self.addCleanup(exe.unlink) + env["PATH"] = f"{exe.parent};{os.environ['PATH']}" with self.script(f'#! /usr/bin/env {stem} arg1') as script: data = self.run_py([script], env=env) self.assertEqual(data["stdout"].strip(), f"{venv_exe} arg1 {script}") - with self.script(f'#! /usr/bin/env {Path(sys.executable).stem} arg1') as script: + with self.script(f'#! /usr/bin/env {exe.stem} arg1') as script: data = self.run_py([script], env=env) - self.assertEqual(data["stdout"].strip(), f"{sys.executable} arg1 {script}") + self.assertEqual(data["stdout"].strip(), f"{exe} arg1 {script}") diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py index e828941f6c7..89562fa5eac 100644 --- a/Lib/test/test_regrtest.py +++ b/Lib/test/test_regrtest.py @@ -845,6 +845,8 @@ class ProgramsTestCase(BaseTestCase): test_args.append('-x64') # 64-bit build if not support.Py_DEBUG: test_args.append('+d') # Release build, use python.exe + if sysconfig.get_config_var("Py_GIL_DISABLED"): + test_args.append('--disable-gil') self.run_batch(script, *test_args, *self.tests) @unittest.skipUnless(sys.platform == 'win32', 'Windows only') @@ -862,6 +864,8 @@ class ProgramsTestCase(BaseTestCase): rt_args.append('-x64') # 64-bit build if support.Py_DEBUG: rt_args.append('-d') # Debug build, use python_d.exe + if sysconfig.get_config_var("Py_GIL_DISABLED"): + rt_args.append('--disable-gil') self.run_batch(script, *rt_args, *self.regrtest_args, *self.tests) diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py index 218e7560cff..6852625c36c 100644 --- a/Lib/test/test_venv.py +++ b/Lib/test/test_venv.py @@ -223,8 +223,14 @@ class BasicTest(BaseTest): def test_upgrade_dependencies(self): builder = venv.EnvBuilder() - bin_path = 'Scripts' if sys.platform == 'win32' else 'bin' + bin_path = 'bin' python_exe = os.path.split(sys.executable)[1] + if sys.platform == 'win32': + bin_path = 'Scripts' + if os.path.normcase(os.path.splitext(python_exe)[0]).endswith('_d'): + python_exe = 'python_d.exe' + else: + python_exe = 'python.exe' with tempfile.TemporaryDirectory() as fake_env_dir: expect_exe = os.path.normcase( os.path.join(fake_env_dir, bin_path, python_exe) @@ -283,7 +289,9 @@ class BasicTest(BaseTest): # build environment ('is_python_build()', str(sysconfig.is_python_build())), ('get_makefile_filename()', sysconfig.get_makefile_filename()), - ('get_config_h_filename()', sysconfig.get_config_h_filename())): + ('get_config_h_filename()', sysconfig.get_config_h_filename()), + ('get_config_var("Py_GIL_DISABLED")', + str(sysconfig.get_config_var("Py_GIL_DISABLED")))): with self.subTest(call): cmd[2] = 'import sysconfig; print(sysconfig.%s)' % call out, err = check_output(cmd, encoding='utf-8') @@ -315,7 +323,9 @@ class BasicTest(BaseTest): # build environment ('is_python_build()', str(sysconfig.is_python_build())), ('get_makefile_filename()', sysconfig.get_makefile_filename()), - ('get_config_h_filename()', sysconfig.get_config_h_filename())): + ('get_config_h_filename()', sysconfig.get_config_h_filename()), + ('get_config_var("Py_GIL_DISABLED")', + str(sysconfig.get_config_var("Py_GIL_DISABLED")))): with self.subTest(call): cmd[2] = 'import sysconfig; print(sysconfig.%s)' % call out, err = check_output(cmd, encoding='utf-8') diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py index d960bf3bd82..f04ca8fafcc 100644 --- a/Lib/venv/__init__.py +++ b/Lib/venv/__init__.py @@ -139,6 +139,11 @@ class EnvBuilder: 'check that your PATH environment variable is ' 'correctly set.') dirname, exename = os.path.split(os.path.abspath(executable)) + if sys.platform == 'win32': + # Always create the simplest name in the venv. It will either be a + # link back to executable, or a copy of the appropriate launcher + _d = '_d' if os.path.splitext(exename)[0].endswith('_d') else '' + exename = f'python{_d}.exe' context.executable = executable context.python_dir = dirname context.python_exe = exename @@ -222,67 +227,26 @@ class EnvBuilder: args = ' '.join(args) f.write(f'command = {sys.executable} -m venv {args}\n') - if os.name != 'nt': - def symlink_or_copy(self, src, dst, relative_symlinks_ok=False): - """ - Try symlinking a file, and if that fails, fall back to copying. - """ - force_copy = not self.symlinks - if not force_copy: - try: - if not os.path.islink(dst): # can't link to itself! - if relative_symlinks_ok: - assert os.path.dirname(src) == os.path.dirname(dst) - os.symlink(os.path.basename(src), dst) - else: - os.symlink(src, dst) - except Exception: # may need to use a more specific exception - logger.warning('Unable to symlink %r to %r', src, dst) - force_copy = True - if force_copy: - shutil.copyfile(src, dst) - else: - def symlink_or_copy(self, src, dst, relative_symlinks_ok=False): - """ - Try symlinking a file, and if that fails, fall back to copying. - """ - bad_src = os.path.lexists(src) and not os.path.exists(src) - if self.symlinks and not bad_src and not os.path.islink(dst): - try: + def symlink_or_copy(self, src, dst, relative_symlinks_ok=False): + """ + Try symlinking a file, and if that fails, fall back to copying. + (Unused on Windows, because we can't just copy a failed symlink file: we + switch to a different set of files instead.) + """ + assert os.name != 'nt' + force_copy = not self.symlinks + if not force_copy: + try: + if not os.path.islink(dst): # can't link to itself! if relative_symlinks_ok: assert os.path.dirname(src) == os.path.dirname(dst) os.symlink(os.path.basename(src), dst) else: os.symlink(src, dst) - return - except Exception: # may need to use a more specific exception - logger.warning('Unable to symlink %r to %r', src, dst) - - # On Windows, we rewrite symlinks to our base python.exe into - # copies of venvlauncher.exe - basename, ext = os.path.splitext(os.path.basename(src)) - srcfn = os.path.join(os.path.dirname(__file__), - "scripts", - "nt", - basename + ext) - # Builds or venv's from builds need to remap source file - # locations, as we do not put them into Lib/venv/scripts - if sysconfig.is_python_build() or not os.path.isfile(srcfn): - if basename.endswith('_d'): - ext = '_d' + ext - basename = basename[:-2] - if basename == 'python': - basename = 'venvlauncher' - elif basename == 'pythonw': - basename = 'venvwlauncher' - src = os.path.join(os.path.dirname(src), basename + ext) - else: - src = srcfn - if not os.path.exists(src): - if not bad_src: - logger.warning('Unable to copy %r', src) - return - + except Exception: # may need to use a more specific exception + logger.warning('Unable to symlink %r to %r', src, dst) + force_copy = True + if force_copy: shutil.copyfile(src, dst) def create_git_ignore_file(self, context): @@ -298,22 +262,23 @@ class EnvBuilder: 'see https://docs.python.org/3/library/venv.html\n') file.write('*\n') - def setup_python(self, context): - """ - Set up a Python executable in the environment. + if os.name != 'nt': + def setup_python(self, context): + """ + Set up a Python executable in the environment. - :param context: The information for the environment creation request - being processed. - """ - binpath = context.bin_path - path = context.env_exe - copier = self.symlink_or_copy - dirname = context.python_dir - if os.name != 'nt': + :param context: The information for the environment creation request + being processed. + """ + binpath = context.bin_path + path = context.env_exe + copier = self.symlink_or_copy + dirname = context.python_dir copier(context.executable, path) if not os.path.islink(path): os.chmod(path, 0o755) - for suffix in ('python', 'python3', f'python3.{sys.version_info[1]}'): + for suffix in ('python', 'python3', + f'python3.{sys.version_info[1]}'): path = os.path.join(binpath, suffix) if not os.path.exists(path): # Issue 18807: make copies if @@ -321,30 +286,105 @@ class EnvBuilder: copier(context.env_exe, path, relative_symlinks_ok=True) if not os.path.islink(path): os.chmod(path, 0o755) - else: - if self.symlinks: - # For symlinking, we need a complete copy of the root directory - # If symlinks fail, you'll get unnecessary copies of files, but - # we assume that if you've opted into symlinks on Windows then - # you know what you're doing. - suffixes = [ - f for f in os.listdir(dirname) if - os.path.normcase(os.path.splitext(f)[1]) in ('.exe', '.dll') - ] - if sysconfig.is_python_build(): - suffixes = [ - f for f in suffixes if - os.path.normcase(f).startswith(('python', 'vcruntime')) - ] - else: - suffixes = {'python.exe', 'python_d.exe', 'pythonw.exe', 'pythonw_d.exe'} - base_exe = os.path.basename(context.env_exe) - suffixes.add(base_exe) - for suffix in suffixes: - src = os.path.join(dirname, suffix) - if os.path.lexists(src): - copier(src, os.path.join(binpath, suffix)) + else: + def setup_python(self, context): + """ + Set up a Python executable in the environment. + + :param context: The information for the environment creation request + being processed. + """ + binpath = context.bin_path + dirname = context.python_dir + exename = os.path.basename(context.env_exe) + exe_stem = os.path.splitext(exename)[0] + exe_d = '_d' if os.path.normcase(exe_stem).endswith('_d') else '' + if sysconfig.is_python_build(): + scripts = dirname + else: + scripts = os.path.join(os.path.dirname(__file__), + 'scripts', 'nt') + if not sysconfig.get_config_var("Py_GIL_DISABLED"): + python_exe = os.path.join(dirname, f'python{exe_d}.exe') + pythonw_exe = os.path.join(dirname, f'pythonw{exe_d}.exe') + link_sources = { + 'python.exe': python_exe, + f'python{exe_d}.exe': python_exe, + 'pythonw.exe': pythonw_exe, + f'pythonw{exe_d}.exe': pythonw_exe, + } + python_exe = os.path.join(scripts, f'venvlauncher{exe_d}.exe') + pythonw_exe = os.path.join(scripts, f'venvwlauncher{exe_d}.exe') + copy_sources = { + 'python.exe': python_exe, + f'python{exe_d}.exe': python_exe, + 'pythonw.exe': pythonw_exe, + f'pythonw{exe_d}.exe': pythonw_exe, + } + else: + exe_t = f'3.{sys.version_info[1]}t' + python_exe = os.path.join(dirname, f'python{exe_t}{exe_d}.exe') + pythonw_exe = os.path.join(dirname, f'pythonw{exe_t}{exe_d}.exe') + link_sources = { + 'python.exe': python_exe, + f'python{exe_d}.exe': python_exe, + f'python{exe_t}.exe': python_exe, + f'python{exe_t}{exe_d}.exe': python_exe, + 'pythonw.exe': pythonw_exe, + f'pythonw{exe_d}.exe': pythonw_exe, + f'pythonw{exe_t}.exe': pythonw_exe, + f'pythonw{exe_t}{exe_d}.exe': pythonw_exe, + } + python_exe = os.path.join(scripts, f'venvlaunchert{exe_d}.exe') + pythonw_exe = os.path.join(scripts, f'venvwlaunchert{exe_d}.exe') + copy_sources = { + 'python.exe': python_exe, + f'python{exe_d}.exe': python_exe, + f'python{exe_t}.exe': python_exe, + f'python{exe_t}{exe_d}.exe': python_exe, + 'pythonw.exe': pythonw_exe, + f'pythonw{exe_d}.exe': pythonw_exe, + f'pythonw{exe_t}.exe': pythonw_exe, + f'pythonw{exe_t}{exe_d}.exe': pythonw_exe, + } + + do_copies = True + if self.symlinks: + do_copies = False + # For symlinking, we need all the DLLs to be available alongside + # the executables. + link_sources.update({ + f: os.path.join(dirname, f) for f in os.listdir(dirname) + if os.path.normcase(f).startswith(('python', 'vcruntime')) + and os.path.normcase(os.path.splitext(f)[1]) == '.dll' + }) + + to_unlink = [] + for dest, src in link_sources.items(): + dest = os.path.join(binpath, dest) + try: + os.symlink(src, dest) + to_unlink.append(dest) + except OSError: + logger.warning('Unable to symlink %r to %r', src, dst) + do_copies = True + for f in to_unlink: + try: + os.unlink(f) + except OSError: + logger.warning('Failed to clean up symlink %r', + f) + logger.warning('Retrying with copies') + break + + if do_copies: + for dest, src in copy_sources.items(): + dest = os.path.join(binpath, dest) + try: + shutil.copy2(src, dest) + except OSError: + logger.warning('Unable to copy %r to %r', src, dest) if sysconfig.is_python_build(): # copy init.tcl @@ -437,6 +477,14 @@ class EnvBuilder: """ binpath = context.bin_path plen = len(path) + if os.name == 'nt': + def skip_file(f): + f = os.path.normcase(f) + return (f.startswith(('python', 'venv')) + and f.endswith(('.exe', '.pdb'))) + else: + def skip_file(f): + return False for root, dirs, files in os.walk(path): if root == path: # at top-level, remove irrelevant dirs for d in dirs[:]: @@ -444,8 +492,7 @@ class EnvBuilder: dirs.remove(d) continue # ignore files in top level for f in files: - if (os.name == 'nt' and f.startswith('python') - and f.endswith(('.exe', '.pdb'))): + if skip_file(f): continue srcfile = os.path.join(root, f) suffix = root[plen:].split(os.sep)[2:] @@ -456,20 +503,25 @@ class EnvBuilder: if not os.path.exists(dstdir): os.makedirs(dstdir) dstfile = os.path.join(dstdir, f) + if os.name == 'nt' and srcfile.endswith(('.exe', '.pdb')): + shutil.copy2(srcfile, dstfile) + continue with open(srcfile, 'rb') as f: data = f.read() - if not srcfile.endswith(('.exe', '.pdb')): - try: - data = data.decode('utf-8') - data = self.replace_variables(data, context) - data = data.encode('utf-8') - except UnicodeError as e: - data = None - logger.warning('unable to copy script %r, ' - 'may be binary: %s', srcfile, e) - if data is not None: + try: + new_data = ( + self.replace_variables(data.decode('utf-8'), context) + .encode('utf-8') + ) + except UnicodeError as e: + logger.warning('unable to copy script %r, ' + 'may be binary: %s', srcfile, e) + continue + if new_data == data: + shutil.copy2(srcfile, dstfile) + else: with open(dstfile, 'wb') as f: - f.write(data) + f.write(new_data) shutil.copymode(srcfile, dstfile) def upgrade_dependencies(self, context): diff --git a/Misc/NEWS.d/next/Windows/2023-12-19-22-32-28.gh-issue-112984.F7kFMl.rst b/Misc/NEWS.d/next/Windows/2023-12-19-22-32-28.gh-issue-112984.F7kFMl.rst new file mode 100644 index 00000000000..429cd5bc923 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2023-12-19-22-32-28.gh-issue-112984.F7kFMl.rst @@ -0,0 +1 @@ +Adds free-threaded binaries to Windows installer as an optional component. diff --git a/PC/layout/main.py b/PC/layout/main.py index accfd51dd97..d176b272f1c 100644 --- a/PC/layout/main.py +++ b/PC/layout/main.py @@ -41,7 +41,7 @@ TCLTK_FILES_ONLY = FileNameSet("turtle.py") VENV_DIRS_ONLY = FileNameSet("venv", "ensurepip") -EXCLUDE_FROM_PYDS = FileStemSet("python*", "pyshellext", "vcruntime*") +EXCLUDE_FROM_DLLS = FileStemSet("python*", "pyshellext", "vcruntime*") EXCLUDE_FROM_LIB = FileNameSet("*.pyc", "__pycache__", "*.pickle") EXCLUDE_FROM_PACKAGED_LIB = FileNameSet("readme.txt") EXCLUDE_FROM_COMPILE = FileNameSet("badsyntax_*", "bad_*") @@ -126,9 +126,9 @@ def get_layout(ns): n = new_name or n src = ns.build / f if ns.debug and src not in REQUIRED_DLLS: - if not src.stem.endswith("_d"): + if not "_d." in src.name: src = src.parent / (src.stem + "_d" + src.suffix) - if not n.endswith("_d"): + if "_d." not in f: n += "_d" f = n + "." + x yield dest + n + "." + x, src @@ -141,17 +141,45 @@ def get_layout(ns): if lib.is_file(): yield "libs/" + n + ".lib", lib + source = "python.exe" + sourcew = "pythonw.exe" + alias = [ + "python", + "python{}".format(VER_MAJOR) if ns.include_alias3 else "", + "python{}".format(VER_DOT) if ns.include_alias3x else "", + ] + aliasw = [ + "pythonw", + "pythonw{}".format(VER_MAJOR) if ns.include_alias3 else "", + "pythonw{}".format(VER_DOT) if ns.include_alias3x else "", + ] if ns.include_appxmanifest: - yield from in_build("python_uwp.exe", new_name="python{}".format(VER_DOT)) - yield from in_build("pythonw_uwp.exe", new_name="pythonw{}".format(VER_DOT)) - # For backwards compatibility, but we don't reference these ourselves. - yield from in_build("python_uwp.exe", new_name="python") - yield from in_build("pythonw_uwp.exe", new_name="pythonw") - else: - yield from in_build("python.exe", new_name="python") - yield from in_build("pythonw.exe", new_name="pythonw") + source = "python_uwp.exe" + sourcew = "pythonw_uwp.exe" + elif ns.include_freethreaded: + source = "python{}t.exe".format(VER_DOT) + sourcew = "pythonw{}t.exe".format(VER_DOT) + if not ns.include_alias: + alias = [] + aliasw = [] + alias.extend([ + "python{}t".format(VER_DOT), + "python{}t".format(VER_MAJOR) if ns.include_alias3 else None, + ]) + aliasw.extend([ + "pythonw{}t".format(VER_DOT), + "pythonw{}t".format(VER_MAJOR) if ns.include_alias3 else None, + ]) - yield from in_build(PYTHON_DLL_NAME) + for a in filter(None, alias): + yield from in_build(source, new_name=a) + for a in filter(None, aliasw): + yield from in_build(sourcew, new_name=a) + + if ns.include_freethreaded: + yield from in_build(FREETHREADED_PYTHON_DLL_NAME) + else: + yield from in_build(PYTHON_DLL_NAME) if ns.include_launchers and ns.include_appxmanifest: if ns.include_pip: @@ -160,7 +188,10 @@ def get_layout(ns): yield from in_build("pythonw_uwp.exe", new_name="idle{}".format(VER_DOT)) if ns.include_stable: - yield from in_build(PYTHON_STABLE_DLL_NAME) + if ns.include_freethreaded: + yield from in_build(FREETHREADED_PYTHON_STABLE_DLL_NAME) + else: + yield from in_build(PYTHON_STABLE_DLL_NAME) found_any = False for dest, src in rglob(ns.build, "vcruntime*.dll"): @@ -171,16 +202,28 @@ def get_layout(ns): yield "LICENSE.txt", ns.build / "LICENSE.txt" - for dest, src in rglob(ns.build, ("*.pyd", "*.dll")): - if src.stem.endswith("_d") != bool(ns.debug) and src not in REQUIRED_DLLS: - continue - if src in EXCLUDE_FROM_PYDS: - continue + for dest, src in rglob(ns.build, "*.pyd"): + if ns.include_freethreaded: + if not src.match("*.cp*t-win*.pyd"): + continue + if bool(src.match("*_d.cp*.pyd")) != bool(ns.debug): + continue + else: + if src.match("*.cp*t-win*.pyd"): + continue + if bool(src.match("*_d.pyd")) != bool(ns.debug): + continue if src in TEST_PYDS_ONLY and not ns.include_tests: continue if src in TCLTK_PYDS_ONLY and not ns.include_tcltk: continue + yield from in_build(src.name, dest="" if ns.flat_dlls else "DLLs/") + for dest, src in rglob(ns.build, "*.dll"): + if src.stem.endswith("_d") != bool(ns.debug) and src not in REQUIRED_DLLS: + continue + if src in EXCLUDE_FROM_DLLS: + continue yield from in_build(src.name, dest="" if ns.flat_dlls else "DLLs/") if ns.zip_lib: @@ -191,8 +234,12 @@ def get_layout(ns): yield "Lib/{}".format(dest), src if ns.include_venv: - yield from in_build("venvlauncher.exe", "Lib/venv/scripts/nt/", "python") - yield from in_build("venvwlauncher.exe", "Lib/venv/scripts/nt/", "pythonw") + if ns.include_freethreaded: + yield from in_build("venvlaunchert.exe", "Lib/venv/scripts/nt/") + yield from in_build("venvwlaunchert.exe", "Lib/venv/scripts/nt/") + else: + yield from in_build("venvlauncher.exe", "Lib/venv/scripts/nt/") + yield from in_build("venvwlauncher.exe", "Lib/venv/scripts/nt/") if ns.include_tools: @@ -208,7 +255,6 @@ def get_layout(ns): yield PYTHON_PTH_NAME, ns.temp / PYTHON_PTH_NAME if ns.include_dev: - for dest, src in rglob(ns.source / "Include", "**/*.h"): yield "include/{}".format(dest), src yield "include/pyconfig.h", ns.build / "pyconfig.h" @@ -552,7 +598,6 @@ def main(): ns.source = ns.source or (Path(__file__).resolve().parent.parent.parent) ns.build = ns.build or Path(sys.executable).parent - ns.temp = ns.temp or Path(tempfile.mkdtemp()) ns.doc_build = ns.doc_build or (ns.source / "Doc" / "build") if not ns.source.is_absolute(): ns.source = (Path.cwd() / ns.source).resolve() @@ -565,7 +610,12 @@ def main(): if ns.include_cat and not ns.include_cat.is_absolute(): ns.include_cat = (Path.cwd() / ns.include_cat).resolve() if not ns.arch: - ns.arch = "amd64" if sys.maxsize > 2 ** 32 else "win32" + if sys.winver.endswith("-arm64"): + ns.arch = "arm64" + elif sys.winver.endswith("-32"): + ns.arch = "win32" + else: + ns.arch = "amd64" if ns.copy and not ns.copy.is_absolute(): ns.copy = (Path.cwd() / ns.copy).resolve() @@ -574,6 +624,14 @@ def main(): if ns.catalog and not ns.catalog.is_absolute(): ns.catalog = (Path.cwd() / ns.catalog).resolve() + if not ns.temp: + # Put temp on a Dev Drive for speed if we're copying to one. + # If not, the regular temp dir will have to do. + if ns.copy and getattr(os.path, "isdevdrive", lambda d: False)(ns.copy): + ns.temp = ns.copy.with_name(ns.copy.name + "_temp") + else: + ns.temp = Path(tempfile.mkdtemp()) + configure_logger(ns) log_info( @@ -602,6 +660,12 @@ Catalog: {ns.catalog}""", log_warning("Assuming --include-tcltk to support --include-idle") ns.include_tcltk = True + if not (ns.include_alias or ns.include_alias3 or ns.include_alias3x): + if ns.include_freethreaded: + ns.include_alias3x = True + else: + ns.include_alias = True + try: generate_source_files(ns) files = list(get_layout(ns)) diff --git a/PC/layout/support/constants.py b/PC/layout/support/constants.py index 8195c3dc30c..ae22aa16ebf 100644 --- a/PC/layout/support/constants.py +++ b/PC/layout/support/constants.py @@ -39,3 +39,6 @@ PYTHON_PTH_NAME = "python{}{}._pth".format(VER_MAJOR, VER_MINOR) PYTHON_CHM_NAME = "python{}{}{}{}.chm".format( VER_MAJOR, VER_MINOR, VER_MICRO, VER_SUFFIX ) + +FREETHREADED_PYTHON_DLL_NAME = "python{}{}t.dll".format(VER_MAJOR, VER_MINOR) +FREETHREADED_PYTHON_STABLE_DLL_NAME = "python{}t.dll".format(VER_MAJOR) diff --git a/PC/layout/support/nuspec.py b/PC/layout/support/nuspec.py index dbcb713ef9d..a87e0bea049 100644 --- a/PC/layout/support/nuspec.py +++ b/PC/layout/support/nuspec.py @@ -24,6 +24,10 @@ NUSPEC_PLATFORM_DATA = dict( amd64=("64-bit", "python", "Python"), arm32=("ARM", "pythonarm", "Python (ARM)"), arm64=("ARM64", "pythonarm64", "Python (ARM64)"), + win32t=("32-bit free-threaded", "pythonx86-freethreaded", "Python (32-bit, free-threaded)"), + amd64t=("64-bit free-threaded", "python-freethreaded", "Python (free-threaded)"), + arm32t=("ARM free-threaded", "pythonarm-freethreaded", "Python (ARM, free-threaded)"), + arm64t=("ARM64 free-threaded", "pythonarm64-freethreaded", "Python (ARM64, free-threaded)"), ) if not NUSPEC_DATA["PYTHON_VERSION"]: @@ -58,7 +62,10 @@ NUSPEC_TEMPLATE = r""" def _get_nuspec_data_overrides(ns): - for k, v in zip(NUSPEC_PLATFORM_DATA["_keys"], NUSPEC_PLATFORM_DATA[ns.arch]): + arch = ns.arch + if ns.include_freethreaded: + arch += "t" + for k, v in zip(NUSPEC_PLATFORM_DATA["_keys"], NUSPEC_PLATFORM_DATA[arch]): ev = os.getenv("PYTHON_NUSPEC_" + k) if ev: yield k, ev diff --git a/PC/layout/support/options.py b/PC/layout/support/options.py index 60256fb32fe..f1a8eb0b317 100644 --- a/PC/layout/support/options.py +++ b/PC/layout/support/options.py @@ -32,6 +32,10 @@ OPTIONS = { "nuspec": {"help": "a python.nuspec file"}, "chm": {"help": "the CHM documentation"}, "html-doc": {"help": "the HTML documentation"}, + "freethreaded": {"help": "freethreaded binaries", "not-in-all": True}, + "alias": {"help": "aliased python.exe entry-point binaries"}, + "alias3": {"help": "aliased python3.exe entry-point binaries"}, + "alias3x": {"help": "aliased python3.x.exe entry-point binaries"}, } @@ -47,6 +51,8 @@ PRESETS = { "dev", "launchers", "appxmanifest", + "alias", + "alias3x", # XXX: Disabled for now "precompile", ], }, @@ -59,9 +65,10 @@ PRESETS = { "venv", "props", "nuspec", + "alias", ], }, - "iot": {"help": "Windows IoT Core", "options": ["stable", "pip"]}, + "iot": {"help": "Windows IoT Core", "options": ["alias", "stable", "pip"]}, "default": { "help": "development kit package", "options": [ @@ -74,11 +81,19 @@ PRESETS = { "dev", "symbols", "html-doc", + "alias", ], }, "embed": { "help": "embeddable package", - "options": ["stable", "zip-lib", "flat-dlls", "underpth", "precompile"], + "options": [ + "alias", + "stable", + "zip-lib", + "flat-dlls", + "underpth", + "precompile", + ], }, } diff --git a/PC/pyconfig.h.in b/PC/pyconfig.h.in index d8f0a6be69c..8bbf877a5bb 100644 --- a/PC/pyconfig.h.in +++ b/PC/pyconfig.h.in @@ -94,6 +94,9 @@ WIN32 is still required for the locale module. #endif #endif /* Py_BUILD_CORE || Py_BUILD_CORE_BUILTIN || Py_BUILD_CORE_MODULE */ +/* Define to 1 if you want to disable the GIL */ +#undef Py_GIL_DISABLED + /* Compiler specific defines */ /* ------------------------------------------------------------------------*/ @@ -305,8 +308,16 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ /* not building the core - must be an ext */ # if defined(_MSC_VER) /* So MSVC users need not specify the .lib - file in their Makefile (other compilers are - generally taken care of by distutils.) */ + file in their Makefile */ +# if defined(Py_GIL_DISABLED) +# if defined(_DEBUG) +# pragma comment(lib,"python313t_d.lib") +# elif defined(Py_LIMITED_API) +# pragma comment(lib,"python3t.lib") +# else +# pragma comment(lib,"python313t.lib") +# endif /* _DEBUG */ +# else /* Py_GIL_DISABLED */ # if defined(_DEBUG) # pragma comment(lib,"python313_d.lib") # elif defined(Py_LIMITED_API) @@ -314,6 +325,7 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ # else # pragma comment(lib,"python313.lib") # endif /* _DEBUG */ +# endif /* Py_GIL_DISABLED */ # endif /* _MSC_VER */ # endif /* Py_BUILD_CORE */ #endif /* MS_COREDLL */ @@ -739,7 +751,4 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ /* Define if libssl has X509_VERIFY_PARAM_set1_host and related function */ #define HAVE_X509_VERIFY_PARAM_SET1_HOST 1 -/* Define if you want to disable the GIL */ -#undef Py_GIL_DISABLED - #endif /* !Py_CONFIG_H */ diff --git a/PC/venvlauncher.c b/PC/venvlauncher.c new file mode 100644 index 00000000000..fe97d32e93b --- /dev/null +++ b/PC/venvlauncher.c @@ -0,0 +1,510 @@ +/* + * venv redirector for Windows + * + * This launcher looks for a nearby pyvenv.cfg to find the correct home + * directory, and then launches the original Python executable from it. + * The name of this executable is passed as argv[0]. + */ + +#define __STDC_WANT_LIB_EXT1__ 1 + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MS_WINDOWS +#include "patchlevel.h" + +#define MAXLEN PATHCCH_MAX_CCH +#define MSGSIZE 1024 + +#define RC_NO_STD_HANDLES 100 +#define RC_CREATE_PROCESS 101 +#define RC_NO_PYTHON 103 +#define RC_NO_MEMORY 104 +#define RC_NO_VENV_CFG 106 +#define RC_BAD_VENV_CFG 107 +#define RC_NO_COMMANDLINE 108 +#define RC_INTERNAL_ERROR 109 + +// This should always be defined when we build for real, +// but it's handy to have a definition for quick testing +#ifndef EXENAME +#define EXENAME L"python.exe" +#endif + +#ifndef CFGNAME +#define CFGNAME L"pyvenv.cfg" +#endif + +static FILE * log_fp = NULL; + +void +debug(wchar_t * format, ...) +{ + va_list va; + + if (log_fp != NULL) { + wchar_t buffer[MAXLEN]; + int r = 0; + va_start(va, format); + r = vswprintf_s(buffer, MAXLEN, format, va); + va_end(va); + + if (r <= 0) { + return; + } + fwprintf(log_fp, L"%ls\n", buffer); + while (r && isspace(buffer[r])) { + buffer[r--] = L'\0'; + } + if (buffer[0]) { + OutputDebugStringW(buffer); + } + } +} + + +void +formatWinerror(int rc, wchar_t * message, int size) +{ + FormatMessageW( + FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, rc, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + message, size, NULL); +} + + +void +winerror(int err, wchar_t * format, ... ) +{ + va_list va; + wchar_t message[MSGSIZE]; + wchar_t win_message[MSGSIZE]; + int len; + + if (err == 0) { + err = GetLastError(); + } + + va_start(va, format); + len = _vsnwprintf_s(message, MSGSIZE, _TRUNCATE, format, va); + va_end(va); + + formatWinerror(err, win_message, MSGSIZE); + if (len >= 0) { + _snwprintf_s(&message[len], MSGSIZE - len, _TRUNCATE, L": %ls", + win_message); + } + +#if !defined(_WINDOWS) + fwprintf(stderr, L"%ls\n", message); +#else + MessageBoxW(NULL, message, L"Python venv launcher is sorry to say ...", + MB_OK); +#endif +} + + +void +error(wchar_t * format, ... ) +{ + va_list va; + wchar_t message[MSGSIZE]; + + va_start(va, format); + _vsnwprintf_s(message, MSGSIZE, _TRUNCATE, format, va); + va_end(va); + +#if !defined(_WINDOWS) + fwprintf(stderr, L"%ls\n", message); +#else + MessageBoxW(NULL, message, L"Python venv launcher is sorry to say ...", + MB_OK); +#endif +} + + +bool +isEnvVarSet(const wchar_t *name) +{ + /* only looking for non-empty, which means at least one character + and the null terminator */ + return GetEnvironmentVariableW(name, NULL, 0) >= 2; +} + + +bool +join(wchar_t *buffer, size_t bufferLength, const wchar_t *fragment) +{ + if (SUCCEEDED(PathCchCombineEx(buffer, bufferLength, buffer, fragment, PATHCCH_ALLOW_LONG_PATHS))) { + return true; + } + return false; +} + + +bool +split_parent(wchar_t *buffer, size_t bufferLength) +{ + return SUCCEEDED(PathCchRemoveFileSpec(buffer, bufferLength)); +} + + +/* + * Path calculation + */ + +int +calculate_pyvenvcfg_path(wchar_t *pyvenvcfg_path, size_t maxlen) +{ + if (!pyvenvcfg_path) { + error(L"invalid buffer provided"); + return RC_INTERNAL_ERROR; + } + if ((DWORD)maxlen != maxlen) { + error(L"path buffer is too large"); + return RC_INTERNAL_ERROR; + } + if (!GetModuleFileNameW(NULL, pyvenvcfg_path, (DWORD)maxlen)) { + winerror(GetLastError(), L"failed to read executable directory"); + return RC_NO_COMMANDLINE; + } + // Remove 'python.exe' from our path + if (!split_parent(pyvenvcfg_path, maxlen)) { + error(L"failed to remove segment from '%ls'", pyvenvcfg_path); + return RC_NO_COMMANDLINE; + } + // Replace with 'pyvenv.cfg' + if (!join(pyvenvcfg_path, maxlen, CFGNAME)) { + error(L"failed to append '%ls' to '%ls'", CFGNAME, pyvenvcfg_path); + return RC_NO_MEMORY; + } + // If it exists, return + if (GetFileAttributesW(pyvenvcfg_path) != INVALID_FILE_ATTRIBUTES) { + return 0; + } + // Otherwise, remove 'pyvenv.cfg' and (probably) 'Scripts' + if (!split_parent(pyvenvcfg_path, maxlen) || + !split_parent(pyvenvcfg_path, maxlen)) { + error(L"failed to remove segments from '%ls'", pyvenvcfg_path); + return RC_NO_COMMANDLINE; + } + // Replace 'pyvenv.cfg' + if (!join(pyvenvcfg_path, maxlen, CFGNAME)) { + error(L"failed to append '%ls' to '%ls'", CFGNAME, pyvenvcfg_path); + return RC_NO_MEMORY; + } + // If it exists, return + if (GetFileAttributesW(pyvenvcfg_path) != INVALID_FILE_ATTRIBUTES) { + return 0; + } + // Otherwise, we fail + winerror(GetLastError(), L"failed to locate %ls", CFGNAME); + return RC_NO_VENV_CFG; +} + + +/* + * pyvenv.cfg parsing + */ + +static int +find_home_value(const char *buffer, DWORD maxlen, const char **start, DWORD *length) +{ + if (!buffer || !start || !length) { + error(L"invalid find_home_value parameters()"); + return 0; + } + for (const char *s = strstr(buffer, "home"); + s && ((ptrdiff_t)s - (ptrdiff_t)buffer) < maxlen; + s = strstr(s + 1, "\nhome") + ) { + if (*s == '\n') { + ++s; + } + for (int i = 4; i > 0 && *s; --i, ++s); + + while (*s && iswspace(*s)) { + ++s; + } + if (*s != L'=') { + continue; + } + + do { + ++s; + } while (*s && iswspace(*s)); + + *start = s; + char *nl = strchr(s, '\n'); + if (nl) { + while (nl != s && iswspace(nl[-1])) { + --nl; + } + *length = (DWORD)((ptrdiff_t)nl - (ptrdiff_t)s); + } else { + *length = (DWORD)strlen(s); + } + return 1; + } + return 0; +} + + +int +read_home(const wchar_t *pyvenv_cfg, wchar_t *home_path, size_t maxlen) +{ + HANDLE hFile = CreateFileW(pyvenv_cfg, GENERIC_READ, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, OPEN_EXISTING, 0, NULL); + + if (hFile == INVALID_HANDLE_VALUE) { + winerror(GetLastError(), L"failed to open '%ls'", pyvenv_cfg); + return RC_BAD_VENV_CFG; + } + + // 8192 characters ought to be enough for anyone + // (doubled compared to the old implementation!) + char buffer[8192]; + DWORD len; + if (!ReadFile(hFile, buffer, sizeof(buffer) - 1, &len, NULL)) { + winerror(GetLastError(), L"failed to read '%ls'", pyvenv_cfg); + CloseHandle(hFile); + return RC_BAD_VENV_CFG; + } + CloseHandle(hFile); + // Ensure null termination + buffer[len] = '\0'; + + char *home; + DWORD home_len; + if (!find_home_value(buffer, sizeof(buffer), &home, &home_len)) { + error(L"no home= specified in '%ls'", pyvenv_cfg); + return RC_BAD_VENV_CFG; + } + + if ((DWORD)maxlen != maxlen) { + maxlen = 8192; + } + len = MultiByteToWideChar(CP_UTF8, 0, home, home_len, home_path, (DWORD)maxlen); + if (!len) { + winerror(GetLastError(), L"failed to decode home setting in '%ls'", pyvenv_cfg); + return RC_BAD_VENV_CFG; + } + home_path[len] = L'\0'; + + return 0; +} + + +int +locate_python(wchar_t *path, size_t maxlen) +{ + if (!join(path, maxlen, EXENAME)) { + error(L"failed to append %ls to '%ls'", EXENAME, path); + return RC_NO_MEMORY; + } + + if (GetFileAttributesW(path) == INVALID_FILE_ATTRIBUTES) { + winerror(GetLastError(), L"did not find executable at '%ls'", path); + return RC_NO_PYTHON; + } + + return 0; +} + + +int +smuggle_path() +{ + wchar_t buffer[MAXLEN]; + // We could use argv[0], but that may be wrong in certain rare cases (if the + // user is doing something weird like symlinks to venv redirectors), and + // what we _really_ want is the directory of the venv. We always copy the + // redirectors, so if we've made the venv, this will be correct. + DWORD len = GetModuleFileNameW(NULL, buffer, MAXLEN); + if (!len) { + winerror(GetLastError(), L"Failed to get own executable path"); + return RC_INTERNAL_ERROR; + } + buffer[len] = L'\0'; + debug(L"Setting __PYVENV_LAUNCHER__ = '%s'", buffer); + + if (!SetEnvironmentVariableW(L"__PYVENV_LAUNCHER__", buffer)) { + winerror(GetLastError(), L"Failed to set launcher environment"); + return RC_INTERNAL_ERROR; + } + + return 0; +} + +/* + * Process creation + */ + +static BOOL +safe_duplicate_handle(HANDLE in, HANDLE * pout, const wchar_t *name) +{ + BOOL ok; + HANDLE process = GetCurrentProcess(); + DWORD rc; + + *pout = NULL; + ok = DuplicateHandle(process, in, process, pout, 0, TRUE, + DUPLICATE_SAME_ACCESS); + if (!ok) { + rc = GetLastError(); + if (rc == ERROR_INVALID_HANDLE) { + debug(L"DuplicateHandle(%ls) returned ERROR_INVALID_HANDLE\n", name); + ok = TRUE; + } + else { + debug(L"DuplicateHandle(%ls) returned %d\n", name, rc); + } + } + return ok; +} + +static BOOL WINAPI +ctrl_c_handler(DWORD code) +{ + return TRUE; /* We just ignore all control events. */ +} + +static int +launch(const wchar_t *executable, wchar_t *cmdline) +{ + HANDLE job; + JOBOBJECT_EXTENDED_LIMIT_INFORMATION info; + DWORD rc; + BOOL ok; + STARTUPINFOW si; + PROCESS_INFORMATION pi; + +#if defined(_WINDOWS) + /* + When explorer launches a Windows (GUI) application, it displays + the "app starting" (the "pointer + hourglass") cursor for a number + of seconds, or until the app does something UI-ish (eg, creating a + window, or fetching a message). As this launcher doesn't do this + directly, that cursor remains even after the child process does these + things. We avoid that by doing a simple post+get message. + See http://bugs.python.org/issue17290 + */ + MSG msg; + + PostMessage(0, 0, 0, 0); + GetMessage(&msg, 0, 0, 0); +#endif + + debug(L"run_child: about to run '%ls' with '%ls'\n", executable, cmdline); + job = CreateJobObject(NULL, NULL); + ok = QueryInformationJobObject(job, JobObjectExtendedLimitInformation, + &info, sizeof(info), &rc); + if (!ok || (rc != sizeof(info)) || !job) { + winerror(GetLastError(), L"Job information querying failed"); + return RC_CREATE_PROCESS; + } + info.BasicLimitInformation.LimitFlags |= JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE | + JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK; + ok = SetInformationJobObject(job, JobObjectExtendedLimitInformation, &info, + sizeof(info)); + if (!ok) { + winerror(GetLastError(), L"Job information setting failed"); + return RC_CREATE_PROCESS; + } + memset(&si, 0, sizeof(si)); + GetStartupInfoW(&si); + ok = safe_duplicate_handle(GetStdHandle(STD_INPUT_HANDLE), &si.hStdInput, L"stdin"); + if (!ok) { + return RC_NO_STD_HANDLES; + } + ok = safe_duplicate_handle(GetStdHandle(STD_OUTPUT_HANDLE), &si.hStdOutput, L"stdout"); + if (!ok) { + return RC_NO_STD_HANDLES; + } + ok = safe_duplicate_handle(GetStdHandle(STD_ERROR_HANDLE), &si.hStdError, L"stderr"); + if (!ok) { + return RC_NO_STD_HANDLES; + } + + ok = SetConsoleCtrlHandler(ctrl_c_handler, TRUE); + if (!ok) { + winerror(GetLastError(), L"control handler setting failed"); + return RC_CREATE_PROCESS; + } + + si.dwFlags = STARTF_USESTDHANDLES; + ok = CreateProcessW(executable, cmdline, NULL, NULL, TRUE, + 0, NULL, NULL, &si, &pi); + if (!ok) { + winerror(GetLastError(), L"Unable to create process using '%ls'", cmdline); + return RC_CREATE_PROCESS; + } + AssignProcessToJobObject(job, pi.hProcess); + CloseHandle(pi.hThread); + WaitForSingleObjectEx(pi.hProcess, INFINITE, FALSE); + ok = GetExitCodeProcess(pi.hProcess, &rc); + if (!ok) { + winerror(GetLastError(), L"Failed to get exit code of process"); + return RC_CREATE_PROCESS; + } + debug(L"child process exit code: %d", rc); + return rc; +} + + +int +process(int argc, wchar_t ** argv) +{ + int exitCode; + wchar_t pyvenvcfg_path[MAXLEN]; + wchar_t home_path[MAXLEN]; + + if (isEnvVarSet(L"PYLAUNCHER_DEBUG")) { + setvbuf(stderr, (char *)NULL, _IONBF, 0); + log_fp = stderr; + } + + exitCode = calculate_pyvenvcfg_path(pyvenvcfg_path, MAXLEN); + if (exitCode) return exitCode; + + exitCode = read_home(pyvenvcfg_path, home_path, MAXLEN); + if (exitCode) return exitCode; + + exitCode = locate_python(home_path, MAXLEN); + if (exitCode) return exitCode; + + // We do not update argv[0] to point at the target runtime, and so we do not + // pass through our original argv[0] in an environment variable. + //exitCode = smuggle_path(); + //if (exitCode) return exitCode; + + exitCode = launch(home_path, GetCommandLineW()); + return exitCode; +} + + +#if defined(_WINDOWS) + +int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, + LPWSTR lpstrCmd, int nShow) +{ + return process(__argc, __wargv); +} + +#else + +int cdecl wmain(int argc, wchar_t ** argv) +{ + return process(argc, argv); +} + +#endif diff --git a/PCbuild/_asyncio.vcxproj b/PCbuild/_asyncio.vcxproj index ed1e1bc0a42..76b0ffd660d 100644 --- a/PCbuild/_asyncio.vcxproj +++ b/PCbuild/_asyncio.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_bz2.vcxproj b/PCbuild/_bz2.vcxproj index 3fe95fbf839..e0dc6ec187a 100644 --- a/PCbuild/_bz2.vcxproj +++ b/PCbuild/_bz2.vcxproj @@ -80,7 +80,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_ctypes.vcxproj b/PCbuild/_ctypes.vcxproj index 253da31e9ce..63d5fa49cd4 100644 --- a/PCbuild/_ctypes.vcxproj +++ b/PCbuild/_ctypes.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_ctypes_test.vcxproj b/PCbuild/_ctypes_test.vcxproj index 8a01e743a4d..97354739c09 100644 --- a/PCbuild/_ctypes_test.vcxproj +++ b/PCbuild/_ctypes_test.vcxproj @@ -80,7 +80,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_decimal.vcxproj b/PCbuild/_decimal.vcxproj index 0916f1a2d37..490d7df87eb 100644 --- a/PCbuild/_decimal.vcxproj +++ b/PCbuild/_decimal.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_elementtree.vcxproj b/PCbuild/_elementtree.vcxproj index 8da5244bac0..8c9c0e42f7f 100644 --- a/PCbuild/_elementtree.vcxproj +++ b/PCbuild/_elementtree.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_hashlib.vcxproj b/PCbuild/_hashlib.vcxproj index 6dad8183c57..2cd205224bc 100644 --- a/PCbuild/_hashlib.vcxproj +++ b/PCbuild/_hashlib.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_lzma.vcxproj b/PCbuild/_lzma.vcxproj index fe076a6fc57..40107d4b76c 100644 --- a/PCbuild/_lzma.vcxproj +++ b/PCbuild/_lzma.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_multiprocessing.vcxproj b/PCbuild/_multiprocessing.vcxproj index 77b6bfc8e1e..a65397f532a 100644 --- a/PCbuild/_multiprocessing.vcxproj +++ b/PCbuild/_multiprocessing.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_overlapped.vcxproj b/PCbuild/_overlapped.vcxproj index 9e60d3b5db3..224bf05d530 100644 --- a/PCbuild/_overlapped.vcxproj +++ b/PCbuild/_overlapped.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_queue.vcxproj b/PCbuild/_queue.vcxproj index 8065b235851..80a1c3c6a4a 100644 --- a/PCbuild/_queue.vcxproj +++ b/PCbuild/_queue.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_socket.vcxproj b/PCbuild/_socket.vcxproj index 78fa4d6729a..41af0895921 100644 --- a/PCbuild/_socket.vcxproj +++ b/PCbuild/_socket.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_sqlite3.vcxproj b/PCbuild/_sqlite3.vcxproj index 57c7413671e..9ae0a0fc3a0 100644 --- a/PCbuild/_sqlite3.vcxproj +++ b/PCbuild/_sqlite3.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_ssl.vcxproj b/PCbuild/_ssl.vcxproj index 226ff506f8c..d4e1affab03 100644 --- a/PCbuild/_ssl.vcxproj +++ b/PCbuild/_ssl.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_testbuffer.vcxproj b/PCbuild/_testbuffer.vcxproj index 917d7ae50fe..4e721e8ce09 100644 --- a/PCbuild/_testbuffer.vcxproj +++ b/PCbuild/_testbuffer.vcxproj @@ -80,7 +80,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_testcapi.vcxproj b/PCbuild/_testcapi.vcxproj index 1c15541d3ec..6911aacab29 100644 --- a/PCbuild/_testcapi.vcxproj +++ b/PCbuild/_testcapi.vcxproj @@ -80,7 +80,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_testclinic.vcxproj b/PCbuild/_testclinic.vcxproj index e319b3c0f42..ef981332c6a 100644 --- a/PCbuild/_testclinic.vcxproj +++ b/PCbuild/_testclinic.vcxproj @@ -80,7 +80,7 @@ - .pyd + $(PyStdlibPydExt) @@ -107,4 +107,4 @@ - \ No newline at end of file + diff --git a/PCbuild/_testclinic_limited.vcxproj b/PCbuild/_testclinic_limited.vcxproj index b00b2be491b..183a55080e8 100644 --- a/PCbuild/_testclinic_limited.vcxproj +++ b/PCbuild/_testclinic_limited.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_testconsole.vcxproj b/PCbuild/_testconsole.vcxproj index 5d7e14eff10..69d312b17a5 100644 --- a/PCbuild/_testconsole.vcxproj +++ b/PCbuild/_testconsole.vcxproj @@ -80,7 +80,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_testimportmultiple.vcxproj b/PCbuild/_testimportmultiple.vcxproj index 6d80d5779f2..c35ac83c1c7 100644 --- a/PCbuild/_testimportmultiple.vcxproj +++ b/PCbuild/_testimportmultiple.vcxproj @@ -80,7 +80,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_testinternalcapi.vcxproj b/PCbuild/_testinternalcapi.vcxproj index 558f66ca95c..a825cac9138 100644 --- a/PCbuild/_testinternalcapi.vcxproj +++ b/PCbuild/_testinternalcapi.vcxproj @@ -80,7 +80,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_testmultiphase.vcxproj b/PCbuild/_testmultiphase.vcxproj index 430eb528cc3..e730fe308ab 100644 --- a/PCbuild/_testmultiphase.vcxproj +++ b/PCbuild/_testmultiphase.vcxproj @@ -80,7 +80,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_testsinglephase.vcxproj b/PCbuild/_testsinglephase.vcxproj index fb4bcd95392..bf4dabf66c1 100644 --- a/PCbuild/_testsinglephase.vcxproj +++ b/PCbuild/_testsinglephase.vcxproj @@ -80,7 +80,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_tkinter.vcxproj b/PCbuild/_tkinter.vcxproj index 30cedcbb43d..117488a0162 100644 --- a/PCbuild/_tkinter.vcxproj +++ b/PCbuild/_tkinter.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_uuid.vcxproj b/PCbuild/_uuid.vcxproj index 2437b7eb2d9..50d81cc7916 100644 --- a/PCbuild/_uuid.vcxproj +++ b/PCbuild/_uuid.vcxproj @@ -80,7 +80,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_wmi.vcxproj b/PCbuild/_wmi.vcxproj index c1914a3fa5a..22fa8960982 100644 --- a/PCbuild/_wmi.vcxproj +++ b/PCbuild/_wmi.vcxproj @@ -80,7 +80,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/_zoneinfo.vcxproj b/PCbuild/_zoneinfo.vcxproj index 6e6389c3773..47b5bfa5b88 100644 --- a/PCbuild/_zoneinfo.vcxproj +++ b/PCbuild/_zoneinfo.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/pyexpat.vcxproj b/PCbuild/pyexpat.vcxproj index 001f8afd89b..dc9161a8b29 100644 --- a/PCbuild/pyexpat.vcxproj +++ b/PCbuild/pyexpat.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/pyproject.props b/PCbuild/pyproject.props index 16ad91ef027..fd5fbc9e910 100644 --- a/PCbuild/pyproject.props +++ b/PCbuild/pyproject.props @@ -24,6 +24,13 @@ false + + $(TargetName)$(TargetExt) + <_TargetNameSep>$(TargetNameExt.LastIndexOf(`.`)) + $(TargetNameExt.Substring(0, $(_TargetNameSep))) + $(TargetNameExt.Substring($(_TargetNameSep))) + + <_VCToolsVersion>$([System.Version]::Parse(`$(VCToolsVersion)`).Major).$([System.Version]::Parse(`$(VCToolsVersion)`).Minor) @@ -38,7 +45,7 @@ <_PlatformPreprocessorDefinition>_WIN32; <_PlatformPreprocessorDefinition Condition="$(Platform) == 'x64'">_WIN64; <_PlatformPreprocessorDefinition Condition="$(Platform) == 'x64' and $(PlatformToolset) != 'ClangCL'">_M_X64;$(_PlatformPreprocessorDefinition) - <_Py3NamePreprocessorDefinition>PY3_DLLNAME=L"$(Py3DllName)"; + <_Py3NamePreprocessorDefinition>PY3_DLLNAME=L"$(Py3DllName)$(PyDebugExt)"; @@ -158,8 +165,8 @@ public override bool Execute() { - - + + $([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)\..\)) $(PySourcePath)\ - + $(PySourcePath)PCbuild\win32\ $(Py_OutDir)\win32\ @@ -52,7 +52,7 @@ $(PySourcePath)PCbuild\$(ArchName)\ $(BuildPath)\ $(BuildPath)instrumented\ - + ..\\.. ..\\..\\.. @@ -84,22 +84,19 @@ _d - + -test - + -32 -arm32 -arm64 - - - $(BuildPath)python$(PyDebugExt).exe true - + true @@ -141,7 +138,7 @@ @@ -223,22 +220,55 @@ )) )) $([msbuild]::Add($(Field3Value), 9000)) - + + + python$(MajorVersionNumber).$(MinorVersionNumber)t + python + $(BuildPath)$(PyExeName)$(PyDebugExt).exe + pythonw$(MajorVersionNumber).$(MinorVersionNumber)t + pythonw + - python$(MajorVersionNumber)$(MinorVersionNumber)$(PyDebugExt) + python$(MajorVersionNumber)$(MinorVersionNumber)t$(PyDebugExt) + python$(MajorVersionNumber)$(MinorVersionNumber)$(PyDebugExt) - python3$(PyDebugExt) + python3t + python3 .cp$(MajorVersionNumber)$(MinorVersionNumber)-win32 .cp$(MajorVersionNumber)$(MinorVersionNumber)-win_arm32 .cp$(MajorVersionNumber)$(MinorVersionNumber)-win_arm64 .cp$(MajorVersionNumber)$(MinorVersionNumber)-win_amd64 - + $(MajorVersionNumber).$(MinorVersionNumber)$(PyArchExt)$(PyTestExt) + + + .cp$(MajorVersionNumber)$(MinorVersionNumber)t-win32 + .cp$(MajorVersionNumber)$(MinorVersionNumber)t-win_arm32 + .cp$(MajorVersionNumber)$(MinorVersionNumber)t-win_arm64 + .cp$(MajorVersionNumber)$(MinorVersionNumber)t-win_amd64 + + + $(MajorVersionNumber).$(MinorVersionNumber)t$(PyArchExt)$(PyTestExt) - + + + + .pyd + + + + $(FreethreadedPydTag) + + + $(PydTag).pyd + + + $(FreethreadedSysWinVer) + + diff --git a/PCbuild/python.vcxproj b/PCbuild/python.vcxproj index fdf573aa5bf..1e5ab877488 100644 --- a/PCbuild/python.vcxproj +++ b/PCbuild/python.vcxproj @@ -72,6 +72,7 @@ + $(PyExeName) Application false MultiByte @@ -132,7 +133,7 @@ +"$(OutDir)$(PyExeName)$(PyDebugExt).exe" "$(PySourcePath)PC\validate_ucrtbase.py" $(UcrtName)' ContinueOnError="true" /> @@ -145,7 +146,7 @@ set PYTHONPATH=$(PySourcePath)Lib @echo Running $(Configuration)^|$(Platform) interpreter... @setlocal @set PYTHONHOME=$(PySourcePath) -@"$(OutDir)python$(PyDebugExt).exe" %* +@"$(OutDir)$(PyExeName)$(PyDebugExt).exe" %* <_ExistingContent Condition="Exists('$(PySourcePath)python.bat')">$([System.IO.File]::ReadAllText('$(PySourcePath)python.bat')) diff --git a/PCbuild/python3dll.vcxproj b/PCbuild/python3dll.vcxproj index ec22e6fc76e..235ea1cf9d3 100644 --- a/PCbuild/python3dll.vcxproj +++ b/PCbuild/python3dll.vcxproj @@ -70,12 +70,12 @@ {885D4898-D08D-4091-9C40-C700CFE3FC5A} python3dll Win32Proj - python3 false + $(Py3DllName) DynamicLibrary diff --git a/PCbuild/pythonw.vcxproj b/PCbuild/pythonw.vcxproj index 31f21308e25..d6cf0c97ded 100644 --- a/PCbuild/pythonw.vcxproj +++ b/PCbuild/pythonw.vcxproj @@ -73,6 +73,7 @@ + $(PyWExeName) Application false diff --git a/PCbuild/rt.bat b/PCbuild/rt.bat index 332ba5edcf4..293f99ae135 100644 --- a/PCbuild/rt.bat +++ b/PCbuild/rt.bat @@ -9,6 +9,7 @@ rem -q runs the tests just once, and without deleting .pyc files. rem -p or -win32, -x64, -arm32, -arm64 rem Run the specified architecture of python (or python_d if -d rem was specified). If omitted, uses %PREFIX% if set or 64-bit. +rem --disable-gil Run free-threaded build. rem All leading instances of these switches are shifted off, and rem whatever remains (up to 9 arguments) is passed to regrtest.py. rem For example, @@ -29,6 +30,7 @@ rem rt -u "network,largefile" setlocal set pcbuild=%~dp0 +set pyname=python set suffix= set qmode= set dashO= @@ -39,15 +41,18 @@ set exe= if "%1"=="-O" (set dashO=-O) & shift & goto CheckOpts if "%1"=="-q" (set qmode=yes) & shift & goto CheckOpts if "%1"=="-d" (set suffix=_d) & shift & goto CheckOpts +rem HACK: Need some way to infer the version number in this script +if "%1"=="--disable-gil" (set pyname=python3.13t) & shift & goto CheckOpts if "%1"=="-win32" (set prefix=%pcbuild%win32) & shift & goto CheckOpts if "%1"=="-x64" (set prefix=%pcbuild%amd64) & shift & goto CheckOpts +if "%1"=="-amd64" (set prefix=%pcbuild%amd64) & shift & goto CheckOpts if "%1"=="-arm64" (set prefix=%pcbuild%arm64) & shift & goto CheckOpts if "%1"=="-arm32" (set prefix=%pcbuild%arm32) & shift & goto CheckOpts if "%1"=="-p" (call :SetPlatform %~2) & shift & shift & goto CheckOpts if NOT "%1"=="" (set regrtestargs=%regrtestargs% %1) & shift & goto CheckOpts if not defined prefix set prefix=%pcbuild%amd64 -set exe=%prefix%\python%suffix%.exe +set exe=%prefix%\%pyname%%suffix%.exe set cmd="%exe%" %dashO% -m test %regrtestargs% if defined qmode goto Qmode diff --git a/PCbuild/select.vcxproj b/PCbuild/select.vcxproj index 750a7139499..d7448fd4d72 100644 --- a/PCbuild/select.vcxproj +++ b/PCbuild/select.vcxproj @@ -78,7 +78,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/sqlite3.vcxproj b/PCbuild/sqlite3.vcxproj index c502d51833b..6bcc4e913c8 100644 --- a/PCbuild/sqlite3.vcxproj +++ b/PCbuild/sqlite3.vcxproj @@ -69,12 +69,12 @@ {A1A295E5-463C-437F-81CA-1F32367685DA} sqlite3 - .pyd false + $(PyStdlibPydExt) DynamicLibrary NotSet diff --git a/PCbuild/unicodedata.vcxproj b/PCbuild/unicodedata.vcxproj index addef753359..781f938e2ab 100644 --- a/PCbuild/unicodedata.vcxproj +++ b/PCbuild/unicodedata.vcxproj @@ -79,7 +79,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/venvlauncher.vcxproj b/PCbuild/venvlauncher.vcxproj index 123e84ec4e3..1193e032245 100644 --- a/PCbuild/venvlauncher.vcxproj +++ b/PCbuild/venvlauncher.vcxproj @@ -69,12 +69,13 @@ {494BAC80-A60C-43A9-99E7-ACB691CE2C4D} venvlauncher - venvlauncher false + venvlauncher + $(TargetName)t Application MultiByte @@ -91,19 +92,19 @@ - _CONSOLE;VENV_REDIRECT;%(PreprocessorDefinitions) + EXENAME=L"$(PyExeName)$(PyDebugExt).exe";_CONSOLE;%(PreprocessorDefinitions) MultiThreaded PY_ICON;%(PreprocessorDefinitions) - version.lib;%(AdditionalDependencies) + pathcch.lib;%(AdditionalDependencies) Console - + diff --git a/PCbuild/venvlauncher.vcxproj.filters b/PCbuild/venvlauncher.vcxproj.filters index ec13936bf6c..56a0f005a3f 100644 --- a/PCbuild/venvlauncher.vcxproj.filters +++ b/PCbuild/venvlauncher.vcxproj.filters @@ -19,7 +19,7 @@ - + Source Files diff --git a/PCbuild/venvwlauncher.vcxproj b/PCbuild/venvwlauncher.vcxproj index b8504d5d08e..1b617182013 100644 --- a/PCbuild/venvwlauncher.vcxproj +++ b/PCbuild/venvwlauncher.vcxproj @@ -69,12 +69,13 @@ {FDB84CBB-2FB6-47C8-A2D6-091E0833239D} venvwlauncher - venvwlauncher false + venvwlauncher + $(TargetName)t Application MultiByte @@ -91,19 +92,19 @@ - _WINDOWS;VENV_REDIRECT;%(PreprocessorDefinitions) + EXENAME=L"$(PyExeName)$(PyDebugExt).exe";_WINDOWS;%(PreprocessorDefinitions) MultiThreaded PYW_ICON;%(PreprocessorDefinitions) - version.lib;%(AdditionalDependencies) + pathcch.lib;%(AdditionalDependencies) Windows - + diff --git a/PCbuild/venvwlauncher.vcxproj.filters b/PCbuild/venvwlauncher.vcxproj.filters index 8addc13e977..61a514395e8 100644 --- a/PCbuild/venvwlauncher.vcxproj.filters +++ b/PCbuild/venvwlauncher.vcxproj.filters @@ -9,7 +9,7 @@ - + Source Files diff --git a/PCbuild/winsound.vcxproj b/PCbuild/winsound.vcxproj index 32cedc9b444..c26029b15a3 100644 --- a/PCbuild/winsound.vcxproj +++ b/PCbuild/winsound.vcxproj @@ -80,7 +80,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/xxlimited.vcxproj b/PCbuild/xxlimited.vcxproj index 1c776fb0da3..093e6920c0b 100644 --- a/PCbuild/xxlimited.vcxproj +++ b/PCbuild/xxlimited.vcxproj @@ -80,7 +80,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/PCbuild/xxlimited_35.vcxproj b/PCbuild/xxlimited_35.vcxproj index dd830b3b6aa..3f4d4463f24 100644 --- a/PCbuild/xxlimited_35.vcxproj +++ b/PCbuild/xxlimited_35.vcxproj @@ -80,7 +80,7 @@ - .pyd + $(PyStdlibPydExt) diff --git a/Tools/msi/build.bat b/Tools/msi/build.bat index b9aab887c49..2fe8a475e7e 100644 --- a/Tools/msi/build.bat +++ b/Tools/msi/build.bat @@ -22,6 +22,9 @@ if "%~1" EQU "--no-test-marker" (set BUILDTEST=) && shift && goto CheckOpts if "%~1" EQU "--test-marker" (set BUILDTEST=--test-marker) && shift && goto CheckOpts if "%~1" EQU "--pack" (set BUILDPACK=1) && shift && goto CheckOpts if "%~1" EQU "-r" (set REBUILD=-r) && shift && goto CheckOpts +rem %IncludeFreethreaded% is recognised by the MSI build, but not the regular build. +rem We use it to build twice and then build the installer with its extra option +if /I "%~1" EQU "--disable-gil" (set IncludeFreethreaded=true) && shift && goto CheckOpts if not defined BUILDX86 if not defined BUILDX64 if not defined BUILDARM64 (set BUILDX86=1) && (set BUILDX64=1) @@ -44,6 +47,20 @@ if errorlevel 1 exit /B %ERRORLEVEL% if defined BUILDARM64 call "%PCBUILD%build.bat" -p ARM64 -e %REBUILD% %BUILDTEST% if errorlevel 1 exit /B %ERRORLEVEL% +if /I "%IncludeFreethreaded%"=="true" ( + rem Cannot "exit /B" inside an if block because %ERRORLEVEL% will be wrong. + rem We just skip everything after the first "errorlevel 1" and then exit after + if defined BUILDX86 call "%PCBUILD%build.bat" -p Win32 -d -e %REBUILD% %BUILDTEST% --disable-gil + if not errorlevel 1 if defined BUILDX86 call "%PCBUILD%build.bat" -p Win32 -e %REBUILD% %BUILDTEST% --disable-gil + + if not errorlevel 1 if defined BUILDX64 call "%PCBUILD%build.bat" -p x64 -d -e %REBUILD% %BUILDTEST% --disable-gil + if not errorlevel 1 if defined BUILDX64 call "%PCBUILD%build.bat" -p x64 -e %REBUILD% %BUILDTEST% --disable-gil + + if not errorlevel 1 if defined BUILDARM64 call "%PCBUILD%build.bat" -p ARM64 -d -e %REBUILD% %BUILDTEST% --disable-gil + if not errorlevel 1 if defined BUILDARM64 call "%PCBUILD%build.bat" -p ARM64 -e %REBUILD% %BUILDTEST% --disable-gil +) +if errorlevel 1 exit /B %ERRORLEVEL% + if defined BUILDDOC call "%PCBUILD%..\Doc\make.bat" html if errorlevel 1 exit /B %ERRORLEVEL% diff --git a/Tools/msi/bundle/Default.thm b/Tools/msi/bundle/Default.thm index d1b0f5bd9c1..471d37acc33 100644 --- a/Tools/msi/bundle/Default.thm +++ b/Tools/msi/bundle/Default.thm @@ -83,6 +83,7 @@ #(loc.PrecompileLabel) #(loc.Include_symbolsLabel) #(loc.Include_debugLabel) + #(loc.Include_freethreadedLabel) #(loc.CustomLocationLabel) diff --git a/Tools/msi/bundle/Default.wxl b/Tools/msi/bundle/Default.wxl index 6f8befba3a2..1540f050159 100644 --- a/Tools/msi/bundle/Default.wxl +++ b/Tools/msi/bundle/Default.wxl @@ -91,6 +91,7 @@ Select Customize to review current options. &Precompile standard library Download debugging &symbols Download debu&g binaries (requires VS 2017 or later) + Download &free-threaded binaries (experimental) [ActionLikeInstallation] Progress [ActionLikeInstalling]: diff --git a/Tools/msi/bundle/bundle.targets b/Tools/msi/bundle/bundle.targets index 9c7410fe514..cb3effb4434 100644 --- a/Tools/msi/bundle/bundle.targets +++ b/Tools/msi/bundle/bundle.targets @@ -72,6 +72,7 @@ + diff --git a/Tools/msi/bundle/bundle.wxs b/Tools/msi/bundle/bundle.wxs index 8b12baae311..9b4f072152d 100644 --- a/Tools/msi/bundle/bundle.wxs +++ b/Tools/msi/bundle/bundle.wxs @@ -82,6 +82,13 @@ + + + + + + + @@ -104,6 +111,9 @@ + + + diff --git a/Tools/msi/bundle/packagegroups/freethreaded.wxs b/Tools/msi/bundle/packagegroups/freethreaded.wxs new file mode 100644 index 00000000000..121ca34ab66 --- /dev/null +++ b/Tools/msi/bundle/packagegroups/freethreaded.wxs @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Tools/msi/freethreaded/freethreaded.wixproj b/Tools/msi/freethreaded/freethreaded.wixproj new file mode 100644 index 00000000000..0b4bd055d77 --- /dev/null +++ b/Tools/msi/freethreaded/freethreaded.wixproj @@ -0,0 +1,20 @@ + + + + {1B4502D5-B627-4F50-ABEA-4CC5A8E88265} + 2.0 + freethreaded + Package + + + + + + + + + + + + + \ No newline at end of file diff --git a/Tools/msi/freethreaded/freethreaded.wxs b/Tools/msi/freethreaded/freethreaded.wxs new file mode 100644 index 00000000000..063aa28bf09 --- /dev/null +++ b/Tools/msi/freethreaded/freethreaded.wxs @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/Tools/msi/freethreaded/freethreaded_d.wixproj b/Tools/msi/freethreaded/freethreaded_d.wixproj new file mode 100644 index 00000000000..e1563d4f907 --- /dev/null +++ b/Tools/msi/freethreaded/freethreaded_d.wixproj @@ -0,0 +1,20 @@ + + + + {D3677DCF-098A-4398-9FA5-8E74AC37E0DF} + 2.0 + freethreaded_d + Package + + + + + + + + + + + + + \ No newline at end of file diff --git a/Tools/msi/freethreaded/freethreaded_d.wxs b/Tools/msi/freethreaded/freethreaded_d.wxs new file mode 100644 index 00000000000..cddf22a6c80 --- /dev/null +++ b/Tools/msi/freethreaded/freethreaded_d.wxs @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/Tools/msi/freethreaded/freethreaded_en-US.wxl_template b/Tools/msi/freethreaded/freethreaded_en-US.wxl_template new file mode 100644 index 00000000000..b9747eb256d --- /dev/null +++ b/Tools/msi/freethreaded/freethreaded_en-US.wxl_template @@ -0,0 +1,8 @@ + + + Freethreaded Interpreter + freethreaded + Python {{ShortVersion}} ({{Bitness}}, freethreaded) + Launches the !(loc.ProductName) freethreaded interpreter. + https://www.python.org/ + diff --git a/Tools/msi/freethreaded/freethreaded_files.wxs b/Tools/msi/freethreaded/freethreaded_files.wxs new file mode 100644 index 00000000000..adaf63c69d5 --- /dev/null +++ b/Tools/msi/freethreaded/freethreaded_files.wxs @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tools/msi/freethreaded/freethreaded_pdb.wixproj b/Tools/msi/freethreaded/freethreaded_pdb.wixproj new file mode 100644 index 00000000000..789a4f55ae5 --- /dev/null +++ b/Tools/msi/freethreaded/freethreaded_pdb.wixproj @@ -0,0 +1,20 @@ + + + + {E98E7539-64E7-4DCE-AACD-01E3ADE40EFD} + 2.0 + freethreaded_pdb + Package + + + + + + + + + + + + + \ No newline at end of file diff --git a/Tools/msi/freethreaded/freethreaded_pdb.wxs b/Tools/msi/freethreaded/freethreaded_pdb.wxs new file mode 100644 index 00000000000..302ac416fe9 --- /dev/null +++ b/Tools/msi/freethreaded/freethreaded_pdb.wxs @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Tools/msi/lib/lib_files.wxs b/Tools/msi/lib/lib_files.wxs index a82cad596d4..b8e16b5fe23 100644 --- a/Tools/msi/lib/lib_files.wxs +++ b/Tools/msi/lib/lib_files.wxs @@ -26,10 +26,10 @@ - + - + @@ -63,10 +63,10 @@ - + - + @@ -100,10 +100,10 @@ - + - + diff --git a/Tools/msi/msi.props b/Tools/msi/msi.props index cfb3ca9e76e..372c4823bce 100644 --- a/Tools/msi/msi.props +++ b/Tools/msi/msi.props @@ -24,14 +24,14 @@ This URI is used to generate the various GUIDs used by the installer. Installers built with the same URI will upgrade each other or block when attempting to downgrade. - + By default, this is the local computer name, which will produce installers that do not interfere with other installers. Products that intend to bundle Python should rebuild these modules with their own URI to avoid conflicting with the official releases. - + The official releases use "https://www.python.org/$(ArchName)" - + This is not the same as the DownloadUrl property used in the bundle projects. --> @@ -39,7 +39,7 @@ $(ReleaseUri)/ - + @@ -63,13 +63,17 @@ $(MajorVersionNumber).$(MinorVersionNumber).$(Field3Value).0 - + + + false + + $([System.Math]::Floor($([System.DateTime]::Now.Subtract($([System.DateTime]::new(2001, 1, 1))).TotalDays))) $(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber)dev$(RevisionNumber) $(MajorVersionNumber).$(MinorVersionNumber).$(RevisionNumber).0 - + 32-bit 64-bit @@ -91,9 +95,12 @@ PyDebugExt=$(PyDebugExt); PyArchExt=$(PyArchExt); PyTestExt=$(PyTestExt); + PydTag=$(PydTag); + FreethreadedPydTag=$(FreethreadedPydTag); OptionalFeatureName=$(OutputName); ssltag=$(OpenSSLDLLSuffix); Suffix32=$(PyArchExt); + IncludeFreethreaded=$(IncludeFreethreaded); $(DefineConstants);CRTRedist=$(CRTRedist); @@ -139,7 +146,7 @@ - + <_Uuid Include="CoreUpgradeCode"> upgradecode @@ -162,6 +169,12 @@ <_Uuid Include="PythonRegComponentGuid"> registry/$(OutputName) + <_Uuid Include="FreethreadedPythonExeComponentGuid" Condition="$(IncludeFreethreaded)"> + freethreaded/python.exe + + <_Uuid Include="FreethreadedPythonwExeComponentGuid" Condition="$(IncludeFreethreaded)"> + freethreaded/pythonw.exe + @(_Uuid->'("%(Identity)", "$(MajorVersionNumber).$(MinorVersionNumber)/%(Uri)")',',') <_GenerateCommand>import uuid; print('\n'.join('{}={}'.format(i, uuid.uuid5(uuid.UUID('c8d9733e-a70c-43ff-ab0c-e26456f11083'), '$(ReleaseUri.Replace(`{arch}`, `$(ArchName)`))' + j)) for i,j in [$(_Uuids.Replace(`"`,`'`))])) - + - + - + $(DefineConstants);@(_UuidValue,';');