win32: Configure cf_email
[p5sagit/p5-mst-13.2.git] / win32 / Makefile
CommitLineData
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.
137443ea 12INST_DRV=c:
13INST_TOP=$(INST_DRV)\perl
14
c90c0ff4 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
137443ea 26
d484a829 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
137443ea 32##################### CHANGE THESE ONLY IF YOU MUST #####################
33
34#
35# Programs to compile, build .lib files and link
36#
68dc0745 37
137443ea 38CC=cl.exe
39LINK32=link.exe
40LIB32=$(LINK32) -lib
68dc0745 41#
137443ea 42# Options
43#
44PERLDLL = -D "PERLDLL"
c90c0ff4 45!IF "$(RUNTIME)" == ""
137443ea 46RUNTIME = -MD
c90c0ff4 47!ENDIF
137443ea 48INCLUDES = -I ".\include" -I "." -I ".."
49#PCHFLAGS = -Fp"$(INTDIR)/modules.pch" -YX
50DEFINES = -D "WIN32" -D "_CONSOLE" -D "PERLDLL"
51SUBSYS = console
52LIBFILES = 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"
56WINIOMAYBE =
57!ELSE
58WINIOMAYBE = win32io.obj
59!ENDIF
60
61!IF "$(CFG)" == "Debug"
62! IF "$(CCTYPE)" == "MSVC20"
63OPTIMIZE = -Od $(RUNTIME) -Z7 -D "_DEBUG"
64! ELSE
65OPTIMIZE = -Od $(RUNTIME)d -Z7 -D "_DEBUG"
66! ENDIF
96e4d5b1 67LINK_DBG = -debug -pdb:none
137443ea 68!ELSE
69! IF "$(CCTYPE)" == "MSVC20"
70OPTIMIZE = -Od $(RUNTIME) -D "NDEBUG"
71! ELSE
96e4d5b1 72OPTIMIZE = -Od $(RUNTIME) -D "NDEBUG"
137443ea 73! ENDIF
74LINK_DBG = -release
75!ENDIF
68dc0745 76
137443ea 77CFLAGS = -nologo -W3 $(INCLUDES) $(DEFINES) $(PCHFLAGS) $(OPTIMIZE)
78LINK_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)
68dc0745 94
68dc0745 95#
96INST_BIN=$(INST_TOP)\bin
97INST_LIB=$(INST_TOP)\lib
137443ea 98INST_POD=$(INST_LIB)\pod
68dc0745 99INST_HTML=$(INST_POD)\html
100LIBDIR=..\lib
0a753a76 101EXTDIR=..\ext
68dc0745 102PODDIR=..\pod
0a753a76 103EXTUTILSDIR=$(LIBDIR)\extutils
68dc0745 104
105#
106# various targets
54310121 107PERLIMPLIB=..\perl.lib
68dc0745 108MINIPERL=..\miniperl.exe
109PERLDLL=..\perl.dll
110PERLEXE=..\perl.exe
111GLOBEXE=..\perlglob.exe
137443ea 112CONFIGPM=..\lib\Config.pm
83437bec 113MINIMOD=..\lib\ExtUtils\Miniperl.pm
68dc0745 114
115PL2BAT=bin\PL2BAT.BAT
137443ea 116MAKE=nmake -nologo
c90c0ff4 117XCOPY=xcopy /f /r /i /d
118RCOPY=xcopy /f /r /i /e /d
68dc0745 119NULL=
120
121#
122# filenames given to xsubpp must have forward slashes (since it puts
123# full pathnames in #line strings)
137443ea 124XSUBPP=..\$(MINIPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp -C++ -prototypes
68dc0745 125
137443ea 126CORE_C= ..\av.c \
68dc0745 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
0a753a76 152
137443ea 153CORE_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
180WIN32_C = perllib.c \
181 win32.c \
182 win32io.c \
183 win32sck.c \
184
185WIN32_OBJ = win32.obj \
186 win32io.obj \
187 win32sck.obj \
188
189DLL_OBJ = perllib.obj $(DYNALOADER).obj
190
191CORE_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
0a753a76 225EXTENSIONS=DynaLoader Socket IO Fcntl Opcode SDBM_File
0a753a76 226
68dc0745 227DYNALOADER=$(EXTDIR)\DynaLoader\DynaLoader
228SOCKET=$(EXTDIR)\Socket\Socket
229FCNTL=$(EXTDIR)\Fcntl\Fcntl
230OPCODE=$(EXTDIR)\Opcode\Opcode
231SDBM_FILE=$(EXTDIR)\SDBM_File\SDBM_File
232IO=$(EXTDIR)\IO\IO
233
234SOCKET_DLL=..\lib\auto\Socket\Socket.dll
235FCNTL_DLL=..\lib\auto\Fcntl\Fcntl.dll
236OPCODE_DLL=..\lib\auto\Opcode\Opcode.dll
237SDBM_FILE_DLL=..\lib\auto\SDBM_File\SDBM_File.dll
238IO_DLL=..\lib\auto\IO\IO.dll
239
240STATICLINKMODULES=DynaLoader
241DYNALOADMODULES= \
242 $(SOCKET_DLL) \
243 $(FCNTL_DLL) \
244 $(OPCODE_DLL) \
245 $(SDBM_FILE_DLL)\
246 $(IO_DLL)
247
248POD2HTML=$(PODDIR)\pod2html
249POD2MAN=$(PODDIR)\pod2man
250POD2LATEX=$(PODDIR)\pod2latex
251POD2TEXT=$(PODDIR)\pod2text
252
137443ea 253#
254# Top targets
255#
0a753a76 256
83437bec 257ALL: $(PERLEXE) $(GLOBEXE) $(DYNALOADMODULES) $(MINIMOD)
0a753a76 258
137443ea 259$(DYNALOADER).obj : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c
0a753a76 260
137443ea 261#------------------------------------------------------------
0a753a76 262
137443ea 263$(GLOBEXE): perlglob.obj
264 $(LINK32) $(LINK_FLAGS) -out:$@ -subsystem:$(SUBSYS) perlglob.obj setargv.obj
0a753a76 265
137443ea 266perlglob.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)"\
d484a829 272 "cc=$(CC)" "ccflags=$(RUNTIME) -DWIN32" "cf_email=$(EMAIL)" config.w32 > ..\config.sh
137443ea 273
83437bec 274$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl
137443ea 275 cd .. && miniperl configpm
c90c0ff4 276 if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL)
137443ea 277 $(XCOPY) ..\*.h ..\lib\CORE\*.*
278 $(XCOPY) *.h ..\lib\CORE\*.*
c90c0ff4 279 $(RCOPY) include ..\lib\CORE\*.*
280 $(MINIPERL) -I..\lib config_h.PL || $(MAKE) CCTYPE=$(CCTYPE) RUNTIME=$(RUNTIME) CFG=$(CFG) $(CONFIGPM)
137443ea 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)
0a753a76 290
137443ea 291perldll.def : $(MINIPERL) $(CONFIGPM)
68dc0745 292 $(MINIPERL) -w makedef.pl > perldll.def
0a753a76 293
137443ea 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
300perl.def : $(MINIPERL) makeperldef.pl
301 $(MINIPERL) -I..\lib makeperldef.pl $(NULL) > perl.def
302
83437bec 303$(MINIMOD) : $(MINIPERL) ..\minimod.pl
304 cd .. && miniperl minimod.pl > lib\ExtUtils\Miniperl.pm
305
306perlmain.c : runperl.c
0a753a76 307 copy runperl.c perlmain.c
137443ea 308
309perlmain.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
0a753a76 316 copy splittree.pl ..
137443ea 317 $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" "../LIB/auto"
0a753a76 318 attrib -r ..\t\*.*
319 copy test ..\t
0a753a76 320
137443ea 321$(DYNALOADER).c: $(MINIPERL) $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM)
68dc0745 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
0a753a76 326 cd ..\..\win32
327
68dc0745 328$(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
329 copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
0a753a76 330
137443ea 331$(IO_DLL): $(PERLEXE) $(CONFIGPM) $(IO).xs
68dc0745 332 cd $(EXTDIR)\$(*B)
137443ea 333 ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
334 $(MAKE)
0a753a76 335 cd ..\..\win32
336
137443ea 337$(SDBM_FILE_DLL) : $(PERLEXE) $(SDBM_FILE).xs
68dc0745 338 cd $(EXTDIR)\$(*B)
137443ea 339 ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
340 $(MAKE)
68dc0745 341 cd ..\..\win32
0a753a76 342
137443ea 343$(FCNTL_DLL): $(PERLEXE) $(FCNTL).xs
68dc0745 344 cd $(EXTDIR)\$(*B)
137443ea 345 ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
346 $(MAKE)
0a753a76 347 cd ..\..\win32
348
137443ea 349$(OPCODE_DLL): $(PERLEXE) $(OPCODE).xs
68dc0745 350 cd $(EXTDIR)\$(*B)
137443ea 351 ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
352 $(MAKE)
68dc0745 353 cd ..\..\win32
0a753a76 354
137443ea 355$(SOCKET_DLL): $(SOCKET).xs $(PERLEXE)
68dc0745 356 cd $(EXTDIR)\$(*B)
137443ea 357 ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
358 $(MAKE)
0a753a76 359 cd ..\..\win32
360
68dc0745 361doc: $(PERLEXE)
137443ea 362 cd $(PODDIR)
363 nmake -f ../win32/pod.mak
364 cd ..\win32
68dc0745 365
3fe9a6f1 366utils: $(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
137443ea 374distclean: clean
375 -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \
83437bec 376 $(PERLIMPLIB) ..\miniperl.lib $(MINIMOD)
68dc0745 377 -del /f *.def
54310121 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
68dc0745 382 -del /f $(PODDIR)\*.html
383 -del /f $(PODDIR)\*.bat
54310121 384 -rmdir /s /q ..\lib\auto
385 -rmdir /s /q ..\lib\CORE
68dc0745 386
3fe9a6f1 387install : ALL doc utils
68dc0745 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)\*.*
3fe9a6f1 393 $(XCOPY) bin\*.* $(INST_BIN)\*.*
c90c0ff4 394 $(RCOPY) ..\lib $(INST_LIB)\*.*
68dc0745 395 $(XCOPY) ..\pod\*.bat $(INST_BIN)\*.*
396 $(XCOPY) ..\pod\*.pod $(INST_POD)\*.*
397 $(XCOPY) ..\pod\*.html $(INST_HTML)\*.*
398
137443ea 399inst_lib : $(CONFIGPM)
68dc0745 400 copy splittree.pl ..
137443ea 401 $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" "../LIB/auto"
c90c0ff4 402 $(RCOPY) ..\lib $(INST_LIB)\*.*
0a753a76 403
137443ea 404minitest : $(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
68dc0745 413test : all
414 $(XCOPY) $(PERLEXE) ..\t\$(NULL)
415 $(XCOPY) $(PERLDLL) ..\t\$(NULL)
416 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
137443ea 417 cd ..\t
418 $(PERLEXE) -I..\lib harness
68dc0745 419 cd ..\win32
137443ea 420
421clean :
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