xref: /vim-8.2.3635/src/Make_mvc.mak (revision 2bf24176)
1# Makefile for Vim on Win32 (Windows NT/2000/XP/2003 and Windows 95/98/Me)
2# and Win64, using the Microsoft Visual C++ compilers. Known to work with
3# VC5, VC6 (VS98), VC7.0 (VS2002), VC7.1 (VS2003), VC8 (VS2005),
4# VC9 (VS2008), VC10 (VS2010) and VC11 (VS2012)
5#
6# To build using other Windows compilers, see INSTALLpc.txt
7#
8# This makefile can build the console, GUI, OLE-enable, Perl-enabled and
9# Python-enabled versions of Vim for Win32 platforms.
10#
11# The basic command line to build Vim is:
12#
13#	nmake -f Make_mvc.mak
14#
15# This will build the console version of Vim with no additional interfaces.
16# To add features, define any of the following:
17#
18# 	For MSVC 11 you need to specify where the Win32.mak file is, e.g.:
19# 	   SDK_INCLUDE_DIR="C:\Program Files\Microsoft SDKs\Windows\v7.1\Include"
20#
21#	!!!!  After changing features do "nmake clean" first  !!!!
22#
23#	Feature Set: FEATURES=[TINY, SMALL, NORMAL, BIG, HUGE] (default is BIG)
24#
25#	GUI interface: GUI=yes (default is no)
26#
27#	GUI with DirectWrite(DirectX): DIRECTX=yes
28#	  (default is no, requires GUI=yes)
29#
30#	OLE interface: OLE=yes (usually with GUI=yes)
31#
32#	Multibyte support: MBYTE=yes (default is no)
33#
34#	IME support: IME=yes	(requires GUI=yes)
35#	  DYNAMIC_IME=[yes or no]  (to load the imm32.dll dynamically, default
36#	  is yes)
37#	Global IME support: GIME=yes (requires GUI=yes)
38#
39#	Lua interface:
40#	  LUA=[Path to Lua directory]
41#	  DYNAMIC_LUA=yes (to load the Lua DLL dynamically)
42#	  LUA_VER=[Lua version]  (default is 51)
43#
44#	MzScheme interface:
45#	  MZSCHEME=[Path to MzScheme directory]
46#	  DYNAMIC_MZSCHEME=yes (to load the MzScheme DLLs dynamically)
47#	  MZSCHEME_VER=[version, 205_000, ...]
48#	  MZSCHEME_DEBUG=no
49#
50#	Perl interface:
51#	  PERL=[Path to Perl directory]
52#	  DYNAMIC_PERL=yes (to load the Perl DLL dynamically)
53#	  PERL_VER=[Perl version, in the form 55 (5.005), 56 (5.6.x),
54#		    510 (5.10.x), etc]
55#	  (default is 56)
56#
57#	Python interface:
58#	  PYTHON=[Path to Python directory]
59#	  DYNAMIC_PYTHON=yes (to load the Python DLL dynamically)
60#	  PYTHON_VER=[Python version, eg 22, 23, ..., 27]  (default is 22)
61#
62#	Python3 interface:
63#	  PYTHON3=[Path to Python3 directory]
64#	  DYNAMIC_PYTHON3=yes (to load the Python3 DLL dynamically)
65#	  PYTHON3_VER=[Python3 version, eg 30, 31]  (default is 31)
66#
67#	Ruby interface:
68#	  RUBY=[Path to Ruby directory]
69#	  DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically)
70#	  RUBY_VER=[Ruby version, eg 18, 19, 20] (default is 18)
71#	  RUBY_VER_LONG=[Ruby version, eg 1.8, 1.9.1, 2.0.0] (default is 1.8)
72#	    You must set RUBY_VER_LONG when change RUBY_VER.
73#	    RUBY_API_VER is derived from RUBY_VER_LONG.
74#	    Note: If you use Ruby 1.9.3, set as follows:
75#	      RUBY_VER=19
76#	      RUBY_VER_LONG=1.9.1 (not 1.9.3, because the API version is 1.9.1.)
77#
78#	Tcl interface:
79#	  TCL=[Path to Tcl directory]
80#	  DYNAMIC_TCL=yes (to load the Tcl DLL dynamically)
81#	  TCL_VER=[Tcl version, e.g. 80, 83]  (default is 83)
82#	  TCL_VER_LONG=[Tcl version, eg 8.3] (default is 8.3)
83#	    You must set TCL_VER_LONG when you set TCL_VER.
84#
85#	SNiFF+ interface: SNIFF=yes
86#
87#	Cscope support: CSCOPE=yes
88#
89#	Iconv library support (always dynamically loaded):
90#	  ICONV=[yes or no]  (default is yes)
91#
92#	Intl library support (always dynamically loaded):
93#	  GETTEXT=[yes or no]  (default is yes)
94#	See http://sourceforge.net/projects/gettext/
95#
96#	PostScript printing: POSTSCRIPT=yes (default is no)
97#
98#	Netbeans Support: NETBEANS=[yes or no] (default is yes if GUI is yes)
99#
100#	XPM Image Support: XPM=[path to XPM directory]
101#	Default is "xpm", using the files included in the distribution.
102#	Use "no" to disable this feature.
103#
104#	Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
105#
106#	Processor Version: CPUNR=[i386, i486, i586, i686, pentium4] (default is
107#	i386)
108#
109#	Version Support: WINVER=[0x0400, 0x0500] (default is 0x0400)
110#
111#	Debug version: DEBUG=yes
112#	Mapfile: MAP=[no, yes or lines] (default is yes)
113#	  no:    Don't write a mapfile.
114#	  yes:   Write a normal mapfile.
115#	  lines: Write a mapfile with line numbers (only for VC6 and later)
116#
117#	Netbeans Debugging Support: NBDEBUG=[yes or no] (should be no, yes
118#	doesn't work)
119#
120#	Static Code Analysis: ANALYZE=yes (works with VS2012 only)
121#
122# You can combine any of these interfaces
123#
124# Example: To build the non-debug, GUI version with Perl interface:
125#	nmake -f Make_mvc.mak GUI=yes PERL=C:\Perl
126#
127# DEBUG with Make_mvc.mak and Make_dvc.mak:
128#	This makefile gives a fineness of control which is not supported in
129#	Visual C++ configuration files.  Therefore, debugging requires a bit of
130#	extra work.
131#	Make_dvc.mak is a Visual C++ project to access that support.  It may be
132#	badly out of date for the Visual C++ you are using...
133#	To use Make_dvc.mak:
134#	1) Build Vim with Make_mvc.mak.
135#	     Use a "DEBUG=yes" argument to build Vim with debug support.
136#	     E.g. the following builds gvimd.exe:
137#		nmake -f Make_mvc.mak debug=yes gui=yes
138#	2) Use MS Devstudio and set it up to allow that file to be debugged:
139#	    i) Pass Make_dvc.mak to the IDE.
140#		 Use the "open workspace" menu entry to load Make_dvc.mak.
141#		 Alternatively, from the command line:
142#			msdev /nologo Make_dvc.mak
143#		Note: Make_dvc.mak is in VC4.0 format. Later VC versions see
144#		this and offer to convert it to their own format. Accept that.
145#		It creates a file called Make_dvc.dsw which can then be used
146#		for further operations.  E.g.
147#		    msdev /nologo Make_dvc.dsw
148#	    ii) Set the built executable for debugging:
149#		a) Alt+F7/Debug takes you to the Debug dialog.
150#		b) Fill "Executable for debug session". e.g. gvimd.exe
151#		c) Fill "Program arguments". e.g. -R dosinst.c
152#		d) Complete the dialog
153#	3) You can now debug the executable you built with Make_mvc.mak
154#
155#	Note: Make_dvc.mak builds vimrun.exe, because it must build something
156#	to be a valid makefile..
157
158### See feature.h for a list of optionals.
159# If you want to build some optional features without modifying the source,
160# you can set DEFINES on the command line, e.g.,
161#	nmake -f Make_mvc.mvc "DEFINES=-DEMACS_TAGS"
162
163# Build on both Windows NT/XP and Windows 9x
164
165TARGETOS = BOTH
166
167# Select one of eight object code directories, depends on GUI, OLE, DEBUG and
168# interfaces.
169# If you change something else, do "make clean" first!
170!if "$(GUI)" == "yes"
171OBJDIR = .\ObjG
172!else
173OBJDIR = .\ObjC
174!endif
175!if "$(DIRECTX)" == "yes"
176OBJDIR = $(OBJDIR)X
177!endif
178!if "$(OLE)" == "yes"
179OBJDIR = $(OBJDIR)O
180!endif
181!ifdef LUA
182OBJDIR = $(OBJDIR)U
183!endif
184!ifdef PERL
185OBJDIR = $(OBJDIR)L
186!endif
187!ifdef PYTHON
188OBJDIR = $(OBJDIR)Y
189!endif
190!ifdef PYTHON3
191OBJDIR = $(OBJDIR)H
192!endif
193!ifdef TCL
194OBJDIR = $(OBJDIR)T
195!endif
196!ifdef RUBY
197OBJDIR = $(OBJDIR)R
198!endif
199!ifdef MZSCHEME
200OBJDIR = $(OBJDIR)Z
201!endif
202!if "$(DEBUG)" == "yes"
203OBJDIR = $(OBJDIR)d
204!endif
205
206# Win32.mak requires that CPU be set appropriately.
207# To cross-compile for Win64, set CPU=AMD64 or CPU=IA64.
208
209!ifdef PROCESSOR_ARCHITECTURE
210# We're on Windows NT or using VC 6+
211! ifdef CPU
212ASSEMBLY_ARCHITECTURE=$(CPU)
213# Using I386 for $ASSEMBLY_ARCHITECTURE doesn't work for VC7.
214!  if "$(CPU)" == "I386"
215CPU = i386
216!  endif
217! else  # !CPU
218CPU = i386
219!  ifdef PLATFORM
220!   if ("$(PLATFORM)" == "x64") || ("$(PLATFORM)" == "X64")
221CPU = AMD64
222!   elseif ("$(PLATFORM)" != "x86") && ("$(PLATFORM)" != "X86")
223!    error *** ERROR Unknown target platform "$(PLATFORM)". Make aborted.
224!   endif
225!  endif  # !PLATFORM
226! endif
227!else  # !PROCESSOR_ARCHITECTURE
228# We're on Windows 95
229CPU = i386
230!endif # !PROCESSOR_ARCHITECTURE
231ASSEMBLY_ARCHITECTURE=$(CPU)
232OBJDIR = $(OBJDIR)$(CPU)
233
234# Build a retail version by default
235
236!if "$(DEBUG)" != "yes"
237NODEBUG = 1
238!else
239!undef NODEBUG
240MAKEFLAGS_GVIMEXT = DEBUG=yes
241!endif
242
243
244# Get all sorts of useful, standard macros from the Platform SDK.
245
246!ifdef SDK_INCLUDE_DIR
247!include $(SDK_INCLUDE_DIR)\Win32.mak
248!else
249!include <Win32.mak>
250!endif
251
252
253# Flag to turn on Win64 compatibility warnings for VC7.x and VC8.
254WP64CHECK = /Wp64
255
256#>>>>> path of the compiler and linker; name of include and lib directories
257# PATH = c:\msvc20\bin;$(PATH)
258# INCLUDE = c:\msvc20\include
259# LIB = c:\msvc20\lib
260
261!ifndef CTAGS
262CTAGS = ctags
263!endif
264
265!if "$(SNIFF)" == "yes"
266# SNIFF - Include support for SNiFF+.
267SNIFF_INCL  = if_sniff.h
268SNIFF_OBJ   = $(OBJDIR)/if_sniff.obj
269SNIFF_LIB   = shell32.lib
270SNIFF_DEFS  = -DFEAT_SNIFF
271# The SNiFF integration needs multithreaded libraries!
272MULTITHREADED = yes
273!endif
274
275!ifndef CSCOPE
276CSCOPE = yes
277!endif
278
279!if "$(CSCOPE)" == "yes"
280# CSCOPE - Include support for Cscope
281CSCOPE_INCL  = if_cscope.h
282CSCOPE_OBJ   = $(OBJDIR)/if_cscope.obj
283CSCOPE_DEFS  = -DFEAT_CSCOPE
284!endif
285
286!ifndef NETBEANS
287NETBEANS = $(GUI)
288!endif
289
290# Only allow NETBEANS and XPM for a GUI build.
291!if "$(GUI)" == "yes"
292!if "$(NETBEANS)" == "yes"
293# NETBEANS - Include support for Netbeans integration
294NETBEANS_PRO	= proto/netbeans.pro
295NETBEANS_OBJ	= $(OBJDIR)/netbeans.obj
296NETBEANS_DEFS	= -DFEAT_NETBEANS_INTG
297
298!if "$(NBDEBUG)" == "yes"
299NBDEBUG_DEFS	= -DNBDEBUG
300NBDEBUG_INCL	= nbdebug.h
301NBDEBUG_SRC	= nbdebug.c
302!endif
303NETBEANS_LIB	= WSock32.lib
304!endif
305
306# DirectWrite(DirectX)
307!if "$(DIRECTX)" == "yes"
308DIRECTX_DEFS	= -DFEAT_DIRECTX -DDYNAMIC_DIRECTX
309DIRECTX_INCL	= gui_dwrite.h
310DIRECTX_OBJ	= $(OUTDIR)\gui_dwrite.obj
311!endif
312
313!ifndef XPM
314# XPM is not set, use the included xpm files, depending on the architecture.
315!if "$(CPU)" == "AMD64"
316XPM = xpm\x64
317!elseif "$(CPU)" == "i386"
318XPM = xpm\x86
319!else
320XPM = no
321!endif
322!endif
323!if "$(XPM)" != "no"
324# XPM - Include support for XPM signs
325# See the xpm directory for more information.
326XPM_OBJ   = $(OBJDIR)/xpm_w32.obj
327XPM_DEFS  = -DFEAT_XPM_W32
328XPM_LIB   = $(XPM)\lib\libXpm.lib
329XPM_INC	  = -I $(XPM)\include -I $(XPM)\..\include
330!endif
331!endif
332
333# Set which version of the CRT to use
334!if defined(USE_MSVCRT)
335# CVARS = $(cvarsdll)
336# !elseif defined(MULTITHREADED)
337# CVARS = $(cvarsmt)
338!else
339# CVARS = $(cvars)
340# CVARS = $(cvarsmt)
341!endif
342
343# need advapi32.lib for GetUserName()
344# need shell32.lib for ExtractIcon()
345# gdi32.lib and comdlg32.lib for printing support
346# ole32.lib and uuid.lib are needed for FEAT_SHORTCUT
347CON_LIB = oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib \
348          comdlg32.lib ole32.lib uuid.lib /machine:$(CPU)
349!if "$(DELAYLOAD)" == "yes"
350CON_LIB = $(CON_LIB) /DELAYLOAD:comdlg32.dll /DELAYLOAD:ole32.dll DelayImp.lib
351!endif
352
353### Set the default $(WINVER) to make it work with VC++7.0 (VS.NET)
354#  When set to 0x0500 ":browse" stops working.
355!ifndef WINVER
356WINVER = 0x0400
357!endif
358
359# If you have a fixed directory for $VIM or $VIMRUNTIME, other than the normal
360# default, use these lines.
361#VIMRCLOC = somewhere
362#VIMRUNTIMEDIR = somewhere
363
364CFLAGS = -c /W3 /nologo $(CVARS) -I. -Iproto -DHAVE_PATHDEF -DWIN32 \
365		$(SNIFF_DEFS) $(CSCOPE_DEFS) $(NETBEANS_DEFS) \
366		$(NBDEBUG_DEFS) $(XPM_DEFS) \
367		$(DEFINES) -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) \
368		/Fo$(OUTDIR)/
369
370#>>>>> end of choices
371###########################################################################
372
373!ifdef OS
374OS_TYPE	= winnt
375DEL_TREE = rmdir /s /q
376!else
377OS_TYPE	= win95
378DEL_TREE = deltree /y
379!endif
380
381INTDIR=$(OBJDIR)
382OUTDIR=$(OBJDIR)
383
384!if [echo MSVCVER=_MSC_VER> msvcver.c && $(CC) /EP msvcver.c > msvcver.~ 2> nul]
385!message *** ERROR
386!message Cannot run Visual C to determine its version. Make sure cl.exe is in your PATH.
387!message This can usually be done by running "vcvarsall.bat", located in the bin directory where Visual Studio was installed.
388!error Make aborted.
389!else
390!include msvcver.~
391!if [del msvcver.c msvcver.~]
392!endif
393!endif
394
395!if $(MSVCVER) < 1900
396MSVC_MAJOR = ($(MSVCVER) / 100 - 6)
397!else
398MSVC_MAJOR = ($(MSVCVER) / 100 - 5)
399!endif
400
401!if $(MSVC_MAJOR) == 6
402CPU = ix86
403!endif
404
405# Convert processor ID to MVC-compatible number
406!if $(MSVC_MAJOR) < 8
407!if "$(CPUNR)" == "i386"
408CPUARG = /G3
409!elseif "$(CPUNR)" == "i486"
410CPUARG = /G4
411!elseif "$(CPUNR)" == "i586"
412CPUARG = /G5
413!elseif "$(CPUNR)" == "i686"
414CPUARG = /G6
415!elseif "$(CPUNR)" == "pentium4"
416CPUARG = /G7 /arch:SSE2
417!else
418CPUARG =
419!endif
420!else
421# VC8/9/10 only allows specifying SSE architecture but only for 32bit
422!if "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "pentium4"
423CPUARG = /arch:SSE2
424!endif
425!endif
426
427LIBC =
428DEBUGINFO = /Zi
429
430# Don't use /nodefaultlib on MSVC 14
431!if $(MSVC_MAJOR) >= 14
432NODEFAULTLIB =
433!else
434NODEFAULTLIB = /nodefaultlib
435!endif
436
437!ifdef NODEBUG
438VIM = vim
439!if "$(OPTIMIZE)" == "SPACE"
440OPTFLAG = /O1
441!elseif "$(OPTIMIZE)" == "SPEED"
442OPTFLAG = /O2
443!else # MAXSPEED
444OPTFLAG = /Ox
445!endif
446
447!if $(MSVC_MAJOR) >= 8
448# Use link time code generation if not worried about size
449!if "$(OPTIMIZE)" != "SPACE"
450OPTFLAG = $(OPTFLAG) /GL
451!endif
452!endif
453
454# (/Wp64 is deprecated in VC9 and generates an obnoxious warning.)
455!if ($(MSVC_MAJOR) == 7) || ($(MSVC_MAJOR) == 8)
456CFLAGS=$(CFLAGS) $(WP64CHECK)
457!endif
458
459# Static code analysis generally available starting with VS2012 (VC11) or
460# Windows SDK 7.1 (VC10)
461!if ("$(ANALYZE)" == "yes") && ($(MSVC_MAJOR) >= 10)
462CFLAGS=$(CFLAGS) /analyze
463!endif
464
465CFLAGS = $(CFLAGS) $(OPTFLAG) -DNDEBUG $(CPUARG)
466RCFLAGS = $(rcflags) $(rcvars) -DNDEBUG
467! ifdef USE_MSVCRT
468CFLAGS = $(CFLAGS) /MD
469LIBC = msvcrt.lib
470! else
471LIBC = libcmt.lib
472CFLAGS = $(CFLAGS) /Zl /MT
473! endif
474!else  # DEBUG
475VIM = vimd
476! if ("$(CPU)" == "i386") || ("$(CPU)" == "ix86")
477DEBUGINFO = /ZI
478! endif
479CFLAGS = $(CFLAGS) -D_DEBUG -DDEBUG /Od
480RCFLAGS = $(rcflags) $(rcvars) -D_DEBUG -DDEBUG
481# The /fixed:no is needed for Quantify. Assume not 4.? as unsupported in VC4.0.
482! if $(MSVC_MAJOR) == 4
483LIBC =
484! else
485LIBC = /fixed:no
486! endif
487! ifdef USE_MSVCRT
488CFLAGS = $(CFLAGS) /MDd
489LIBC = $(LIBC) msvcrtd.lib
490! else
491LIBC = $(LIBC) libcmtd.lib
492CFLAGS = $(CFLAGS) /Zl /MTd
493! endif
494!endif # DEBUG
495
496INCL =	vim.h os_win32.h ascii.h feature.h globals.h keymap.h macros.h \
497	proto.h option.h structs.h term.h $(SNIFF_INCL) $(CSCOPE_INCL) \
498	$(NBDEBUG_INCL)
499
500OBJ = \
501	$(OUTDIR)\blowfish.obj \
502	$(OUTDIR)\buffer.obj \
503	$(OUTDIR)\charset.obj \
504	$(OUTDIR)\crypt.obj \
505	$(OUTDIR)\crypt_zip.obj \
506	$(OUTDIR)\diff.obj \
507	$(OUTDIR)\digraph.obj \
508	$(OUTDIR)\edit.obj \
509	$(OUTDIR)\eval.obj \
510	$(OUTDIR)\ex_cmds.obj \
511	$(OUTDIR)\ex_cmds2.obj \
512	$(OUTDIR)\ex_docmd.obj \
513	$(OUTDIR)\ex_eval.obj \
514	$(OUTDIR)\ex_getln.obj \
515	$(OUTDIR)\fileio.obj \
516	$(OUTDIR)\fold.obj \
517	$(OUTDIR)\getchar.obj \
518	$(OUTDIR)\hardcopy.obj \
519	$(OUTDIR)\hashtab.obj \
520	$(OUTDIR)\main.obj \
521	$(OUTDIR)\mark.obj \
522	$(OUTDIR)\mbyte.obj \
523	$(OUTDIR)\memfile.obj \
524	$(OUTDIR)\memline.obj \
525	$(OUTDIR)\menu.obj \
526	$(OUTDIR)\message.obj \
527	$(OUTDIR)\misc1.obj \
528	$(OUTDIR)\misc2.obj \
529	$(OUTDIR)\move.obj \
530	$(OUTDIR)\normal.obj \
531	$(OUTDIR)\ops.obj \
532	$(OUTDIR)\option.obj \
533	$(OUTDIR)\os_mswin.obj \
534	$(OUTDIR)\winclip.obj \
535	$(OUTDIR)\os_win32.obj \
536	$(OUTDIR)\pathdef.obj \
537	$(OUTDIR)\popupmnu.obj \
538	$(OUTDIR)\quickfix.obj \
539	$(OUTDIR)\regexp.obj \
540	$(OUTDIR)\screen.obj \
541	$(OUTDIR)\search.obj \
542	$(OUTDIR)\sha256.obj \
543	$(OUTDIR)\spell.obj \
544	$(OUTDIR)\syntax.obj \
545	$(OUTDIR)\tag.obj \
546	$(OUTDIR)\term.obj \
547	$(OUTDIR)\ui.obj \
548	$(OUTDIR)\undo.obj \
549	$(OUTDIR)\window.obj \
550	$(OUTDIR)\vim.res
551
552!if "$(OLE)" == "yes"
553CFLAGS = $(CFLAGS) -DFEAT_OLE
554RCFLAGS = $(RCFLAGS) -DFEAT_OLE
555OLE_OBJ = $(OUTDIR)\if_ole.obj
556OLE_IDL = if_ole.idl
557OLE_LIB = oleaut32.lib
558!endif
559
560!if "$(IME)" == "yes"
561CFLAGS = $(CFLAGS) -DFEAT_MBYTE_IME
562!ifndef DYNAMIC_IME
563DYNAMIC_IME = yes
564!endif
565!if "$(DYNAMIC_IME)" == "yes"
566CFLAGS = $(CFLAGS) -DDYNAMIC_IME
567!else
568IME_LIB = imm32.lib
569!endif
570!endif
571
572!if "$(GIME)" == "yes"
573CFLAGS = $(CFLAGS) -DGLOBAL_IME
574OBJ = $(OBJ) $(OUTDIR)\dimm_i.obj $(OUTDIR)\glbl_ime.obj
575MBYTE = yes
576!endif
577
578!if "$(MBYTE)" == "yes"
579CFLAGS = $(CFLAGS) -DFEAT_MBYTE
580!endif
581
582!if "$(GUI)" == "yes"
583SUBSYSTEM = windows
584CFLAGS = $(CFLAGS) -DFEAT_GUI_W32
585RCFLAGS = $(RCFLAGS) -DFEAT_GUI_W32
586VIM = g$(VIM)
587GUI_INCL = \
588	gui.h \
589	regexp.h \
590	ascii.h \
591	ex_cmds.h \
592	farsi.h \
593	feature.h \
594	globals.h \
595	gui_beval.h \
596	keymap.h \
597	macros.h \
598	option.h \
599	os_dos.h \
600	os_win32.h
601GUI_OBJ = \
602	$(OUTDIR)\gui.obj \
603	$(OUTDIR)\gui_beval.obj \
604	$(OUTDIR)\gui_w32.obj \
605	$(OUTDIR)\os_w32exe.obj
606GUI_LIB = \
607	gdi32.lib version.lib $(IME_LIB) \
608	winspool.lib comctl32.lib advapi32.lib shell32.lib \
609	/machine:$(CPU)
610!else
611SUBSYSTEM = console
612!endif
613
614!if "$(SUBSYSTEM_VER)" != ""
615SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER)
616!endif
617
618!if "$(GUI)" == "yes" && "$(DIRECTX)" == "yes"
619CFLAGS = $(CFLAGS) $(DIRECTX_DEFS)
620GUI_INCL = $(GUI_INCL) $(DIRECTX_INCL)
621GUI_OBJ = $(GUI_OBJ) $(DIRECTX_OBJ)
622!endif
623
624# iconv.dll library (dynamically loaded)
625!ifndef ICONV
626ICONV = yes
627!endif
628!if "$(ICONV)" == "yes"
629CFLAGS = $(CFLAGS) -DDYNAMIC_ICONV
630!endif
631
632# libintl.dll library
633!ifndef GETTEXT
634GETTEXT = yes
635!endif
636!if "$(GETTEXT)" == "yes"
637CFLAGS = $(CFLAGS) -DDYNAMIC_GETTEXT
638!endif
639
640# TCL interface
641!ifdef TCL
642!ifndef TCL_VER
643TCL_VER = 83
644TCL_VER_LONG = 8.3
645!endif
646!message Tcl requested (version $(TCL_VER)) - root dir is "$(TCL)"
647!if "$(DYNAMIC_TCL)" == "yes"
648!message Tcl DLL will be loaded dynamically
649TCL_DLL = tcl$(TCL_VER).dll
650CFLAGS  = $(CFLAGS) -DFEAT_TCL -DDYNAMIC_TCL -DDYNAMIC_TCL_DLL=\"$(TCL_DLL)\" \
651		-DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
652TCL_OBJ	= $(OUTDIR)\if_tcl.obj
653TCL_INC	= /I "$(TCL)\Include" /I "$(TCL)"
654TCL_LIB = "$(TCL)\lib\tclstub$(TCL_VER).lib"
655!else
656CFLAGS  = $(CFLAGS) -DFEAT_TCL
657TCL_OBJ	= $(OUTDIR)\if_tcl.obj
658TCL_INC	= /I "$(TCL)\Include" /I "$(TCL)"
659TCL_LIB = $(TCL)\lib\tcl$(TCL_VER)vc.lib
660!endif
661!endif
662
663# Lua interface
664!ifdef LUA
665!ifndef LUA_VER
666LUA_VER = 51
667!endif
668!message Lua requested (version $(LUA_VER)) - root dir is "$(LUA)"
669!if "$(DYNAMIC_LUA)" == "yes"
670!message Lua DLL will be loaded dynamically
671!endif
672CFLAGS = $(CFLAGS) -DFEAT_LUA
673LUA_OBJ = $(OUTDIR)\if_lua.obj
674LUA_INC = /I "$(LUA)\include" /I "$(LUA)"
675!if "$(DYNAMIC_LUA)" == "yes"
676CFLAGS = $(CFLAGS) -DDYNAMIC_LUA \
677		-DDYNAMIC_LUA_DLL=\"lua$(LUA_VER).dll\"
678LUA_LIB = /nodefaultlib:lua$(LUA_VER).lib
679!else
680LUA_LIB = "$(LUA)\lib\lua$(LUA_VER).lib"
681!endif
682!endif
683
684!ifdef PYTHON
685!ifdef PYTHON3
686DYNAMIC_PYTHON=yes
687DYNAMIC_PYTHON3=yes
688!endif
689!endif
690
691# PYTHON interface
692!ifdef PYTHON
693!ifndef PYTHON_VER
694PYTHON_VER = 22
695!endif
696!message Python requested (version $(PYTHON_VER)) - root dir is "$(PYTHON)"
697!if "$(DYNAMIC_PYTHON)" == "yes"
698!message Python DLL will be loaded dynamically
699!endif
700CFLAGS = $(CFLAGS) -DFEAT_PYTHON
701PYTHON_OBJ = $(OUTDIR)\if_python.obj
702PYTHON_INC = /I "$(PYTHON)\Include" /I "$(PYTHON)\PC"
703!if "$(DYNAMIC_PYTHON)" == "yes"
704CFLAGS = $(CFLAGS) -DDYNAMIC_PYTHON \
705		-DDYNAMIC_PYTHON_DLL=\"python$(PYTHON_VER).dll\"
706PYTHON_LIB = /nodefaultlib:python$(PYTHON_VER).lib
707!else
708PYTHON_LIB = $(PYTHON)\libs\python$(PYTHON_VER).lib
709!endif
710!endif
711
712# PYTHON3 interface
713!ifdef PYTHON3
714!ifndef PYTHON3_VER
715PYTHON3_VER = 31
716!endif
717!message Python3 requested (version $(PYTHON3_VER)) - root dir is "$(PYTHON3)"
718!if "$(DYNAMIC_PYTHON3)" == "yes"
719!message Python3 DLL will be loaded dynamically
720!endif
721CFLAGS = $(CFLAGS) -DFEAT_PYTHON3
722PYTHON3_OBJ = $(OUTDIR)\if_python3.obj
723PYTHON3_INC = /I "$(PYTHON3)\Include" /I "$(PYTHON3)\PC"
724!if "$(DYNAMIC_PYTHON3)" == "yes"
725CFLAGS = $(CFLAGS) -DDYNAMIC_PYTHON3 \
726		-DDYNAMIC_PYTHON3_DLL=\"python$(PYTHON3_VER).dll\"
727PYTHON3_LIB = /nodefaultlib:python$(PYTHON3_VER).lib
728!else
729PYTHON3_LIB = $(PYTHON3)\libs\python$(PYTHON3_VER).lib
730!endif
731!endif
732
733# MzScheme interface
734!ifdef MZSCHEME
735!message MzScheme requested - root dir is "$(MZSCHEME)"
736!ifndef MZSCHEME_VER
737MZSCHEME_VER = 205_000
738!endif
739CFLAGS = $(CFLAGS) -DFEAT_MZSCHEME -I $(MZSCHEME)\include
740!if EXIST("$(MZSCHEME)\collects\scheme\base.ss") \
741      	|| EXIST("$(MZSCHEME)\collects\scheme\base.rkt") \
742      	|| EXIST("$(MZSCHEME)\collects\racket\base.rkt")
743# for MzScheme >= 4 we need to include byte code for basic Scheme stuff
744MZSCHEME_EXTRA_DEP = mzscheme_base.c
745CFLAGS = $(CFLAGS) -DINCLUDE_MZSCHEME_BASE
746!endif
747!if EXIST("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib")
748MZSCHEME_MAIN_LIB=mzsch
749!else
750MZSCHEME_MAIN_LIB=racket
751!endif
752!if EXIST("$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib") \
753	&& !EXIST("$(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib")
754!message Building with Precise GC
755MZSCHEME_PRECISE_GC = yes
756CFLAGS = $(CFLAGS) -DMZ_PRECISE_GC
757!endif
758!if "$(DYNAMIC_MZSCHEME)" == "yes"
759!if "$(MZSCHEME_PRECISE_GC)" == "yes"
760!error MzScheme with Precise GC cannot be loaded dynamically
761!endif
762!message MzScheme DLLs will be loaded dynamically
763CFLAGS = $(CFLAGS) -DDYNAMIC_MZSCHEME \
764		-DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" \
765		-DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
766!else
767!if "$(MZSCHEME_DEBUG)" == "yes"
768CFLAGS = $(CFLAGS) -DMZSCHEME_FORCE_GC
769!endif
770!if "$(MZSCHEME_PRECISE_GC)" == "yes"
771# Precise GC does not use separate dll
772MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib
773!else
774MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib \
775		$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib
776!endif
777!endif
778MZSCHEME_OBJ = $(OUTDIR)\if_mzsch.obj
779# increase stack size
780MZSCHEME_LIB = $(MZSCHEME_LIB) /STACK:8388608
781!endif
782
783# Perl interface
784!ifdef PERL
785!ifndef PERL_VER
786PERL_VER = 56
787!endif
788!message Perl requested (version $(PERL_VER)) - root dir is "$(PERL)"
789!if "$(DYNAMIC_PERL)" == "yes"
790!if $(PERL_VER) >= 56
791!message Perl DLL will be loaded dynamically
792!else
793!message Dynamic loading is not supported for Perl versions earlier than 5.6.0
794!message Reverting to static loading...
795!undef DYNAMIC_PERL
796!endif
797!endif
798
799# Is Perl installed in architecture-specific directories?
800!if exist($(PERL)\Bin\MSWin32-x86)
801PERL_ARCH = \MSWin32-x86
802!endif
803
804PERL_INCDIR = $(PERL)\Lib$(PERL_ARCH)\Core
805
806# Version-dependent stuff
807!if $(PERL_VER) == 55
808PERL_LIB = $(PERL_INCDIR)\perl.lib
809!else
810PERL_DLL = perl$(PERL_VER).dll
811!if exist($(PERL_INCDIR)\perl$(PERL_VER).lib)
812PERL_LIB = $(PERL_INCDIR)\perl$(PERL_VER).lib
813!else
814# For ActivePerl 5.18 and later
815PERL_LIB = $(PERL_INCDIR)\libperl$(PERL_VER).a
816!endif
817!endif
818
819CFLAGS = $(CFLAGS) -DFEAT_PERL -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS
820
821# Do we want to load Perl dynamically?
822!if "$(DYNAMIC_PERL)" == "yes"
823CFLAGS = $(CFLAGS) -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"$(PERL_DLL)\"
824!undef PERL_LIB
825!endif
826
827PERL_EXE = $(PERL)\Bin$(PERL_ARCH)\perl
828PERL_INC = /I $(PERL_INCDIR)
829!if $(MSVC_MAJOR) <= 11
830# ActivePerl 5.20+ requires stdbool.h but VC2012 or earlier doesn't have it.
831# Use a stub stdbool.h.
832PERL_INC = $(PERL_INC) /I if_perl_msvc
833!endif
834PERL_OBJ = $(OUTDIR)\if_perl.obj $(OUTDIR)\if_perlsfio.obj
835XSUBPP = $(PERL)\lib\ExtUtils\xsubpp
836!if exist($(XSUBPP))
837XSUBPP = $(PERL_EXE) $(XSUBPP)
838!else
839XSUBPP = xsubpp
840!endif
841XSUBPP_TYPEMAP = $(PERL)\lib\ExtUtils\typemap
842
843!endif
844
845#
846# Support Ruby interface
847#
848!ifdef RUBY
849#  Set default value
850!ifndef RUBY_VER
851RUBY_VER = 18
852!endif
853!ifndef RUBY_VER_LONG
854RUBY_VER_LONG = 1.8
855!endif
856!ifndef RUBY_API_VER
857RUBY_API_VER = $(RUBY_VER_LONG:.=)
858!endif
859
860!if $(RUBY_VER) >= 18
861!ifndef RUBY_PLATFORM
862RUBY_PLATFORM = i386-mswin32
863!endif
864!ifndef RUBY_INSTALL_NAME
865RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
866!endif
867!else
868!ifndef RUBY_PLATFORM
869RUBY_PLATFORM = i586-mswin32
870!endif
871!ifndef RUBY_INSTALL_NAME
872RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
873!endif
874!endif # $(RUBY_VER) >= 18
875
876!message Ruby requested (version $(RUBY_VER)) - root dir is "$(RUBY)"
877CFLAGS = $(CFLAGS) -DFEAT_RUBY
878RUBY_OBJ = $(OUTDIR)\if_ruby.obj
879!if $(RUBY_VER) >= 19
880RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)\$(RUBY_PLATFORM)"
881!else
882RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM)"
883!endif
884RUBY_LIB = $(RUBY)\lib\$(RUBY_INSTALL_NAME).lib
885# Do we want to load Ruby dynamically?
886!if "$(DYNAMIC_RUBY)" == "yes"
887!message Ruby DLL will be loaded dynamically
888CFLAGS = $(CFLAGS) -DDYNAMIC_RUBY -DDYNAMIC_RUBY_VER=$(RUBY_VER) \
889		-DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\"
890!undef RUBY_LIB
891!endif
892!endif # RUBY
893
894#
895# Support PostScript printing
896#
897!if "$(POSTSCRIPT)" == "yes"
898CFLAGS = $(CFLAGS) -DMSWINPS
899!endif # POSTSCRIPT
900
901#
902# FEATURES: TINY, SMALL, NORMAL, BIG or HUGE
903#
904!if "$(FEATURES)"==""
905FEATURES = BIG
906!endif
907CFLAGS = $(CFLAGS) -DFEAT_$(FEATURES)
908
909#
910# Always generate the .pdb file, so that we get debug symbols that can be used
911# on a crash (doesn't add overhead to the executable).
912# Generate edit-and-continue debug info when no optimization - allows to
913# debug more conveniently (able to look at variables which are in registers)
914#
915CFLAGS = $(CFLAGS) /Fd$(OUTDIR)/ $(DEBUGINFO)
916LINK_PDB = /PDB:$(VIM).pdb -debug
917
918#
919# End extra feature include
920#
921!message
922
923conflags = /nologo /subsystem:$(SUBSYSTEM)
924
925PATHDEF_SRC = $(OUTDIR)\pathdef.c
926
927!IF "$(MAP)" == "yes"
928# "/map" is for debugging
929conflags = $(conflags) /map
930!ELSEIF "$(MAP)" == "lines"
931# "/mapinfo:lines" is for debugging, only works for VC6 and later
932conflags = $(conflags) /map /mapinfo:lines
933!ENDIF
934
935LINKARGS1 = $(linkdebug) $(conflags)
936LINKARGS2 = $(CON_LIB) $(GUI_LIB) $(NODEFAULTLIB) $(LIBC) $(OLE_LIB) user32.lib $(SNIFF_LIB) \
937		$(LUA_LIB) $(MZSCHEME_LIB) $(PERL_LIB) $(PYTHON_LIB) $(PYTHON3_LIB) $(RUBY_LIB) \
938		$(TCL_LIB) $(NETBEANS_LIB) $(XPM_LIB) $(LINK_PDB)
939
940# Report link time code generation progress if used.
941!ifdef NODEBUG
942!if $(MSVC_MAJOR) >= 8
943!if "$(OPTIMIZE)" != "SPACE"
944LINKARGS1 = $(LINKARGS1) /LTCG:STATUS
945!endif
946!endif
947!endif
948
949all:	$(VIM).exe vimrun.exe install.exe uninstal.exe xxd/xxd.exe \
950		GvimExt/gvimext.dll
951
952$(VIM).exe: $(OUTDIR) $(OBJ) $(GUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \
953		$(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
954		$(SNIFF_OBJ) $(CSCOPE_OBJ) $(NETBEANS_OBJ) $(XPM_OBJ) \
955		version.c version.h
956	$(CC) $(CFLAGS) version.c
957	$(link) $(LINKARGS1) -out:$(VIM).exe $(OBJ) $(GUI_OBJ) $(OLE_OBJ) \
958		$(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) \
959		$(TCL_OBJ) $(SNIFF_OBJ) $(CSCOPE_OBJ) $(NETBEANS_OBJ) \
960		$(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
961	if exist $(VIM).exe.manifest mt.exe -nologo -manifest $(VIM).exe.manifest -updateresource:$(VIM).exe;1
962
963$(VIM): $(VIM).exe
964
965$(OUTDIR):
966	if not exist $(OUTDIR)/nul  mkdir $(OUTDIR)
967
968install.exe: dosinst.c
969	$(CC) /nologo -DNDEBUG -DWIN32 dosinst.c kernel32.lib shell32.lib \
970		user32.lib ole32.lib advapi32.lib uuid.lib
971	- if exist install.exe del install.exe
972	ren dosinst.exe install.exe
973
974uninstal.exe: uninstal.c
975	$(CC) /nologo -DNDEBUG -DWIN32 uninstal.c shell32.lib advapi32.lib
976
977vimrun.exe: vimrun.c
978	$(CC) /nologo -DNDEBUG vimrun.c
979
980xxd/xxd.exe: xxd/xxd.c
981	cd xxd
982	$(MAKE) /NOLOGO -f Make_mvc.mak
983	cd ..
984
985GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
986	cd GvimExt
987	$(MAKE) /NOLOGO -f Makefile $(MAKEFLAGS_GVIMEXT)
988	cd ..
989
990
991tags: notags
992	$(CTAGS) *.c *.cpp *.h if_perl.xs proto\*.pro
993
994notags:
995	- if exist tags del tags
996
997clean:
998	- if exist $(OUTDIR)/nul $(DEL_TREE) $(OUTDIR)
999	- if exist *.obj del *.obj
1000	- if exist $(VIM).exe del $(VIM).exe
1001	- if exist $(VIM).ilk del $(VIM).ilk
1002	- if exist $(VIM).pdb del $(VIM).pdb
1003	- if exist $(VIM).map del $(VIM).map
1004	- if exist $(VIM).ncb del $(VIM).ncb
1005	- if exist vimrun.exe del vimrun.exe
1006	- if exist install.exe del install.exe
1007	- if exist uninstal.exe del uninstal.exe
1008	- if exist if_perl.c del if_perl.c
1009	- if exist dimm.h del dimm.h
1010	- if exist dimm_i.c del dimm_i.c
1011	- if exist dimm.tlb del dimm.tlb
1012	- if exist dosinst.exe del dosinst.exe
1013	- if exist mzscheme_base.c del mzscheme_base.c
1014	cd xxd
1015	$(MAKE) /NOLOGO -f Make_mvc.mak clean
1016	cd ..
1017	cd GvimExt
1018	$(MAKE) /NOLOGO -f Makefile clean
1019	cd ..
1020	cd GvimExt
1021	$(MAKE) /NOLOGO -f Makefile clean
1022	cd ..
1023	- if exist testdir\*.out del testdir\*.out
1024
1025test:
1026	cd testdir
1027	$(MAKE) /NOLOGO -f Make_dos.mak win32
1028	cd ..
1029
1030testclean:
1031	cd testdir
1032	$(MAKE) /NOLOGO -f Make_dos.mak clean
1033	cd ..
1034
1035###########################################################################
1036
1037# Create a default rule for transforming .c files to .obj files in $(OUTDIR)
1038# Batch compilation is supported by nmake 1.62 (part of VS 5.0) and later)
1039!IF "$(_NMAKE_VER)" == ""
1040.c{$(OUTDIR)/}.obj:
1041!ELSE
1042.c{$(OUTDIR)/}.obj::
1043!ENDIF
1044	$(CC) $(CFLAGS) $<
1045
1046# Create a default rule for transforming .cpp files to .obj files in $(OUTDIR)
1047# Batch compilation is supported by nmake 1.62 (part of VS 5.0) and later)
1048!IF "$(_NMAKE_VER)" == ""
1049.cpp{$(OUTDIR)/}.obj:
1050!ELSE
1051.cpp{$(OUTDIR)/}.obj::
1052!ENDIF
1053	$(CC) $(CFLAGS) $<
1054
1055$(OUTDIR)/blowfish.obj:	$(OUTDIR) blowfish.c  $(INCL)
1056
1057$(OUTDIR)/buffer.obj:	$(OUTDIR) buffer.c  $(INCL)
1058
1059$(OUTDIR)/charset.obj:	$(OUTDIR) charset.c  $(INCL)
1060
1061$(OUTDIR)/crypt.obj:	$(OUTDIR) crypt.c  $(INCL)
1062
1063$(OUTDIR)/crypt_zip.obj: $(OUTDIR) crypt_zip.c  $(INCL)
1064
1065$(OUTDIR)/diff.obj:	$(OUTDIR) diff.c  $(INCL)
1066
1067$(OUTDIR)/digraph.obj:	$(OUTDIR) digraph.c  $(INCL)
1068
1069$(OUTDIR)/edit.obj:	$(OUTDIR) edit.c  $(INCL)
1070
1071$(OUTDIR)/eval.obj:	$(OUTDIR) eval.c  $(INCL)
1072
1073$(OUTDIR)/ex_cmds.obj:	$(OUTDIR) ex_cmds.c  $(INCL)
1074
1075$(OUTDIR)/ex_cmds2.obj:	$(OUTDIR) ex_cmds2.c  $(INCL)
1076
1077$(OUTDIR)/ex_docmd.obj:	$(OUTDIR) ex_docmd.c  $(INCL) ex_cmds.h
1078
1079$(OUTDIR)/ex_eval.obj:	$(OUTDIR) ex_eval.c  $(INCL) ex_cmds.h
1080
1081$(OUTDIR)/ex_getln.obj:	$(OUTDIR) ex_getln.c  $(INCL)
1082
1083$(OUTDIR)/fileio.obj:	$(OUTDIR) fileio.c  $(INCL)
1084
1085$(OUTDIR)/fold.obj:	$(OUTDIR) fold.c  $(INCL)
1086
1087$(OUTDIR)/getchar.obj:	$(OUTDIR) getchar.c  $(INCL)
1088
1089$(OUTDIR)/hardcopy.obj:	$(OUTDIR) hardcopy.c  $(INCL)
1090
1091$(OUTDIR)/hashtab.obj:	$(OUTDIR) hashtab.c  $(INCL)
1092
1093$(OUTDIR)/gui.obj:	$(OUTDIR) gui.c  $(INCL) $(GUI_INCL)
1094
1095$(OUTDIR)/gui_beval.obj:	$(OUTDIR) gui_beval.c $(INCL) $(GUI_INCL)
1096
1097$(OUTDIR)/gui_w32.obj:	$(OUTDIR) gui_w32.c gui_w48.c $(INCL) $(GUI_INCL)
1098
1099$(OUTDIR)/gui_dwrite.obj:	$(OUTDIR) gui_dwrite.cpp $(INCL) $(GUI_INCL)
1100
1101$(OUTDIR)/if_cscope.obj: $(OUTDIR) if_cscope.c  $(INCL)
1102
1103$(OUTDIR)/if_lua.obj: $(OUTDIR) if_lua.c  $(INCL)
1104	$(CC) $(CFLAGS) $(LUA_INC) if_lua.c
1105
1106if_perl.c : if_perl.xs typemap
1107	$(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
1108		-typemap typemap if_perl.xs > if_perl.c
1109
1110$(OUTDIR)/if_perl.obj: $(OUTDIR) if_perl.c  $(INCL)
1111	$(CC) $(CFLAGS) $(PERL_INC) if_perl.c
1112
1113$(OUTDIR)/if_perlsfio.obj: $(OUTDIR) if_perlsfio.c  $(INCL)
1114	$(CC) $(CFLAGS) $(PERL_INC) if_perlsfio.c
1115
1116$(OUTDIR)/if_mzsch.obj: $(OUTDIR) if_mzsch.c if_mzsch.h $(INCL) $(MZSCHEME_EXTRA_DEP)
1117	$(CC) $(CFLAGS) if_mzsch.c \
1118		-DMZSCHEME_COLLECTS=\"$(MZSCHEME:\=\\)\\collects\"
1119mzscheme_base.c:
1120!IF "$(MZSCHEME_MAIN_LIB)" == "racket"
1121	$(MZSCHEME)\raco ctool --c-mods mzscheme_base.c ++lib scheme/base
1122!ELSE
1123	$(MZSCHEME)\mzc --c-mods mzscheme_base.c ++lib scheme/base
1124!ENDIF
1125
1126$(OUTDIR)/if_python.obj: $(OUTDIR) if_python.c if_py_both.h $(INCL)
1127	$(CC) $(CFLAGS) $(PYTHON_INC) if_python.c
1128
1129$(OUTDIR)/if_python3.obj: $(OUTDIR) if_python3.c if_py_both.h $(INCL)
1130	$(CC) $(CFLAGS) $(PYTHON3_INC) if_python3.c
1131
1132$(OUTDIR)/if_ole.obj: $(OUTDIR) if_ole.cpp  $(INCL) if_ole.h
1133
1134$(OUTDIR)/if_ruby.obj: $(OUTDIR) if_ruby.c  $(INCL)
1135	$(CC) $(CFLAGS) $(RUBY_INC) if_ruby.c
1136
1137$(OUTDIR)/if_sniff.obj:	$(OUTDIR) if_sniff.c  $(INCL)
1138	$(CC) $(CFLAGS) if_sniff.c
1139
1140$(OUTDIR)/if_tcl.obj: $(OUTDIR) if_tcl.c  $(INCL)
1141	$(CC) $(CFLAGS) $(TCL_INC) if_tcl.c
1142
1143$(OUTDIR)/main.obj:	$(OUTDIR) main.c  $(INCL)
1144
1145$(OUTDIR)/mark.obj:	$(OUTDIR) mark.c  $(INCL)
1146
1147$(OUTDIR)/memfile.obj:	$(OUTDIR) memfile.c  $(INCL)
1148
1149$(OUTDIR)/memline.obj:	$(OUTDIR) memline.c  $(INCL)
1150
1151$(OUTDIR)/menu.obj:	$(OUTDIR) menu.c  $(INCL)
1152
1153$(OUTDIR)/message.obj:	$(OUTDIR) message.c  $(INCL)
1154
1155$(OUTDIR)/misc1.obj:	$(OUTDIR) misc1.c  $(INCL)
1156
1157$(OUTDIR)/misc2.obj:	$(OUTDIR) misc2.c  $(INCL)
1158
1159$(OUTDIR)/move.obj:	$(OUTDIR) move.c  $(INCL)
1160
1161$(OUTDIR)/mbyte.obj: $(OUTDIR) mbyte.c  $(INCL)
1162
1163$(OUTDIR)/netbeans.obj: $(OUTDIR) netbeans.c $(NBDEBUG_SRC) $(INCL)
1164
1165$(OUTDIR)/normal.obj:	$(OUTDIR) normal.c  $(INCL)
1166
1167$(OUTDIR)/option.obj:	$(OUTDIR) option.c  $(INCL)
1168
1169$(OUTDIR)/ops.obj:	$(OUTDIR) ops.c  $(INCL)
1170
1171$(OUTDIR)/os_mswin.obj:	$(OUTDIR) os_mswin.c  $(INCL)
1172
1173$(OUTDIR)/winclip.obj:	$(OUTDIR) winclip.c  $(INCL)
1174
1175$(OUTDIR)/os_win32.obj:	$(OUTDIR) os_win32.c  $(INCL) os_win32.h
1176
1177$(OUTDIR)/os_w32exe.obj:	$(OUTDIR) os_w32exe.c  $(INCL)
1178
1179$(OUTDIR)/pathdef.obj:	$(OUTDIR) $(PATHDEF_SRC) $(INCL)
1180	$(CC) $(CFLAGS) $(PATHDEF_SRC)
1181
1182$(OUTDIR)/popupmnu.obj:	$(OUTDIR) popupmnu.c  $(INCL)
1183
1184$(OUTDIR)/quickfix.obj:	$(OUTDIR) quickfix.c  $(INCL)
1185
1186$(OUTDIR)/regexp.obj:	$(OUTDIR) regexp.c regexp_nfa.c  $(INCL)
1187
1188$(OUTDIR)/screen.obj:	$(OUTDIR) screen.c  $(INCL)
1189
1190$(OUTDIR)/search.obj:	$(OUTDIR) search.c  $(INCL)
1191
1192$(OUTDIR)/sha256.obj:	$(OUTDIR) sha256.c  $(INCL)
1193
1194$(OUTDIR)/spell.obj:	$(OUTDIR) spell.c  $(INCL)
1195
1196$(OUTDIR)/syntax.obj:	$(OUTDIR) syntax.c  $(INCL)
1197
1198$(OUTDIR)/tag.obj:	$(OUTDIR) tag.c  $(INCL)
1199
1200$(OUTDIR)/term.obj:	$(OUTDIR) term.c  $(INCL)
1201
1202$(OUTDIR)/ui.obj:	$(OUTDIR) ui.c  $(INCL)
1203
1204$(OUTDIR)/undo.obj:	$(OUTDIR) undo.c  $(INCL)
1205
1206$(OUTDIR)/window.obj:	$(OUTDIR) window.c  $(INCL)
1207
1208$(OUTDIR)/xpm_w32.obj: $(OUTDIR) xpm_w32.c
1209	$(CC) $(CFLAGS) $(XPM_INC) xpm_w32.c
1210
1211$(OUTDIR)/vim.res:	$(OUTDIR) vim.rc gvim.exe.mnf version.h tools.bmp \
1212				tearoff.bmp vim.ico vim_error.ico \
1213				vim_alert.ico vim_info.ico vim_quest.ico
1214	$(RC) /l 0x409 /Fo$(OUTDIR)/vim.res $(RCFLAGS) vim.rc
1215
1216iid_ole.c if_ole.h vim.tlb: if_ole.idl
1217	midl /nologo /error none /proxy nul /iid iid_ole.c /tlb vim.tlb \
1218		/header if_ole.h if_ole.idl
1219
1220dimm.h dimm_i.c: dimm.idl
1221	midl /nologo /error none /proxy nul dimm.idl
1222
1223$(OUTDIR)/dimm_i.obj: $(OUTDIR) dimm_i.c $(INCL)
1224
1225$(OUTDIR)/glbl_ime.obj:	$(OUTDIR) glbl_ime.cpp  dimm.h $(INCL)
1226
1227# $CFLAGS may contain backslashes and double quotes, escape them both.
1228E0_CFLAGS = $(CFLAGS:\=\\)
1229E_CFLAGS = $(E0_CFLAGS:"=\")
1230# ") stop the string
1231# $LINKARGS2 may contain backslashes and double quotes, escape them both.
1232E0_LINKARGS2 = $(LINKARGS2:\=\\)
1233E_LINKARGS2 = $(E0_LINKARGS2:"=\")
1234# ") stop the string
1235
1236$(PATHDEF_SRC): auto
1237	@echo creating $(PATHDEF_SRC)
1238	@echo /* pathdef.c */ > $(PATHDEF_SRC)
1239	@echo #include "vim.h" >> $(PATHDEF_SRC)
1240	@echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC:\=\\)"; >> $(PATHDEF_SRC)
1241	@echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR:\=\\)"; >> $(PATHDEF_SRC)
1242	@echo char_u *all_cflags = (char_u *)"$(CC:\=\\) $(E_CFLAGS)"; >> $(PATHDEF_SRC)
1243	@echo char_u *all_lflags = (char_u *)"$(link:\=\\) $(LINKARGS1:\=\\) $(E_LINKARGS2)"; >> $(PATHDEF_SRC)
1244	@echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> $(PATHDEF_SRC)
1245	@echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> $(PATHDEF_SRC)
1246
1247auto:
1248	if not exist auto/nul mkdir auto
1249
1250# End Custom Build
1251proto.h: \
1252	proto/blowfish.pro \
1253	proto/buffer.pro \
1254	proto/charset.pro \
1255	proto/crypt.pro \
1256	proto/crypt_zip.pro \
1257	proto/diff.pro \
1258	proto/digraph.pro \
1259	proto/edit.pro \
1260	proto/eval.pro \
1261	proto/ex_cmds.pro \
1262	proto/ex_cmds2.pro \
1263	proto/ex_docmd.pro \
1264	proto/ex_eval.pro \
1265	proto/ex_getln.pro \
1266	proto/fileio.pro \
1267	proto/getchar.pro \
1268	proto/hardcopy.pro \
1269	proto/hashtab.pro \
1270	proto/main.pro \
1271	proto/mark.pro \
1272	proto/memfile.pro \
1273	proto/memline.pro \
1274	proto/menu.pro \
1275	proto/message.pro \
1276	proto/misc1.pro \
1277	proto/misc2.pro \
1278	proto/move.pro \
1279	proto/mbyte.pro \
1280	proto/normal.pro \
1281	proto/ops.pro \
1282	proto/option.pro \
1283	proto/os_mswin.pro \
1284	proto/winclip.pro \
1285	proto/os_win32.pro \
1286	proto/popupmnu.pro \
1287	proto/quickfix.pro \
1288	proto/regexp.pro \
1289	proto/screen.pro \
1290	proto/search.pro \
1291	proto/sha256.pro \
1292	proto/spell.pro \
1293	proto/syntax.pro \
1294	proto/tag.pro \
1295	proto/term.pro \
1296	proto/ui.pro \
1297	proto/undo.pro \
1298	proto/window.pro \
1299	$(NETBEANS_PRO)
1300
1301.SUFFIXES: .cod .i
1302
1303# Generate foo.cod (mixed source and assembly listing) from foo.c via "nmake
1304# foo.cod"
1305.c.cod:
1306	$(CC) $(CFLAGS) /FAcs $<
1307
1308# Generate foo.i (preprocessor listing) from foo.c via "nmake foo.i"
1309.c.i:
1310	$(CC) $(CFLAGS) /P /C $<
1311
1312
1313# vim: set noet sw=8 ts=8 sts=0 wm=0 tw=0:
1314