1- rem to launch from a winpython package directory, where 'make.py' is
1+ rem generate_a_winpython_distro.bat: to be launched from a winpython directory, where 'make.py' is
22@ echo on
33
4- rem *****************************
5- rem 2020-07-05: install msvc_runtime before packages that may want to compile
6- rem 2020-12-05 : add a constraints.txt file from a recent pip list
7- rem 2021-03-20 : track successes packages combination are archived for future contraint update
8- rem 2021-04-22 : path PyPy3 (as we don't try to copy PyPy3.exe to Python.exe)
9- rem 2023-08-21a: add a pre_step with my_requirements_pre.txt + my_find_links_pre
10- rem 2024-05-12a: use python -m pip instead of pip , and remove --upgrade %new_resolver%
11- rem 2024-09-15a: compactify for lisiblity
12- rem 2025-03-02 : remove step 2.3 (pre-build), and 2.8 (post-patch) as we simplify to only wheels
13- rem *****************************
14-
15- rem algorithm:
16- rem 0.0 Initialize variables
17- rem 1.0 Do 2021-04-22 : patch PyPy3 (as we don't try to copy PyPy3.exe to Python.exe)
18- rem 2 a Pre-clear of previous build infrastructure
19- rem 2.0 Create a new build
20- rem 2.1 Create basic build infrastructure
21- rem 2.2 check infrastructure is in place
22- rem 2.4 add packages pre_requirements (if any)
23- rem 2.5 add requirement packages
24- rem 2.9 archive success
25- rem 3.0 Generate Changelog and binaries
26-
27- rem "my_release_level" is optionaly set per the calling program *********************************************
28- rem set my_release_level=
29-
30- rem ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! =
31-
32- if " %my_release_level% " == " " set my_release_level =
33-
34- rem ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! = ! =
35-
36- rem "my_create_installer" is optionaly set per the calling program
4+ REM Initialize variables
5+ if " %my_release_level% " == " " set my_release_level = b1
376if " %my_create_installer% " == " " set my_create_installer = True
387
8+ rem Set archive directory and log file
9+ set my_archive_dir = %~dp0 WinPython_build_logs
10+ if not exist %my_archive_dir% mkdir %my_archive_dir%
3911
40- rem this is pre-initialised per the program calling this .bat
41- rem set my_original_path=%path%
42- rem set my_root_dir_for_builds=D:\WinP
43-
44- rem set my_python_target=34
45- rem set my_pyver=3.4
46- rem set my_flavor=slim
47- rem set my_release=84
48-
49- rem set my_find_link=C:\WinP\packages.srcreq
50-
51- rem set my_arch=64
52- rem set my_preclear_build_directory=Yes
53-
54- rem set my_requirements_pre=C:\WinP\bd311\requirements_mkl_pre.txt
55- rem set my_find_links_pre=C:\WinP\packages_mkl.srcreq
56-
57- rem set my_requirements=C:\Winpents=d:\my_req1.txt
58-
59- rem set my_source_dirs=D:\WinPython\bd34\packages.src D:\WinPython\bd34\packages.win32.Slim
60- rem set my_toolsdirs=D:\WinPython\bd34\Tools.Slim
61- rem set my_docsdirs=D:\WinPython\bd34\docs.Slim
62-
63-
64-
65- echo ----------------------------------------
66- echo 0.0 (%date% %time% ) Initialize variables
67- echo ----------------------------------------
68-
12+ set my_time = %time:~0 ,5 %
13+ set my_time = %my_time:: =_ %
14+ set my_time = %my_time: =0 %
15+ set my_archive_log = %my_archive_dir% \build_%my_pyver% ._.%my_release%%my_flavor% _%my_release_level% _of_%date:/ =- % at_%my_time% .txt
6916
7017set my_basedir = %my_root_dir_for_builds% \bd%my_python_target%
7118
@@ -77,248 +24,99 @@ if "%my_constraints%"=="" set my_constraints=C:\WinP\constraints.txt
7724rem 2021-04-22 : path PyPy3 (as we don't try to copy PyPy3.exe to Python.exe)
7825if " %target_python_exe% " == " " set target_python_exe = python.exe
7926
80-
81- if %my_python_target% == 310 (
82- set my_python_target_release = 31011
83- set my_release = 2
84- )
85-
86- if %my_python_target% == 311 (
87- set my_python_target_release = 3119
88- set my_release = 1
27+ rem Set Python target release based on my_python_target
28+ if %my_python_target% == 311 set my_python_target_release = 3119& set my_release = 1
29+ if %my_python_target% == 312 set my_python_target_release = 3129& set my_release = 1
30+ if %my_python_target% == 313 set my_python_target_release = 3132& set my_release = 1
31+ if %my_python_target% == 314 set my_python_target_release = 3140& set my_release = 0
32+
33+ echo -------------------------------------- >> %my_archive_log%
34+ echo (%date% %time% ) preparing winPython for %my_pyver% (%my_python_target% )release %my_release%%m y_flavor% (%my_release_level% ) *** %my_arch% bit ***>> %my_archive_log%
35+ echo -------------------------------------- >> %my_archive_log%
36+
37+ rem Pre-clear previous build infrastructure
38+ if " %my_preclear_build_directory% " == " Yes" (
39+ echo " (%date% %time% ) Pre-clear previous build infrastructure" >> %my_archive_log%
40+ del -y %userprofile% \.jupyter\jupyter_notebook_config.py
41+ cd /D %my_root_dir_for_builds% \bd%my_python_target%
42+ set build_det = \%my_flavor%
43+ if " %my_flavor% " == " " set build_det =
44+ dir %build_det%
45+ ren bu%my_flavor% bu%my_flavor% _old
46+ start rmdir /S /Q bu%my_flavor% _old
47+ rmdir /S /Q bu%my_flavor%
48+ rmdir /S /Q dist
8949)
9050
91- if %my_python_target% == 312 (
92- set my_python_target_release = 3129
93- set my_release = 1
94- )
95-
96- if %my_python_target% == 313 (
97- set my_python_target_release = 3132
98- set my_release = 1
99- )
100- if %my_python_target% == 314 (
101- set my_python_target_release = 3140
102- set my_release = 0
103- )
104-
105-
106- rem set my_install_options=--no-index --pre
107-
108- set my_day = %date:/ =- %
109- set my_time = %time:~0 ,5 %
110- set my_time = %my_time:: =_ %
111- set my_time = %my_time: =0 %
112-
113- set my_archive_dir = %~dp0 WinPython_build_logs
114- if not exist %my_archive_dir% mkdir %my_archive_dir%
115-
116- set my_archive_log = %my_archive_dir% \build_%my_pyver% ._.%my_release%%my_flavor% _%my_release_level% _of_%my_day% _at_%my_time% .txt
117-
118-
119- echo ----------------------------------------
120- echo preparing winPython for %my_pyver% (%my_python_target% )release %my_release%%my_flavor% (%my_release_level% ) *** %my_arch% bit ***
121- echo ----------------------------------------
122- echo ---------------------------------------- >> %my_archive_log%
123- echo (%date% %time% ) preparing winPython for %my_pyver% (%my_python_target% )release %my_release%%m y_flavor% (%my_release_level% ) *** %my_arch% bit ***>> %my_archive_log%
124- echo ---------------------------------------- >> %my_archive_log%
125-
126-
127- if not " %my_preclear_build_directory% " == " Yes" goto no_preclear
128-
129-
130- echo ----------------------------------------
131- echo 1.0 (%date% %time% ) Do a Pre-clear of previous build infrastructure
132- echo ----------------------------------------
133- echo ---------------------------------------- >> %my_archive_log%
134- echo 1.0 (%date% %time% ) Do a Pre-clear of previous build infrastructure>> %my_archive_log%
135- echo ---------------------------------------- >> %my_archive_log%
136-
137- rem 2019-05-10 PATCH for build problem (asking permission to overwrite the file)
138- del -y %userprofile% \.jupyter\jupyter_notebook_config.py
139-
140- cd /D %my_root_dir_for_builds% \bd%my_python_target%
141-
142- set build_det = \%my_flavor%
143- if " %my_flavor% " == " " set build_det =
144-
145- dir %build_det%
146-
147- rem 2021-02-13 workaround to hard to remove json files
148- echo ren bu%my_flavor% bu%my_flavor% _old
149- ren bu%my_flavor% bu%my_flavor% _old
150-
151- rem pause
152- start rmdir /S /Q bu%my_flavor% _old
153-
154-
155- echo rmdir /S /Q bu%my_flavor%
156- rem pause
157- rmdir /S /Q bu%my_flavor%
158- rmdir /S /Q bu%my_flavor%
159- rmdir /S /Q bu%my_flavor%
160- rmdir /S /Q bu%my_flavor%
161- rmdir /S /Q bu%my_flavor%
162- rmdir /S /Q dist
163-
164- echo %date% %time%
165- echo %date% %time% >> %my_archive_log%
166-
167- :no_preclear
168-
169-
170- echo ----------------------------------------
171- echo 2.0 (%date% %time% ) Create a new build
172- echo ---------------------------------------- >> %my_archive_log%
173- echo 2.0 (%date% %time% ) Create a new build>> %my_archive_log%
174- echo ---------------------------------------- >> %my_archive_log%
175-
176-
177- echo cd /D %~dp0 >> %my_archive_log%
51+ REM Create a new build
52+ echo -------------------------------------- >> %my_archive_log%
53+ echo " (%date% %time% ) Create a new build" >> %my_archive_log%
54+ echo -------------------------------------- >> %my_archive_log%
17855cd /D %~dp0
179-
180- echo set path=%my_original_path% >> %my_archive_log%
18156set path = %my_original_path%
182-
183- echo call %my_buildenv% \scripts\env.bat>> %my_archive_log%
18457call %my_buildenv% \scripts\env.bat
58+ @ echo on
18559
186- echo ----------------------------------------
187- echo 2.1 (%date% %time% ) Create basic build infrastructure
188- echo ----------------------------------------
189- echo ---------------------------------------- >> %my_archive_log%
190- echo 2.1 (%date% %time% ) Create basic build infrastructure>> %my_archive_log%
191- echo ---------------------------------------- >> %my_archive_log%
192-
193- rem at First step 2.1
194- rem we don't use any %my_requirements%
195- rem we don't create installer
196- rem we use legacy python build cd /D %~dp0
197-
198- set my_buildenv_path = %path%
199-
200- echo python.exe -c " from make import *;make_all(%my_release% , '%my_release_level% ', pyver='%my_pyver% ', basedir=r'%my_basedir% ', verbose=True, architecture=%my_arch% , flavor='%my_flavor% ', install_options=r'%my_install_options% ', find_links=r'%my_find_links% ', source_dirs=r'%my_source_dirs% ', toolsdirs=r'%my_toolsdirs% ', docsdirs=r'%my_docsdirs% ', create_installer='False', python_target_release='%my_python_target_release% ')" >> %my_archive_log%
201-
202- echo python.exe -c " from make import *;make_all(%my_release% , '%my_release_level% ', pyver='%my_pyver% ', basedir=r'%my_basedir% ', verbose=True, architecture=%my_arch% , flavor='%my_flavor% ', install_options=r'%my_install_options% ', find_links=r'%my_find_links% ', source_dirs=r'%my_source_dirs% ', toolsdirs=r'%my_toolsdirs% ', docsdirs=r'%my_docsdirs% ', create_installer='False', python_target_release='%my_python_target_release% ')"
203-
204- rem pause
205-
60+ REM Create basic build infrastructure
61+ echo " (%date% %time% ) Create basic build infrastructure" >> %my_archive_log%
20662python.exe -c " from make import *;make_all(%my_release% , '%my_release_level% ', pyver='%my_pyver% ', basedir=r'%my_basedir% ', verbose=True, architecture=%my_arch% , flavor='%my_flavor% ', install_options=r'%my_install_options% ', find_links=r'%my_find_links% ', source_dirs=r'%my_source_dirs% ', toolsdirs=r'%my_toolsdirs% ', docsdirs=r'%my_docsdirs% ', create_installer='False', python_target_release='%my_python_target_release% ')" >> %my_archive_log%
20763
208-
209- echo ----------------------------------------
210- echo 2.2 (%date% %time% ) check infrastructure is in place
211- echo ----------------------------------------
212- echo ---------------------------------------- >> %my_archive_log%
213- echo 2.2 (%date% %time% ) check infrastructure is in place>> %my_archive_log%
214- echo ---------------------------------------- >> %my_archive_log%
215-
216- @ echo on
64+ REM Check infrastructure is in place
65+ echo " (%date% %time% ) Check infrastructure" >> %my_archive_log%
21766set my_WINPYDIRBASE = %my_root_dir_for_builds% \bd%my_python_target% \bu%my_flavor% \Wpy%my_arch% -%my_python_target_release%%my_release%%my_release_level%
218-
21967set WINPYDIRBASE = %my_WINPYDIRBASE%
22068
22169if not exist %my_WINPYDIRBASE% \scripts\env.bat (
70+ @ echo off
71+ echo as %my_WINPYDIRBASE% \scripts\env.bat does not exist
22272 echo please check and correct my_python_target_release=%my_python_target_release%
22373 echo my_arch=%my_arch%
22474 echo my_python_target_release=%my_python_target_release%
22575 echo my_release=%my_release%
22676 echo my_release_level=%my_release_level%
227- echo in generate_a_winpython_distro.bat
228- echo as %my_WINPYDIRBASE% \scripts\env.bat doesnt exist
22977 pause
23078 exit
231- )
79+ )
23280
233- rem we use final environment to install requirements
234- set path = %my_original_path%
81+ REM Add pre-requisite packages
82+ echo -------------------------------------- >> %my_archive_log%
83+ echo " (%date% %time% ) Add pre-requisite packages" >> %my_archive_log%
84+ echo -------------------------------------- >> %my_archive_log%
23585
86+ set path = %my_original_path%
23687call %my_WINPYDIRBASE% \scripts\env.bat
237- set
238-
239-
240- echo ----------------------------------------
241- echo 2.4 (%date% %time% ) add packages pre_requirements (if any)
242- echo ----------------------------------------
243- echo ---------------------------------------- >> %my_archive_log%
244- echo 2.4 (%date% %time% ) add packages pre_requirements (if any)
245- echo ---------------------------------------- >> %my_archive_log%
24688
89+ rem Install pre-requirements if any
24790if not " Z%my_requirements_pre% Z" == " ZZ" (
248-
249- if " %my_find_links_pre% " == " " set my_find_links_pre = %my_find_links%
250-
251- echo python -m pip install -r %my_requirements_pre% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links_pre%
252- echo python -m pip install -r %my_requirements_pre% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links_pre% >> %my_archive_log%
253- echo if pip doesn't work, check the path of %my_WINPYDIRBASE%
254-
255- python -m pip install -r %my_requirements_pre% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links_pre% >> %my_archive_log%
91+ if " %my_find_links_pre% " == " " set my_find_links_pre = %my_find_links%
92+ python -m pip install -r %my_requirements_pre% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links_pre% >> %my_archive_log%
25693) else (
257- echo no packages pre_requirements
258- echo no packages pre_requirements>> %my_archive_log%
94+ echo " No pre-requisite packages" >> %my_archive_log%
25995)
26096
97+ REM Add requirement packages
98+ echo -------------------------------------- >> %my_archive_log%
99+ echo " (%date% %time% ) Add requirement packages" >> %my_archive_log%
100+ echo -------------------------------------- >> %my_archive_log%
101+ python -m pip install -r %my_requirements% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links% >> %my_archive_log%
261102
262- echo ----------------------------------------
263- echo 2.5 (%date% %time% ) add requirement packages
264- echo ----------------------------------------
265- echo ---------------------------------------- >> %my_archive_log%
266- echo 2.5 (%date% %time% ) add requirement packages_versions>> %my_archive_log%
267- echo ---------------------------------------- >> %my_archive_log%
268-
269- echo python -m pip install -r %my_requirements% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links%
270- echo python -m pip install -r %my_requirements% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links% >> %my_archive_log%
271- echo if pip doesn't work, check the path of %my_WINPYDIRBASE%
272-
273- python -m pip install -r %my_requirements% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links% >> %my_archive_log%
274-
275-
276- echo ----------------------------------------
277- echo 2.9 (%date% %time% ) archive success
278- echo ----------------------------------------
279- echo ---------------------------------------- >> %my_archive_log%
280- echo 2.9 (%date% %time% ) archive success >> %my_archive_log%
281- echo ---------------------------------------- >> %my_archive_log%
282-
283- echo %target_python_exe% -m pip freeze> %my_archive_log% .packages_versions.txt>> %my_archive_log%
284- %target_python_exe% -m pip freeze> %my_archive_log% .packages_versions.txt
285-
286-
287- echo ----------------------------------------
288- echo 3.0 (%date% %time% ) Generate Changelog and binaries
289- echo ----------------------------------------
290- echo ---------------------------------------- >> %my_archive_log%
291- echo 3.0 (%date% %time% ) Generate Changelog and binaries >> %my_archive_log%
292- echo ---------------------------------------- >> %my_archive_log%
293-
294- rem build final changelog and binaries, using create_installer='%my_create_installer%', remove_existing=False , remove : requirements, toolsdirs and docdirs
103+ REM Archive success
104+ echo -------------------------------------- >> %my_archive_log%
105+ echo " (%date% %time% ) Archive success" >> %my_archive_log%
106+ echo -------------------------------------- >> %my_archive_log%
107+ %target_python_exe% -m pip freeze > %my_archive_log% .packages_versions.txt
295108
109+ REM Generate changelog and binaries
110+ echo " (%date% %time% ) Generate changelog and binaries" >> %my_archive_log%
296111set path = %my_original_path%
297- echo cd /D %~dp0 >> %my_archive_log%
298112cd /D %~dp0
299-
300- echo call %my_buildenv% \scripts\env.bat>> %my_archive_log%
301113call %my_buildenv% \scripts\env.bat
302- set
303-
304- echo python.exe -c " from make import *;make_all(%my_release% , '%my_release_level% ', pyver='%my_pyver% ', basedir=r'%my_basedir% ', verbose=True, architecture=%my_arch% , flavor='%my_flavor% ', install_options=r'%my_install_options% ', find_links=r'%my_find_links% ', source_dirs=r'%my_source_dirs% ', create_installer='%my_create_installer% ', remove_existing=False, python_target_release='%my_python_target_release% ')" >> %my_archive_log%
305-
306- echo python.exe -c " from make import *;make_all(%my_release% , '%my_release_level% ', pyver='%my_pyver% ', basedir=r'%my_basedir% ', verbose=True, architecture=%my_arch% , flavor='%my_flavor% ', install_options=r'%my_install_options% ', find_links=r'%my_find_links% ', source_dirs=r'%my_source_dirs% ', create_installer='%my_create_installer% ', remove_existing=False, python_target_release='%my_python_target_release% ')"
114+ python.exe -c " from make import *;make_all(%my_release% , '%my_release_level% ', pyver='%my_pyver% ', basedir=r'%my_basedir% ', verbose=True, architecture=%my_arch% , flavor='%my_flavor% ', install_options=r'%my_install_options% ', find_links=r'%my_find_links% ', source_dirs=r'%my_source_dirs% ', create_installer='%my_create_installer% ', remove_existing=False, python_target_release='%my_python_target_release% ')" >> %my_archive_log%
307115
308- python.exe -c " from make import *;make_all(%my_release% , '%my_release_level% ', pyver='%my_pyver% ', basedir=r'%my_basedir% ', verbose=True, architecture=%my_arch% , flavor='%my_flavor% ', install_options=r'%my_install_options% ', find_links=r'%my_find_links% ', source_dirs=r'%my_source_dirs% ', create_installer='%my_create_installer% ', remove_existing=False, python_target_release='%my_python_target_release% ')" >> %my_archive_log%
309-
310-
311- echo ----------------------------------------
312- echo (%date% %time% ) END OF creation
313- echo ----------------------------------------
314- echo ---------------------------------------- >> %my_archive_log%
315- echo (%date% %time% ) END OF creation>> %my_archive_log%
316- echo ---------------------------------------- >> %my_archive_log%
317-
318- rem show logs
116+ echo -------------------------------------- >> %my_archive_log%
117+ echo " (%date% %time% ) END OF CREATION" >> %my_archive_log%
118+ echo -------------------------------------- >> %my_archive_log%
319119start notepad.exe %my_archive_log%
320-
321120start notepad.exe %my_archive_log% .packages_versions.txt
322121
323- set path = %my_original_path%
324- rem pause
122+ set path = %my_original_path%
0 commit comments