2 # Makefile to build perl on Windowns NT using Microsoft NMAKE.
3 # Works with MS command line compilers from VC++ etc.
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 # NB: Miniperl has a different set of objects it depends on than
9 # Also, Miniperl will not build with -DPERL_OBJECT defined
11 # Set these to wherever you want "nmake install" to put your
14 INST_TOP=$(INST_DRV)\perl5004.5x
17 # uncomment to enable threads-capabilities
21 # uncomment next line if you are using Visual C++ 2.x
25 # uncomment next line if you want to use the perl object
29 # uncomment next line if you want debug version of perl (big,slow)
33 # if you have the source for des_fcrypt(), uncomment this and make sure the
34 # file exists (see README.win32)
35 #CRYPT_SRC=des_fcrypt.c
38 # if you didn't set CRYPT_SRC and if you have des_fcrypt() available in a
39 # library, uncomment this, and make sure the library exists (see README.win32)
40 #CRYPT_LIB=des_fcrypt.lib
43 # set this if you wish to use perl's malloc
44 # WARNING: Turning this on/off WILL break binary compatibility with extensions
45 # you may have compiled with/without it. Be prepared to recompile all extensions
46 # if you change the default.
50 # set the install locations of the compiler include/libraries
53 CCINCDIR = $(CCHOME)\include
54 CCLIBDIR = $(CCHOME)\lib
57 # set this to your email address (perl will guess a value from
58 # from your loginname and your hostname, which may not be right)
61 ##################### CHANGE THESE ONLY IF YOU MUST #####################
63 !IF "$(CRYPT_SRC)$(CRYPT_LIB)" == ""
67 CRYPT_FLAG=-DHAVE_DES_FCRYPT
70 !IF "$OBJECT)" != "" || "$(PERL_MALLOC)" == ""
74 #BUILDOPT = -DMULTIPLICITY
75 #BUILDOPT = -DPERL_GLOBAL_STRUCT -DMULTIPLICITY
76 # -DUSE_PERLIO -D__STDC__=1 -DUSE_SFIO -DI_SFIO -I\sfio97\include
78 !IF "$(USE_THREADS)" == ""
82 !IF "$(PROCESSOR_ARCHITECTURE)" == ""
83 PROCESSOR_ARCHITECTURE = x86
86 !IF "$(USE_THREADS)" == "define"
87 ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-thread
89 ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)
92 ARCHDIR = ..\lib\$(ARCHNAME)
96 # Programs to compile, build .lib files and link
105 !IF "$(RUNTIME)" == ""
106 ! IF "$(OBJECT)" == "-DPERL_OBJECT"
112 INCLUDES = -I..\lib\CORE
113 #PCHFLAGS = -Fp"$(INTDIR)/modules.pch" -YX
114 DEFINES = -DWIN32 -D_CONSOLE $(BUILDOPT) $(CRYPT_FLAG)
115 LOCDEFS = -DPERLDLL -DPERL_CORE
118 !IF "$(RUNTIME)" == "-MD"
126 !IF "$(CFG)" == "Debug"
127 ! IF "$(CCTYPE)" == "MSVC20"
128 OPTIMIZE = -Od $(RUNTIME) -Z7 -D_DEBUG -DDEBUGGING
130 OPTIMIZE = -Od -TP $(RUNTIME)d -Z7 -D_DEBUG -DDEBUGGING
132 LINK_DBG = -debug -pdb:none
134 ! IF "$(CCTYPE)" == "MSVC20"
135 OPTIMIZE = -O1 $(RUNTIME) -DNDEBUG
137 OPTIMIZE = -O1 -TP $(RUNTIME) -DNDEBUG
142 # we don't add LIBC here, the compiler does it based on -MD/-MT
143 LIBFILES = $(CRYPT_LIB) oldnames.lib kernel32.lib user32.lib gdi32.lib \
144 winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib \
145 oleaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib \
146 version.lib odbc32.lib odbccp32.lib
148 CFLAGS = -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(OBJECT) $(LOCDEFS) $(PCHFLAGS) $(OPTIMIZE)
150 CFLAGSMINI = -nologo -Gf -W3 -I.\include -I. -I.. $(DEFINES) $(LOCDEFS) $(PCHFLAGS) $(OPTIMIZE)
152 LINK_FLAGS = -nologo $(LINK_DBG) -machine:$(PROCESSOR_ARCHITECTURE)
156 #################### do not edit below this line #######################
157 ############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############
164 .SUFFIXES : .c $(o) .dll .lib .exe
167 $(CC) -c $(CFLAGS) $(OBJOUT_FLAG)$@ $<
170 $(LINK32) -dll -subsystem:windows -implib:$(*B).lib -def:$(*B).def \
171 -out:$@ $(LINK_FLAGS) $(LIBFILES) $< $(LIBPERL)
177 INST_BIN=$(INST_TOP)\bin
178 INST_LIB=$(INST_TOP)\lib
179 INST_POD=$(INST_LIB)\pod
180 INST_HTML=$(INST_POD)\html
184 EXTUTILSDIR=$(LIBDIR)\extutils
188 !IF "$(OBJECT)" == "-DPERL_OBJECT"
189 PERLIMPLIB=..\perlcore.lib
190 PERLDLL=..\perlcore.dll
192 PERLIMPLIB=..\perl.lib
195 MINIPERL=..\miniperl.exe
198 GLOBEXE=..\perlglob.exe
199 CONFIGPM=..\lib\Config.pm
200 MINIMOD=..\lib\ExtUtils\Miniperl.pm
204 GLOBBAT = bin\perlglob.bat
207 CFGSH_TMPL = config.vc
208 CFGH_TMPL = config_H.vc
209 PERL95EXE=..\perl95.exe
210 XCOPY=xcopy /f /r /i /d
211 RCOPY=xcopy /f /r /i /e /d
215 EXTRA_C = $(EXTRA_C) $(CRYPT_SRC)
217 !IF "$(PERL_MALLOC)" == "define"
218 EXTRA_C = $(EXTRA_C) ..\malloc.c
221 !IF "$(OBJECT)" == ""
222 EXTRA_C = $(EXTRA_C) ..\perlio.c
225 EXTRA_OBJ = $(EXTRA_SRC:.c=.obj)
228 # filenames given to xsubpp must have forward slashes (since it puts
229 # full pathnames in #line strings)
230 XSUBPP=..\$(MINIPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp -C++ -prototypes
261 CORE_OBJ= ..\av$(o) \
289 MINI_OBJ= $(MINIDIR)\av$(o) \
290 $(MINIDIR)\byterun$(o) \
291 $(MINIDIR)\miniperlmain$(o) \
293 $(MINIDIR)\doio$(o) \
294 $(MINIDIR)\doop$(o) \
295 $(MINIDIR)\dump$(o) \
296 $(MINIDIR)\globals$(o) \
301 $(MINIDIR)\perl$(o) \
302 $(MINIDIR)\perly$(o) \
304 $(MINIDIR)\pp_ctl$(o) \
305 $(MINIDIR)\pp_hot$(o) \
306 $(MINIDIR)\pp_sys$(o) \
307 $(MINIDIR)\regcomp$(o) \
308 $(MINIDIR)\regexec$(o) \
310 $(MINIDIR)\scope$(o) \
312 $(MINIDIR)\taint$(o) \
313 $(MINIDIR)\toke$(o) \
314 $(MINIDIR)\universal$(o)\
315 $(MINIDIR)\util$(o) \
316 $(MINIDIR)\malloc$(o) \
317 $(MINIDIR)\perlio$(o) \
319 MINIWIN=$(MINIDIR)\win32$(o) \
320 $(MINIDIR)\win32sck$(o) \
321 $(MINIDIR)\win32thread$(o)
323 WIN32_C = perllib.c \
328 !IF "$(USE_THREADS)" == "undef" && "$(OBJECT)" == "-DPERL_OBJECT"
329 WIN32_OBJ = win32$(o) \
332 WIN32_OBJ = win32$(o) \
337 PERL95_OBJ = perl95$(o) \
342 !IF "$(OBJECT)" == "-DPERL_OBJECT"
343 DLL_OBJ = $(DYNALOADER)$(o)
345 DLL_OBJ = perllib$(o) $(DYNALOADER)$(o)
348 X2P_OBJ = ..\x2p\a2p$(o) \
390 .\include\sys\socket.h \
393 DYNAMIC_EXT=Socket IO Fcntl Opcode SDBM_File attrs Thread B
394 STATIC_EXT=DynaLoader
396 DYNALOADER=$(EXTDIR)\DynaLoader\DynaLoader
397 SOCKET=$(EXTDIR)\Socket\Socket
398 FCNTL=$(EXTDIR)\Fcntl\Fcntl
399 OPCODE=$(EXTDIR)\Opcode\Opcode
400 SDBM_FILE=$(EXTDIR)\SDBM_File\SDBM_File
402 ATTRS=$(EXTDIR)\attrs\attrs
403 THREAD=$(EXTDIR)\Thread\Thread
406 SOCKET_DLL=..\lib\auto\Socket\Socket.dll
407 FCNTL_DLL=..\lib\auto\Fcntl\Fcntl.dll
408 OPCODE_DLL=..\lib\auto\Opcode\Opcode.dll
409 SDBM_FILE_DLL=..\lib\auto\SDBM_File\SDBM_File.dll
410 IO_DLL=..\lib\auto\IO\IO.dll
411 ATTRS_DLL=..\lib\auto\attrs\attrs.dll
412 THREAD_DLL=..\lib\auto\Thread\Thread.dll
413 B_DLL=..\lib\auto\B\B.dll
415 STATICLINKMODULES=DynaLoader
426 POD2HTML=$(PODDIR)\pod2html
427 POD2MAN=$(PODDIR)\pod2man
428 POD2LATEX=$(PODDIR)\pod2latex
429 POD2TEXT=$(PODDIR)\pod2text
431 CFG_VARS= "INST_DRV=$(INST_DRV)" \
432 "INST_TOP=$(INST_TOP)" \
433 "archname=$(ARCHNAME)" \
435 "ccflags=$(OPTIMIZE) $(DEFINES) $(OBJECT)"\
436 "cf_email=$(EMAIL)" \
437 "d_crypt=$(D_CRYPT)" \
438 "d_mymalloc=$(PERL_MALLOC)" \
440 "incpath=$(CCINCDIR)" \
441 "libperl=$(PERLIMPLIB)" \
442 "libpth=$(CCLIBDIR)" \
444 "static_ext=$(STATIC_EXT)" \
445 "dynamic_ext=$(DYNAMIC_EXT)" \
446 "usethreads=$(USE_THREADS)" \
447 "LINK_FLAGS=$(LINK_FLAGS)" \
448 "optimize=$(OPTIMIZE)"
454 all: $(GLOBEXE) $(X2P) $(MINIMOD) $(CONFIGPM) $(PERLEXE) $(PERL95EXE) $(DYNALOADMODULES)
456 $(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c
458 #------------------------------------------------------------
460 $(GLOBEXE): perlglob$(o)
461 $(LINK32) $(LINK_FLAGS) $(LIBFILES) -out:$@ -subsystem:$(SUBSYS) \
462 perlglob$(o) setargv$(o)
464 perlglob$(o) : perlglob.c
467 config.w32 : $(CFGSH_TMPL)
468 copy $(CFGSH_TMPL) config.w32
470 .\config.h : $(CFGH_TMPL)
472 copy $(CFGH_TMPL) config.h
474 ..\config.sh : config.w32 $(MINIPERL) config_sh.PL
475 $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS) config.w32 > ..\config.sh
477 $(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl
478 cd .. && miniperl configpm
479 if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL)
480 $(XCOPY) ..\*.h $(COREDIR)\*.*
481 $(XCOPY) *.h $(COREDIR)\*.*
482 $(RCOPY) include $(COREDIR)\*.*
483 $(MINIPERL) -I..\lib config_h.PL || $(MAKE) CCTYPE=$(CCTYPE) \
484 RUNTIME=$(RUNTIME) CFG=$(CFG) $(CONFIGPM)
486 $(MINIPERL) : $(MINIDIR) $(MINI_OBJ) $(MINIWIN)
487 $(LINK32) -subsystem:console -out:$@ @<<
488 $(LINK_FLAGS) $(LIBFILES) $(MINI_OBJ) $(MINIWIN)
492 if not exist "$(MINIDIR)" mkdir "$(MINIDIR)"
494 $(MINI_OBJ) : $(CORE_H)
495 $(CC) -c $(CFLAGSMINI) $(OBJOUT_FLAG)$@ ..\$(*F).c
497 $(MINIWIN) : $(CORE_H)
498 $(CC) -c $(CFLAGSMINI) $(OBJOUT_FLAG)$@ $(*F).c
500 $(WIN32_OBJ) : $(CORE_H)
501 $(CORE_OBJ) : $(CORE_H)
502 $(DLL_OBJ) : $(CORE_H)
503 $(PERL95_OBJ) : $(CORE_H)
504 $(X2P_OBJ) : $(CORE_H)
507 !IF "$(OBJECT)" == "-DPERL_OBJECT"
508 perldll.def : $(CONFIGPM)
509 echo LIBRARY PerlCore >perldll.def
510 echo DESCRIPTION 'Perl interpreter' >>perldll.def
511 echo EXPORTS >>perldll.def
512 echo perl_alloc >>perldll.def
515 $(PERLDLL): perldll.def $(CORE_OBJ)
516 $(LINK32) -dll -def:perldll.def -out:$@ @<<
517 $(LINK_FLAGS) $(LIBFILES) $(CORE_OBJ)
519 $(XCOPY) $(PERLIMPLIB) $(COREDIR)
521 perldll.def : $(CONFIGPM) ..\global.sym makedef.pl
522 $(MINIPERL) -w makedef.pl $(OPTIMIZE) $(DEFINES) \
523 CCTYPE=$(CCTYPE) > perldll.def
525 $(PERLDLL): perldll.def $(CORE_OBJ) $(WIN32_OBJ) $(DLL_OBJ)
526 $(LINK32) -dll -def:perldll.def -out:$@ @<<
527 $(LINK_FLAGS) $(LIBFILES) $(CORE_OBJ) $(WIN32_OBJ) $(DLL_OBJ)
529 $(XCOPY) $(PERLIMPLIB) $(COREDIR)
532 perl.def : $(MINIPERL) makeperldef.pl
533 $(MINIPERL) -I..\lib makeperldef.pl $(NULL) > perl.def
535 $(MINIMOD) : $(MINIPERL) ..\minimod.pl
536 cd .. && miniperl minimod.pl > lib\ExtUtils\Miniperl.pm
538 ..\x2p\a2p$(o) : ..\x2p\a2p.c
539 $(CC) $(CFLAGSMINI) $(OBJOUT_FLAG)$@ -c ..\x2p\a2p.c
541 ..\x2p\hash$(o) : ..\x2p\hash.c
542 $(CC) $(CFLAGSMINI) $(OBJOUT_FLAG)$@ -c ..\x2p\hash.c
544 ..\x2p\str$(o) : ..\x2p\str.c
545 $(CC) $(CFLAGSMINI) $(OBJOUT_FLAG)$@ -c ..\x2p\str.c
547 ..\x2p\util$(o) : ..\x2p\util.c
548 $(CC) $(CFLAGSMINI) $(OBJOUT_FLAG)$@ -c ..\x2p\util.c
550 ..\x2p\walk$(o) : ..\x2p\walk.c
551 $(CC) $(CFLAGSMINI) $(OBJOUT_FLAG)$@ -c ..\x2p\walk.c
554 $(LINK32) -subsystem:console -out:$@ @<<
555 $(LINK_FLAGS) $(LIBFILES) $(X2P_OBJ)
558 perlmain.c : runperl.c
559 copy runperl.c perlmain.c
561 perlmain$(o) : perlmain.c
562 $(CC) $(CFLAGS) -UPERLDLL -c perlmain.c
565 copy runperl.c perl95.c
567 perl95$(o) : perl95.c
568 $(CC) $(CFLAGS) -MT -UPERLDLL -DWIN95FIX -c perl95.c
570 win32sckmt$(o) : win32sck.c
571 $(CC) $(CFLAGS) -MT -UPERLDLL -DWIN95FIX -c $(OBJOUT_FLAG)win32sckmt$(o) win32sck.c
573 win32mt$(o) : win32.c
574 $(CC) $(CFLAGS) -MT -UPERLDLL -DWIN95FIX -c $(OBJOUT_FLAG)win32mt$(o) win32.c
577 !IF "$(OBJECT)" == "-DPERL_OBJECT"
578 $(PERLEXE): $(PERLDLL) $(CONFIGPM) perlmain$(o) $(DLL_OBJ) $(WIN32_OBJ)
579 $(LINK32) -subsystem:console -out:perl.exe $(LINK_FLAGS) $(LIBFILES) \
580 perlmain$(o) $(DLL_OBJ) $(WIN32_OBJ) $(WINIOMAYBE) $(PERLIMPLIB)
584 $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" "../LIB/auto"
586 $(PERL95EXE): $(PERLDLL) $(CONFIGPM) $(PERL95_OBJ) $(DLL_OBJ)
587 $(LINK32) -subsystem:console -out:perl95.exe $(LINK_FLAGS) $(LIBFILES) \
588 $(DLL_OBJ) $(PERL95_OBJ) $(PERLIMPLIB)
594 $(PERLEXE): $(PERLDLL) $(CONFIGPM) perlmain$(o)
595 $(LINK32) -subsystem:console -out:perl.exe $(LINK_FLAGS) $(LIBFILES) \
596 perlmain$(o) $(WINIOMAYBE) $(PERLIMPLIB)
600 $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" "../LIB/auto"
602 $(PERL95EXE): $(PERLDLL) $(CONFIGPM) $(PERL95_OBJ)
603 $(LINK32) -subsystem:console -out:perl95.exe $(LINK_FLAGS) $(LIBFILES) \
604 $(PERL95_OBJ) $(PERLIMPLIB)
610 $(DYNALOADER).c: $(CONFIGPM) $(EXTDIR)\DynaLoader\dl_win32.xs
611 if not exist ..\lib\auto mkdir ..\lib\auto
612 $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL)
614 $(XSUBPP) dl_win32.xs > $(*B).c
617 $(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
618 copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
620 $(B_DLL): $(PERLEXE) $(B).xs
622 ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
626 $(THREAD_DLL): $(PERLEXE) $(THREAD).xs
628 ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
632 $(ATTRS_DLL): $(PERLEXE) $(ATTRS).xs
634 ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
638 $(IO_DLL): $(PERLEXE) $(CONFIGPM) $(IO).xs
640 ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
644 $(SDBM_FILE_DLL) : $(PERLEXE) $(SDBM_FILE).xs
646 ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
650 $(FCNTL_DLL): $(PERLEXE) $(FCNTL).xs
652 ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
656 $(OPCODE_DLL): $(PERLEXE) $(OPCODE).xs
658 ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
662 $(SOCKET_DLL): $(PERLEXE) $(SOCKET).xs
664 ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
670 $(MAKE) OBJECTDEF=$(OBJECT) -f ..\win32\pod.mak checkpods pod2html pod2latex \
672 $(XCOPY) *.bat ..\win32\bin\*.*
674 copy ..\README.win32 ..\pod\perlwin32.pod
675 $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=./html \
676 --podpath=pod:lib:ext:utils --htmlroot="//$(INST_HTML::=|)" \
677 --libpod=perlfunc:perlguts:perlvar:perlrun:perlop --recurse
681 $(MAKE) PERL=$(PERLEXE)
682 $(PERLEXE) -I..\lib ..\win32\$(PL2BAT) h2ph splain perlbug pl2pm c2ph
683 $(PERLEXE) ..\win32\$(PL2BAT) h2xs perldoc pstruct
684 $(XCOPY) *.bat ..\win32\bin\*.*
686 $(PERLEXE) $(PL2BAT) bin\network.pl bin\www.pl bin\runperl.pl \
687 bin\pl2bat.pl bin\perlglob.pl
690 -del /f $(MINIPERL) $(PERLEXE) $(PERL95EXE) $(PERLDLL) $(GLOBEXE) \
691 $(PERLIMPLIB) ..\miniperl.lib $(MINIMOD)
693 -del /f $(SOCKET_DLL) $(IO_DLL) $(SDBM_FILE_DLL) $(FCNTL_DLL) \
694 $(OPCODE_DLL) $(ATTRS_DLL) $(THREAD_DLL) $(B_DLL)
695 -del /f $(SOCKET).c $(IO).c $(SDBM_FILE).c $(FCNTL).c $(OPCODE).c \
696 $(DYNALOADER).c $(ATTRS).c $(THREAD).c $(B).c
697 -del /f $(PODDIR)\*.html
698 -del /f $(PODDIR)\*.bat
699 -del /f ..\config.sh ..\splittree.pl perlmain.c dlutils.c \
700 config.h.new perl95.c
702 -rmdir /s /q ..\lib\auto || rmdir /s ..\lib\auto
703 -rmdir /s /q $(COREDIR) || rmdir /s $(COREDIR)
705 -del /s *.lib *.def *.map *.bs Makefile *$(o) pm_to_blib
708 install : all doc utils
709 $(PERLEXE) ..\installperl
710 $(XCOPY) $(PERL95EXE) $(INST_BIN)\*.*
711 $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.*
712 $(XCOPY) bin\*.bat $(INST_BIN)\*.*
713 $(XCOPY) ..\pod\*.bat $(INST_BIN)\*.*
714 $(RCOPY) html\*.* $(INST_HTML)\*.*
716 inst_lib : $(CONFIGPM)
718 $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" "../LIB/auto"
719 $(RCOPY) ..\lib $(INST_LIB)\*.*
721 minitest : $(MINIPERL) $(GLOBEXE) $(CONFIGPM) utils
722 $(XCOPY) $(MINIPERL) ..\t\perl.exe
723 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
727 $(MINIPERL) -I..\lib test base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t
730 test-prep : all utils
731 $(XCOPY) $(PERLEXE) ..\t\$(NULL)
732 $(XCOPY) $(PERLDLL) ..\t\$(NULL)
733 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
737 $(PERLEXE) -I..\lib harness
740 test-notty : test-prep
741 set PERL_SKIP_TTY_TEST=1
743 $(PERLEXE) -I..\lib harness
756 if exist "$(MINIDIR)\$(NULL)" rmdir /s /q "$(MINIDIR)"
760 -@erase ..\*$(o) ..\*.lib ..\*.exp *$(o) *.lib *.exp
761 -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat
762 -@erase ..\x2p\*.exe ..\x2p\*.bat