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