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 | 258 +++++---- ...-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, 1436 insertions(+), 244 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 29282dffa37e..65d32c734e77 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 ae27c108d836..c0209e0e1c92 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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 gi;V7ggVRB$Y*n7PtNh#l@wBbKe#@v7=y%D< zg_O`!t|NumUR$uFR{VbFuaPc=w7WkOzU#pAdnr2etbdKN_ocfebBmW4H)1tEcALjI zdN;uqW5UGpv^38&d`&(ZV^{i}e=0kkp~78J>i+|Djqv=NYyKL~8#e#cz8*@!g3;$X zWW38Fv#M~~X7@sRd|u#YT$4I4eWUVL872p`7}mG3IZ9l0H;+5-&^YjIW}w!>IWpH3 z@f~M5wk+5$WxVVR=H`($texENUZx5^m3AMa{rBFD8`POC!bQm7A_~gXWM3fW9=ppj zz#yXmR?w3~+=g2){M73nu8rNXQkWUly0%8jJ0vp(-)6CWmiT+6Xi94-%(J*~#|9#o zrB?1A)8{O#I*BON-s-t(06N{=a&%c0hvs5S|IUxeJiLNQ-~muY8@_9!R|7BMlSiy3 zi6a`)lPm2L{2pr@-~q`C7SqMOew(n;9-IlA=~jN6h0X{LIWhD(A(o63!}X_Q@x?e08-v5_ zCG>yP?*5CScy9&`c|F^V`>=b|JEn_>b599jtp zD`g#m3P6&qxhmCMPeM8hF0&$Ur*cBiVtrqPl&~-hB zMQK`TXsKzKoSB|PrW+{Yu$2UzD0#x1lRVpkGCmXSl-=mRkJ5amWW6HW|5GJwBLl6C zJg7Z5GVC^5Aktu-O()KK`Hx~iOMaMH|EpUg&IwY2ZQxzVB-0ln*jp)Gj7wH%UY2oTYkIv*yATG6jOXx@uIF{y&LLf~d2%EiUS>5uzL6nr*+53dsu zsnr_*tnb(zhRoW9@gE4j8^scm5|9->brl6qu@X7oeNV=0bQMVh#P*M7`^Qvsf^ldB znZEcoy!@2b4JaVcVj(q;jgR7X~DIEmNguK+l8=r2G; zY632!810@Q&)$Ltwj=7_0oqK#Z*FWFdW!FkJZZz-(M_*Ql&j{USBZB{Mluye%A8r~ zHT~Hefz62=Dd$GfE4`HwEPNPNQ(b@~18?eK2oO9TAQD%_uR~Uo+bZY~*vLBhN+asBD~)JCAlbxg|z2YRckRw1vziM2F5(XTCvegn{!&cOz~#J8GX%ANZN(_CiRMYxNspzK z)dx|9^>TKYAooF$Hhj_D#CUr{)bJ-=g&_f}VoIGa3OU>qP)VyX2X!p{%Uu|; z?Uk(KAidCB4^je3c+(dxo$X1?s7SB~Q-A{|4^U~Cn$;j~M*#UNqpOd7{v<(`uWbT_ z=Ttew$$_27fvYz&-0U$I-}I{`MSMe+>c76E-Dt?G)eQ<5!ynFM)QKauB&d{#p&VJ4 z)G?Q@hA5*eC-U4Ng*R&`_2Zw0YR4G$F{Q1by+3+gyTiPq-yUCc%Tg!plb(<>Dh};} zy^DO3TvIeeCSD^d9kWGMsC=P^Htx3K8K#B(M&u^)Kwev|Hj#DL!XQL%>?+ADVsTwlza{ThG{TGsHmFUkU=VFPs;KXv~Ct?l9?+k9* z;KdFXA@vllW1D<%l@N{l80Jy>&AjurkU9+zsd)e`f-XNcpeMV}+d6$+tRq{j>zp7` z5Y^TQ$@OMRv{xGSOUAnavpe6*AI?>P zC%I)jK^%F{Yf>jA`YWmppP3iH&)r;#7dX@!HnaV+h31}E5D{Cpd_XllB3J*hZ`l*2 zO!+e6lO1^@o={v{=dJxFvTrYY1_wE+8ck0pg{JCkeA%1*xqv2$qbG}8AZT9rnsJ{?*{@A2Qc+IU}IX(Lnv+dWT@xcZKg&JVOjSo!z?06 zMG!THEh#o#F!Wn5Wiv&fPHfDTcuBxjAHRcjv{$zk6b1^SfG#=T!_Cb7*kZwf7l9k% zGJg8P48#{~BPxBR3$iBLftpf8cB5qes51eH$e!bTlUY1y&b3&8)nCBQ3pIiak`N5& zIA{{Tq8JFDOVP_VgWugHBc$dVisckR=zfN+eRev$l?%u2ZqRy7-Ssl=M})h-&9R^j z3f$mJq0g9T{VW^O-j7$ZDqGYZ@9%^?b}9ofrKrrPvh@cSjMw5503|}~$R8>?#*V&R z^RzS)>Ai&cTdtfU4XDF`g_#6ALco&~a_iB*aQQtCggn2(x92l85|z>{zCWt_=@16* zr|1sCe64@2Ub$ILj!AS#7%b4!n48&(rpy-&St2)MC+Ek*d}m&Lc(C)jD_vSW%8#Z$ zDxnx{g(nq#0Y;BMCb_bIf*y_+SHFX+5i$*@Y$P3~f-C;%!@E2a0H||R?2DwQWd9aQ z4Bs;@ja!7dA_}P8{Q`MQBWCYq!b=(mH^tyb`gQJk^R0taU4wI0G$mfr75i(JUBevT z=iW?qr~x>1DN}Q@w-Z$?;n5LOGjcRmUo4%P$f26b6FGz(_=9XG>osKE>o3T$X48YS zeRzOBzo3@y8wk>}LPKBTAYSR{;8!XN&dtF29LMXqkbn`6KcCFwf#M@}qEy3NCM#VJ zbm%7`P?WEQ-Pd%FN0*^2Wm8^?^)L)OyF!L)U_i9ri z+iSUOMr=Sc_!9EmX|vj$%E&_ROhcKT;dyTyyV-)B^dOBp6tKJ}#$rUuniD^;FC2^5 zmB9-{q@th;CkOICTUS$Eh(>*7Y+z~wbVd`;+IvLnc-%@3zmXNG)%`&0(UeYB5mah+ zEJ_w}lqMS6tE*wNN1~EkeN}naaEnsiGR8w0V1B*8f+&mOJ|1W~yXyn3)96S(}5Qt976Ce3I zC#IERGh3;I_~eKtqF){@I0gWxhCt~13xgpu7iKy4y&`xwfgnTnp4&k>KqKQx>qy0& zLFli_AgR)w|6by$JzIXeVE+M~vq4(o1gw+C?urJnYu2f8#qE$GblQjyHs2RMlo56a z|J9fqMyT)XH%X0~Z%mnOxQI=)gM-4aU`$8%$s^fYi^v^0MZB%~W83~D z=+}zkCr4PA8kaz~M6?yLd0|;9MSfOjtlxgOnBBS&v&t*pPy=wGEzp)y1e2<3ugety z<6s3F%%%iKYZJn|ciA4lZG>`@`p0x}`iD%gW+-aR zo0J&;(w5k-1gEQtZL9wll$5@U{(sSE4ce7JOE&7*){WV*Z)|jI+qP}9W81cEqhs5) zGjHCk`Gi`vS?6HIidZ89YO9M^I}OQU1I_mLH){HamBfssBMGWQG{$VOgUbtr^cmJ7 zk^Fi=o>sQPK76^cl*AGH$D*m4uxtk0IyWWoIG|BjNA5XH3(2f8>D!m2Wakkt%jHH7 z=l?)6S9DVwz!MkJqB1r*<@i#6yDyPF!q|irTH;}TyAV9*+-Yt4OfCVx`5Z6%`B>ffoJ>s@`GbPaa%gaR)pkFxTcvu-l zF)J%Cq*e>=%3)UZd((jMY-fa;_xs{D{TX;^z;b{~?Fvb?Ild`A2VydYC>89@VE5U{ z!Ab59bjb=M(4Jp2w)N7b;m{2aCht2SM1uE=R=Q$JSk@fwKmGmJ`e;^26n$2dWcp3h z0u1mWi^XB{F+GiqI6OP9R?uu1S~^=ZASXMj{&U*2Xyymc`vLA`Z|F~!a*xNUohtEZB|4D|)7%6e^wk6g6Vvw!v z9c!nr^h9>F35Sh}jz&n;6S85|N2i_7`}Os9Zwm$)lJMzU`!fW8P)DIr0&R7FfFi=VG-ijL4Y<^dDSfpIAvoz2q< z=ASeAl0lMVvPpV*?NOImib+zviKZHAP0e;(g|WNXa2?2`LYh zi@nKT$UyKxe*C7EF(@`5w)c@fRh`JF*63PG`PBqf1OW~R@jAJMiqRx~eU^y>&Wk&j z;=q%{g$Im9HyjH54GJY6$&72pc2A+xI8lHaxCp|BT(a}yk|0(A3OpE4f~4F9$UYyQ z&P`d`pjhKn+8;2+&AY$(paK1lp@P-3T=k}Uxd$Es(lT1!P?mgJx2H7kYx9{k673m+ zpr;keYR4T_j_;G`+UFgCcC8IJb4NW^6mK2n>RiBYi=9@67mre|TqNQZx4sMrSQ=z> zUACb5n@3w*i^faRNaFL2%={ov_HTp*T3C3bxfO=HwJYREs_4q4`83;u?)y2DaPX{9 zDnX40RLN9sFlh|3N^>Pb-V2Y*wI@V|E!AkbOekqAUhI7UI%F_B_}y5$Jn@281#B+? zc))U^FD3)ZY;t9+9Km~FN>bU2#M=!(b+;bPn1ZuE>-w{wCPk-9LW>i2r(|X%)`p0X ztq@#TK&c+{ua@USpO<&vd{TX#0&NcG>ZB1cQnJmL5bjK>-1*DSB{wuKmk;6KH>U)N zntDveS?O-mF8yMw_?(;x7w4v=$ARtTPCX#5xw*h~e6a1K=i}~!TW>^b+HQCF3c=js zD%mAHU=J%h*5hPKuo)LkWGN}pq3aXT^Qdo5iwovoEE*I`2TJ9NTYl>s$oX=Ye=<4N z7&c}hNg?50{1o^~2@!>$r|!`kQ0bC3As4s6Cw$3fBqh`U_}$bFv~aAaH!3>LGd{Nf zdae38H@y^e>-i!jNJoFHrUOm3S(73ph-9qM($|<*Aid<*rmFpW zQ?d`D)6ZR~lxKFJr{{A4Y^!hiFPGRl+xY@2Gb$Lp2b87b)q%aNct>y9?pNO*4mVqF z`!iU}`lA`(4LheR7mwj3dB*G3S&j?F=%?OeuM-1@eBt1ug?0`q?6BZZ?t3|24m&=* zsUVi5Tq&&M*rIczJ0eBUjkO)nSl-r%Vrl(iRmTunE_=RBS3v(Sgs+a=s0U*?Gc>N2 z+JUX{gT_6Cs;cVY>tko-nB17C*|h*OUmrZ%-Wvm2>uDiZQvzd(=8gYo#O*Ut6l63byDNY0imNinmc zSg4Koq_&PrQuV_zUFy#k)P(i&1m2KJ3iJLZ+|DKuX&o12z|&?jxR9|lzqF5y@CAax z%7DZJKc7?IMkL~sfFrXp&(kcpsdD~jsgWBruO-K%1*wTK>5MzkdZ_*lYSD8yaSN-Z zynr~*UcA;E4&`fJ9rwpI0Xsr?mGvXY4Bd|#5~dTv+!|Ydvcstdw}K@uILgU$hJK(; z#h~4hMG=QP5q4gCpI{JX`APFbw}_k4VVqU5jq>&wYViw&ao*8!a5BhobIEjmZR$hvb~+fOJBcu|a&I97D^z2i_tn3_tkQg?&GCFR;CZ|yRbOHUMJtgTN&73E z!07mH$~lwBy8EaUQc~r6lvyBX&vg%H#rXD$R%dyJy9ihfShA}TwzB0ElL3ST%2RT= zRrLjqUJu*-*z*&(Upnx7Ehtv4&qeB1vJlJ)s_Mc>MjG3?s2P2bp05ePdd@dFFy(w4 z5ZXU%A??P+@kN;FX+$)iE+~13Xde@CGeEU_%q)W_F5JgwW>(ulULb{7|3ps*NbK|< z{Nsa3EQuWqKflBFSs!({T9Fg(FEP6v+TtIQ@pDI!Vs|N!0u#1sK_cYy#%F8G{E{C8 z2;eWaJ3(=Q&a!j3JsXWLgR3_cqil5(JMH)`(6c2tA+`jm^`19(K&f%WcSNj2APxw0 z6IY)3IbVku!t)*K`;F=F6=(a1iRl>HqMQXyv{jkXHoCf>t#tfK@z@agL3&E-U%AqXg^d$TV+}e{KAT0 z`CJ@qN-7O!$r$(;`c=~704!rE&|_!!T+Cn0PkLVvM>Af1K8zC-b3}Gx)z<=d#oGua zQIqXN(mdfB?LIYMi*UKPx4+)`Wcfb8;@BsJ{~P)$2w5{9;z=WGEUVD*JcH z?dzN`4;`SKGX(qPT(fH32}DMlVt-Y#D5&Kbv&k4MpGwDBF&EHl%&TeaI0DbG8k$rA zE?~LV5fCJgwgGqNoil z#U+2+@0aWb!2lWvEx@=u9y>+Kqpn9abGsU7H3AEN;|bYG@t(^^Z%#QIS6tnDHDTzu zn0B|c-95(Q%pM|b|0smI7}H$P6xX4u6v_>a)_gF1zpS+G)o|MmPjl=<>V0mN+J7&S zB>e3#z2`-MbI8#iRQ2=kH8^OON-vd3FrrUW3$OT7da!?Gr~lQ$aXU2fTRNK+{NG3s zxC~z1e*ea8J*D_Q9LHARhOZmk_lH;N!NEgi{PdC4BJ?HKa#O&!>smHA&F%fow}0+6 zAIwho75nCU=EYs3oe!89ROFMdHc8sT@7~_*)fQo2|MdVyPrQ{#UZx~fB;j<3gZGW+ z=-J!DySFF1yNBLRd_n-0xSSV%!9nd1|K=y&=ljUdV3$hjUQVg1zA%ecVfE(w?cU(% zJn@_SQ+|+>P}>1PqRnWneZG=2H> zF|E-Yx`wTw37d4#R*LCH-*@};78_^E3M~LkU9F?Qo+?`%y^`fazboZn^8^!|2)R7$ z%h?imGsFDp280djsQe9F{=M*-!L7iC%9zka#&_A*JZ8~TZ^Yu5>{S#zR7f=1jDNs= zL53FB!#g`M^~!OP1i&w$n6wZ%$Kle0J1x5URwZ>J9L-ov>R0(c&i9OxLh4=6EUQqb zLs~Np&5Cw}^D9Uw?+uiT$LD8D?xrv`&QOw+`mfm7SO^BtjBTyB5jv}S^M|!Gr%#D! zJca0jzsyOg$@%*CJX5?@6tdNNp(-xa|7oY-SUKOo9Pe{FYxQ128&q{#opw|>TkUAt z9GqD?f$OI9*Reaf-L=w0V_Wq|_?&!K@OX%9r0(Jb1a&Q4f58(SvJ$HR0t8EZ!i)#oMYLKmqy~v3w*8q6oyfJabPfwlqo!{tR?b@B zaOuqO;Xc@*1(LL1m)e}+=WXuzSb>bN{^lRx*MMVit{1KxPc!PYO*XL3g>>6nf<_08bxZ|H&duEd}! z^4}6Pf_H5mucuw)tItz#uNo^7%CV^)@+b+j<068hnD?*TiC=1ApRw${x=~_Ff?BVb zjr|Y#&ueVLfV)p=^dmDOaj;|oKmK+0>Y)X97Oo<7IdzDR+xybOp0gz2qK(bC4wwnMQig#Fz#8}k4e zVM|TohToyY9O7W=S3Pd<|H*=T2V<{uP|&*Yt{_7=NkQYWU)kzi)iBLAKAr;qf`Xt* zLV@Yd`e!1NGnaNTSt(9t3{W@0LHuP?izaLO)3jJH=S`jnV=SIcp-I2WH^$4ZgV=EJ zqJ^z(#SQ<4nJu%~5GE(iK9d0@R;@33jOrLJW7q#eq%gTlc&ZBJKhe&f&$UuM-3ZrN zB||WHMYAx-_MWdGN;<}a3sKl{?%JRpFM}_U`k@IsPJoq@?V`+Nwy4{{^=jZ2-7$r6~HXVS- zSAmC-7(6ELS9^5yv=uGXOAj?4@MXFm-WDHA#FEIy0XMXZR|)>t(EW-87Df|CB;ECe z(7*|_yL7(~HEFLmLi^_?Nf@%8Xs>10y!+gqaD{Sa_I*=KwcOB3-}|_<_j7*oac@LY zaw19Zq_`OFG56x4UkTZ%h@(q1*a{gdeusbUaKh!jF1*-p z{M8k4q}PYOGQ$dSJ}q z;chGgq=w7yccjU-g|&dQv4mg4nS7*kq;;e5C9@JQqOm2$vG+Ny_f-Klrq8u<66R5% z;Xvx`)soX)ty)f`!;%NOh*(RsUFa!_mb8imzX}-PO#Q0R#sZ5|0v)qAN)So{5i1Rn zhla&{XS0vQpB1K=N!jFXWt0kv+_>6pU%HB)7bBpJGqvNrF??iCbS`fLY^OzIw4iDZ zghA7qIdb>e*c3(%1PV3&L;*8;3?K&1&lQF~$LII=Lph+#iE#fQH2ye!W`bsD5skht zHkI3cc>I9L!Mm86fiP@uG}oWO<`Y(yP&f2%2CnxHoyI6zB4bXkokDyDMQ|1U}Q5ug7r|>+i^k)GI@*oGKrQ4xYn} z_ZtERM!xr}=&R%*ciV2#UD^zkD1dM|tD0aa>}Twe8AGhQg$XEg(85U%=He0}d163=q{W~p2*G13 zM_zFy(%q(|@^O@rb6vRLmtvRWjttQ12uA(3arPi71HWkU^^bUQ9Torzciue@d~b>e zT~)ad*o~wErHMSwAS~#M$xMZLC8i~X)iIE6=+v`~iWcXx-#7DReg${d2y>^8c~2%^ zMn9Vf$eL1;IA?7l(xmbn8kbpiD)YU2&b&SryR5YnrP9fIVs?0j{b#J)G1ukBpTYfs zoM3q;0NDUHsi2cw%RL`Nq;ps)`@w}fU)L&1*rKA!0~f-UOhq##&{nQ+Lq1De=?|a( z-9zeQV{RT9c?||r!W{h%|5~hbjNQ4kpr`{@R0H*~tVOr!(ng$$4lg9x1KN3_tM!?v zxC%BTJ*N-a=ak1D1PYgXe%1l&grB@pWLdQy*ker`J@XZF8Y^W_5nxRahj_;*v}G9e zIR!TfOAZa4XY~^x$b4td(6NC#A82?M2cc_Gz`YPrQeqnnwnkMsmKqdYRaiO&H6sELL-@P8+8HtVWh>Af@ys8=H z>4W=<1yM0gCp2S%8c}F64jZ4btZwEyuY;uDk?SzUh~2aj39W(N zB(y9SAs6m#BzP@BQ%eg) z4G;V(FG!1cwuy;JSydH2I=**a-;P2aR&x~LNKh+J^vdxki|zNmwQ{7|sI6D(*avLH z@cm4`htGBUiTw${t+1^NtbPB~DXh{GT%n1LeZOMX7p8QII|QFle1It}k#ygD{nhEp zo#B0NFf0xUbZTb*>nFd7c`Da+L7ef)=NS-eysrYb-P+~70ZO}Cr^hdJYz#$&*pVaC zBHKli=s6ODej*1B!gU9xRZ}>@Pnp6lIK`{6STqQJfcx65=d7j^hKev%2(s*hy`++<~5FXrfm=FV<#oEhc zSJ=jlEwuVJshD+}HaZ!%hi`R-6iO2&gvQhMEd6oBke}9+P zRt&E%3@xna(zatERZ&G0o-Sj;<}l!ql$3O~sSg096JFz;+t$~}FoIn~TsL73GKOBE zti96ZEH#tYnQ*l75FUrO)MLu~AtHF9#<|Y7ab+GLRf3b&p|O4q3;aio&B{N);i=s| zm|$}^5pQOK#>n1&M

  • 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≈WIcMr(*=h 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. .. _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 22db97b818c1..9f0547f4c955 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 bcd4ed63bf25..3da6173cfd3f 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 e828941f6c77..89562fa5eac6 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 218e7560cff3..6852625c36c6 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 d960bf3bd82a..f04ca8fafcc3 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: + 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: - suffixes = {'python.exe', 'python_d.exe', 'pythonw.exe', 'pythonw_d.exe'} - base_exe = os.path.basename(context.env_exe) - suffixes.add(base_exe) + 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 - for suffix in suffixes: - src = os.path.join(dirname, suffix) - if os.path.lexists(src): - copier(src, os.path.join(binpath, suffix)) + 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 000000000000..429cd5bc923e --- /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 accfd51dd978..d176b272f1c1 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") + 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, + ]) + + 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.exe", new_name="python") - yield from in_build("pythonw.exe", new_name="pythonw") - - yield from in_build(PYTHON_DLL_NAME) + 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 8195c3dc30cd..ae22aa16ebfa 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 dbcb713ef9d0..a87e0bea0494 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 60256fb32fe3..f1a8eb0b3177 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 d8f0a6be69c2..8bbf877a5bb5 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 000000000000..fe97d32e93b5 --- /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 ed1e1bc0a420..76b0ffd660db 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 3fe95fbf8399..e0dc6ec187a0 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 253da31e9ce1..63d5fa49cd4e 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 8a01e743a4d8..97354739c098 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 0916f1a2d378..490d7df87eb1 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 8da5244bac0c..8c9c0e42f7fe 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 6dad8183c57a..2cd205224bc0 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 fe076a6fc571..40107d4b76cd 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 77b6bfc8e1e4..a65397f532aa 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 9e60d3b5db33..224bf05d5303 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 8065b2358516..80a1c3c6a4ad 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 78fa4d6729ab..41af0895921b 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 57c7413671e5..9ae0a0fc3a00 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 226ff506f8c6..d4e1affab031 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 917d7ae50feb..4e721e8ce09f 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 1c15541d3ec7..6911aacab29b 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 e319b3c0f42e..ef981332c6ab 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 b00b2be491b4..183a55080e86 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 5d7e14eff102..69d312b17a5a 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 6d80d5779f24..c35ac83c1c73 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 558f66ca95cd..a825cac91386 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 430eb528cc39..e730fe308ab8 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 fb4bcd953923..bf4dabf66c10 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 30cedcbb43de..117488a01621 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 2437b7eb2d93..50d81cc7916d 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 c1914a3fa5a1..22fa89609825 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 6e6389c37733..47b5bfa5b881 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 001f8afd89b9..dc9161a8b290 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 16ad91ef0278..fd5fbc9e910e 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 fdf573aa5bf9..1e5ab877488e 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 ec22e6fc76e5..235ea1cf9d33 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 31f21308e25f..d6cf0c97dedb 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 332ba5edcf40..293f99ae135f 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 750a71394991..d7448fd4d723 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 c502d51833b9..6bcc4e913c8e 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 addef753359e..781f938e2ab7 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 123e84ec4e36..1193e032245c 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 ec13936bf6cb..56a0f005a3fa 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 b8504d5d08e5..1b6171820136 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 8addc13e977e..61a514395e82 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 32cedc9b4449..c26029b15a33 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 1c776fb0da3e..093e6920c0b7 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 dd830b3b6aaa..3f4d4463f24a 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 b9aab887c493..2fe8a475e7e3 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 d1b0f5bd9c1d..471d37acc33b 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 6f8befba3a25..1540f050159a 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 9c7410fe514d..cb3effb44348 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 8b12baae3110..9b4f072152d5 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 000000000000..121ca34ab661 --- /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 000000000000..0b4bd055d779 --- /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 000000000000..063aa28bf09f --- /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 000000000000..e1563d4f9071 --- /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 000000000000..cddf22a6c803 --- /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 000000000000..b9747eb256d2 --- /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 000000000000..adaf63c69d5a --- /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 000000000000..789a4f55ae51 --- /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 000000000000..302ac416fe92 --- /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 a82cad596d47..b8e16b5fe238 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 cfb3ca9e76e2..372c4823bce0 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,';'); -- 2.47.3