Commit | Line | Data |
68dc0745 |
1 | # |
2 | # Makefile to build perl on Windowns NT using Microsoft NMAKE. |
3 | # |
4 | # |
5 | # This is set up to build a perl.exe that runs off a shared library |
6 | # (perl.dll). Also makes individual DLLs for the XS extensions. |
7 | # |
137443ea |
8 | |
9 | # |
10 | # Set these to wherever you want "nmake install" to put your |
11 | # newly built perl. |
68dc0745 |
12 | # |
0a753a76 |
13 | |
137443ea |
14 | INST_DRV=c: |
15 | INST_TOP=$(INST_DRV)\perl |
16 | |
17 | |
18 | ##################### CHANGE THESE ONLY IF YOU MUST ##################### |
19 | |
20 | # |
21 | # Programs to compile, build .lib files and link |
22 | # |
68dc0745 |
23 | |
137443ea |
24 | CC=cl.exe |
25 | LINK32=link.exe |
26 | LIB32=$(LINK32) -lib |
68dc0745 |
27 | # |
137443ea |
28 | # Options |
29 | # |
30 | PERLDLL = -D "PERLDLL" |
31 | RUNTIME = -MD |
32 | INCLUDES = -I ".\include" -I "." -I ".." |
33 | #PCHFLAGS = -Fp"$(INTDIR)/modules.pch" -YX |
34 | DEFINES = -D "WIN32" -D "_CONSOLE" -D "PERLDLL" |
35 | SUBSYS = console |
36 | LIBFILES = kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib \ |
37 | advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib |
38 | |
39 | !IF "$(RUNTIME)" == "-MD" |
40 | WINIOMAYBE = |
41 | !ELSE |
42 | WINIOMAYBE = win32io.obj |
43 | !ENDIF |
44 | |
45 | !IF "$(CFG)" == "Debug" |
46 | ! IF "$(CCTYPE)" == "MSVC20" |
47 | OPTIMIZE = -Od $(RUNTIME) -Z7 -D "_DEBUG" |
48 | ! ELSE |
49 | OPTIMIZE = -Od $(RUNTIME)d -Z7 -D "_DEBUG" |
50 | ! ENDIF |
96e4d5b1 |
51 | LINK_DBG = -debug -pdb:none |
137443ea |
52 | !ELSE |
53 | ! IF "$(CCTYPE)" == "MSVC20" |
54 | OPTIMIZE = -Od $(RUNTIME) -D "NDEBUG" |
55 | ! ELSE |
96e4d5b1 |
56 | OPTIMIZE = -Od $(RUNTIME) -D "NDEBUG" |
137443ea |
57 | ! ENDIF |
58 | LINK_DBG = -release |
59 | !ENDIF |
68dc0745 |
60 | |
137443ea |
61 | CFLAGS = -nologo -W3 $(INCLUDES) $(DEFINES) $(PCHFLAGS) $(OPTIMIZE) |
62 | LINK_FLAGS = -nologo $(LIBFILES) $(LINK_DBG) -machine:I386 |
63 | |
64 | #################### do not edit below this line ####################### |
65 | ############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ############## |
66 | |
67 | # |
68 | # Rules |
69 | # |
70 | .SUFFIXES : |
71 | .SUFFIXES : .c .obj .dll .lib .exe |
72 | |
73 | .c.obj: |
74 | $(CC) -c $(CFLAGS) -Fo$@ $< |
75 | |
76 | .obj.dll: |
77 | $(LINK32) -dll -subsystem:windows -implib:$(*B).lib -def:$(*B).def -out:$@ $(LINK_FLAGS) $< $(LIBPERL) |
68dc0745 |
78 | |
68dc0745 |
79 | # |
80 | INST_BIN=$(INST_TOP)\bin |
81 | INST_LIB=$(INST_TOP)\lib |
137443ea |
82 | INST_POD=$(INST_LIB)\pod |
68dc0745 |
83 | INST_HTML=$(INST_POD)\html |
84 | LIBDIR=..\lib |
0a753a76 |
85 | EXTDIR=..\ext |
68dc0745 |
86 | PODDIR=..\pod |
0a753a76 |
87 | EXTUTILSDIR=$(LIBDIR)\extutils |
68dc0745 |
88 | |
89 | # |
90 | # various targets |
54310121 |
91 | PERLIMPLIB=..\perl.lib |
68dc0745 |
92 | MINIPERL=..\miniperl.exe |
93 | PERLDLL=..\perl.dll |
94 | PERLEXE=..\perl.exe |
95 | GLOBEXE=..\perlglob.exe |
137443ea |
96 | CONFIGPM=..\lib\Config.pm |
83437bec |
97 | MINIMOD=..\lib\ExtUtils\Miniperl.pm |
68dc0745 |
98 | |
99 | PL2BAT=bin\PL2BAT.BAT |
137443ea |
100 | MAKE=nmake -nologo |
3fe9a6f1 |
101 | XCOPY=xcopy /i /d /f /r |
68dc0745 |
102 | NULL= |
103 | |
104 | # |
105 | # filenames given to xsubpp must have forward slashes (since it puts |
106 | # full pathnames in #line strings) |
137443ea |
107 | XSUBPP=..\$(MINIPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp -C++ -prototypes |
68dc0745 |
108 | |
137443ea |
109 | CORE_C= ..\av.c \ |
68dc0745 |
110 | ..\deb.c \ |
111 | ..\doio.c \ |
112 | ..\doop.c \ |
113 | ..\dump.c \ |
114 | ..\globals.c \ |
115 | ..\gv.c \ |
116 | ..\hv.c \ |
117 | ..\mg.c \ |
118 | ..\op.c \ |
119 | ..\perl.c \ |
120 | ..\perlio.c \ |
121 | ..\perly.c \ |
122 | ..\pp.c \ |
123 | ..\pp_ctl.c \ |
124 | ..\pp_hot.c \ |
125 | ..\pp_sys.c \ |
126 | ..\regcomp.c \ |
127 | ..\regexec.c \ |
128 | ..\run.c \ |
129 | ..\scope.c \ |
130 | ..\sv.c \ |
131 | ..\taint.c \ |
132 | ..\toke.c \ |
133 | ..\universal.c \ |
134 | ..\util.c |
0a753a76 |
135 | |
137443ea |
136 | CORE_OBJ=..\av.obj \ |
137 | ..\deb.obj \ |
138 | ..\doio.obj \ |
139 | ..\doop.obj \ |
140 | ..\dump.obj \ |
141 | ..\globals.obj \ |
142 | ..\gv.obj \ |
143 | ..\hv.obj \ |
144 | ..\mg.obj \ |
145 | ..\op.obj \ |
146 | ..\perl.obj \ |
147 | ..\perlio.obj \ |
148 | ..\perly.obj \ |
149 | ..\pp.obj \ |
150 | ..\pp_ctl.obj \ |
151 | ..\pp_hot.obj \ |
152 | ..\pp_sys.obj \ |
153 | ..\regcomp.obj \ |
154 | ..\regexec.obj \ |
155 | ..\run.obj \ |
156 | ..\scope.obj \ |
157 | ..\sv.obj \ |
158 | ..\taint.obj \ |
159 | ..\toke.obj \ |
160 | ..\universal.obj \ |
161 | ..\util.obj |
162 | |
163 | WIN32_C = perllib.c \ |
164 | win32.c \ |
165 | win32io.c \ |
166 | win32sck.c \ |
167 | |
168 | WIN32_OBJ = win32.obj \ |
169 | win32io.obj \ |
170 | win32sck.obj \ |
171 | |
172 | DLL_OBJ = perllib.obj $(DYNALOADER).obj |
173 | |
174 | CORE_H = "..\av.h"\ |
175 | "..\cop.h"\ |
176 | "..\cv.h"\ |
177 | "..\dosish.h"\ |
178 | "..\embed.h"\ |
179 | "..\form.h"\ |
180 | "..\gv.h"\ |
181 | "..\handy.h"\ |
182 | "..\hv.h"\ |
183 | "..\mg.h"\ |
184 | "..\nostdio.h"\ |
185 | "..\op.h"\ |
186 | "..\opcode.h"\ |
187 | "..\perl.h"\ |
188 | "..\perlio.h"\ |
189 | "..\perlsdio.h"\ |
190 | "..\perlsfio.h"\ |
191 | "..\perly.h"\ |
192 | "..\pp.h"\ |
193 | "..\proto.h"\ |
194 | "..\regexp.h"\ |
195 | "..\scope.h"\ |
196 | "..\sv.h"\ |
197 | "..\unixish.h"\ |
198 | "..\util.h"\ |
199 | "..\XSUB.h"\ |
200 | ".\config.h"\ |
201 | "..\EXTERN.h"\ |
202 | ".\include\dirent.h"\ |
203 | ".\include\netdb.h"\ |
204 | ".\include\sys\socket.h"\ |
205 | ".\win32.h" |
206 | |
207 | |
0a753a76 |
208 | EXTENSIONS=DynaLoader Socket IO Fcntl Opcode SDBM_File |
0a753a76 |
209 | |
68dc0745 |
210 | DYNALOADER=$(EXTDIR)\DynaLoader\DynaLoader |
211 | SOCKET=$(EXTDIR)\Socket\Socket |
212 | FCNTL=$(EXTDIR)\Fcntl\Fcntl |
213 | OPCODE=$(EXTDIR)\Opcode\Opcode |
214 | SDBM_FILE=$(EXTDIR)\SDBM_File\SDBM_File |
215 | IO=$(EXTDIR)\IO\IO |
216 | |
217 | SOCKET_DLL=..\lib\auto\Socket\Socket.dll |
218 | FCNTL_DLL=..\lib\auto\Fcntl\Fcntl.dll |
219 | OPCODE_DLL=..\lib\auto\Opcode\Opcode.dll |
220 | SDBM_FILE_DLL=..\lib\auto\SDBM_File\SDBM_File.dll |
221 | IO_DLL=..\lib\auto\IO\IO.dll |
222 | |
223 | STATICLINKMODULES=DynaLoader |
224 | DYNALOADMODULES= \ |
225 | $(SOCKET_DLL) \ |
226 | $(FCNTL_DLL) \ |
227 | $(OPCODE_DLL) \ |
228 | $(SDBM_FILE_DLL)\ |
229 | $(IO_DLL) |
230 | |
231 | POD2HTML=$(PODDIR)\pod2html |
232 | POD2MAN=$(PODDIR)\pod2man |
233 | POD2LATEX=$(PODDIR)\pod2latex |
234 | POD2TEXT=$(PODDIR)\pod2text |
235 | |
137443ea |
236 | # |
237 | # Top targets |
238 | # |
0a753a76 |
239 | |
83437bec |
240 | ALL: $(PERLEXE) $(GLOBEXE) $(DYNALOADMODULES) $(MINIMOD) |
0a753a76 |
241 | |
137443ea |
242 | $(DYNALOADER).obj : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c |
0a753a76 |
243 | |
137443ea |
244 | #------------------------------------------------------------ |
0a753a76 |
245 | |
137443ea |
246 | $(GLOBEXE): perlglob.obj |
247 | $(LINK32) $(LINK_FLAGS) -out:$@ -subsystem:$(SUBSYS) perlglob.obj setargv.obj |
0a753a76 |
248 | |
137443ea |
249 | perlglob.obj : perlglob.c |
250 | |
251 | ..\miniperlmain.obj : ..\miniperlmain.c $(CORE_H) |
252 | |
253 | ..\config.sh : config.w32 $(MINIPERL) config_sh.PL |
254 | $(MINIPERL) -I..\lib config_sh.PL "INST_DRV=$(INST_DRV)" "INST_TOP=$(INST_TOP)"\ |
255 | "cc=$(CC)" "ccflags=$(RUNTIME) -DWIN32" config.w32 > ..\config.sh |
256 | |
83437bec |
257 | $(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl |
137443ea |
258 | cd .. && miniperl configpm |
68dc0745 |
259 | if exist lib\* $(XCOPY) /e lib\*.* ..\lib\$(NULL) |
137443ea |
260 | $(XCOPY) ..\*.h ..\lib\CORE\*.* |
261 | $(XCOPY) *.h ..\lib\CORE\*.* |
262 | $(XCOPY) /S include ..\lib\CORE\*.* |
263 | $(MINIPERL) -I..\lib config_h.PL || $(MAKE) RUNTIME=$(RUNTIME) CFG=$(CFG) $(CONFIGPM) |
264 | |
265 | $(MINIPERL) : ..\miniperlmain.obj $(CORE_OBJ) $(WIN32_OBJ) |
266 | $(LINK32) -subsystem:console -out:$@ @<< |
267 | $(LINK_FLAGS) ..\miniperlmain.obj $(CORE_OBJ) $(WIN32_OBJ) |
268 | << |
269 | |
270 | $(WIN32_OBJ) : $(CORE_H) |
271 | $(CORE_OBJ) : $(CORE_H) |
272 | $(DLL_OBJ) : $(CORE_H) |
0a753a76 |
273 | |
137443ea |
274 | perldll.def : $(MINIPERL) $(CONFIGPM) |
68dc0745 |
275 | $(MINIPERL) -w makedef.pl > perldll.def |
0a753a76 |
276 | |
137443ea |
277 | $(PERLDLL): perldll.def $(CORE_OBJ) $(WIN32_OBJ) $(DLL_OBJ) |
278 | $(LINK32) -dll -def:perldll.def -out:$@ @<< |
279 | $(LINK_FLAGS) $(CORE_OBJ) $(WIN32_OBJ) $(DLL_OBJ) |
280 | << |
281 | $(XCOPY) $(PERLIMPLIB) ..\lib\CORE |
282 | |
283 | perl.def : $(MINIPERL) makeperldef.pl |
284 | $(MINIPERL) -I..\lib makeperldef.pl $(NULL) > perl.def |
285 | |
83437bec |
286 | $(MINIMOD) : $(MINIPERL) ..\minimod.pl |
287 | cd .. && miniperl minimod.pl > lib\ExtUtils\Miniperl.pm |
288 | |
289 | perlmain.c : runperl.c |
0a753a76 |
290 | copy runperl.c perlmain.c |
137443ea |
291 | |
292 | perlmain.obj : perlmain.c |
293 | $(CC) $(CFLAGS) -U "PERLDLL" -c perlmain.c |
294 | |
295 | $(PERLEXE): $(PERLDLL) $(CONFIGPM) perlmain.obj |
296 | $(LINK32) -subsystem:console -out:perl.exe $(LINK_FLAGS) perlmain.obj $(WINIOMAYBE) $(PERLIMPLIB) |
297 | copy perl.exe $@ |
298 | del perl.exe |
0a753a76 |
299 | copy splittree.pl .. |
137443ea |
300 | $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" "../LIB/auto" |
0a753a76 |
301 | attrib -r ..\t\*.* |
302 | copy test ..\t |
0a753a76 |
303 | |
137443ea |
304 | $(DYNALOADER).c: $(MINIPERL) $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM) |
68dc0745 |
305 | if not exist ..\lib\auto md ..\lib\auto |
306 | $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL) |
307 | cd $(EXTDIR)\$(*B) |
308 | $(XSUBPP) dl_win32.xs > $(*B).c |
0a753a76 |
309 | cd ..\..\win32 |
310 | |
68dc0745 |
311 | $(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs |
312 | copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs |
0a753a76 |
313 | |
137443ea |
314 | $(IO_DLL): $(PERLEXE) $(CONFIGPM) $(IO).xs |
68dc0745 |
315 | cd $(EXTDIR)\$(*B) |
137443ea |
316 | ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl |
317 | $(MAKE) |
0a753a76 |
318 | cd ..\..\win32 |
319 | |
137443ea |
320 | $(SDBM_FILE_DLL) : $(PERLEXE) $(SDBM_FILE).xs |
68dc0745 |
321 | cd $(EXTDIR)\$(*B) |
137443ea |
322 | ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl |
323 | $(MAKE) |
68dc0745 |
324 | cd ..\..\win32 |
0a753a76 |
325 | |
137443ea |
326 | $(FCNTL_DLL): $(PERLEXE) $(FCNTL).xs |
68dc0745 |
327 | cd $(EXTDIR)\$(*B) |
137443ea |
328 | ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl |
329 | $(MAKE) |
0a753a76 |
330 | cd ..\..\win32 |
331 | |
137443ea |
332 | $(OPCODE_DLL): $(PERLEXE) $(OPCODE).xs |
68dc0745 |
333 | cd $(EXTDIR)\$(*B) |
137443ea |
334 | ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl |
335 | $(MAKE) |
68dc0745 |
336 | cd ..\..\win32 |
0a753a76 |
337 | |
137443ea |
338 | $(SOCKET_DLL): $(SOCKET).xs $(PERLEXE) |
68dc0745 |
339 | cd $(EXTDIR)\$(*B) |
137443ea |
340 | ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl |
341 | $(MAKE) |
0a753a76 |
342 | cd ..\..\win32 |
343 | |
68dc0745 |
344 | doc: $(PERLEXE) |
137443ea |
345 | cd $(PODDIR) |
346 | nmake -f ../win32/pod.mak |
347 | cd ..\win32 |
68dc0745 |
348 | |
3fe9a6f1 |
349 | utils: $(PERLEXE) |
350 | cd ..\utils |
351 | nmake PERL=$(MINIPERL) |
352 | $(PERLEXE) ..\win32\$(PL2BAT) h2ph splain perlbug pl2pm c2ph \ |
353 | h2xs perldoc pstruct |
354 | $(XCOPY) *.bat ..\win32\bin\*.* |
355 | cd ..\win32 |
356 | |
137443ea |
357 | distclean: clean |
358 | -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \ |
83437bec |
359 | $(PERLIMPLIB) ..\miniperl.lib $(MINIMOD) |
68dc0745 |
360 | -del /f *.def |
54310121 |
361 | -del /f $(SOCKET_DLL) $(IO_DLL) $(SDBM_FILE_DLL) $(FCNTL_DLL) \ |
362 | $(OPCODE_DLL) |
363 | -del /f $(SOCKET).c $(IO).c $(SDBM_FILE).c $(FCNTL).c $(OPCODE).c \ |
364 | $(DYNALOADER).c |
68dc0745 |
365 | -del /f $(PODDIR)\*.html |
366 | -del /f $(PODDIR)\*.bat |
54310121 |
367 | -rmdir /s /q ..\lib\auto |
368 | -rmdir /s /q ..\lib\CORE |
68dc0745 |
369 | |
3fe9a6f1 |
370 | install : ALL doc utils |
68dc0745 |
371 | if not exist $(INST_TOP) mkdir $(INST_TOP) |
372 | echo I $(INST_TOP) L $(LIBDIR) |
373 | $(XCOPY) $(PERLEXE) $(INST_BIN)\*.* |
374 | $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.* |
375 | $(XCOPY) $(PERLDLL) $(INST_BIN)\*.* |
3fe9a6f1 |
376 | $(XCOPY) bin\*.* $(INST_BIN)\*.* |
68dc0745 |
377 | $(XCOPY) /e ..\lib $(INST_LIB)\*.* |
378 | $(XCOPY) ..\pod\*.bat $(INST_BIN)\*.* |
379 | $(XCOPY) ..\pod\*.pod $(INST_POD)\*.* |
380 | $(XCOPY) ..\pod\*.html $(INST_HTML)\*.* |
381 | |
137443ea |
382 | inst_lib : $(CONFIGPM) |
68dc0745 |
383 | copy splittree.pl .. |
137443ea |
384 | $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" "../LIB/auto" |
68dc0745 |
385 | $(XCOPY) /e ..\lib $(INST_LIB)\*.* |
0a753a76 |
386 | |
137443ea |
387 | minitest : $(MINIPERL) $(GLOBEXE) $(CONFIGPM) |
388 | $(XCOPY) $(MINIPERL) ..\t\perl.exe |
389 | $(XCOPY) $(GLOBEXE) ..\t\$(NULL) |
390 | attrib -r ..\t\*.* |
391 | copy test ..\t |
392 | cd ..\t |
393 | $(MINIPERL) -I..\lib test base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t |
394 | cd ..\win32 |
395 | |
68dc0745 |
396 | test : all |
397 | $(XCOPY) $(PERLEXE) ..\t\$(NULL) |
398 | $(XCOPY) $(PERLDLL) ..\t\$(NULL) |
399 | $(XCOPY) $(GLOBEXE) ..\t\$(NULL) |
137443ea |
400 | cd ..\t |
401 | $(PERLEXE) -I..\lib harness |
68dc0745 |
402 | cd ..\win32 |
137443ea |
403 | |
404 | clean : |
405 | -@erase miniperlmain.obj |
406 | -@erase $(MINIPERL) |
407 | -@erase perlglob.obj |
408 | -@erase perlmain.obj |
409 | -@erase $(GLOBEXE) |
410 | -@erase $(PERLEXE) |
411 | -@erase $(PERLDLL) |
412 | -@erase $(CORE_OBJ) |
413 | -@erase $(WIN32_OBJ) |
414 | -@erase $(DLL_OBJ) |
415 | -@erase ..\*.obj *.obj ..\*.lib ..\*.exp |
416 | -@erase *.ilk |
417 | -@erase *.pdb |
418 | |
419 | |