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