-
Notifications
You must be signed in to change notification settings - Fork 1
/
Build.bat
490 lines (396 loc) · 12.2 KB
/
Build.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
:: PortaDOOM, copyright (C) Kroc Camen 2016-2023, BSD 2-clause
@ECHO OFF & SETLOCAL ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
PUSHD %~dp0
REM # detect 32-bit or 64-bit Windows
SET WINBIT=32
IF /I "%PROCESSOR_ARCHITECTURE%" == "EM64T" SET WINBIT=64 & REM # Itanium
IF /I "%PROCESSOR_ARCHITECTURE%" == "AMD64" SET WINBIT=64 & REM # Regular x64
REM # 32-bit CMD running on a 64-bit system (WOW64)
IF /I "%PROCESSOR_ARCHITEW6432%" == "AMD64" SET WINBIT=64
REM # location of QB64 executable
SET BIN_QB64=bin\qb64\qb64.exe
REM # location of 7Zip executable
SET BIN_7ZA="%~dp0bin\7za\7za.exe"
REM # location of UPX executable
REM # (for compression EXE files)
SET BIN_UPX="%~dp0bin\upx\upx.exe"
SET "UPX_ULTRA=%BIN_UPX% --all-methods --all-filters --ultra-brute"
REM # define ZIP compression profiles:
REM # -ms=on : solid-mode on (default)
REM # -mqs=on : sort solid-files by type
REM # -mhc=on : header compression on (default)
REM # -mx=9 : maximum compression (level 9)
REM # -myx=9 : maximum file analysis (level 9)
SET "ZIP_MAX=-ms=on -mqs=on -mhc=on -mx=9 -myx=9"
SET "ZIP_MIN=-ms=off -mhc=off -mx=0 -myx=0"
REM # our include batch file concatenates 7-zip list files
SET INCLUDE="%~dp0bin\include.bat"
:menu
REM # ==========================================================================
CLS & TITLE PortaDOOM Build Tools:
ECHO:
ECHO Select Release to Build:
ECHO:
ECHO [A] All
ECHO:
ECHO [B] Cacowards: 2020
ECHO [C] Cacowards: 2019
ECHO [D] Cacowards: 2018
ECHO [E] Cacowards: 2017
ECHO [F] Cacowards: 2016
ECHO [G] Cacowards: 2015
ECHO [5] Cacowards: 5 Years of Doom
ECHO:
REM ECHO [P] PSX DOOM TC
ECHO [Q] DOOM CE
ECHO:
ECHO [X] Launcher only
ECHO:
SET "$="
SET /P "$=Enter choice: "
IF /I "%$%" == "A" CALL :do_release_all
IF /I "%$%" == "B" CALL :do_release_cacowards "2020"
IF /I "%$%" == "C" CALL :do_release_cacowards "2019"
IF /I "%$%" == "D" CALL :do_release_cacowards "2018"
IF /I "%$%" == "E" CALL :do_release_cacowards "2017"
IF /I "%$%" == "F" CALL :do_release_cacowards "2016"
IF /I "%$%" == "G" CALL :do_release_cacowards "2015"
IF /I "%$%" == "5" CALL :do_release_5yearsofdoom
REM IF /I "%$%" == "P" CALL :do_release_psxdoomtc
IF /I "%$%" == "Q" CALL :do_release_doomce
IF /I "%$%" == "X" CALL :do_release_launcher
GOTO:EOF
:select_compression
REM # ==========================================================================
REM # presents a menu to select the desired compression level
ECHO:
ECHO Select Compression Level:
ECHO:
ECHO [0] None
ECHO [1] Maximum
ECHO:
SET /P "$=Enter choice: "
SET CMPLVL=0
IF "%$%" == "0" SET CMPLVL=0
IF "%$%" == "1" SET CMPLVL=1
IF %CMPLVL% EQU 0 SET "ZIP_LVL=%ZIP_MIN%"
IF %CMPLVL% EQU 1 SET "ZIP_LVL=%ZIP_MAX%"
:compress_portadoom
REM # --------------------------------------------------------------------------
ECHO:
ECHO * Compile "PortaDOOM.exe"
ECHO:
REM # compile source with QB64
%BIN_QB64% -x -e -o ^
"..\..\PortaDOOM\PortaDOOM.exe" ^
"..\..\src\portadoom.qb64"
REM # if that errored, pause to be able to show the error message
IF ERRORLEVEL 1 POPD & PAUSE & GOTO:EOF
IF %CMPLVL% EQU 1 (
ECHO * Compress "PortaDOOM.exe"
ECHO:
DEL PortaDOOM\PortaDOOM.upx >NUL 2>&1
%UPX_ULTRA% "PortaDOOM\PortaDOOM.exe"
ECHO:
)
:compress_launcher
REM # --------------------------------------------------------------------------
ECHO:
ECHO * Compile "launcher.exe"
ECHO:
REM # compile the launcher
%BIN_QB64% -x -e -o ^
"..\..\PortaDOOM\files\launcher.exe" ^
"..\..\src\launcher.qb64"
REM # if that errored, pause to be able to show the error message
IF ERRORLEVEL 1 POPD & PAUSE & GOTO:EOF
REM # compress the launcher executable
IF %CMPLVL% EQU 1 (
ECHO:
ECHO * Compress "launcher.exe"
ECHO:
DEL PortaDOOM\files\launcher.upx >NUL 2>&1
%UPX_ULTRA% PortaDOOM\files\launcher.exe
ECHO:
)
:compress_cfgini
REM # --------------------------------------------------------------------------
ECHO:
ECHO * Compile "cfgini.exe"
ECHO:
REM # compile the config editor
%BIN_QB64% -x -e -o ^
"..\..\PortaDOOM\files\config\cfgini.exe" ^
"..\..\src\cfgini.qb64"
REM # if that errored, pause to be able to show the error message
IF ERRORLEVEL 1 POPD & PAUSE & GOTO:EOF
REM # compress the config executable
IF %CMPLVL% EQU 1 (
ECHO:
ECHO * Compress "cfgini.exe"
ECHO:
DEL PortaDOOM\files\config\cfgini.upx >NUL 2>&1
%UPX_ULTRA% PortaDOOM\files\config\cfgini.exe
ECHO:
)
ECHO:
GOTO:EOF
:do_release_all
REM # ==========================================================================
CLS & TITLE Creating PortaDOOM release...
CALL :select_compression
CALL :do_5yearsofdoom
CALL :do_cacowards "2015"
CALL :do_cacowards "2016"
CALL :do_cacowards "2017"
CALL :do_cacowards "2018"
CALL :do_cacowards "2019"
CALL :do_cacowards "2020"
REM CALL :do_psxdoomtc
CALL :do_doomce
CALL :do_launcher
ECHO:
ECHO Complete.
ECHO:
PAUSE
EXIT /B
ECHO * Make PortaDOOM ...
REM # --------------------------------------------------------------------------
REM # 7ZIP
%BIN_7ZA% a ^
-bso0 -bsp1 -r %ZIP_LVL% -stl ^
-xr@bin\exclude.lst ^
-- "build\PortaDOOM.7z" ^
"PortaDOOM"
ECHO:
ECHO Complete.
ECHO:
PAUSE
EXIT /B
:do_release_cacowards
REM # ==========================================================================
TITLE Creating PortaDOOM release...
CALL :select_compression
CALL :do_cacowards "%~1"
ECHO:
ECHO Complete.
ECHO:
PAUSE & GOTO:EOF
:do_cacowards
REM # --------------------------------------------------------------------------
ECHO * Make PortaDOOM_Cacowards%~1 ...
REM # the archive will be built without a base folder
PUSHD PortaDOOM
REM # swap over the homepages:
IF EXIST "pages\Home #01.old" (
DEL "pages\Home #01.dosmag"
REN "pages\Home #01.old" "Home #01.dosmag"
)
REN "pages\Home #01.dosmag" "Home #01.old"
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
COPY "pages\PortaDOOM Cacowards %~1.dosmag" "pages\Home #01.dosmag" >NUL 2>&1
IF ERRORLEVEL 1 (
DEL "pages\Home #01.dosmag"
REN "pages\Home #01.old" "Home #01.dosmag"
POPD & PAUSE & EXIT
)
REM # build the include list
CALL %INCLUDE% "..\bin\include_cacowards%~1.lst" > "..\build\include.lst"
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
REM # 7ZIP
CALL :zip ^
"..\build\PortaDOOM_Cacowards%~1.7z" ^
"..\build\include.lst" ^
"..\bin\exclude.lst"
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
REM # restore the original home page
DEL "pages\Home #01.dosmag"
REN "pages\Home #01.old" "Home #01.dosmag"
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
POPD
GOTO:EOF
:do_release_5yearsofdoom
REM # ==========================================================================
TITLE Creating PortaDOOM release...
CALL :select_compression
CALL :do_5yearsofdoom
ECHO:
ECHO Complete.
ECHO:
PAUSE & GOTO:EOF
:do_5yearsofdoom
REM # --------------------------------------------------------------------------
ECHO * Make PortaDOOM_5YearsOfDoom ...
DEL build\PortaDOOM_5YearsOfDoom.7z >NUL 2>&1
REM # the archive will be built without a base folder
PUSHD PortaDOOM
REM # swap over the homepages
IF EXIST "pages\Home #01.old" (
DEL "pages\Home #01.dosmag"
REN "pages\Home #01.old" "Home #01.dosmag"
)
REN "pages\Home #01.dosmag" "Home #01.old"
COPY "pages\PortaDOOM Cacowards 5 Years of Doom.dosmag" "pages\Home #01.dosmag" >NUL 2>&1
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
REM # build the include list
CALL %INCLUDE% "..\bin\include_cacowards5years.lst" > "..\build\include.lst"
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
REM # 7ZIP
CALL :zip ^
"..\build\PortaDOOM_5YearsOfDoom.7z" ^
"..\build\include.lst" ^
"..\bin\exclude.lst"
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
REM # restore the original home page
DEL "pages\Home #01.dosmag"
REN "pages\Home #01.old" "Home #01.dosmag"
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
POPD
GOTO:EOF
:do_release_psxdoomtc
REM # ==========================================================================
TITLE Creating PortaDOOM release...
CALL :select_compression
CALL :do_psxdoomtc
ECHO:
ECHO Complete.
ECHO:
PAUSE & GOTO:EOF
:do_psxdoomtc
REM # --------------------------------------------------------------------------
ECHO * Make PortaDOOM_PSXDOOMTC ...
DEL build\PortaDOOM_PSXDOOMTC.7z >NUL 2>&1
REM # the archive will be built without a base folder
PUSHD PortaDOOM
REM # swap over the homepages
IF EXIST "pages\Home #01.old" (
DEL "pages\Home #01.dosmag"
REN "pages\Home #01.old" "Home #01.dosmag"
)
REN "pages\Home #01.dosmag" "Home #01.old"
COPY "pages\PortaDOOM PSX DOOM TC.dosmag" "pages\Home #01.dosmag" >NUL 2>&1
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
REM # build the include list
CALL %INCLUDE% "..\bin\include_psxdoomtc.lst" > "..\build\include.lst"
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
REM # 7ZIP
CALL :zip ^
"..\build\PortaDOOM_PSXDOOMTC.7z" ^
"..\build\include.lst" ^
"..\bin\exclude.lst"
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
REM # restore the original home page
DEL "pages\Home #01.dosmag"
REN "pages\Home #01.old" "Home #01.dosmag"
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
POPD
GOTO:EOF
:do_release_doomce
REM # ==========================================================================
TITLE Creating PortaDOOM release...
CALL :select_compression
CALL :do_doomce
ECHO:
ECHO Complete.
ECHO:
PAUSE & GOTO:EOF
:do_doomce
REM # --------------------------------------------------------------------------
ECHO * Make PortaDOOM_DOOMCE ...
DEL build\PortaDOOM_DOOMCE.7z >NUL 2>&1
REM # the archive will be built without a base folder
PUSHD PortaDOOM
REM # swap over the homepages
IF EXIST "pages\Home #01.old" (
DEL "pages\Home #01.dosmag"
REN "pages\Home #01.old" "Home #01.dosmag"
)
REN "pages\Home #01.dosmag" "Home #01.old"
COPY "pages\PortaDOOM DOOM CE.dosmag" "pages\Home #01.dosmag" >NUL 2>&1
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
REM # build the include list
CALL %INCLUDE% "..\bin\include_doomce.lst" > "..\build\include.lst"
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
REM # 7ZIP
CALL :zip ^
"..\build\PortaDOOM_DOOMCE.7z" ^
"..\build\include.lst" ^
"..\bin\exclude.lst"
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
REM # restore the original home page
DEL "pages\Home #01.dosmag"
REN "pages\Home #01.old" "Home #01.dosmag"
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
POPD
GOTO:EOF
:do_release_launcher
REM # ==========================================================================
TITLE Creating PortaDOOM Launcher release...
SET CMPLVL=1
CALL :compress_launcher
CALL :do_launcher
ECHO:
ECHO Complete.
ECHO:
PAUSE & GOTO:EOF
:do_launcher
REM # --------------------------------------------------------------------------
ECHO * Make PortaDOOM_Launcher ...
DEL build\PortaDOOM_Launcher.7z >NUL 2>&1
REM # the archive will be built without a base folder
REM # and without the PortaDOOM executable / pages
PUSHD PortaDOOM\files
REM # Launcher is always maximum compression
REM # as it doesn't use the PortaDOOM executable
CALL :zip ^
"..\..\build\PortaDOOM_Launcher.7z" ^
"..\..\bin\include_launcher.lst" ^
"..\..\bin\exclude.lst"
IF ERRORLEVEL 1 POPD & PAUSE & EXIT
POPD
GOTO:EOF
:do_upx
REM # ==========================================================================
CLS & TITLE UPX Compress DOOM Engines...
ECHO:
ECHO Compress DOOM Engines using UPX:
ECHO - This may take a long time
ECHO - This will permenantly alter the EXEs!
ECHO - Already compressed EXEs will be skipped;
ECHO only run this script when the engines are updated
ECHO:
SET "FILES="
FOR /R ".\PortaDOOM\files\ports" %%F IN (*.exe) DO (
SET EXE_FILE=%%~F
CALL :upx
)
ECHO:
PAUSE & GOTO:EOF
:upx
REM # --------------------------------------------------------------------------
REM # check if the file is already compressed
SET "EXE_INFO="
FOR /F "delims=" %%G IN ('%BIN_UPX% -qqq -l "%EXE_FILE%"') DO @SET EXE_INFO=%%G
REM # if not compressed, run UPX on the executable
IF "%EXE_INFO%" == "" (
%UPX_ULTRA% "%EXE_FILE%"
)
GOTO:EOF
:zip
REM # --------------------------------------------------------------------------
REM # run a zip-compression command;
REM # assumes `ZIP_LVL` has been set
REM #
REM # %1 = archive path
REM # %2 = include list, e.g. "include.lst"
REM # %3 = exclude list, e.g. "exclude.lst"
REM # a : add to archive
REM # -bso0 : disable message output
REM # -bsp1 : display only progress
REM # -r : recurse sub-directories
REM # -stl : sets the archive's timestamp to that of the latest file
REM # -xr... : exclude files (recursively)
REM # -ir... : include files
%BIN_7ZA% a -bso0 -bsp1 %ZIP_LVL% -stl -xr@%3 -ir@%2 -- %1
REM # return the error code from 7Zip
EXIT /B %ERRORLEVEL%