xref: /vim-8.2.3635/src/Make_mvc.mak (revision b3a29558)
1# Makefile for Vim on Win32 (Windows XP/2003/Vista/7/8/10) and Win64,
2# using the Microsoft Visual C++ compilers. Known to work with VC10 (VS2010),
3# VC11 (VS2012), VC12 (VS2013), VC14 (VS2015), VC14.1 (VS2017) and
4# VC14.2 (VS2019).
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#	!!!!  After changing any features do "nmake clean" first  !!!!
19#
20#	Feature Set: FEATURES=[TINY, SMALL, NORMAL, BIG, HUGE] (default is HUGE)
21#
22#   	Name to add to the version: MODIFIED_BY=[name of modifier]
23#
24#	GUI interface: GUI=yes (default is no)
25#
26#	GUI with DirectWrite (DirectX): DIRECTX=yes
27#	  (default is yes if GUI=yes, requires GUI=yes)
28#
29#	Color emoji support: COLOR_EMOJI=yes
30#	  (default is yes if DIRECTX=yes, requires WinSDK 8.1 or later.)
31#
32#	OLE interface: OLE=yes (usually with GUI=yes)
33#
34#	IME support: IME=yes	(default is 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#	Terminal support: TERMINAL=yes (default is yes if FEATURES is HUGE)
40#	  Will also enable CHANNEL
41#
42#	Sound support: SOUND=yes (default is yes)
43#
44#	Sodium support: SODIUM=[Path to Sodium directory]
45#	 Dynamic built with libsodium
46#	 You need to install the msvc package from
47#	 https://download.libsodium.org/libsodium/releases/
48#	 and package the libsodium.dll with Vim
49#
50#
51#	DLL support (EXPERIMENTAL): VIMDLL=yes (default is no)
52#	  Creates vim{32,64}.dll, and stub gvim.exe and vim.exe.
53#	  The shared codes between the GUI and the console are built into
54#	  the DLL.  This reduces the total file size and memory usage.
55#	  Also supports `vim -g` and the `:gui` command.
56#
57#	Lua interface:
58#	  LUA=[Path to Lua directory]
59#	  DYNAMIC_LUA=yes (to load the Lua DLL dynamically)
60#	  LUA_VER=[Lua version]  (default is 53)
61#
62#	MzScheme interface:
63#	  MZSCHEME=[Path to MzScheme directory]
64#	  DYNAMIC_MZSCHEME=yes (to load the MzScheme DLLs dynamically)
65#	  MZSCHEME_VER=[MzScheme version] (default is 3m_a0solc (6.6))
66#	  	Used for the DLL file name. E.g.:
67#	  	C:\Program Files (x86)\Racket\lib\libracket3m_XXXXXX.dll
68#	  MZSCHEME_DEBUG=no
69#
70#	Perl interface:
71#	  PERL=[Path to Perl directory]
72#	  DYNAMIC_PERL=yes (to load the Perl DLL dynamically)
73#	  PERL_VER=[Perl version, in the form 55 (5.005), 56 (5.6.x),
74#		    510 (5.10.x), etc]
75#	  (default is 524)
76#
77#	Python interface:
78#	  PYTHON=[Path to Python directory]
79#	  DYNAMIC_PYTHON=yes (to load the Python DLL dynamically)
80#	  PYTHON_VER=[Python version, eg 22, 23, ..., 27]  (default is 27)
81#
82#	Python3 interface:
83#	  PYTHON3=[Path to Python3 directory]
84#	  DYNAMIC_PYTHON3=yes (to load the Python3 DLL dynamically)
85#	  PYTHON3_VER=[Python3 version, eg 30, 31]  (default is 36)
86#
87#	Ruby interface:
88#	  RUBY=[Path to Ruby directory]
89#	  DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically)
90#	  RUBY_VER=[Ruby version, eg 19, 22] (default is 22)
91#	  RUBY_API_VER_LONG=[Ruby API version, eg 1.8, 1.9.1, 2.2.0]
92#	  		    (default is 2.2.0)
93#	    You must set RUBY_API_VER_LONG when change RUBY_VER.
94#	    Note: If you use Ruby 1.9.3, set as follows:
95#	      RUBY_VER=19
96#	      RUBY_API_VER_LONG=1.9.1 (not 1.9.3, because the API version is 1.9.1.)
97#
98#	Tcl interface:
99#	  TCL=[Path to Tcl directory]
100#	  DYNAMIC_TCL=yes (to load the Tcl DLL dynamically)
101#	  TCL_VER=[Tcl version, e.g. 80, 83]  (default is 86)
102#	  TCL_VER_LONG=[Tcl version, eg 8.3] (default is 8.6)
103#	    You must set TCL_VER_LONG when you set TCL_VER.
104#	  TCL_DLL=[Tcl dll name, e.g. tcl86.dll]  (default is tcl86.dll)
105#
106#	Cscope support: CSCOPE=yes
107#
108#	Iconv library support (always dynamically loaded):
109#	  ICONV=[yes or no]  (default is yes)
110#
111#	Intl library support (always dynamically loaded):
112#	  GETTEXT=[yes or no]  (default is yes)
113#	See http://sourceforge.net/projects/gettext/
114#
115#	PostScript printing: POSTSCRIPT=yes (default is no)
116#
117#	Netbeans Support: NETBEANS=[yes or no] (default is yes if GUI is yes)
118#	  Requires CHANNEL.
119#
120#	Netbeans Debugging Support: NBDEBUG=[yes or no] (should be no, yes
121#	doesn't work)
122#
123#	Inter process communication: CHANNEL=[yes or no] (default is yes if GUI
124#	is yes or TERMINAL is yes)
125#
126#	XPM Image Support: XPM=[path to XPM directory]
127#	Default is "xpm", using the files included in the distribution.
128#	Use "no" to disable this feature.
129#
130#	Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
131#
132#	Processor Version: CPUNR=[any, i586, i686, sse, sse2, avx, avx2] (default is
133#	any)
134#	  avx is available on Visual C++ 2010 and after.
135#	  avx2 is available on Visual C++ 2013 Update 2 and after.
136#
137#	Version Support: WINVER=[0x0501, 0x0502, 0x0600, 0x0601, 0x0602,
138#	0x0603, 0x0A00] (default is 0x0501)
139#	Supported versions depends on your target SDK, check SDKDDKVer.h
140#	See https://docs.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt
141#
142#	Debug version: DEBUG=yes
143#	Mapfile: MAP=[no, yes or lines] (default is yes)
144#	  no:    Don't write a mapfile.
145#	  yes:   Write a normal mapfile.
146#	  lines: Write a mapfile with line numbers (only for VC6 and later)
147#
148#	Static Code Analysis: ANALYZE=yes (works with VS2012 or later)
149#
150# You can combine any of these interfaces
151#
152# Example: To build the non-debug, GUI version with Perl interface:
153#	nmake -f Make_mvc.mak GUI=yes PERL=C:\Perl
154
155### See feature.h for a list of optionals.
156# If you want to build some optional features without modifying the source,
157# you can set DEFINES on the command line, e.g.,
158#	nmake -f Make_mvc.mvc "DEFINES=-DEMACS_TAGS"
159
160# Build on Windows NT/XP
161
162TARGETOS = WINNT
163
164!if "$(VIMDLL)" == "yes"
165GUI = yes
166!endif
167
168!ifndef DIRECTX
169DIRECTX = $(GUI)
170!endif
171
172# Select a code directory, depends on GUI, OLE, DEBUG, interfaces and etc.
173# If you change something else, do "make clean" first!
174!if "$(VIMDLL)" == "yes"
175OBJDIR = .\ObjD
176!elseif "$(GUI)" == "yes"
177OBJDIR = .\ObjG
178!else
179OBJDIR = .\ObjC
180!endif
181!if "$(DIRECTX)" == "yes" && "$(GUI)" == "yes"
182OBJDIR = $(OBJDIR)X
183!endif
184!if "$(OLE)" == "yes"
185OBJDIR = $(OBJDIR)O
186!endif
187!ifdef LUA
188OBJDIR = $(OBJDIR)U
189!endif
190!ifdef PERL
191OBJDIR = $(OBJDIR)L
192!endif
193!ifdef PYTHON
194OBJDIR = $(OBJDIR)Y
195!endif
196!ifdef PYTHON3
197OBJDIR = $(OBJDIR)H
198!endif
199!ifdef TCL
200OBJDIR = $(OBJDIR)T
201!endif
202!ifdef RUBY
203OBJDIR = $(OBJDIR)R
204!endif
205!ifdef MZSCHEME
206OBJDIR = $(OBJDIR)Z
207!endif
208!ifdef USE_MSVCRT
209OBJDIR = $(OBJDIR)V
210!endif
211!if "$(DEBUG)" == "yes"
212OBJDIR = $(OBJDIR)d
213!endif
214
215!ifdef PROCESSOR_ARCHITECTURE
216# We're on Windows NT or using VC 6+
217! ifdef CPU
218ASSEMBLY_ARCHITECTURE=$(CPU)
219# Using I386 for $ASSEMBLY_ARCHITECTURE doesn't work for VC7.
220!  if "$(CPU)" == "I386"
221CPU = i386
222!  endif
223! else  # !CPU
224CPU = i386
225!  if !defined(PLATFORM) && defined(TARGET_CPU)
226PLATFORM = $(TARGET_CPU)
227!  endif
228!  ifdef PLATFORM
229!   if ("$(PLATFORM)" == "x64") || ("$(PLATFORM)" == "X64")
230CPU = AMD64
231!   elseif ("$(PLATFORM)" == "arm64") || ("$(PLATFORM)" == "ARM64")
232CPU = ARM64
233!   elseif ("$(PLATFORM)" != "x86") && ("$(PLATFORM)" != "X86")
234!    error *** ERROR Unknown target platform "$(PLATFORM)". Make aborted.
235!   endif
236!  endif  # !PLATFORM
237! endif
238!else  # !PROCESSOR_ARCHITECTURE
239# We're on Windows 95
240CPU = i386
241!endif # !PROCESSOR_ARCHITECTURE
242ASSEMBLY_ARCHITECTURE=$(CPU)
243OBJDIR = $(OBJDIR)$(CPU)
244
245# Build a retail version by default
246
247!if "$(DEBUG)" != "yes"
248NODEBUG = 1
249!else
250! undef NODEBUG
251MAKEFLAGS_GVIMEXT = DEBUG=yes
252!endif
253
254link = link
255
256# Check VC version.
257!if [echo MSVCVER=_MSC_VER> msvcver.c && $(CC) /EP msvcver.c > msvcver.~ 2> nul]
258! message *** ERROR
259! message Cannot run Visual C to determine its version. Make sure cl.exe is in your PATH.
260! message This can usually be done by running "vcvarsall.bat", located in the bin directory where Visual Studio was installed.
261! error Make aborted.
262!else
263! include msvcver.~
264! if [del msvcver.c msvcver.~]
265! endif
266!endif
267
268!if $(MSVCVER) < 1900
269MSVC_MAJOR = ($(MSVCVER) / 100 - 6)
270MSVCRT_VER = ($(MSVCVER) / 10 - 60)
271!else
272MSVC_MAJOR = ($(MSVCVER) / 100 - 5)
273MSVCRT_VER = ($(MSVCVER) / 100 * 10 - 50)
274!endif
275
276# Calculate MSVC_FULL for Visual C++ 8 and up.
277!if $(MSVC_MAJOR) >= 8
278! if [echo MSVC_FULL=_MSC_FULL_VER> msvcfullver.c && $(CC) /EP msvcfullver.c > msvcfullver.~ 2> nul]
279!  message *** ERROR
280!  message Cannot run Visual C to determine its version. Make sure cl.exe is in your PATH.
281!  message This can usually be done by running "vcvarsall.bat", located in the bin directory where Visual Studio was installed.
282!  error Make aborted.
283! else
284!  include msvcfullver.~
285!  if [del msvcfullver.c msvcfullver.~]
286!  endif
287! endif
288!endif
289
290
291# Calculate MSVCRT_VER
292!if [(set /a MSVCRT_VER="$(MSVCRT_VER)" > nul) && set MSVCRT_VER > msvcrtver.~] == 0
293! include msvcrtver.~
294! if [del msvcrtver.~]
295! endif
296!endif
297
298# Base name of the msvcrXX.dll
299!if $(MSVCRT_VER) <= 60
300MSVCRT_NAME = msvcrt
301!elseif $(MSVCRT_VER) <= 130
302MSVCRT_NAME = msvcr$(MSVCRT_VER)
303!else
304MSVCRT_NAME = vcruntime$(MSVCRT_VER)
305!endif
306
307!if $(MSVC_MAJOR) == 6
308CPU = ix86
309!endif
310
311### Set the default $(WINVER) to make it work with VC++7.0 (VS.NET)
312!ifndef WINVER
313WINVER = 0x0501
314!endif
315
316# Flag to turn on Win64 compatibility warnings for VC7.x and VC8.
317WP64CHECK = /Wp64
318
319# Use multiprocess build
320USE_MP = yes
321
322#>>>>> path of the compiler and linker; name of include and lib directories
323# PATH = c:\msvc20\bin;$(PATH)
324# INCLUDE = c:\msvc20\include
325# LIB = c:\msvc20\lib
326
327!if "$(FEATURES)"==""
328FEATURES = HUGE
329!endif
330
331!ifndef CTAGS
332# this assumes ctags is Exuberant ctags
333CTAGS = ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S
334!endif
335
336!ifndef CSCOPE
337CSCOPE = yes
338!endif
339
340!if "$(CSCOPE)" == "yes"
341# CSCOPE - Include support for Cscope
342CSCOPE_DEFS  = -DFEAT_CSCOPE
343!endif
344
345!ifndef TERMINAL
346! if "$(FEATURES)"=="HUGE"
347TERMINAL = yes
348! else
349TERMINAL = no
350! endif
351!endif
352
353!if "$(TERMINAL)" == "yes"
354TERM_OBJ = \
355	$(OBJDIR)/terminal.obj \
356	$(OBJDIR)/vterm_encoding.obj \
357	$(OBJDIR)/vterm_keyboard.obj \
358	$(OBJDIR)/vterm_mouse.obj \
359	$(OBJDIR)/vterm_parser.obj \
360	$(OBJDIR)/vterm_pen.obj \
361	$(OBJDIR)/vterm_screen.obj \
362	$(OBJDIR)/vterm_state.obj \
363	$(OBJDIR)/vterm_unicode.obj \
364	$(OBJDIR)/vterm_vterm.obj
365TERM_DEFS = -DFEAT_TERMINAL
366TERM_DEPS = \
367	libvterm/include/vterm.h \
368	libvterm/include/vterm_keycodes.h \
369	libvterm/src/rect.h \
370	libvterm/src/utf8.h \
371	libvterm/src/vterm_internal.h
372!endif
373
374!ifndef SOUND
375! if "$(FEATURES)"=="HUGE" || "$(FEATURES)"=="BIG"
376SOUND = yes
377! else
378SOUND = no
379! endif
380!endif
381
382!ifndef SODIUM
383SODIUM = no
384!endif
385
386!if "$(SODIUM)" != "no"
387! if "$(CPU)" == "AMD64"
388SOD_LIB		= $(SODIUM)\x64\Release\v140\dynamic
389! elseif "$(CPU)" == "i386"
390SOD_LIB		= $(SODIUM)\Win32\Release\v140\dynamic
391! else
392SODIUM = no
393! endif
394!endif
395
396!if "$(SODIUM)" != "no"
397SOD_INC		= /I "$(SODIUM)\include"
398SOD_DEFS	= -DHAVE_SODIUM
399SOD_LIB		= $(SOD_LIB)\libsodium.lib
400!endif
401
402!ifndef NETBEANS
403NETBEANS = $(GUI)
404!endif
405
406!ifndef CHANNEL
407! if "$(FEATURES)"=="HUGE" || "$(TERMINAL)"=="yes"
408CHANNEL = yes
409! else
410CHANNEL = $(GUI)
411! endif
412!endif
413
414# GUI specific features.
415!if "$(GUI)" == "yes"
416# Only allow NETBEANS for a GUI build and CHANNEL.
417! if "$(NETBEANS)" == "yes" && "$(CHANNEL)" == "yes"
418# NETBEANS - Include support for Netbeans integration
419NETBEANS_PRO	= proto/netbeans.pro
420NETBEANS_OBJ	= $(OBJDIR)/netbeans.obj
421NETBEANS_DEFS	= -DFEAT_NETBEANS_INTG
422
423!  if "$(NBDEBUG)" == "yes"
424NBDEBUG_DEFS	= -DNBDEBUG
425NBDEBUG_INCL	= nbdebug.h
426NBDEBUG_SRC	= nbdebug.c
427!  endif
428NETBEANS_LIB	= WSock32.lib
429! endif
430
431# DirectWrite (DirectX)
432! if "$(DIRECTX)" == "yes"
433DIRECTX_DEFS	= -DFEAT_DIRECTX -DDYNAMIC_DIRECTX
434!  if "$(COLOR_EMOJI)" != "no"
435DIRECTX_DEFS	= $(DIRECTX_DEFS) -DFEAT_DIRECTX_COLOR_EMOJI
436!  endif
437DIRECTX_INCL	= gui_dwrite.h
438DIRECTX_OBJ	= $(OUTDIR)\gui_dwrite.obj
439! endif
440
441# Only allow XPM for a GUI build.
442! ifndef XPM
443!  ifndef USE_MSVCRT
444# Both XPM and USE_MSVCRT are not set, use the included xpm files, depending
445# on the architecture.
446!   if "$(CPU)" == "AMD64"
447XPM = xpm\x64
448!   elseif "$(CPU)" == "ARM64"
449XPM = xpm\arm64
450!   elseif "$(CPU)" == "i386"
451XPM = xpm\x86
452!   else
453XPM = no
454!   endif
455!  else # USE_MSVCRT
456XPM = no
457!  endif # USE_MSVCRT
458! endif # XPM
459! if "$(XPM)" != "no"
460# XPM - Include support for XPM signs
461# See the xpm directory for more information.
462XPM_OBJ   = $(OBJDIR)/xpm_w32.obj
463XPM_DEFS  = -DFEAT_XPM_W32
464!  if $(MSVC_MAJOR) >= 14
465# VC14 cannot use a library built by VC12 or earlier, because VC14 uses
466# Universal CRT.
467XPM_LIB   = $(XPM)\lib-vc14\libXpm.lib
468!  else
469XPM_LIB   = $(XPM)\lib\libXpm.lib
470!  endif
471XPM_INC	  = -I $(XPM)\include -I $(XPM)\..\include
472! endif
473!endif # GUI
474
475!if "$(SOUND)" == "yes"
476SOUND_PRO	= proto/sound.pro
477SOUND_OBJ	= $(OBJDIR)/sound.obj
478SOUND_DEFS	= -DFEAT_SOUND
479SOUND_LIB	= winmm.lib
480!endif
481
482!if "$(CHANNEL)" == "yes"
483CHANNEL_PRO	= proto/job.pro proto/channel.pro
484CHANNEL_OBJ	= $(OBJDIR)/job.obj $(OBJDIR)/channel.obj
485CHANNEL_DEFS	= -DFEAT_JOB_CHANNEL -DFEAT_IPV6
486! if $(WINVER) >= 0x600
487CHANNEL_DEFS	= $(CHANNEL_DEFS) -DHAVE_INET_NTOP
488! endif
489
490NETBEANS_LIB	= WSock32.lib Ws2_32.lib
491!endif
492
493# Set which version of the CRT to use
494!if defined(USE_MSVCRT)
495# CVARS = $(cvarsdll)
496# !elseif defined(MULTITHREADED)
497# CVARS = $(cvarsmt)
498!else
499# CVARS = $(cvars)
500# CVARS = $(cvarsmt)
501!endif
502
503# need advapi32.lib for GetUserName()
504# need shell32.lib for ExtractIcon()
505# need netapi32.lib for NetUserEnum()
506# gdi32.lib and comdlg32.lib for printing support
507# ole32.lib and uuid.lib are needed for FEAT_SHORTCUT
508CON_LIB = oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib \
509          comdlg32.lib ole32.lib netapi32.lib uuid.lib /machine:$(CPU)
510!if "$(DELAYLOAD)" == "yes"
511CON_LIB = $(CON_LIB) /DELAYLOAD:comdlg32.dll /DELAYLOAD:ole32.dll DelayImp.lib
512!endif
513
514# If you have a fixed directory for $VIM or $VIMRUNTIME, other than the normal
515# default, use these lines.
516#VIMRCLOC = somewhere
517#VIMRUNTIMEDIR = somewhere
518
519CFLAGS = -c /W3 /GF /nologo $(CVARS) -I. -Iproto -DHAVE_PATHDEF -DWIN32 \
520		$(CSCOPE_DEFS) $(TERM_DEFS) $(SOUND_DEFS) $(NETBEANS_DEFS) $(CHANNEL_DEFS) \
521		$(NBDEBUG_DEFS) $(XPM_DEFS) $(SOD_DEFS) $(SOD_INC) \
522		$(DEFINES) -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER)
523
524#>>>>> end of choices
525###########################################################################
526
527DEL_TREE = rmdir /s /q
528
529INTDIR=$(OBJDIR)
530OUTDIR=$(OBJDIR)
531
532### Validate CPUNR
533!ifndef CPUNR
534# default to untargeted code
535CPUNR = any
536!elseif "$(CPUNR)" == "i386" || "$(CPUNR)" == "i486"
537# alias i386 and i486 to i586
538! message *** WARNING CPUNR=$(CPUNR) is not a valid target architecture.
539! message Windows XP is the minimum target OS, with a minimum target
540! message architecture of i586.
541! message Retargeting to i586
542CPUNR = i586
543!elseif "$(CPUNR)" == "pentium4"
544# alias pentium4 to sse2
545! message *** WARNING CPUNR=pentium4 is deprecated in favour of sse2.
546! message Retargeting to sse2.
547CPUNR = sse2
548!elseif "$(CPUNR)" != "any" && "$(CPUNR)" != "i586" && "$(CPUNR)" != "i686" && "$(CPUNR)" != "sse" && "$(CPUNR)" != "sse2" && "$(CPUNR)" != "avx" && "$(CPUNR)" != "avx2"
549! error *** ERROR Unknown target architecture "$(CPUNR)". Make aborted.
550!endif
551
552# Convert processor ID to MVC-compatible number
553!if $(MSVC_MAJOR) < 8
554! if "$(CPUNR)" == "i586"
555CPUARG = /G5
556! elseif "$(CPUNR)" == "i686"
557CPUARG = /G6
558! elseif "$(CPUNR)" == "sse"
559CPUARG = /G6 /arch:SSE
560! elseif "$(CPUNR)" == "sse2"
561CPUARG = /G7 /arch:SSE2
562! elseif "$(CPUNR)" == "avx" || "$(CPUNR)" == "avx2"
563!  message AVX/AVX2 Instruction Sets are not supported by Visual C++ v$(MSVC_MAJOR)
564!  message Falling back to SSE2
565CPUARG = /G7 /arch:SSE2
566! elseif "$(CPUNR)" == "any"
567CPUARG =
568! endif
569!else
570# IA32/SSE/SSE2 are only supported on x86
571! if "$(ASSEMBLY_ARCHITECTURE)" == "i386" && ("$(CPUNR)" == "i586" || "$(CPUNR)" == "i686" || "$(CPUNR)" == "any")
572# VC<11 generates fp87 code by default
573!  if $(MSVC_MAJOR) < 11
574CPUARG =
575# VC>=11 needs explicit instructions to generate fp87 code
576!  else
577CPUARG = /arch:IA32
578!  endif
579! elseif "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "sse"
580CPUARG = /arch:SSE
581! elseif "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "sse2"
582CPUARG = /arch:SSE2
583! elseif "$(CPUNR)" == "avx"
584# AVX is only supported by VC 10 and up
585!  if $(MSVC_MAJOR) < 10
586!   message AVX Instruction Set is not supported by Visual C++ v$(MSVC_MAJOR)
587!   if "$(ASSEMBLY_ARCHITECTURE)" == "i386"
588!    message Falling back to SSE2
589CPUARG = /arch:SSE2
590!   else
591CPUARG =
592!   endif
593!  else
594CPUARG = /arch:AVX
595!  endif
596! elseif "$(CPUNR)" == "avx2"
597# AVX is only supported by VC 10 and up
598!  if $(MSVC_MAJOR) < 10
599!   message AVX2 Instruction Set is not supported by Visual C++ v$(MSVC_MAJOR)
600!   if "$(ASSEMBLY_ARCHITECTURE)" == "i386"
601!    message Falling back to SSE2
602CPUARG = /arch:SSE2
603!   else
604CPUARG =
605!   endif
606# AVX2 is only supported by VC 12U2 and up
607# 180030501 is the full version number for Visual Studio 2013/VC 12 Update 2
608!  elseif $(MSVC_FULL) < 180030501
609!   message AVX2 Instruction Set is not supported by Visual C++ v$(MSVC_MAJOR)-$(MSVC_FULL)
610!   message Falling back to AVX
611CPUARG = /arch:AVX
612!  else
613CPUARG = /arch:AVX2
614!  endif
615! endif
616!endif
617
618# Pass CPUARG to GvimExt, to avoid using version-dependent defaults
619MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) CPUARG="$(CPUARG)"
620
621!if "$(VIMDLL)" == "yes"
622VIMDLLBASE = vim
623! if "$(ASSEMBLY_ARCHITECTURE)" == "i386"
624VIMDLLBASE = $(VIMDLLBASE)32
625! else
626VIMDLLBASE = $(VIMDLLBASE)64
627! endif
628! if "$(DEBUG)" == "yes"
629VIMDLLBASE = $(VIMDLLBASE)d
630! endif
631!endif
632
633LIBC =
634DEBUGINFO = /Zi
635
636# Don't use /nodefaultlib on MSVC 14
637!if $(MSVC_MAJOR) >= 14
638NODEFAULTLIB =
639!else
640NODEFAULTLIB = /nodefaultlib
641!endif
642
643# Specify source code charset to suppress warning C4819 on non-English
644# environment. Only available from MSVC 14.
645!if $(MSVC_MAJOR) >= 14
646CFLAGS = $(CFLAGS) /source-charset:utf-8
647!endif
648
649# Use multiprocess build on MSVC 10
650!if ("$(USE_MP)" == "yes") && ($(MSVC_MAJOR) >= 10)
651CFLAGS = $(CFLAGS) /MP
652!endif
653
654# VC10 or later has stdint.h.
655!if $(MSVC_MAJOR) >= 10
656CFLAGS = $(CFLAGS) -DHAVE_STDINT_H
657!endif
658
659# Static code analysis generally available starting with VS2012 (VC11) or
660# Windows SDK 7.1 (VC10)
661!if ("$(ANALYZE)" == "yes") && ($(MSVC_MAJOR) >= 10)
662CFLAGS = $(CFLAGS) /analyze
663!endif
664
665!ifdef NODEBUG
666VIM = vim
667! if "$(OPTIMIZE)" == "SPACE"
668OPTFLAG = /O1
669! elseif "$(OPTIMIZE)" == "SPEED"
670OPTFLAG = /O2
671! else # MAXSPEED
672OPTFLAG = /Ox
673! endif
674
675! if $(MSVC_MAJOR) >= 8
676# Use link time code generation if not worried about size
677!  if "$(OPTIMIZE)" != "SPACE"
678OPTFLAG = $(OPTFLAG) /GL
679!  endif
680! endif
681
682# (/Wp64 is deprecated in VC9 and generates an obnoxious warning.)
683! if ($(MSVC_MAJOR) == 7) || ($(MSVC_MAJOR) == 8)
684CFLAGS = $(CFLAGS) $(WP64CHECK)
685! endif
686
687CFLAGS = $(CFLAGS) $(OPTFLAG) -DNDEBUG $(CPUARG)
688RCFLAGS = $(rcflags) $(rcvars) -DNDEBUG
689! ifdef USE_MSVCRT
690CFLAGS = $(CFLAGS) /MD
691LIBC = msvcrt.lib
692! else
693LIBC = libcmt.lib
694CFLAGS = $(CFLAGS) /Zl /MT
695! endif
696!else  # DEBUG
697VIM = vimd
698! if ("$(CPU)" == "i386") || ("$(CPU)" == "ix86")
699DEBUGINFO = /ZI
700! endif
701CFLAGS = $(CFLAGS) -D_DEBUG -DDEBUG /Od
702RCFLAGS = $(rcflags) $(rcvars) -D_DEBUG -DDEBUG
703# The /fixed:no is needed for Quantify. Assume not 4.? as unsupported in VC4.0.
704! if $(MSVC_MAJOR) == 4
705LIBC =
706! else
707LIBC = /fixed:no
708! endif
709! ifdef USE_MSVCRT
710CFLAGS = $(CFLAGS) /MDd
711LIBC = $(LIBC) msvcrtd.lib
712! else
713LIBC = $(LIBC) libcmtd.lib
714CFLAGS = $(CFLAGS) /Zl /MTd
715! endif
716!endif # DEBUG
717
718!if "$(CL)" == "/D_USING_V110_SDK71_"
719RCFLAGS = $(RCFLAGS) /D_USING_V110_SDK71_
720!endif
721
722!if $(MSVC_MAJOR) >= 8
723# Visual Studio 2005 has 'deprecated' many of the standard CRT functions
724CFLAGS_DEPR = /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE
725CFLAGS = $(CFLAGS) $(CFLAGS_DEPR)
726!endif
727
728!include Make_all.mak
729!include testdir\Make_all.mak
730
731INCL =	vim.h alloc.h ascii.h ex_cmds.h feature.h errors.h globals.h \
732	keymap.h macros.h option.h os_dos.h os_win32.h proto.h regexp.h \
733	spell.h structs.h termdefs.h beval.h $(NBDEBUG_INCL)
734
735OBJ = \
736	$(OUTDIR)\alloc.obj \
737	$(OUTDIR)\arabic.obj \
738	$(OUTDIR)\arglist.obj \
739	$(OUTDIR)\autocmd.obj \
740	$(OUTDIR)\beval.obj \
741	$(OUTDIR)\blob.obj \
742	$(OUTDIR)\blowfish.obj \
743	$(OUTDIR)\buffer.obj \
744	$(OUTDIR)\bufwrite.obj \
745	$(OUTDIR)\change.obj \
746	$(OUTDIR)\charset.obj \
747	$(OUTDIR)\cindent.obj \
748	$(OUTDIR)\clientserver.obj \
749	$(OUTDIR)\clipboard.obj \
750	$(OUTDIR)\cmdexpand.obj \
751	$(OUTDIR)\cmdhist.obj \
752	$(OUTDIR)\crypt.obj \
753	$(OUTDIR)\crypt_zip.obj \
754	$(OUTDIR)\debugger.obj \
755	$(OUTDIR)\dict.obj \
756	$(OUTDIR)\diff.obj \
757	$(OUTDIR)\digraph.obj \
758	$(OUTDIR)\drawline.obj \
759	$(OUTDIR)\drawscreen.obj \
760	$(OUTDIR)\edit.obj \
761	$(OUTDIR)\eval.obj \
762	$(OUTDIR)\evalbuffer.obj \
763	$(OUTDIR)\evalfunc.obj \
764	$(OUTDIR)\evalvars.obj \
765	$(OUTDIR)\evalwindow.obj \
766	$(OUTDIR)\ex_cmds.obj \
767	$(OUTDIR)\ex_cmds2.obj \
768	$(OUTDIR)\ex_docmd.obj \
769	$(OUTDIR)\ex_eval.obj \
770	$(OUTDIR)\ex_getln.obj \
771	$(OUTDIR)\fileio.obj \
772	$(OUTDIR)\filepath.obj \
773	$(OUTDIR)\findfile.obj \
774	$(OUTDIR)\float.obj \
775	$(OUTDIR)\fold.obj \
776	$(OUTDIR)\getchar.obj \
777	$(OUTDIR)\gui_xim.obj \
778	$(OUTDIR)\hardcopy.obj \
779	$(OUTDIR)\hashtab.obj \
780	$(OUTDIR)\help.obj \
781	$(OUTDIR)\highlight.obj \
782	$(OBJDIR)\if_cscope.obj \
783	$(OUTDIR)\indent.obj \
784	$(OUTDIR)\insexpand.obj \
785	$(OUTDIR)\json.obj \
786	$(OUTDIR)\list.obj \
787	$(OUTDIR)\locale.obj \
788	$(OUTDIR)\main.obj \
789	$(OUTDIR)\map.obj \
790	$(OUTDIR)\mark.obj \
791	$(OUTDIR)\match.obj \
792	$(OUTDIR)\mbyte.obj \
793	$(OUTDIR)\memfile.obj \
794	$(OUTDIR)\memline.obj \
795	$(OUTDIR)\menu.obj \
796	$(OUTDIR)\message.obj \
797	$(OUTDIR)\misc1.obj \
798	$(OUTDIR)\misc2.obj \
799	$(OUTDIR)\mouse.obj \
800	$(OUTDIR)\move.obj \
801	$(OUTDIR)\normal.obj \
802	$(OUTDIR)\ops.obj \
803	$(OUTDIR)\option.obj \
804	$(OUTDIR)\optionstr.obj \
805	$(OUTDIR)\os_mswin.obj \
806	$(OUTDIR)\os_win32.obj \
807	$(OUTDIR)\pathdef.obj \
808	$(OUTDIR)\popupmenu.obj \
809	$(OUTDIR)\popupwin.obj \
810	$(OUTDIR)\profiler.obj \
811	$(OUTDIR)\quickfix.obj \
812	$(OUTDIR)\regexp.obj \
813	$(OUTDIR)\register.obj \
814	$(OUTDIR)\scriptfile.obj \
815	$(OUTDIR)\screen.obj \
816	$(OUTDIR)\search.obj \
817	$(OUTDIR)\session.obj \
818	$(OUTDIR)\sha256.obj \
819	$(OUTDIR)\sign.obj \
820	$(OUTDIR)\spell.obj \
821	$(OUTDIR)\spellfile.obj \
822	$(OUTDIR)\spellsuggest.obj \
823	$(OUTDIR)\strings.obj \
824	$(OUTDIR)\syntax.obj \
825	$(OUTDIR)\tag.obj \
826	$(OUTDIR)\term.obj \
827	$(OUTDIR)\testing.obj \
828	$(OUTDIR)\textformat.obj \
829	$(OUTDIR)\textobject.obj \
830	$(OUTDIR)\textprop.obj \
831	$(OUTDIR)\time.obj \
832	$(OUTDIR)\typval.obj \
833	$(OUTDIR)\ui.obj \
834	$(OUTDIR)\undo.obj \
835	$(OUTDIR)\usercmd.obj \
836	$(OUTDIR)\userfunc.obj \
837	$(OUTDIR)\vim9compile.obj \
838	$(OUTDIR)\vim9execute.obj \
839	$(OUTDIR)\vim9script.obj \
840	$(OUTDIR)\vim9type.obj \
841	$(OUTDIR)\viminfo.obj \
842	$(OUTDIR)\winclip.obj \
843	$(OUTDIR)\window.obj \
844
845!if "$(VIMDLL)" == "yes"
846OBJ = $(OBJ) $(OUTDIR)\os_w32dll.obj $(OUTDIR)\vimd.res
847EXEOBJC = $(OUTDIR)\os_w32exec.obj $(OUTDIR)\vimc.res
848EXEOBJG = $(OUTDIR)\os_w32exeg.obj $(OUTDIR)\vimg.res
849CFLAGS = $(CFLAGS) -DVIMDLL
850!else
851OBJ = $(OBJ) $(OUTDIR)\os_w32exe.obj $(OUTDIR)\vim.res
852!endif
853
854!if "$(OLE)" == "yes"
855CFLAGS = $(CFLAGS) -DFEAT_OLE
856RCFLAGS = $(RCFLAGS) -DFEAT_OLE
857OLE_OBJ = $(OUTDIR)\if_ole.obj
858OLE_IDL = if_ole.idl
859OLE_LIB = oleaut32.lib
860!endif
861
862!ifndef IME
863IME = yes
864!endif
865!if "$(IME)" == "yes"
866CFLAGS = $(CFLAGS) -DFEAT_MBYTE_IME
867! ifndef DYNAMIC_IME
868DYNAMIC_IME = yes
869! endif
870! if "$(DYNAMIC_IME)" == "yes"
871CFLAGS = $(CFLAGS) -DDYNAMIC_IME
872! else
873IME_LIB = imm32.lib
874! endif
875!endif
876
877!if "$(GIME)" == "yes"
878CFLAGS = $(CFLAGS) -DGLOBAL_IME
879OBJ = $(OBJ) $(OUTDIR)\dimm_i.obj $(OUTDIR)\glbl_ime.obj
880!endif
881
882!if "$(GUI)" == "yes"
883SUBSYSTEM = windows
884CFLAGS = $(CFLAGS) -DFEAT_GUI_MSWIN
885RCFLAGS = $(RCFLAGS) -DFEAT_GUI_MSWIN
886! if "$(VIMDLL)" == "yes"
887SUBSYSTEM_CON = console
888GVIM = g$(VIM)
889CUI_INCL = iscygpty.h
890CUI_OBJ = $(OUTDIR)\iscygpty.obj
891RCFLAGS = $(RCFLAGS) -DVIMDLL
892! else
893VIM = g$(VIM)
894! endif
895GUI_INCL = \
896	gui.h
897GUI_OBJ = \
898	$(OUTDIR)\gui.obj \
899	$(OUTDIR)\gui_beval.obj \
900	$(OUTDIR)\gui_w32.obj
901GUI_LIB = \
902	gdi32.lib version.lib $(IME_LIB) \
903	winspool.lib comctl32.lib advapi32.lib shell32.lib netapi32.lib \
904	/machine:$(CPU)
905!else
906SUBSYSTEM = console
907CUI_INCL = iscygpty.h
908CUI_OBJ = $(OUTDIR)\iscygpty.obj
909!endif
910SUBSYSTEM_TOOLS = console
911
912XDIFF_OBJ = $(OBJDIR)/xdiffi.obj \
913	$(OBJDIR)/xemit.obj \
914	$(OBJDIR)/xprepare.obj \
915	$(OBJDIR)/xutils.obj \
916	$(OBJDIR)/xhistogram.obj \
917	$(OBJDIR)/xpatience.obj
918
919XDIFF_DEPS = \
920	xdiff/xdiff.h \
921	xdiff/xdiffi.h \
922	xdiff/xemit.h \
923	xdiff/xinclude.h \
924	xdiff/xmacros.h \
925	xdiff/xprepare.h \
926	xdiff/xtypes.h \
927	xdiff/xutils.h
928
929
930!if "$(SUBSYSTEM_VER)" != ""
931SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER)
932SUBSYSTEM_TOOLS = $(SUBSYSTEM_TOOLS),$(SUBSYSTEM_VER)
933! if "$(VIMDLL)" == "yes"
934SUBSYSTEM_CON = $(SUBSYSTEM_CON),$(SUBSYSTEM_VER)
935! endif
936# Pass SUBSYSTEM_VER to GvimExt and other tools
937MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) SUBSYSTEM_VER=$(SUBSYSTEM_VER)
938MAKEFLAGS_TOOLS = $(MAKEFLAGS_TOOLS) SUBSYSTEM_VER=$(SUBSYSTEM_VER)
939!endif
940
941!if "$(GUI)" == "yes" && "$(DIRECTX)" == "yes"
942CFLAGS = $(CFLAGS) $(DIRECTX_DEFS)
943GUI_INCL = $(GUI_INCL) $(DIRECTX_INCL)
944GUI_OBJ = $(GUI_OBJ) $(DIRECTX_OBJ)
945!endif
946
947# iconv.dll library (dynamically loaded)
948!ifndef ICONV
949ICONV = yes
950!endif
951!if "$(ICONV)" == "yes"
952CFLAGS = $(CFLAGS) -DDYNAMIC_ICONV
953!endif
954
955# libintl.dll library
956!ifndef GETTEXT
957GETTEXT = yes
958!endif
959!if "$(GETTEXT)" == "yes"
960CFLAGS = $(CFLAGS) -DDYNAMIC_GETTEXT
961!endif
962
963# TCL interface
964!ifdef TCL
965! ifndef TCL_VER
966TCL_VER = 86
967TCL_VER_LONG = 8.6
968! endif
969! message Tcl requested (version $(TCL_VER)) - root dir is "$(TCL)"
970! if "$(DYNAMIC_TCL)" == "yes"
971!  message Tcl DLL will be loaded dynamically
972!  ifndef TCL_DLL
973TCL_DLL = tcl$(TCL_VER).dll
974!  endif
975CFLAGS  = $(CFLAGS) -DFEAT_TCL -DDYNAMIC_TCL -DDYNAMIC_TCL_DLL=\"$(TCL_DLL)\" \
976		-DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
977TCL_OBJ	= $(OUTDIR)\if_tcl.obj
978TCL_INC	= /I "$(TCL)\Include" /I "$(TCL)"
979TCL_LIB = "$(TCL)\lib\tclstub$(TCL_VER).lib"
980! else
981CFLAGS  = $(CFLAGS) -DFEAT_TCL
982TCL_OBJ	= $(OUTDIR)\if_tcl.obj
983TCL_INC	= /I "$(TCL)\Include" /I "$(TCL)"
984TCL_LIB = $(TCL)\lib\tcl$(TCL_VER)vc.lib
985! endif
986!endif
987
988# Lua interface
989!ifdef LUA
990! ifndef LUA_VER
991LUA_VER = 53
992! endif
993! message Lua requested (version $(LUA_VER)) - root dir is "$(LUA)"
994! if "$(DYNAMIC_LUA)" == "yes"
995!  message Lua DLL will be loaded dynamically
996!  endif
997CFLAGS = $(CFLAGS) -DFEAT_LUA
998LUA_OBJ = $(OUTDIR)\if_lua.obj
999LUA_INC = /I "$(LUA)\include" /I "$(LUA)"
1000! if "$(DYNAMIC_LUA)" == "yes"
1001CFLAGS = $(CFLAGS) -DDYNAMIC_LUA \
1002		-DDYNAMIC_LUA_DLL=\"lua$(LUA_VER).dll\"
1003LUA_LIB = /nodefaultlib:lua$(LUA_VER).lib
1004! else
1005LUA_LIB = "$(LUA)\lib\lua$(LUA_VER).lib"
1006! endif
1007!endif
1008
1009!ifdef PYTHON
1010! ifdef PYTHON3
1011DYNAMIC_PYTHON=yes
1012DYNAMIC_PYTHON3=yes
1013! endif
1014!endif
1015
1016# PYTHON interface
1017!ifdef PYTHON
1018! ifndef PYTHON_VER
1019PYTHON_VER = 27
1020! endif
1021! message Python requested (version $(PYTHON_VER)) - root dir is "$(PYTHON)"
1022! if "$(DYNAMIC_PYTHON)" == "yes"
1023!  message Python DLL will be loaded dynamically
1024! endif
1025CFLAGS = $(CFLAGS) -DFEAT_PYTHON
1026PYTHON_OBJ = $(OUTDIR)\if_python.obj
1027PYTHON_INC = /I "$(PYTHON)\Include" /I "$(PYTHON)\PC"
1028! if "$(DYNAMIC_PYTHON)" == "yes"
1029CFLAGS = $(CFLAGS) -DDYNAMIC_PYTHON \
1030		-DDYNAMIC_PYTHON_DLL=\"python$(PYTHON_VER).dll\"
1031PYTHON_LIB = /nodefaultlib:python$(PYTHON_VER).lib
1032! else
1033PYTHON_LIB = $(PYTHON)\libs\python$(PYTHON_VER).lib
1034! endif
1035!endif
1036
1037# PYTHON3 interface
1038!ifdef PYTHON3
1039! ifndef PYTHON3_VER
1040PYTHON3_VER = 36
1041! endif
1042! ifndef DYNAMIC_PYTHON3_DLL
1043DYNAMIC_PYTHON3_DLL = python$(PYTHON3_VER).dll
1044! endif
1045! message Python3 requested (version $(PYTHON3_VER)) - root dir is "$(PYTHON3)"
1046! if "$(DYNAMIC_PYTHON3)" == "yes"
1047!  message Python3 DLL will be loaded dynamically
1048! endif
1049CFLAGS = $(CFLAGS) -DFEAT_PYTHON3
1050PYTHON3_OBJ = $(OUTDIR)\if_python3.obj
1051PYTHON3_INC = /I "$(PYTHON3)\Include" /I "$(PYTHON3)\PC"
1052! if "$(DYNAMIC_PYTHON3)" == "yes"
1053CFLAGS = $(CFLAGS) -DDYNAMIC_PYTHON3 \
1054		-DDYNAMIC_PYTHON3_DLL=\"$(DYNAMIC_PYTHON3_DLL)\"
1055PYTHON3_LIB = /nodefaultlib:python$(PYTHON3_VER).lib
1056! else
1057CFLAGS = $(CFLAGS) -DPYTHON3_DLL=\"$(DYNAMIC_PYTHON3_DLL)\"
1058PYTHON3_LIB = $(PYTHON3)\libs\python$(PYTHON3_VER).lib
1059! endif
1060!endif
1061
1062# MzScheme interface
1063!ifdef MZSCHEME
1064! message MzScheme requested - root dir is "$(MZSCHEME)"
1065! ifndef MZSCHEME_VER
1066MZSCHEME_VER = 3m_a0solc
1067! endif
1068! ifndef MZSCHEME_COLLECTS
1069MZSCHEME_COLLECTS=$(MZSCHEME)\collects
1070! endif
1071CFLAGS = $(CFLAGS) -DFEAT_MZSCHEME -I "$(MZSCHEME)\include"
1072! if EXIST("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib")
1073MZSCHEME_MAIN_LIB=mzsch
1074! else
1075MZSCHEME_MAIN_LIB=racket
1076! endif
1077! if (EXIST("$(MZSCHEME)\lib\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll") \
1078     && !EXIST("$(MZSCHEME)\lib\libmzgc$(MZSCHEME_VER).dll")) \
1079    || (EXIST("$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib") \
1080        && !EXIST("$(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib"))
1081!  message Building with Precise GC
1082MZSCHEME_PRECISE_GC = yes
1083CFLAGS = $(CFLAGS) -DMZ_PRECISE_GC
1084! endif
1085! if "$(DYNAMIC_MZSCHEME)" == "yes"
1086!  message MzScheme DLLs will be loaded dynamically
1087CFLAGS = $(CFLAGS) -DDYNAMIC_MZSCHEME
1088!  if "$(MZSCHEME_PRECISE_GC)" == "yes"
1089# Precise GC does not use separate dll
1090CFLAGS = $(CFLAGS) \
1091	 -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" \
1092	 -DDYNAMIC_MZGC_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\"
1093!  else
1094CFLAGS = $(CFLAGS) \
1095	 -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" \
1096	 -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
1097!  endif
1098! else
1099!  if "$(MZSCHEME_DEBUG)" == "yes"
1100CFLAGS = $(CFLAGS) -DMZSCHEME_FORCE_GC
1101!  endif
1102!  if "$(MZSCHEME_PRECISE_GC)" == "yes"
1103# Precise GC does not use separate dll
1104!   if EXIST("$(MZSCHEME)\lib\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).def")
1105# create .lib from .def
1106MZSCHEME_LIB = lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib
1107MZSCHEME_EXTRA_DEP = lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib
1108!   else
1109MZSCHEME_LIB = "$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib"
1110!   endif
1111!  else
1112MZSCHEME_LIB = "$(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib" \
1113		"$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib"
1114!  endif
1115! endif
1116MZSCHEME_OBJ = $(OUTDIR)\if_mzsch.obj
1117# increase stack size
1118MZSCHEME_LIB = $(MZSCHEME_LIB) /STACK:8388608
1119MZSCHEME_INCL = if_mzsch.h
1120!endif
1121
1122# Perl interface
1123!ifdef PERL
1124! ifndef PERL_VER
1125PERL_VER = 524
1126! endif
1127! message Perl requested (version $(PERL_VER)) - root dir is "$(PERL)"
1128! if "$(DYNAMIC_PERL)" == "yes"
1129!  if $(PERL_VER) >= 56
1130!   message Perl DLL will be loaded dynamically
1131!  else
1132!   message Dynamic loading is not supported for Perl versions earlier than 5.6.0
1133!   message Reverting to static loading...
1134!   undef DYNAMIC_PERL
1135!  endif
1136! endif
1137
1138# Is Perl installed in architecture-specific directories?
1139! if exist($(PERL)\Bin\MSWin32-x86)
1140PERL_ARCH = \MSWin32-x86
1141! endif
1142
1143PERL_INCDIR = $(PERL)\Lib$(PERL_ARCH)\Core
1144
1145# Version-dependent stuff
1146! if $(PERL_VER) == 55
1147PERL_LIB = $(PERL_INCDIR)\perl.lib
1148! else
1149PERL_DLL = perl$(PERL_VER).dll
1150!  if exist($(PERL_INCDIR)\perl$(PERL_VER).lib)
1151PERL_LIB = $(PERL_INCDIR)\perl$(PERL_VER).lib
1152!  else
1153# For ActivePerl 5.18 and later
1154PERL_LIB = $(PERL_INCDIR)\libperl$(PERL_VER).a
1155!  endif
1156! endif
1157
1158CFLAGS = $(CFLAGS) -DFEAT_PERL -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS
1159
1160# Do we want to load Perl dynamically?
1161! if "$(DYNAMIC_PERL)" == "yes"
1162CFLAGS = $(CFLAGS) -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"$(PERL_DLL)\"
1163!  undef PERL_LIB
1164! endif
1165
1166PERL_EXE = $(PERL)\Bin$(PERL_ARCH)\perl
1167PERL_INC = /I $(PERL_INCDIR)
1168! if $(MSVC_MAJOR) <= 11
1169# ActivePerl 5.20+ requires stdbool.h but VC2012 or earlier doesn't have it.
1170# Use a stub stdbool.h.
1171PERL_INC = $(PERL_INC) /I if_perl_msvc
1172! endif
1173PERL_OBJ = $(OUTDIR)\if_perl.obj $(OUTDIR)\if_perlsfio.obj
1174XSUBPP = $(PERL)\lib\ExtUtils\xsubpp
1175! if exist($(XSUBPP))
1176XSUBPP = $(PERL_EXE) $(XSUBPP)
1177! else
1178XSUBPP = xsubpp
1179! endif
1180XSUBPP_TYPEMAP = $(PERL)\lib\ExtUtils\typemap
1181
1182!endif
1183
1184#
1185# Support Ruby interface
1186#
1187!ifdef RUBY
1188#  Set default value
1189! ifndef RUBY_VER
1190RUBY_VER = 22
1191! endif
1192! ifndef RUBY_VER_LONG
1193RUBY_VER_LONG = 2.2.0
1194! endif
1195! ifndef RUBY_API_VER_LONG
1196RUBY_API_VER_LONG = $(RUBY_VER_LONG)
1197! endif
1198! ifndef RUBY_API_VER
1199RUBY_API_VER = $(RUBY_API_VER_LONG:.=)
1200! endif
1201
1202! if $(RUBY_VER) >= 18
1203
1204!  ifndef RUBY_PLATFORM
1205!   if "$(CPU)" == "i386"
1206RUBY_PLATFORM = i386-mswin32
1207!   else # CPU
1208RUBY_PLATFORM = x64-mswin64
1209!   endif # CPU
1210!   if $(MSVCRT_VER) >= 70 && $(RUBY_VER) > 19
1211RUBY_PLATFORM = $(RUBY_PLATFORM)_$(MSVCRT_VER)
1212!   endif # MSVCRT_VER
1213!  endif # RUBY_PLATFORM
1214
1215!  ifndef RUBY_INSTALL_NAME
1216!   ifndef RUBY_MSVCRT_NAME
1217# Base name of msvcrXX.dll which is used by ruby's dll.
1218RUBY_MSVCRT_NAME = $(MSVCRT_NAME)
1219!   endif # RUBY_MSVCRT_NAME
1220!   if "$(CPU)" == "i386"
1221RUBY_INSTALL_NAME = $(RUBY_MSVCRT_NAME)-ruby$(RUBY_API_VER)
1222!   else # CPU
1223RUBY_INSTALL_NAME = x64-$(RUBY_MSVCRT_NAME)-ruby$(RUBY_API_VER)
1224!   endif # CPU
1225!  endif # RUBY_INSTALL_NAME
1226
1227! else # $(RUBY_VER) >= 18
1228
1229!  ifndef RUBY_PLATFORM
1230RUBY_PLATFORM = i586-mswin32
1231!  endif
1232!  ifndef RUBY_INSTALL_NAME
1233RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
1234!  endif
1235
1236! endif # $(RUBY_VER) >= 18
1237
1238! message Ruby requested (version $(RUBY_VER)) - root dir is "$(RUBY)"
1239CFLAGS = $(CFLAGS) -DFEAT_RUBY
1240RUBY_OBJ = $(OUTDIR)\if_ruby.obj
1241! if $(RUBY_VER) >= 19
1242RUBY_INC = /I "$(RUBY)\include\ruby-$(RUBY_API_VER_LONG)" /I "$(RUBY)\include\ruby-$(RUBY_API_VER_LONG)\$(RUBY_PLATFORM)"
1243! else
1244RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_API_VER_LONG)\$(RUBY_PLATFORM)"
1245! endif
1246RUBY_LIB = $(RUBY)\lib\$(RUBY_INSTALL_NAME).lib
1247# Do we want to load Ruby dynamically?
1248! if "$(DYNAMIC_RUBY)" == "yes"
1249!  message Ruby DLL will be loaded dynamically
1250CFLAGS = $(CFLAGS) -DDYNAMIC_RUBY \
1251		-DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\"
1252!  undef RUBY_LIB
1253! endif
1254CFLAGS = $(CFLAGS) -DRUBY_VERSION=$(RUBY_VER)
1255!endif # RUBY
1256
1257#
1258# Support PostScript printing
1259#
1260!if "$(POSTSCRIPT)" == "yes"
1261CFLAGS = $(CFLAGS) -DMSWINPS
1262!endif # POSTSCRIPT
1263
1264#
1265# FEATURES: TINY, SMALL, NORMAL, BIG or HUGE
1266#
1267CFLAGS = $(CFLAGS) -DFEAT_$(FEATURES)
1268
1269#
1270# MODIFIED_BY - Name of who modified a release version
1271#
1272!if "$(MODIFIED_BY)" != ""
1273CFLAGS = $(CFLAGS) -DMODIFIED_BY=\"$(MODIFIED_BY)\"
1274!endif
1275
1276#
1277# Always generate the .pdb file, so that we get debug symbols that can be used
1278# on a crash (doesn't add overhead to the executable).
1279# Generate edit-and-continue debug info when no optimization - allows to
1280# debug more conveniently (able to look at variables which are in registers)
1281#
1282CFLAGS = $(CFLAGS) /Fd$(OUTDIR)/ $(DEBUGINFO)
1283!if "$(VIMDLL)" == "yes"
1284LINK_PDB = /PDB:$(VIMDLLBASE).pdb -debug
1285!else
1286LINK_PDB = /PDB:$(VIM).pdb -debug
1287!endif
1288
1289#
1290# End extra feature include
1291#
1292!message
1293
1294# CFLAGS with /Fo$(OUTDIR)/
1295CFLAGS_OUTDIR=$(CFLAGS) /Fo$(OUTDIR)/
1296
1297# Add /opt:ref to remove unreferenced functions and data even when /DEBUG is
1298# added.
1299conflags = /nologo /opt:ref
1300
1301PATHDEF_SRC = $(OUTDIR)\pathdef.c
1302
1303!IF "$(MAP)" == "yes"
1304# "/map" is for debugging
1305conflags = $(conflags) /map
1306!ELSEIF "$(MAP)" == "lines"
1307# "/mapinfo:lines" is for debugging, only works for VC6 and later
1308conflags = $(conflags) /map /mapinfo:lines
1309!ENDIF
1310
1311LINKARGS1 = $(linkdebug) $(conflags)
1312LINKARGS2 = $(CON_LIB) $(GUI_LIB) $(NODEFAULTLIB) $(LIBC) $(OLE_LIB) user32.lib \
1313		$(LUA_LIB) $(MZSCHEME_LIB) $(PERL_LIB) $(PYTHON_LIB) $(PYTHON3_LIB) $(RUBY_LIB) \
1314		$(TCL_LIB) $(SOUND_LIB) $(NETBEANS_LIB) $(XPM_LIB) $(SOD_LIB) $(LINK_PDB)
1315
1316# Report link time code generation progress if used.
1317!ifdef NODEBUG
1318! if $(MSVC_MAJOR) >= 8
1319!  if "$(OPTIMIZE)" != "SPACE"
1320LINKARGS1 = $(LINKARGS1) /LTCG:STATUS
1321!  endif
1322! endif
1323!endif
1324
1325!if $(MSVC_MAJOR) >= 11 && "$(CPU)" == "AMD64" && "$(GUI)" == "yes"
1326# This option is required for VC2012 or later so that 64-bit gvim can
1327# accept D&D from 32-bit applications.  NOTE: This disables 64-bit ASLR,
1328# therefore the security level becomes as same as VC2010.
1329LINKARGS1 = $(LINKARGS1) /HIGHENTROPYVA:NO
1330!endif
1331
1332!if "$(VIMDLL)" == "yes"
1333MAIN_TARGET = $(GVIM).exe $(VIM).exe $(VIMDLLBASE).dll
1334!else
1335MAIN_TARGET = $(VIM).exe
1336!endif
1337
1338# Target to run individual tests.
1339VIMTESTTARGET = $(VIM).exe
1340
1341all:	$(MAIN_TARGET) \
1342	vimrun.exe \
1343	install.exe \
1344	uninstall.exe \
1345	xxd/xxd.exe \
1346	tee/tee.exe \
1347	GvimExt/gvimext.dll
1348
1349# To get around the command line limit: Make use of nmake's response files to
1350# capture the arguments for $(link) in a file  using the @<<ARGS<< syntax.
1351
1352!if "$(VIMDLL)" == "yes"
1353
1354$(VIMDLLBASE).dll: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \
1355		$(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
1356		$(TERM_OBJ) $(SOUND_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
1357		version.c version.h
1358	$(CC) $(CFLAGS_OUTDIR) version.c
1359	$(link) @<<
1360$(LINKARGS1) /dll -out:$(VIMDLLBASE).dll $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ)
1361$(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ)
1362$(TCL_OBJ) $(TERM_OBJ) $(SOUND_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ)
1363$(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
1364<<
1365
1366$(GVIM).exe: $(OUTDIR) $(EXEOBJG) $(VIMDLLBASE).dll
1367	$(link) $(LINKARGS1) /subsystem:$(SUBSYSTEM) -out:$(GVIM).exe $(EXEOBJG) $(VIMDLLBASE).lib $(LIBC)
1368	if exist $(GVIM).exe.manifest mt.exe -nologo -manifest $(GVIM).exe.manifest -updateresource:$(GVIM).exe;1
1369
1370$(VIM).exe: $(OUTDIR) $(EXEOBJC) $(VIMDLLBASE).dll
1371	$(link) $(LINKARGS1) /subsystem:$(SUBSYSTEM_CON) -out:$(VIM).exe $(EXEOBJC) $(VIMDLLBASE).lib $(LIBC)
1372	if exist $(VIM).exe.manifest mt.exe -nologo -manifest $(VIM).exe.manifest -updateresource:$(VIM).exe;1
1373
1374!else
1375
1376$(VIM).exe: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \
1377		$(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
1378		$(TERM_OBJ) $(SOUND_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
1379		version.c version.h
1380	$(CC) $(CFLAGS_OUTDIR) version.c
1381	$(link) @<<
1382$(LINKARGS1) /subsystem:$(SUBSYSTEM) -out:$(VIM).exe $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ)
1383$(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ)
1384$(TCL_OBJ) $(TERM_OBJ) $(SOUND_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ)
1385$(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
1386<<
1387	if exist $(VIM).exe.manifest mt.exe -nologo -manifest $(VIM).exe.manifest -updateresource:$(VIM).exe;1
1388
1389!endif
1390
1391$(VIM): $(VIM).exe
1392
1393$(OUTDIR):
1394	if not exist $(OUTDIR)/nul  mkdir $(OUTDIR)
1395
1396CFLAGS_INST = /nologo /O2 -DNDEBUG -DWIN32 -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) $(CFLAGS_DEPR)
1397
1398install.exe: dosinst.c dosinst.h version.h
1399	$(CC) $(CFLAGS_INST) dosinst.c kernel32.lib shell32.lib \
1400		user32.lib ole32.lib advapi32.lib uuid.lib \
1401		-link -subsystem:$(SUBSYSTEM_TOOLS)
1402	- if exist install.exe del install.exe
1403	ren dosinst.exe install.exe
1404
1405uninstall.exe: uninstall.c dosinst.h version.h
1406	$(CC) $(CFLAGS_INST) uninstall.c shell32.lib advapi32.lib \
1407		-link -subsystem:$(SUBSYSTEM_TOOLS)
1408
1409vimrun.exe: vimrun.c
1410	$(CC) /nologo -DNDEBUG vimrun.c -link -subsystem:$(SUBSYSTEM_TOOLS)
1411
1412xxd/xxd.exe: xxd/xxd.c
1413	cd xxd
1414	$(MAKE) /NOLOGO -f Make_mvc.mak $(MAKEFLAGS_TOOLS)
1415	cd ..
1416
1417tee/tee.exe: tee/tee.c
1418	cd tee
1419	$(MAKE) /NOLOGO -f Make_mvc.mak $(MAKEFLAGS_TOOLS)
1420	cd ..
1421
1422GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
1423	cd GvimExt
1424	$(MAKE) /NOLOGO -f Makefile $(MAKEFLAGS_GVIMEXT)
1425	cd ..
1426
1427
1428tags: notags
1429	$(CTAGS) $(TAGS_FILES)
1430
1431notags:
1432	- if exist tags del tags
1433
1434clean: testclean
1435	- if exist $(OUTDIR)/nul $(DEL_TREE) $(OUTDIR)
1436	- if exist *.obj del *.obj
1437	- if exist $(VIM).exe del $(VIM).exe
1438	- if exist $(VIM).ilk del $(VIM).ilk
1439	- if exist $(VIM).pdb del $(VIM).pdb
1440	- if exist $(VIM).map del $(VIM).map
1441	- if exist $(VIM).ncb del $(VIM).ncb
1442!if "$(VIMDLL)" == "yes"
1443	- if exist $(GVIM).exe del $(GVIM).exe
1444	- if exist $(GVIM).map del $(GVIM).map
1445	- if exist $(VIMDLLBASE).dll del $(VIMDLLBASE).dll
1446	- if exist $(VIMDLLBASE).lib del $(VIMDLLBASE).lib
1447	- if exist $(VIMDLLBASE).exp del $(VIMDLLBASE).exp
1448	- if exist $(VIMDLLBASE).pdb del $(VIMDLLBASE).pdb
1449	- if exist $(VIMDLLBASE).map del $(VIMDLLBASE).map
1450!endif
1451	- if exist vimrun.exe del vimrun.exe
1452	- if exist install.exe del install.exe
1453	- if exist uninstall.exe del uninstall.exe
1454	- if exist if_perl.c del if_perl.c
1455	- if exist auto\if_perl.c del auto\if_perl.c
1456	- if exist dimm.h del dimm.h
1457	- if exist dimm_i.c del dimm_i.c
1458	- if exist dimm.tlb del dimm.tlb
1459	- if exist dosinst.exe del dosinst.exe
1460	cd xxd
1461	$(MAKE) /NOLOGO -f Make_mvc.mak clean
1462	cd ..
1463	cd tee
1464	$(MAKE) /NOLOGO -f Make_mvc.mak clean
1465	cd ..
1466	cd GvimExt
1467	$(MAKE) /NOLOGO -f Makefile clean
1468	cd ..
1469
1470# Run vim script to generate the Ex command lookup table.
1471# This only needs to be run when a command name has been added or changed.
1472# If this fails because you don't have Vim yet, first build and install Vim
1473# without changes.
1474cmdidxs: ex_cmds.h
1475	vim --clean -X --not-a-term -u create_cmdidxs.vim
1476
1477test:
1478	cd testdir
1479	$(MAKE) /NOLOGO -f Make_dos.mak
1480	cd ..
1481
1482testgvim:
1483	cd testdir
1484	$(MAKE) /NOLOGO -f Make_dos.mak VIMPROG=..\gvim
1485	cd ..
1486
1487testtiny:
1488	cd testdir
1489	$(MAKE) /NOLOGO -f Make_dos.mak tiny
1490	cd ..
1491
1492testgvimtiny:
1493	cd testdir
1494	$(MAKE) /NOLOGO -f Make_dos.mak tiny VIMPROG=..\gvim
1495	cd ..
1496
1497testclean:
1498	cd testdir
1499	$(MAKE) /NOLOGO -f Make_dos.mak clean
1500	cd ..
1501
1502# Run individual OLD style test.
1503# These do not depend on the executable, compile it when needed.
1504$(SCRIPTS_TINY):
1505	cd testdir
1506	- if exist [email protected] del [email protected]
1507	$(MAKE) /NOLOGO -f Make_dos.mak VIMPROG=..\$(VIMTESTTARGET) nolog
1508	$(MAKE) /NOLOGO -f Make_dos.mak VIMPROG=..\$(VIMTESTTARGET) [email protected]
1509	@ if exist test.log ( type test.log & exit /b 1 )
1510	cd ..
1511
1512# Run individual NEW style test.
1513# These do not depend on the executable, compile it when needed.
1514$(NEW_TESTS):
1515	cd testdir
1516	- if exist [email protected] del [email protected]
1517	$(MAKE) /NOLOGO -f Make_dos.mak VIMPROG=..\$(VIMTESTTARGET) nolog
1518	$(MAKE) /NOLOGO -f Make_dos.mak VIMPROG=..\$(VIMTESTTARGET) [email protected]
1519	$(MAKE) /NOLOGO -f Make_dos.mak VIMPROG=..\$(VIMTESTTARGET) report
1520	cd ..
1521
1522# Run Vim9 tests.
1523# These do not depend on the executable, compile it when needed.
1524test_vim9:
1525	cd testdir
1526	-del test_vim9_*.res
1527	$(MAKE) /NOLOGO -f Make_dos.mak VIMPROG=..\$(VIMTESTTARGET) nolog
1528	$(MAKE) /NOLOGO -f Make_dos.mak VIMPROG=..\$(VIMTESTTARGET) $(TEST_VIM9_RES)
1529	$(MAKE) /NOLOGO -f Make_dos.mak VIMPROG=..\$(VIMTESTTARGET) report
1530	cd ..
1531
1532###########################################################################
1533
1534# Create a default rule for transforming .c files to .obj files in $(OUTDIR)
1535.c{$(OUTDIR)/}.obj::
1536	$(CC) $(CFLAGS_OUTDIR) $<
1537
1538# Create a default rule for xdiff.
1539{xdiff/}.c{$(OUTDIR)/}.obj::
1540	$(CC) $(CFLAGS_OUTDIR) $<
1541
1542# Create a default rule for transforming .cpp files to .obj files in $(OUTDIR)
1543.cpp{$(OUTDIR)/}.obj::
1544	$(CC) $(CFLAGS_OUTDIR) $<
1545
1546$(OUTDIR)/alloc.obj:	$(OUTDIR) alloc.c  $(INCL)
1547
1548$(OUTDIR)/arabic.obj:	$(OUTDIR) arabic.c  $(INCL)
1549
1550$(OUTDIR)/arglist.obj:	$(OUTDIR) arglist.c  $(INCL)
1551
1552$(OUTDIR)/autocmd.obj:	$(OUTDIR) autocmd.c  $(INCL)
1553
1554$(OUTDIR)/beval.obj:	$(OUTDIR) beval.c  $(INCL)
1555
1556$(OUTDIR)/blob.obj:	$(OUTDIR) blob.c  $(INCL)
1557
1558$(OUTDIR)/blowfish.obj:	$(OUTDIR) blowfish.c  $(INCL)
1559
1560$(OUTDIR)/buffer.obj:	$(OUTDIR) buffer.c  $(INCL) version.h
1561
1562$(OUTDIR)/bufwrite.obj:	$(OUTDIR) bufwrite.c  $(INCL)
1563
1564$(OUTDIR)/change.obj:	$(OUTDIR) change.c  $(INCL)
1565
1566$(OUTDIR)/charset.obj:	$(OUTDIR) charset.c  $(INCL)
1567
1568$(OUTDIR)/cindent.obj:	$(OUTDIR) cindent.c  $(INCL)
1569
1570$(OUTDIR)/clientserver.obj:	$(OUTDIR) clientserver.c  $(INCL)
1571
1572$(OUTDIR)/clipboard.obj:	$(OUTDIR) clipboard.c  $(INCL)
1573
1574$(OUTDIR)/cmdexpand.obj:	$(OUTDIR) cmdexpand.c  $(INCL)
1575
1576$(OUTDIR)/cmdhist.obj:	$(OUTDIR) cmdhist.c  $(INCL)
1577
1578$(OUTDIR)/crypt.obj:	$(OUTDIR) crypt.c  $(INCL)
1579
1580$(OUTDIR)/crypt_zip.obj: $(OUTDIR) crypt_zip.c  $(INCL)
1581
1582$(OUTDIR)/debugger.obj:	$(OUTDIR) debugger.c  $(INCL)
1583
1584$(OUTDIR)/dict.obj:	$(OUTDIR) dict.c  $(INCL)
1585
1586$(OUTDIR)/diff.obj:	$(OUTDIR) diff.c  $(INCL)
1587
1588$(OUTDIR)/xdiffi.obj:	$(OUTDIR) xdiff/xdiffi.c  $(XDIFF_DEPS)
1589
1590$(OUTDIR)/xemit.obj:	$(OUTDIR) xdiff/xemit.c  $(XDIFF_DEPS)
1591
1592$(OUTDIR)/xprepare.obj:	$(OUTDIR) xdiff/xprepare.c  $(XDIFF_DEPS)
1593
1594$(OUTDIR)/xutils.obj:	$(OUTDIR) xdiff/xutils.c  $(XDIFF_DEPS)
1595
1596$(OUTDIR)/xhistogram.obj:	$(OUTDIR) xdiff/xhistogram.c  $(XDIFF_DEPS)
1597
1598$(OUTDIR)/xpatience.obj:	$(OUTDIR) xdiff/xpatience.c  $(XDIFF_DEPS)
1599
1600$(OUTDIR)/digraph.obj:	$(OUTDIR) digraph.c  $(INCL)
1601
1602$(OUTDIR)/drawline.obj:	$(OUTDIR) drawline.c  $(INCL)
1603
1604$(OUTDIR)/drawscreen.obj:	$(OUTDIR) drawscreen.c  $(INCL)
1605
1606$(OUTDIR)/edit.obj:	$(OUTDIR) edit.c  $(INCL)
1607
1608$(OUTDIR)/eval.obj:	$(OUTDIR) eval.c  $(INCL)
1609
1610$(OUTDIR)/evalbuffer.obj:	$(OUTDIR) evalbuffer.c  $(INCL)
1611
1612$(OUTDIR)/evalfunc.obj:	$(OUTDIR) evalfunc.c  $(INCL) version.h
1613
1614$(OUTDIR)/evalvars.obj:	$(OUTDIR) evalvars.c  $(INCL) version.h
1615
1616$(OUTDIR)/evalwindow.obj:	$(OUTDIR) evalwindow.c  $(INCL)
1617
1618$(OUTDIR)/ex_cmds.obj:	$(OUTDIR) ex_cmds.c  $(INCL) version.h
1619
1620$(OUTDIR)/ex_cmds2.obj:	$(OUTDIR) ex_cmds2.c  $(INCL) version.h
1621
1622$(OUTDIR)/ex_docmd.obj:	$(OUTDIR) ex_docmd.c  $(INCL) ex_cmdidxs.h
1623
1624$(OUTDIR)/ex_eval.obj:	$(OUTDIR) ex_eval.c  $(INCL)
1625
1626$(OUTDIR)/ex_getln.obj:	$(OUTDIR) ex_getln.c  $(INCL)
1627
1628$(OUTDIR)/fileio.obj:	$(OUTDIR) fileio.c  $(INCL)
1629
1630$(OUTDIR)/filepath.obj:	$(OUTDIR) filepath.c  $(INCL)
1631
1632$(OUTDIR)/findfile.obj:	$(OUTDIR) findfile.c  $(INCL)
1633
1634$(OUTDIR)/float.obj:	$(OUTDIR) float.c  $(INCL)
1635
1636$(OUTDIR)/fold.obj:	$(OUTDIR) fold.c  $(INCL)
1637
1638$(OUTDIR)/getchar.obj:	$(OUTDIR) getchar.c  $(INCL)
1639
1640$(OUTDIR)/gui_xim.obj:	$(OUTDIR) gui_xim.c  $(INCL)
1641
1642$(OUTDIR)/hardcopy.obj:	$(OUTDIR) hardcopy.c  $(INCL) version.h
1643
1644$(OUTDIR)/hashtab.obj:	$(OUTDIR) hashtab.c  $(INCL)
1645
1646$(OUTDIR)/help.obj:	$(OUTDIR) help.c  $(INCL)
1647
1648$(OUTDIR)/highlight.obj:	$(OUTDIR) highlight.c  $(INCL)
1649
1650$(OUTDIR)/indent.obj:	$(OUTDIR) indent.c  $(INCL)
1651
1652$(OUTDIR)/insexpand.obj:	$(OUTDIR) insexpand.c  $(INCL)
1653
1654$(OUTDIR)/gui.obj:	$(OUTDIR) gui.c  $(INCL) $(GUI_INCL)
1655
1656$(OUTDIR)/gui_beval.obj:	$(OUTDIR) gui_beval.c $(INCL) $(GUI_INCL)
1657
1658$(OUTDIR)/gui_w32.obj:	$(OUTDIR) gui_w32.c $(INCL) $(GUI_INCL) version.h
1659
1660$(OUTDIR)/gui_dwrite.obj:	$(OUTDIR) gui_dwrite.cpp gui_dwrite.h
1661
1662$(OUTDIR)/if_cscope.obj: $(OUTDIR) if_cscope.c  $(INCL) if_cscope.h
1663
1664$(OUTDIR)/if_lua.obj: $(OUTDIR) if_lua.c  $(INCL)
1665	$(CC) $(CFLAGS_OUTDIR) $(LUA_INC) if_lua.c
1666
1667auto/if_perl.c : if_perl.xs typemap
1668	-if not exist auto/nul mkdir auto
1669	$(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
1670		-typemap typemap if_perl.xs -output $@
1671
1672$(OUTDIR)/if_perl.obj: $(OUTDIR) auto/if_perl.c  $(INCL)
1673	$(CC) $(CFLAGS_OUTDIR) $(PERL_INC) auto/if_perl.c
1674
1675$(OUTDIR)/if_perlsfio.obj: $(OUTDIR) if_perlsfio.c  $(INCL)
1676	$(CC) $(CFLAGS_OUTDIR) $(PERL_INC) if_perlsfio.c
1677
1678$(OUTDIR)/if_mzsch.obj: $(OUTDIR) if_mzsch.c $(MZSCHEME_INCL) $(INCL) $(MZSCHEME_EXTRA_DEP)
1679	$(CC) $(CFLAGS_OUTDIR) if_mzsch.c \
1680		-DMZSCHEME_COLLECTS="\"$(MZSCHEME_COLLECTS:\=\\)\""
1681
1682lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib:
1683	lib /DEF:"$(MZSCHEME)\lib\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).def"
1684
1685$(OUTDIR)/if_python.obj: $(OUTDIR) if_python.c if_py_both.h $(INCL)
1686	$(CC) $(CFLAGS_OUTDIR) $(PYTHON_INC) if_python.c
1687
1688$(OUTDIR)/if_python3.obj: $(OUTDIR) if_python3.c if_py_both.h $(INCL)
1689	$(CC) $(CFLAGS_OUTDIR) $(PYTHON3_INC) if_python3.c
1690
1691$(OUTDIR)/if_ole.obj: $(OUTDIR) if_ole.cpp  $(INCL) if_ole.h
1692
1693$(OUTDIR)/if_ruby.obj: $(OUTDIR) if_ruby.c  $(INCL) version.h
1694	$(CC) $(CFLAGS_OUTDIR) $(RUBY_INC) if_ruby.c
1695
1696$(OUTDIR)/if_tcl.obj: $(OUTDIR) if_tcl.c  $(INCL)
1697	$(CC) $(CFLAGS_OUTDIR) $(TCL_INC) if_tcl.c
1698
1699$(OUTDIR)/iscygpty.obj:	$(OUTDIR) iscygpty.c $(CUI_INCL)
1700	$(CC) $(CFLAGS_OUTDIR) iscygpty.c -D_WIN32_WINNT=0x0600 -DUSE_DYNFILEID -DENABLE_STUB_IMPL
1701
1702$(OUTDIR)/job.obj:	$(OUTDIR) job.c $(INCL)
1703
1704$(OUTDIR)/json.obj:	$(OUTDIR) json.c  $(INCL)
1705
1706$(OUTDIR)/list.obj:	$(OUTDIR) list.c  $(INCL)
1707
1708$(OUTDIR)/locale.obj:	$(OUTDIR) locale.c  $(INCL)
1709
1710$(OUTDIR)/main.obj:	$(OUTDIR) main.c  $(INCL) $(CUI_INCL)
1711
1712$(OUTDIR)/map.obj:	$(OUTDIR) map.c  $(INCL)
1713
1714$(OUTDIR)/mark.obj:	$(OUTDIR) mark.c  $(INCL)
1715
1716$(OUTDIR)/match.obj:	$(OUTDIR) match.c  $(INCL)
1717
1718$(OUTDIR)/memfile.obj:	$(OUTDIR) memfile.c  $(INCL)
1719
1720$(OUTDIR)/memline.obj:	$(OUTDIR) memline.c  $(INCL)
1721
1722$(OUTDIR)/menu.obj:	$(OUTDIR) menu.c  $(INCL)
1723
1724$(OUTDIR)/message.obj:	$(OUTDIR) message.c  $(INCL)
1725
1726$(OUTDIR)/misc1.obj:	$(OUTDIR) misc1.c  $(INCL) version.h
1727
1728$(OUTDIR)/misc2.obj:	$(OUTDIR) misc2.c  $(INCL)
1729
1730$(OUTDIR)/mouse.obj:	$(OUTDIR) mouse.c  $(INCL)
1731
1732$(OUTDIR)/move.obj:	$(OUTDIR) move.c  $(INCL)
1733
1734$(OUTDIR)/mbyte.obj:	$(OUTDIR) mbyte.c  $(INCL)
1735
1736$(OUTDIR)/netbeans.obj:	$(OUTDIR) netbeans.c $(NBDEBUG_SRC) $(INCL) version.h
1737
1738$(OUTDIR)/channel.obj:	$(OUTDIR) channel.c $(INCL)
1739
1740$(OUTDIR)/normal.obj:	$(OUTDIR) normal.c  $(INCL)
1741
1742$(OUTDIR)/option.obj:	$(OUTDIR) option.c  $(INCL) optiondefs.h
1743
1744$(OUTDIR)/optionstr.obj:	$(OUTDIR) optionstr.c  $(INCL)
1745
1746$(OUTDIR)/ops.obj:	$(OUTDIR) ops.c  $(INCL)
1747
1748$(OUTDIR)/os_mswin.obj:	$(OUTDIR) os_mswin.c  $(INCL)
1749
1750$(OUTDIR)/terminal.obj:	$(OUTDIR) terminal.c  $(INCL) $(TERM_DEPS)
1751
1752$(OUTDIR)/winclip.obj:	$(OUTDIR) winclip.c  $(INCL)
1753
1754$(OUTDIR)/os_win32.obj:	$(OUTDIR) os_win32.c  $(INCL) $(MZSCHEME_INCL)
1755
1756$(OUTDIR)/os_w32dll.obj:	$(OUTDIR) os_w32dll.c
1757
1758$(OUTDIR)/os_w32exe.obj:	$(OUTDIR) os_w32exe.c  $(INCL)
1759
1760$(OUTDIR)/os_w32exec.obj:	$(OUTDIR) os_w32exe.c  $(INCL)
1761	$(CC) $(CFLAGS:-DFEAT_GUI_MSWIN=) /Fo$@ os_w32exe.c
1762
1763$(OUTDIR)/os_w32exeg.obj:	$(OUTDIR) os_w32exe.c  $(INCL)
1764	$(CC) $(CFLAGS) /Fo$@ os_w32exe.c
1765
1766$(OUTDIR)/pathdef.obj:	$(OUTDIR) $(PATHDEF_SRC) $(INCL)
1767	$(CC) $(CFLAGS_OUTDIR) $(PATHDEF_SRC)
1768
1769$(OUTDIR)/popupmenu.obj:	$(OUTDIR) popupmenu.c  $(INCL)
1770
1771$(OUTDIR)/popupwin.obj:	$(OUTDIR) popupwin.c  $(INCL)
1772
1773$(OUTDIR)/profiler.obj:	$(OUTDIR) profiler.c  $(INCL)
1774
1775$(OUTDIR)/quickfix.obj:	$(OUTDIR) quickfix.c  $(INCL)
1776
1777$(OUTDIR)/regexp.obj:	$(OUTDIR) regexp.c regexp_bt.c regexp_nfa.c  $(INCL)
1778
1779$(OUTDIR)/register.obj:	$(OUTDIR) register.c $(INCL)
1780
1781$(OUTDIR)/scriptfile.obj:	$(OUTDIR) scriptfile.c  $(INCL)
1782
1783$(OUTDIR)/screen.obj:	$(OUTDIR) screen.c  $(INCL)
1784
1785$(OUTDIR)/search.obj:	$(OUTDIR) search.c  $(INCL)
1786
1787$(OUTDIR)/session.obj:	$(OUTDIR) session.c  $(INCL)
1788
1789$(OUTDIR)/sha256.obj:	$(OUTDIR) sha256.c  $(INCL)
1790
1791$(OUTDIR)/sign.obj:	$(OUTDIR) sign.c  $(INCL)
1792
1793$(OUTDIR)/spell.obj:	$(OUTDIR) spell.c  $(INCL)
1794
1795$(OUTDIR)/spellfile.obj:	$(OUTDIR) spellfile.c  $(INCL)
1796
1797$(OUTDIR)/spellsuggest.obj:	$(OUTDIR) spellsuggest.c  $(INCL)
1798
1799$(OUTDIR)/strings.obj:	$(OUTDIR) strings.c  $(INCL)
1800
1801$(OUTDIR)/syntax.obj:	$(OUTDIR) syntax.c  $(INCL)
1802
1803$(OUTDIR)/tag.obj:	$(OUTDIR) tag.c  $(INCL)
1804
1805$(OUTDIR)/term.obj:	$(OUTDIR) term.c  $(INCL)
1806
1807$(OUTDIR)/term.obj:	$(OUTDIR) testing.c  $(INCL)
1808
1809$(OUTDIR)/textformat.obj:	$(OUTDIR) textformat.c  $(INCL)
1810
1811$(OUTDIR)/textobject.obj:	$(OUTDIR) textobject.c  $(INCL)
1812
1813$(OUTDIR)/textprop.obj:	$(OUTDIR) textprop.c  $(INCL)
1814
1815$(OUTDIR)/time.obj:	$(OUTDIR) time.c  $(INCL)
1816
1817$(OUTDIR)/typval.obj:	$(OUTDIR) typval.c  $(INCL)
1818
1819$(OUTDIR)/ui.obj:	$(OUTDIR) ui.c  $(INCL)
1820
1821$(OUTDIR)/undo.obj:	$(OUTDIR) undo.c  $(INCL)
1822
1823$(OUTDIR)/usercmd.obj:	$(OUTDIR) usercmd.c  $(INCL)
1824
1825$(OUTDIR)/userfunc.obj:	$(OUTDIR) userfunc.c  $(INCL)
1826
1827$(OUTDIR)/version.obj:	$(OUTDIR) version.c  $(INCL) version.h
1828
1829$(OUTDIR)/vim9compile.obj:	$(OUTDIR) vim9compile.c  $(INCL)
1830
1831$(OUTDIR)/vim9execute.obj:	$(OUTDIR) vim9execute.c  $(INCL)
1832
1833$(OUTDIR)/vim9script.obj:	$(OUTDIR) vim9script.c  $(INCL)
1834
1835$(OUTDIR)/vim9type.obj:	$(OUTDIR) vim9type.c  $(INCL)
1836
1837$(OUTDIR)/viminfo.obj:	$(OUTDIR) viminfo.c  $(INCL) version.h
1838
1839$(OUTDIR)/window.obj:	$(OUTDIR) window.c  $(INCL)
1840
1841$(OUTDIR)/xpm_w32.obj: $(OUTDIR) xpm_w32.c
1842	$(CC) $(CFLAGS_OUTDIR) $(XPM_INC) xpm_w32.c
1843
1844!if "$(VIMDLL)" == "yes"
1845$(OUTDIR)/vimc.res:	$(OUTDIR) vim.rc vim.manifest version.h gui_w32_rc.h \
1846				vim.ico
1847	$(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS:-DFEAT_GUI_MSWIN=) vim.rc
1848
1849$(OUTDIR)/vimg.res:	$(OUTDIR) vim.rc vim.manifest version.h gui_w32_rc.h \
1850				vim.ico
1851	$(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS) vim.rc
1852
1853$(OUTDIR)/vimd.res:	$(OUTDIR) vim.rc version.h gui_w32_rc.h \
1854				tools.bmp tearoff.bmp vim.ico vim_error.ico \
1855				vim_alert.ico vim_info.ico vim_quest.ico
1856	$(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS) -DRCDLL -DVIMDLLBASE=\"$(VIMDLLBASE)\" vim.rc
1857!else
1858$(OUTDIR)/vim.res:	$(OUTDIR) vim.rc vim.manifest version.h gui_w32_rc.h \
1859				tools.bmp tearoff.bmp vim.ico vim_error.ico \
1860				vim_alert.ico vim_info.ico vim_quest.ico
1861	$(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS) vim.rc
1862!endif
1863
1864iid_ole.c if_ole.h vim.tlb: if_ole.idl
1865	midl /nologo /error none /proxy nul /iid iid_ole.c /tlb vim.tlb \
1866		/header if_ole.h if_ole.idl
1867
1868dimm.h dimm_i.c: dimm.idl
1869	midl /nologo /error none /proxy nul dimm.idl
1870
1871$(OUTDIR)/dimm_i.obj: $(OUTDIR) dimm_i.c $(INCL)
1872
1873$(OUTDIR)/glbl_ime.obj:	$(OUTDIR) glbl_ime.cpp  dimm.h $(INCL)
1874
1875
1876CCCTERM = $(CC) $(CFLAGS) -Ilibvterm/include -DINLINE="" \
1877	-DVSNPRINTF=vim_vsnprintf \
1878	-DSNPRINTF=vim_snprintf \
1879	-DIS_COMBINING_FUNCTION=utf_iscomposing_uint \
1880	-DWCWIDTH_FUNCTION=utf_uint2cells \
1881	-DGET_SPECIAL_PTY_TYPE_FUNCTION=get_special_pty_type \
1882	-D_CRT_SECURE_NO_WARNINGS
1883
1884$(OUTDIR)/vterm_encoding.obj: $(OUTDIR) libvterm/src/encoding.c $(TERM_DEPS)
1885	$(CCCTERM) /Fo$@ libvterm/src/encoding.c
1886
1887$(OUTDIR)/vterm_keyboard.obj: $(OUTDIR) libvterm/src/keyboard.c $(TERM_DEPS)
1888	$(CCCTERM) /Fo$@ libvterm/src/keyboard.c
1889
1890$(OUTDIR)/vterm_mouse.obj: $(OUTDIR) libvterm/src/mouse.c $(TERM_DEPS)
1891	$(CCCTERM) /Fo$@ libvterm/src/mouse.c
1892
1893$(OUTDIR)/vterm_parser.obj: $(OUTDIR) libvterm/src/parser.c $(TERM_DEPS)
1894	$(CCCTERM) /Fo$@ libvterm/src/parser.c
1895
1896$(OUTDIR)/vterm_pen.obj: $(OUTDIR) libvterm/src/pen.c $(TERM_DEPS)
1897	$(CCCTERM) /Fo$@ libvterm/src/pen.c
1898
1899$(OUTDIR)/vterm_screen.obj: $(OUTDIR) libvterm/src/screen.c $(TERM_DEPS)
1900	$(CCCTERM) /Fo$@ libvterm/src/screen.c
1901
1902$(OUTDIR)/vterm_state.obj: $(OUTDIR) libvterm/src/state.c $(TERM_DEPS)
1903	$(CCCTERM) /Fo$@ libvterm/src/state.c
1904
1905$(OUTDIR)/vterm_unicode.obj: $(OUTDIR) libvterm/src/unicode.c $(TERM_DEPS)
1906	$(CCCTERM) /Fo$@ libvterm/src/unicode.c
1907
1908$(OUTDIR)/vterm_vterm.obj: $(OUTDIR) libvterm/src/vterm.c $(TERM_DEPS)
1909	$(CCCTERM) /Fo$@ libvterm/src/vterm.c
1910
1911
1912# $CFLAGS may contain backslashes, quotes and chevrons, escape them all.
1913E0_CFLAGS = $(CFLAGS:\=\\)
1914E00_CFLAGS = $(E0_CFLAGS:"=\")
1915# ") stop the string
1916E000_CFLAGS = $(E00_CFLAGS:<=^^<)
1917E_CFLAGS = $(E000_CFLAGS:>=^^>)
1918# $LINKARGS2 may contain backslashes, quotes and chevrons, escape them all.
1919E0_LINKARGS2 = $(LINKARGS2:\=\\)
1920E00_LINKARGS2 = $(E0_LINKARGS2:"=\")
1921# ") stop the string
1922E000_LINKARGS2 = $(E00_LINKARGS2:<=^^<)
1923E_LINKARGS2 = $(E000_LINKARGS2:>=^^>)
1924
1925$(PATHDEF_SRC): Make_mvc.mak
1926	@echo creating $(PATHDEF_SRC)
1927	@echo /* pathdef.c */ > $(PATHDEF_SRC)
1928	@echo #include "vim.h" >> $(PATHDEF_SRC)
1929	@echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC:\=\\)"; >> $(PATHDEF_SRC)
1930	@echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR:\=\\)"; >> $(PATHDEF_SRC)
1931	@echo char_u *all_cflags = (char_u *)"$(CC:\=\\) $(E_CFLAGS)"; >> $(PATHDEF_SRC)
1932	@echo char_u *all_lflags = (char_u *)"$(link:\=\\) $(LINKARGS1:\=\\) $(E_LINKARGS2)"; >> $(PATHDEF_SRC)
1933	@echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> $(PATHDEF_SRC)
1934	@echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> $(PATHDEF_SRC)
1935
1936# End Custom Build
1937proto.h: \
1938	proto/alloc.pro \
1939	proto/arabic.pro \
1940	proto/arglist.pro \
1941	proto/autocmd.pro \
1942	proto/blob.pro \
1943	proto/blowfish.pro \
1944	proto/buffer.pro \
1945	proto/bufwrite.pro \
1946	proto/change.pro \
1947	proto/charset.pro \
1948	proto/cindent.pro \
1949	proto/clientserver.pro \
1950	proto/clipboard.pro \
1951	proto/cmdexpand.pro \
1952	proto/cmdhist.pro \
1953	proto/crypt.pro \
1954	proto/crypt_zip.pro \
1955	proto/debugger.pro \
1956	proto/dict.pro \
1957	proto/diff.pro \
1958	proto/digraph.pro \
1959	proto/drawline.pro \
1960	proto/drawscreen.pro \
1961	proto/edit.pro \
1962	proto/eval.pro \
1963	proto/evalbuffer.pro \
1964	proto/evalfunc.pro \
1965	proto/evalvars.pro \
1966	proto/evalwindow.pro \
1967	proto/ex_cmds.pro \
1968	proto/ex_cmds2.pro \
1969	proto/ex_docmd.pro \
1970	proto/ex_eval.pro \
1971	proto/ex_getln.pro \
1972	proto/fileio.pro \
1973	proto/filepath.pro \
1974	proto/findfile.pro \
1975	proto/float.pro \
1976	proto/getchar.pro \
1977	proto/gui_xim.pro \
1978	proto/hardcopy.pro \
1979	proto/hashtab.pro \
1980	proto/help.pro \
1981	proto/highlight.pro \
1982	proto/indent.pro \
1983	proto/insexpand.pro \
1984	proto/json.pro \
1985	proto/list.pro \
1986	proto/locale.pro \
1987	proto/main.pro \
1988	proto/map.pro \
1989	proto/mark.pro \
1990	proto/match.pro \
1991	proto/memfile.pro \
1992	proto/memline.pro \
1993	proto/menu.pro \
1994	proto/message.pro \
1995	proto/misc1.pro \
1996	proto/misc2.pro \
1997	proto/mouse.pro \
1998	proto/move.pro \
1999	proto/mbyte.pro \
2000	proto/normal.pro \
2001	proto/ops.pro \
2002	proto/option.pro \
2003	proto/optionstr.pro \
2004	proto/os_mswin.pro \
2005	proto/winclip.pro \
2006	proto/os_win32.pro \
2007	proto/popupmenu.pro \
2008	proto/popupwin.pro \
2009	proto/profiler.pro \
2010	proto/quickfix.pro \
2011	proto/regexp.pro \
2012	proto/register.pro \
2013	proto/scriptfile.pro \
2014	proto/screen.pro \
2015	proto/search.pro \
2016	proto/session.pro \
2017	proto/sha256.pro \
2018	proto/sign.pro \
2019	proto/spell.pro \
2020	proto/spellfile.pro \
2021	proto/spellsuggest.pro \
2022	proto/strings.pro \
2023	proto/syntax.pro \
2024	proto/tag.pro \
2025	proto/term.pro \
2026	proto/testing.pro \
2027	proto/textformat.pro \
2028	proto/textobject.pro \
2029	proto/textprop.pro \
2030	proto/time.pro \
2031	proto/typval.pro \
2032	proto/ui.pro \
2033	proto/undo.pro \
2034	proto/usercmd.pro \
2035	proto/userfunc.pro \
2036	proto/vim9compile.pro \
2037	proto/vim9execute.pro \
2038	proto/vim9script.pro \
2039	proto/vim9type.pro \
2040	proto/viminfo.pro \
2041	proto/window.pro \
2042	$(SOUND_PRO) \
2043	$(NETBEANS_PRO) \
2044	$(CHANNEL_PRO)
2045
2046.SUFFIXES: .cod .i
2047
2048# Generate foo.cod (mixed source and assembly listing) from foo.c via "nmake
2049# foo.cod"
2050.c.cod:
2051	$(CC) $(CFLAGS) /FAcs $<
2052
2053# Generate foo.i (preprocessor listing) from foo.c via "nmake foo.i"
2054.c.i:
2055	$(CC) $(CFLAGS) /P /C $<
2056
2057# vim: set noet sw=8 ts=8 sts=0 wm=0 tw=0:
2058