This repository has been archived by the owner on Jun 14, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathc.bat
397 lines (354 loc) · 11.2 KB
/
c.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
@echo off
goto start
:help
echo.
echo C script - iMatix C compile script
echo Written: 98/01/27 Pieter Hintjens
echo Revised: 99/04/12 Pieter Hintjens
echo.
echo c file1 file2... Compile ANSI C program(s)
echo c -l main... Compile and link main program(s)
echo c -L main... Link main program(s), no compile
echo c -S Report detected compiler options
echo c -r library file... Replace object file in library (if library
echo name is 'any', inserts into first .lib file
echo.
echo You can optionally set these environment variables in autoexec.bat:
echo.
echo CCNAME - compiler name: bc, bcc, tc, tcc, msvc, lcc, or gcc or wcc;
echo if not defined, script assumes 'lcc'.
echo CCDIR - fully qualified compiler directory: if not defined, script
echo looks in \bc, \bcc, \borlandc, \tc, \tcc, \turboc, \msdev,
echo \msvc, \lcc, \gcc, and %WATCOM% in the current drive.
echo INCDEF - value for compiler '-I' option; if not defined, script uses
echo compiler include directory followed by \usr\include.
echo LIBDIR - directory containing user libraries; if not defined, script
echo uses \usr\lib in the current drive.
goto exit
:start
:-
:- Clean-up symbols and directory
:-
set lib=
if exist *.map del *.map
if exist *.lst del *.lst
:-
:- Determine compiler name and location, and directories to use
:-
if "%CCNAME%"=="" set CCNAME=lcc
if "%CCNAME%"=="lcc" goto start_lcc
if "%CCNAME%"=="bc" goto start_bc
if "%CCNAME%"=="bcc" goto start_bc
if "%CCNAME%"=="tc" goto start_tc
if "%CCNAME%"=="tcc" goto start_tc
if "%CCNAME%"=="msvc" goto start_msvc
if "%CCNAME%"=="gcc" goto start_gcc
if "%CCNAME%"=="wcc" goto start_wcc
echo Unknown compiler '%CCNAME%' defined - aborting
goto exit
:-
:- Borland C/C++
:-
:start_bc
if not "%CCDIR%"=="" goto sbc_1
set CCDIR=\bc
if exist %CCDIR%\bin\%CCNAME%.exe goto stc_2
set CCDIR=\bcc
if exist %CCDIR%\bin\%CCNAME%.exe goto stc_2
set CCDIR=\borlandc
if exist %CCDIR%\bin\%CCNAME%.exe goto stc_2
echo Borland C/C++ compiler not found in default directories - aborting
goto exit
:sbc_1
if exist %CCDIR%\bin\%CCNAME%.exe goto stc_2
echo Borland C/C++ compiler not found in defined directory - aborting
goto exit
:-
:- Turbo C/C++
:-
:start_tc
if not "%CCDIR%"=="" goto stc_1
set CCDIR=\tc
if exist %CCDIR%\bin\%CCNAME%.exe goto stc_2
set CCDIR=\tcc
if exist %CCDIR%\bin\%CCNAME%.exe goto stc_2
set CCDIR=\turboc
if exist %CCDIR%\bin\%CCNAME%.exe goto stc_2
echo Turbo C/C++ compiler not found in default directories - aborting
:stc_1
if exist %CCDIR%\bin\%CCNAME%.exe goto stc_2
echo Turbo C/C++ compiler not found in defined directory - aborting
goto exit
:stc_2
if "%INCDEF%"=="" set INCDEF=%CCDIR%\include -I\usr\include
if "%LIBDIR%"=="" set LIBDIR=\usr\lib
goto start_ok
:-
:- MS Visual C/C++
:-
:start_msvc
if not "%CCDIR%"=="" goto smsvc_1
set CCDIR=\msdev
if exist %CCDIR%\bin\cl.exe goto smsvc_2
set CCDIR=\msvc
:smsvc_1
if exist %CCDIR%\bin\cl.exe goto smsvc_2
echo MS Visual C/C++ directory not found - aborting
goto exit
:smsvc_2
if "%INCDEF%"=="" set INCDEF=%CCDIR%\include /I\usr\include
if "%LIBDIR%"=="" set LIBDIR=\usr\lib
goto start_ok
:-
:- lcc
:-
:start_lcc
if not "%CCDIR%"=="" goto slcc_1
set CCDIR=\lcc
:slcc_1
if exist %CCDIR%\bin\lcc.exe goto slcc_2
echo lcc directory not found or compiler not yet defined - aborting
goto exit
:slcc_2
if "%INCDEF%"=="" set INCDEF=%CCDIR%\include -I\usr\include
if "%LIBDIR%"=="" set LIBDIR=\usr\lib
goto start_ok
:-
:- GNU C
:-
:start_gcc
echo GNU C not implemented yet
goto exit
:-
:- WATCOM C32
:-
:start_wcc
if not "%CCDIR%"=="" goto swcc_1
set CCDIR=%WATCOM%
if exist %CCDIR%\binnt\wcc386.exe goto swcc_2
set CCDIR=\watcom
:swcc_1
if exist %CCDIR%\binnt\wcc386.exe goto swcc_2
echo Watcom C32 directory not found - aborting
goto exit
:swcc_2
if "%INCDEF%"=="" set INCDEF=%NT_INCLUDE%;%INCLUDE%
if "%LIBDIR%"=="" set LIBDIR=%LIB%
goto start_ok
:start_ok
if "%1"=="" goto help
if "%1"=="-l" goto clink
if "%1"=="-L" goto link
if "%1"=="-S" goto system
if "%1"=="-r" goto replace
set _COMP=1
set _LINK=0
goto process
:clink
set _COMP=1
set _LINK=1
shift
goto process
:link
set _COMP=0
set _LINK=1
shift
goto process
:system
if %CCNAME%==msvc echo Compiling using MS Visual C/C++ in %CCDIR%
if %CCNAME%==bc echo Compiling using Borland C in %CCDIR%
if %CCNAME%==bcc echo Compiling using Borland C++ in %CCDIR
if %CCNAME%==tc echo Compiling using Turbo C in %CCDIR%
if %CCNAME%==tcc echo Compiling using Turbo C++ in %CCDIR%
if %CCNAME%==lcc echo Compiling using lcc in %CCDIR%
if %CCNAME%==gcc echo Compiling using GNU C in %CCDIR%
if %CCNAME%==wcc echo Compiling using Watcom C32 in %CCDIR%
echo Linking with libraries in %LIBDIR%
goto exit
:replace
if .%2==. goto help
if .%3==. goto help
set _LIB=%2
set _FILE=%3
if %_LIB%==any for %%a in (*.lib) do set _LIB=%%a
if %_LIB%==any set _LIB=libany.lib
if exist %_LIB%.lib set _LIB=%_LIB%.lib
:rep_loop
if exist %_FILE%.obj set _FILE=%_FILE%.obj
echo Replacing %_FILE% into %_LIB%
if %CCNAME%==bc goto rbor
if %CCNAME%==bcc goto rbor
if %CCNAME%==tc goto rbor
if %CCNAME%==tcc goto rbor
if %CCNAME%==lcc goto rlcc
if %CCNAME%==msvc goto rmsvc
if %CCNAME%==wcc goto rwcc
goto exit
:rep_next
shift
if .%3==. goto rep_done
set _FILE=%3
goto rep_loop
:rep_done
set _LIB=
set _FILE=
goto exit
:rmsvc
if exist %_LIB% %CCDIR%\bin\lib /nologo %_LIB% %_FILE% >nul
if not exist %_LIB% %CCDIR%\bin\lib /nologo /out:%_LIB% %_FILE% >nul
goto rep_next
:rbor
%CCDIR%\bin\tlib %_LIB%-+%_FILE% >nul
goto rep_next
:rlcc
%CCDIR%\bin\lcclib %_LIB% %_FILE% >nul
goto rep_next
:rwcc
%CCDIR%\binnt\wlib -q %_LIB% -+%_FILE% >nul
goto rep_next
:process
if .%1==. goto help
set _FILE=%1
if exist %_FILE%.c set _FILE=%_FILE%.c
if not exist %_FILE% goto notfound
if %CCNAME%==bc goto cborc
if %CCNAME%==bcc goto cborc
if %CCNAME%==tc goto cbortc
if %CCNAME%==tcc goto cbortc
if %CCNAME%==lcc goto clcc
if %CCNAME%==msvc goto cmsvc
if %CCNAME%==wcc goto cwcc
goto exit
:notfound
echo %_FILE% not found
set _FILE=
goto exit
:cmsvc
if %_COMP%==0 goto msvc_link
set CC=%CCDIR%\bin\cl
echo Compiling %_FILE%...
%CC% /nologo /c /Od /W3 /I%INCDEF% /D "DEBUG" /D "WIN32" %_FILE%>c.lst
if not errorlevel 1 goto cmsvc_ok
type c.lst
goto error
:cmsvc_ok
del c.lst
set _FILE=
:msvc_link
if %_LINK%==0 goto done
if exist library.lst del library.lst
for %%a in (*.lib) do echo %%a >> library.lst
for %%a in (%LIBDIR%\*.lib) do echo %%a >> library.lst
echo %CCDIR%\lib\libc.lib >> library.lst
echo %CCDIR%\lib\libcd.lib >> library.lst
echo %CCDIR%\lib\kernel32.lib >> library.lst
echo %CCDIR%\lib\user32.lib >> library.lst
echo %CCDIR%\lib\gdi32.lib >> library.lst
echo %CCDIR%\lib\comdlg32.lib >> library.lst
echo %CCDIR%\lib\advapi32.lib >> library.lst
echo %CCDIR%\lib\netapi32.lib >> library.lst
echo %CCDIR%\lib\shell32.lib >> library.lst
echo %CCDIR%\lib\odbc32.lib >> library.lst
echo %CCDIR%\lib\user32.lib >> library.lst
echo %CCDIR%\lib\wsock32.lib >> library.lst
echo %CCDIR%\lib\winmm.lib >> library.lst
echo %CCDIR%\lib\oldnames.lib >> library.lst
echo %CCDIR%\lib\mpr.lib >> library.lst
echo Linking %1...
%CCDIR%\bin\link /NOLOGO /STACK:8096 /SUBSYSTEM:CONSOLE %1 @library.lst
if exist %1.map del %1.map
if exist %1.exp del %1.exp
del library.lst
goto done
:cbortc
if %_COMP%==0 goto bor_link
echo Compiling %_FILE%...
%CCDIR%\bin\tcc -c -f -O -Z -w -C -I%INCDEF% -ml -DDEBUG %_FILE%>c.lst
if not errorlevel 1 goto cbortc_ok
type c.lst
goto error
:cbortc_ok
del c.lst
set _FILE=
goto bor_link
:cborc
if %_COMP%==0 goto bor_link
echo Compiling %_FILE%...
%CCDIR%\bin\bcc -c -f -O -Z -w -C -I%INCDEF% -ml -DDEBUG %_FILE%>c.lst
if not errorlevel 1 goto cborc_ok
type c.lst
goto error
:cborc_ok
del c.lst
set _FILE=
:bor_link
if %_LINK%==0 goto done
if exist library.lst del library.lst
for %%a in (*.lib) do echo %%a+ >> library.lst
for %%a in (%LIBDIR%\*.lib) do echo %%a+ >> library.lst
echo %CCDIR%\lib\mathl.lib+ >> library.lst
echo %CCDIR%\lib\emu.lib+ >> library.lst
echo %CCDIR%\lib\cl.lib >> library.lst
echo Linking %1...
%CCDIR%\bin\tlink %CCDIR%\lib\c0l+%1,%1,,@library.lst;
if errorlevel 1 goto lerror
del library.lst
goto done
:clcc
if %_COMP%==0 goto lcc_link
echo Compiling %_FILE%...
set CCDEFINES=-DDEBUG -DWIN32 -D__LCC__ -D_MSC_VER
%CCDIR%\bin\lcc -O -I%INCDEF% %CCDEFINES% %_FILE%
if errorlevel 1 goto error
set CCDEFINES=
set _FILE=
:lcc_link
if %_LINK%==0 goto done
if exist library.lst del library.lst
mkdir libtmp
for %%a in (%LIBDIR%\*.lib) do copy %%a libtmp > nul
for %%a in (*.lib) do copy %%a libtmp > nul
for %%a in (*.lib) do echo %%a >> library.lst
for %%a in (%LIBDIR%\*.lib) do echo %%a >> library.lst
for %%a in (libtmp\*.lib) do echo %%a >> library.lst
echo %CCDIR%\lib\wsock32.lib >> library.lst
echo %CCDIR%\lib\winmm.lib >> library.lst
echo %CCDIR%\lib\mpr.lib >> library.lst
echo Linking %1...
%CCDIR%\bin\lcclnk -s -subsystem console %1.obj @library.lst
del library.lst
del libtmp\*.lib
rmdir libtmp
goto done
:cwcc
if %_COMP%==0 goto wcc_link
echo Compiling %_FILE%...
set CCDEFINES=-DDEBUG
%CCDIR%\binnt\wcc386 -wx -zq -i=%INCDEF% %CCDEFINES% %_FILE%
if errorlevel 1 goto error
set CCDEFINES=
set _FILE=
:wcc_link
if %_LINK%==0 goto done
if exist library.lst del library.lst
mkdir libtmp
for %%a in (*.lib) do echo %%a >> library.lst
echo Linking %1...
%CCDIR%\binnt\wlink option quiet debug all file %1.obj library { @library.lst }
del library.lst
rmdir libtmp
goto done
:done
shift
if not .%1==. goto process
set _COMP=
set _LINK=
goto exit
:error
set _FILE=
echo Compile errors in %1
goto exit
:lerror
echo Link errors in %1
goto exit
:exit