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), and VC10 (VS2010).
6 # To build using other Windows compilers, see INSTALLpc.txt
8 # This makefile can build the console, GUI, OLE-enable, Perl-enabled and
9 # Python-enabled versions of Vim for Win32 platforms.
11 # The basic command line to build Vim is:
13 # nmake -f Make_mvc.mak
15 # This will build the console version of Vim with no additional interfaces.
16 # To add features, define any of the following:
18 # !!!! After changing features do "nmake clean" first !!!!
20 # Feature Set: FEATURES=[TINY, SMALL, NORMAL, BIG, HUGE] (default is BIG)
22 # GUI interface: GUI=yes (default is no)
24 # OLE interface: OLE=yes (usually with GUI=yes)
26 # Multibyte support: MBYTE=yes (default is no)
28 # IME support: IME=yes (requires GUI=yes)
29 # DYNAMIC_IME=[yes or no] (to load the imm32.dll dynamically, default
31 # Global IME support: GIME=yes (requires GUI=yes)
34 # LUA=[Path to Lua directory]
35 # DYNAMIC_LUA=yes (to load the Lua DLL dynamically)
36 # LUA_VER=[Lua version] (default is 51)
39 # MZSCHEME=[Path to MzScheme directory]
40 # DYNAMIC_MZSCHEME=yes (to load the MzScheme DLLs dynamically)
41 # MZSCHEME_VER=[version, 205_000, ...]
45 # PERL=[Path to Perl directory]
46 # DYNAMIC_PERL=yes (to load the Perl DLL dynamically)
47 # PERL_VER=[Perl version, in the form 55 (5.005), 56 (5.6.x), etc]
51 # PYTHON=[Path to Python directory]
52 # DYNAMIC_PYTHON=yes (to load the Python DLL dynamically)
53 # PYTHON_VER=[Python version, eg 15, 20] (default is 22)
56 # RUBY=[Path to Ruby directory]
57 # DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically)
58 # RUBY_VER=[Ruby version, eg 16, 17] (default is 18)
59 # RUBY_VER_LONG=[Ruby version, eg 1.6, 1.7] (default is 1.8)
60 # You must set RUBY_VER_LONG when change RUBY_VER.
63 # TCL=[Path to Tcl directory]
64 # DYNAMIC_TCL=yes (to load the Tcl DLL dynamically)
65 # TCL_VER=[Tcl version, e.g. 80, 83] (default is 83)
66 # TCL_VER_LONG=[Tcl version, eg 8.3] (default is 8.3)
67 # You must set TCL_VER_LONG when you set TCL_VER.
69 # SNiFF+ interface: SNIFF=yes
71 # Cscope support: CSCOPE=yes
73 # Iconv library support (always dynamically loaded):
74 # ICONV=[yes or no] (default is yes)
76 # Intl library support (always dynamically loaded):
77 # GETTEXT=[yes or no] (default is yes)
78 # See http://sourceforge.net/projects/gettext/
80 # PostScript printing: POSTSCRIPT=yes (default is no)
82 # Netbeans Support: NETBEANS=[yes or no] (default is yes if GUI is yes)
84 # XPM Image Support: XPM=[path to XPM directory]
86 # Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
88 # Processor Version: CPUNR=[i386, i486, i586, i686, pentium4] (default is
91 # Version Support: WINVER=[0x0400, 0x0500] (default is 0x0400)
93 # Debug version: DEBUG=yes
94 # Mapfile: MAP=[no, yes or lines] (default is yes)
95 # no: Don't write a mapfile.
96 # yes: Write a normal mapfile.
97 # lines: Write a mapfile with line numbers (only for VC6 and later)
99 # Netbeans Debugging Support: NBDEBUG=[yes or no] (should be no, yes
102 # Visual C Version: MSVCVER=m.n (default derived from nmake if undefined)
104 # You can combine any of these interfaces
106 # Example: To build the non-debug, GUI version with Perl interface:
107 # nmake -f Make_mvc.mak GUI=yes PERL=C:\Perl
109 # DEBUG with Make_mvc.mak and Make_dvc.mak:
110 # This makefile gives a fineness of control which is not supported in
111 # Visual C++ configuration files. Therefore, debugging requires a bit of
113 # Make_dvc.mak is a Visual C++ project to access that support. It may be
114 # badly out of date for the Visual C++ you are using...
115 # To use Make_dvc.mak:
116 # 1) Build Vim with Make_mvc.mak.
117 # Use a "DEBUG=yes" argument to build Vim with debug support.
118 # E.g. the following builds gvimd.exe:
119 # nmake -f Make_mvc.mak debug=yes gui=yes
120 # 2) Use MS Devstudio and set it up to allow that file to be debugged:
121 # i) Pass Make_dvc.mak to the IDE.
122 # Use the "open workspace" menu entry to load Make_dvc.mak.
123 # Alternatively, from the command line:
124 # msdev /nologo Make_dvc.mak
125 # Note: Make_dvc.mak is in VC4.0 format. Later VC versions see
126 # this and offer to convert it to their own format. Accept that.
127 # It creates a file called Make_dvc.dsw which can then be used
128 # for further operations. E.g.
129 # msdev /nologo Make_dvc.dsw
130 # ii) Set the built executable for debugging:
131 # a) Alt+F7/Debug takes you to the Debug dialog.
132 # b) Fill "Executable for debug session". e.g. gvimd.exe
133 # c) Fill "Program arguments". e.g. -R dosinst.c
134 # d) Complete the dialog
135 # 3) You can now debug the executable you built with Make_mvc.mak
137 # Note: Make_dvc.mak builds vimrun.exe, because it must build something
138 # to be a valid makefile..
140 ### See feature.h for a list of optionals.
141 # If you want to build some optional features without modifying the source,
142 # you can set DEFINES on the command line, e.g.,
143 # nmake -f Make_mvc.mvc "DEFINES=-DEMACS_TAGS"
145 # Build on both Windows NT/XP and Windows 9x
149 # Select one of eight object code directories, depends on GUI, OLE, DEBUG and
151 # If you change something else, do "make clean" first!
152 !if
"$(GUI)" == "yes"
157 !if
"$(OLE)" == "yes"
178 !if
"$(DEBUG)" == "yes"
182 # Win32.mak requires that CPU be set appropriately.
183 # To cross-compile for Win64, set CPU=AMD64 or CPU=IA64.
185 !ifdef PROCESSOR_ARCHITECTURE
186 # We're on Windows NT or using VC 6+
188 ASSEMBLY_ARCHITECTURE
=$(CPU
)
189 # Using I386 for $ASSEMBLY_ARCHITECTURE doesn't work for VC7.
190 ! if
("$(ASSEMBLY_ARCHITECTURE)" == "i386") ||
("$(ASSEMBLY_ARCHITECTURE)" == "I386")
191 ASSEMBLY_ARCHITECTURE
= x86
194 CPU
= $(PROCESSOR_ARCHITECTURE
)
195 ASSEMBLY_ARCHITECTURE
= $(PROCESSOR_ARCHITECTURE
)
196 ! if
("$(CPU)" == "x86") ||
("$(CPU)" == "X86")
200 !else # !PROCESSOR_ARCHITECTURE
201 # We're on Windows 95
203 !endif # !PROCESSOR_ARCHITECTURE
205 # Build a retail version by default
207 !if
"$(DEBUG)" != "yes"
211 MAKEFLAGS_GVIMEXT
= DEBUG
=yes
215 # Get all sorts of useful, standard macros from the Platform SDK.
219 # Turn on Win64 compatibility warnings for VC7.x and VC8.
220 # (/Wp64 is deprecated in VC9 and generates an obnoxious warning.)
221 !if
("$(MSVCVER)" == "7.0") ||
("$(MSVCVER)" == "7.1") ||
("$(MSVCVER)" == "8.0")
222 DEFINES
=$(DEFINES
) /Wp64
225 #>>>>> path of the compiler and linker; name of include and lib directories
226 # PATH = c:\msvc20\bin;$(PATH)
227 # INCLUDE = c:\msvc20\include
228 # LIB = c:\msvc20\lib
234 !if
"$(SNIFF)" == "yes"
235 # SNIFF - Include support for SNiFF+.
236 SNIFF_INCL
= if_sniff.h
237 SNIFF_OBJ
= $(OBJDIR
)/if_sniff.obj
238 SNIFF_LIB
= shell32.lib
239 SNIFF_DEFS
= -DFEAT_SNIFF
240 # The SNiFF integration needs multithreaded libraries!
248 !if
"$(CSCOPE)" == "yes"
249 # CSCOPE - Include support for Cscope
250 CSCOPE_INCL
= if_cscope.h
251 CSCOPE_OBJ
= $(OBJDIR
)/if_cscope.obj
252 CSCOPE_DEFS
= -DFEAT_CSCOPE
259 # Only allow NETBEANS and XPM for a GUI build.
260 !if
"$(GUI)" == "yes"
261 !if
"$(NETBEANS)" == "yes"
262 # NETBEANS - Include support for Netbeans integration
263 NETBEANS_PRO
= proto
/netbeans.pro
264 NETBEANS_OBJ
= $(OBJDIR
)/netbeans.obj
265 NETBEANS_DEFS
= -DFEAT_NETBEANS_INTG
267 !if
"$(NBDEBUG)" == "yes"
268 NBDEBUG_DEFS
= -DNBDEBUG
269 NBDEBUG_INCL
= nbdebug.h
270 NBDEBUG_SRC
= nbdebug.c
272 NETBEANS_LIB
= WSock32.lib
276 # XPM - Include support for XPM signs
277 # you can get xpm.lib from http://iamphet.nm.ru/xpm or create it yourself
278 XPM_OBJ
= $(OBJDIR
)/xpm_w32.obj
279 XPM_DEFS
= -DFEAT_XPM_W32
280 XPM_LIB
= $(XPM
)\lib\libXpm.lib
281 XPM_INC
= -I
$(XPM
)\
include
285 # Set which version of the CRT to use
286 !if defined
(USE_MSVCRT
)
287 # CVARS = $(cvarsdll)
288 # !elseif defined(MULTITHREADED)
295 # need advapi32.lib for GetUserName()
296 # need shell32.lib for ExtractIcon()
297 # gdi32.lib and comdlg32.lib for printing support
298 # ole32.lib and uuid.lib are needed for FEAT_SHORTCUT
299 CON_LIB
= oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib \
300 comdlg32.lib ole32.lib uuid.lib
/machine
:$(CPU
) /nodefaultlib
301 !if
"$(DELAYLOAD)" == "yes"
302 CON_LIB
= $(CON_LIB
) /DELAYLOAD
:comdlg32.dll
/DELAYLOAD
:ole32.dll DelayImp.lib
305 ### Set the default $(WINVER) to make it work with VC++7.0 (VS.NET)
306 # When set to 0x0500 ":browse" stops working.
311 # If you have a fixed directory for $VIM or $VIMRUNTIME, other than the normal
312 # default, use these lines.
313 #VIMRCLOC = somewhere
314 #VIMRUNTIMEDIR = somewhere
316 CFLAGS
= -c
/W3
/nologo
$(CVARS
) -I.
-Iproto
-DHAVE_PATHDEF
-DWIN32 \
317 $(SNIFF_DEFS
) $(CSCOPE_DEFS
) $(NETBEANS_DEFS
) \
318 $(NBDEBUG_DEFS
) $(XPM_DEFS
) \
319 $(DEFINES
) -DWINVER
=$(WINVER
) -D_WIN32_WINNT
=$(WINVER
) \
322 #>>>>> end of choices
323 ###########################################################################
327 DEL_TREE
= rmdir
/s
/q
330 DEL_TREE
= deltree
/y
336 # Derive version of VC being used from nmake if not specified
337 !if
"$(MSVCVER)" == ""
338 !if
"$(_NMAKE_VER)" == ""
341 !if
"$(_NMAKE_VER)" == "162"
344 !if
"$(_NMAKE_VER)" == "6.00.8168.0"
348 !if
"$(_NMAKE_VER)" == "7.00.9466"
351 !if
"$(_NMAKE_VER)" == "7.10.3077"
354 !if
"$(_NMAKE_VER)" == "8.00.50727.42"
357 !if
"$(_NMAKE_VER)" == "8.00.50727.762"
360 !if
"$(_NMAKE_VER)" == "9.00.20706.01"
363 !if
"$(_NMAKE_VER)" == "9.00.21022.08"
366 !if
"$(_NMAKE_VER)" == "9.00.30729.01"
369 !if
"$(_NMAKE_VER)" == "10.00.20506.01"
372 !if
"$(_NMAKE_VER)" == "10.00.30128.01"
377 # Abort bulding VIM if version of VC is unrecognised.
380 !message Cannot determine Visual C version being used. If you are using the
381 !message Windows SDK then you must have the environment variable MSVCVER set to
382 !message your version of the VC compiler. If you are not using the Express
383 !message version of Visual C
, you can either set MSVCVER or update this makefile
384 !message to handle the new value for _NMAKE_VER
, "$(_NMAKE_VER)".
388 # Convert processor ID to MVC-compatible number
389 !if
("$(MSVCVER)" != "8.0") && ("$(MSVCVER)" != "9.0") && ("$(MSVCVER)" != "10.0")
390 !if
"$(CPUNR)" == "i386"
392 !elseif
"$(CPUNR)" == "i486"
394 !elseif
"$(CPUNR)" == "i586"
396 !elseif
"$(CPUNR)" == "i686"
398 !elseif
"$(CPUNR)" == "pentium4"
399 CPUARG
= /G7
/arch
:SSE2
404 # VC8/9 only allows specifying SSE architecture
405 !if
"$(CPUNR)" == "pentium4"
415 !if
"$(OPTIMIZE)" == "SPACE"
417 !elseif
"$(OPTIMIZE)" == "SPEED"
422 !if
("$(MSVCVER)" == "8.0") ||
("$(MSVCVER)" == "9.0") ||
("$(MSVCVER)" == "10.0")
423 # Use link time code generation if not worried about size
424 !if
"$(OPTIMIZE)" != "SPACE"
425 OPTFLAG
= $(OPTFLAG
) /GL
428 CFLAGS
= $(CFLAGS
) $(OPTFLAG
) -DNDEBUG
$(CPUARG
)
429 RCFLAGS
= $(rcflags
) $(rcvars
) -DNDEBUG
431 CFLAGS
= $(CFLAGS
) /MD
435 CFLAGS
= $(CFLAGS
) /Zl
/MT
439 ! if
("$(CPU)" == "i386") ||
("$(CPU)" == "ix86")
442 CFLAGS
= $(CFLAGS
) -D_DEBUG
-DDEBUG
/Od
443 RCFLAGS
= $(rcflags
) $(rcvars
) -D_DEBUG
-DDEBUG
444 # The /fixed:no is needed for Quantify. Assume not 4.? as unsupported in VC4.0.
445 ! if
"$(MSVCVER)" == "4.0"
451 CFLAGS
= $(CFLAGS
) /MDd
452 LIBC
= $(LIBC
) msvcrtd.lib
454 LIBC
= $(LIBC
) libcmtd.lib
455 CFLAGS
= $(CFLAGS
) /Zl
/MTd
459 INCL
= vim.h os_win32.h ascii.h feature.h globals.h keymap.h macros.h \
460 proto.h option.h structs.h term.h
$(SNIFF_INCL
) $(CSCOPE_INCL
) \
464 $(OUTDIR
)\buffer.obj \
465 $(OUTDIR
)\charset.obj \
467 $(OUTDIR
)\digraph.obj \
470 $(OUTDIR
)\ex_cmds.obj \
471 $(OUTDIR
)\ex_cmds2.obj \
472 $(OUTDIR
)\ex_docmd.obj \
473 $(OUTDIR
)\ex_eval.obj \
474 $(OUTDIR
)\ex_getln.obj \
475 $(OUTDIR
)\fileio.obj \
477 $(OUTDIR
)\getchar.obj \
478 $(OUTDIR
)\hardcopy.obj \
479 $(OUTDIR
)\hashtab.obj \
482 $(OUTDIR
)\mbyte.obj \
483 $(OUTDIR
)\memfile.obj \
484 $(OUTDIR
)\memline.obj \
486 $(OUTDIR
)\message.obj \
487 $(OUTDIR
)\misc1.obj \
488 $(OUTDIR
)\misc2.obj \
490 $(OUTDIR
)\normal.obj \
492 $(OUTDIR
)\option.obj \
493 $(OUTDIR
)\os_mswin.obj \
494 $(OUTDIR
)\os_win32.obj \
495 $(OUTDIR
)\pathdef.obj \
496 $(OUTDIR
)\popupmnu.obj \
497 $(OUTDIR
)\quickfix.obj \
498 $(OUTDIR
)\regexp.obj \
499 $(OUTDIR
)\screen.obj \
500 $(OUTDIR
)\search.obj \
501 $(OUTDIR
)\spell.obj \
502 $(OUTDIR
)\syntax.obj \
507 $(OUTDIR
)\window.obj \
510 !if
"$(OLE)" == "yes"
511 CFLAGS
= $(CFLAGS
) -DFEAT_OLE
512 RCFLAGS
= $(RCFLAGS
) -DFEAT_OLE
513 OLE_OBJ
= $(OUTDIR
)\if_ole.obj
515 OLE_LIB
= oleaut32.lib
518 !if
"$(IME)" == "yes"
519 CFLAGS
= $(CFLAGS
) -DFEAT_MBYTE_IME
523 !if
"$(DYNAMIC_IME)" == "yes"
524 CFLAGS
= $(CFLAGS
) -DDYNAMIC_IME
530 !if
"$(GIME)" == "yes"
531 CFLAGS
= $(CFLAGS
) -DGLOBAL_IME
532 OBJ
= $(OBJ
) $(OUTDIR
)\dimm_i.obj
$(OUTDIR
)\glbl_ime.obj
536 !if
"$(MBYTE)" == "yes"
537 CFLAGS
= $(CFLAGS
) -DFEAT_MBYTE
540 !if
"$(GUI)" == "yes"
542 CFLAGS
= $(CFLAGS
) -DFEAT_GUI_W32
543 RCFLAGS
= $(RCFLAGS
) -DFEAT_GUI_W32
561 $(OUTDIR
)\gui_beval.obj \
562 $(OUTDIR
)\gui_w32.obj \
563 $(OUTDIR
)\os_w32exe.obj
565 gdi32.lib version.lib
$(IME_LIB
) \
566 winspool.lib comctl32.lib advapi32.lib shell32.lib \
567 /machine
:$(CPU
) /nodefaultlib
572 # iconv.dll library (dynamically loaded)
576 !if
"$(ICONV)" == "yes"
577 CFLAGS
= $(CFLAGS
) -DDYNAMIC_ICONV
580 # libintl.dll library
584 !if
"$(GETTEXT)" == "yes"
585 CFLAGS
= $(CFLAGS
) -DDYNAMIC_GETTEXT
594 !message Tcl requested
(version
$(TCL_VER
)) - root
dir is
"$(TCL)"
595 !if
"$(DYNAMIC_TCL)" == "yes"
596 !message Tcl DLL will be loaded dynamically
597 TCL_DLL
= tcl
$(TCL_VER
).dll
598 CFLAGS
= $(CFLAGS
) -DFEAT_TCL
-DDYNAMIC_TCL
-DDYNAMIC_TCL_DLL
=\"$(TCL_DLL
)\" \
599 -DDYNAMIC_TCL_VER
=\"$(TCL_VER_LONG
)\"
600 TCL_OBJ
= $(OUTDIR
)\if_tcl.obj
601 TCL_INC
= /I
"$(TCL)\Include" /I
"$(TCL)"
602 TCL_LIB
= $(TCL
)\lib
\tclstub
$(TCL_VER
).lib
604 CFLAGS
= $(CFLAGS
) -DFEAT_TCL
605 TCL_OBJ
= $(OUTDIR
)\if_tcl.obj
606 TCL_INC
= /I
"$(TCL)\Include" /I
"$(TCL)"
607 TCL_LIB
= $(TCL
)\lib
\tcl
$(TCL_VER
)vc.lib
616 !message Lua requested
(version
$(LUA_VER
)) - root
dir is
"$(LUA)"
617 !if
"$(DYNAMIC_LUA)" == "yes"
618 !message Lua DLL will be loaded dynamically
620 CFLAGS
= $(CFLAGS
) -DFEAT_LUA
621 LUA_OBJ
= $(OUTDIR
)\if_lua.obj
622 LUA_INC
= /I
"$(LUA)\include" /I
"$(LUA)"
623 !if
"$(DYNAMIC_LUA)" == "yes"
624 CFLAGS
= $(CFLAGS
) -DDYNAMIC_LUA \
625 -DDYNAMIC_LUA_DLL
=\"lua
$(LUA_VER
).dll
\"
626 LUA_LIB
= /nodefaultlib
:lua
$(LUA_VER
).lib
628 LUA_LIB
= "$(LUA)\lib\lua$(LUA_VER).lib"
637 !message Python requested
(version
$(PYTHON_VER
)) - root
dir is
"$(PYTHON)"
638 !if
"$(DYNAMIC_PYTHON)" == "yes"
639 !message Python DLL will be loaded dynamically
641 CFLAGS
= $(CFLAGS
) -DFEAT_PYTHON
642 PYTHON_OBJ
= $(OUTDIR
)\if_python.obj
643 PYTHON_INC
= /I
"$(PYTHON)\Include" /I
"$(PYTHON)\PC"
644 !if
"$(DYNAMIC_PYTHON)" == "yes"
645 CFLAGS
= $(CFLAGS
) -DDYNAMIC_PYTHON \
646 -DDYNAMIC_PYTHON_DLL
=\"python
$(PYTHON_VER
).dll
\"
647 PYTHON_LIB
= /nodefaultlib
:python
$(PYTHON_VER
).lib
649 PYTHON_LIB
= $(PYTHON
)\libs\python
$(PYTHON_VER
).lib
655 !message MzScheme requested
- root
dir is
"$(MZSCHEME)"
657 MZSCHEME_VER
= 205_000
659 CFLAGS
= $(CFLAGS
) -DFEAT_MZSCHEME
-I
$(MZSCHEME
)\
include
660 !if EXIST
("$(MZSCHEME)\collects\scheme\base.ss")
661 # for MzScheme 4.x we need to include byte code for basic Scheme stuff
662 MZSCHEME_EXTRA_DEP
= mzscheme_base.c
663 CFLAGS
= $(CFLAGS
) -DINCLUDE_MZSCHEME_BASE
665 !if EXIST
("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib") \
666 && !EXIST
("$(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib")
667 !message Building with Precise GC
668 MZSCHEME_PRECISE_GC
= yes
669 CFLAGS
= $(CFLAGS
) -DMZ_PRECISE_GC
671 !if
"$(DYNAMIC_MZSCHEME)" == "yes"
672 !if
"$(MZSCHEME_PRECISE_GC)" == "yes"
673 !error MzScheme with Precise GC cannot be loaded dynamically
675 !message MzScheme DLLs will be loaded dynamically
676 CFLAGS
= $(CFLAGS
) -DDYNAMIC_MZSCHEME \
677 -DDYNAMIC_MZSCH_DLL
=\"libmzsch
$(MZSCHEME_VER
).dll
\" \
678 -DDYNAMIC_MZGC_DLL
=\"libmzgc
$(MZSCHEME_VER
).dll
\"
680 !if
"$(MZSCHEME_DEBUG)" == "yes"
681 CFLAGS
= $(CFLAGS
) -DMZSCHEME_FORCE_GC
683 !if
"$(MZSCHEME_PRECISE_GC)" == "yes"
684 # Precise GC does not use separate dll
685 MZSCHEME_LIB
= $(MZSCHEME
)\lib\msvc\libmzsch
$(MZSCHEME_VER
).lib
687 MZSCHEME_LIB
= $(MZSCHEME
)\lib\msvc\libmzgc
$(MZSCHEME_VER
).lib \
688 $(MZSCHEME
)\lib\msvc\libmzsch
$(MZSCHEME_VER
).lib
691 MZSCHEME_OBJ
= $(OUTDIR
)\if_mzsch.obj
699 !message Perl requested
(version
$(PERL_VER
)) - root
dir is
"$(PERL)"
700 !if
"$(DYNAMIC_PERL)" == "yes"
701 !if
$(PERL_VER
) >= 56
702 !message Perl DLL will be loaded dynamically
704 !message Dynamic loading is not supported for Perl versions earlier than
5.6.0
705 !message Reverting to static loading...
710 # Is Perl installed in architecture-specific directories?
711 !if exist
($(PERL
)\Bin\MSWin32-x86
)
712 PERL_ARCH
= \MSWin32-x86
715 PERL_INCDIR
= $(PERL
)\Lib
$(PERL_ARCH
)\Core
717 # Version-dependent stuff
718 !if
$(PERL_VER
) == 55
719 PERL_LIB
= $(PERL_INCDIR
)\perl.lib
721 PERL_DLL
= perl
$(PERL_VER
).dll
722 PERL_LIB
= $(PERL_INCDIR
)\perl
$(PERL_VER
).lib
725 CFLAGS
= $(CFLAGS
) -DFEAT_PERL
727 # Do we want to load Perl dynamically?
728 !if
"$(DYNAMIC_PERL)" == "yes"
729 CFLAGS
= $(CFLAGS
) -DDYNAMIC_PERL
-DDYNAMIC_PERL_DLL
=\"$(PERL_DLL
)\"
733 PERL_EXE
= $(PERL
)\Bin
$(PERL_ARCH
)\perl
734 PERL_INC
= /I
$(PERL_INCDIR
)
735 PERL_OBJ
= $(OUTDIR
)\if_perl.obj
$(OUTDIR
)\if_perlsfio.obj
736 XSUBPP
= $(PERL
)\lib\ExtUtils\xsubpp
737 XSUBPP_TYPEMAP
= $(PERL
)\lib\ExtUtils
\typemap
742 # Support Ruby interface
749 !ifndef RUBY_VER_LONG
753 !if
$(RUBY_VER
) >= 18
754 !ifndef RUBY_PLATFORM
755 RUBY_PLATFORM
= i386-mswin32
757 !ifndef RUBY_INSTALL_NAME
758 RUBY_INSTALL_NAME
= msvcrt-ruby
$(RUBY_VER
)
761 !ifndef RUBY_PLATFORM
762 RUBY_PLATFORM
= i586-mswin32
764 !ifndef RUBY_INSTALL_NAME
765 RUBY_INSTALL_NAME
= mswin32-ruby
$(RUBY_VER
)
767 !endif # $(RUBY_VER) >= 18
769 !message Ruby requested
(version
$(RUBY_VER
)) - root
dir is
"$(RUBY)"
770 CFLAGS
= $(CFLAGS
) -DFEAT_RUBY
771 RUBY_OBJ
= $(OUTDIR
)\if_ruby.obj
772 RUBY_INC
= /I
"$(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM)"
773 RUBY_LIB
= $(RUBY
)\lib\
$(RUBY_INSTALL_NAME
).lib
774 # Do we want to load Ruby dynamically?
775 !if
"$(DYNAMIC_RUBY)" == "yes"
776 !message Ruby DLL will be loaded dynamically
777 CFLAGS
= $(CFLAGS
) -DDYNAMIC_RUBY
-DDYNAMIC_RUBY_VER
=$(RUBY_VER
) \
778 -DDYNAMIC_RUBY_DLL
=\"$(RUBY_INSTALL_NAME
).dll
\"
784 # Support PostScript printing
786 !if
"$(POSTSCRIPT)" == "yes"
787 CFLAGS
= $(CFLAGS
) -DMSWINPS
791 # FEATURES: TINY, SMALL, NORMAL, BIG or HUGE
793 !if
"$(FEATURES)"==""
796 CFLAGS
= $(CFLAGS
) -DFEAT_
$(FEATURES
)
799 # Always generate the .pdb file, so that we get debug symbols that can be used
800 # on a crash (doesn't add overhead to the executable).
801 # Generate edit-and-continue debug info when no optimization - allows to
802 # debug more conveniently (able to look at variables which are in registers)
804 CFLAGS
= $(CFLAGS
) /Fd
$(OUTDIR
)/ $(DEBUGINFO
)
805 LINK_PDB
= /PDB
:$(VIM
).pdb
-debug
808 # End extra feature include
812 conflags
= /nologo
/subsystem
:$(SUBSYSTEM
)
814 PATHDEF_SRC
= $(OUTDIR
)\pathdef.c
816 !IF
"$(MAP)" == "yes"
817 # "/map" is for debugging
818 conflags
= $(conflags
) /map
819 !ELSEIF
"$(MAP)" == "lines"
820 # "/mapinfo:lines" is for debugging, only works for VC6 and later
821 conflags
= $(conflags
) /map
/mapinfo
:lines
824 LINKARGS1
= $(linkdebug
) $(conflags
)
825 LINKARGS2
= $(CON_LIB
) $(GUI_LIB
) $(LIBC
) $(OLE_LIB
) user32.lib
$(SNIFF_LIB
) \
826 $(LUA_LIB
) $(MZSCHEME_LIB
) $(PERL_LIB
) $(PYTHON_LIB
) $(RUBY_LIB
) \
827 $(TCL_LIB
) $(NETBEANS_LIB
) $(XPM_LIB
) $(LINK_PDB
)
829 # Report link time code generation progress if used.
831 !if
("$(MSVCVER)" == "8.0") ||
("$(MSVCVER)" == "9.0") ||
("$(MSVCVER)" == "10.0")
832 !if
"$(OPTIMIZE)" != "SPACE"
833 LINKARGS1
= $(LINKARGS1
) /LTCG
:STATUS
838 all: $(VIM
).exe vimrun.exe
install.exe uninstal.exe xxd
/xxd.exe \
841 $(VIM
).exe
: $(OUTDIR
) $(OBJ
) $(GUI_OBJ
) $(OLE_OBJ
) $(OLE_IDL
) $(MZSCHEME_OBJ
) \
842 $(LUA_OBJ
) $(PERL_OBJ
) $(PYTHON_OBJ
) $(RUBY_OBJ
) $(TCL_OBJ
) \
843 $(SNIFF_OBJ
) $(CSCOPE_OBJ
) $(NETBEANS_OBJ
) $(XPM_OBJ
) \
845 $(CC
) $(CFLAGS
) version.c
846 $(link
) $(LINKARGS1
) -out
:$(VIM
).exe
$(OBJ
) $(GUI_OBJ
) $(OLE_OBJ
) \
847 $(LUA_OBJ
) $(MZSCHEME_OBJ
) $(PERL_OBJ
) $(PYTHON_OBJ
) $(RUBY_OBJ
) \
848 $(TCL_OBJ
) $(SNIFF_OBJ
) $(CSCOPE_OBJ
) $(NETBEANS_OBJ
) \
849 $(XPM_OBJ
) $(OUTDIR
)\version.obj
$(LINKARGS2
)
854 if not exist
$(OUTDIR
)/nul mkdir
$(OUTDIR
)
856 install.exe
: dosinst.c
857 $(CC
) /nologo
-DNDEBUG
-DWIN32 dosinst.c kernel32.lib shell32.lib \
858 ole32.lib advapi32.lib uuid.lib
859 - if exist
install.exe del
install.exe
860 ren dosinst.exe
install.exe
862 uninstal.exe
: uninstal.c
863 $(CC
) /nologo
-DNDEBUG
-DWIN32 uninstal.c shell32.lib advapi32.lib
866 $(CC
) /nologo
-DNDEBUG vimrun.c
868 xxd
/xxd.exe
: xxd
/xxd.c
870 $(MAKE
) /NOLOGO
-f Make_mvc.mak
873 GvimExt
/gvimext.dll
: GvimExt
/gvimext.
cpp GvimExt
/gvimext.rc GvimExt
/gvimext.h
875 $(MAKE
) /NOLOGO
-f Makefile
$(MAKEFLAGS_GVIMEXT
)
880 $(CTAGS
) *.c
*.
cpp *.h if_perl.xs proto\
*.pro
883 - if exist
tags del
tags
886 - if exist
$(OUTDIR
)/nul
$(DEL_TREE
) $(OUTDIR
)
887 - if exist
*.obj del
*.obj
888 - if exist
$(VIM
).exe del
$(VIM
).exe
889 - if exist
$(VIM
).ilk del
$(VIM
).ilk
890 - if exist
$(VIM
).pdb del
$(VIM
).pdb
891 - if exist
$(VIM
).map del
$(VIM
).map
892 - if exist
$(VIM
).ncb del
$(VIM
).ncb
893 - if exist vimrun.exe del vimrun.exe
894 - if exist
install.exe del
install.exe
895 - if exist uninstal.exe del uninstal.exe
896 - if exist if_perl.c del if_perl.c
897 - if exist dimm.h del dimm.h
898 - if exist dimm_i.c del dimm_i.c
899 - if exist dimm.tlb del dimm.tlb
900 - if exist dosinst.exe del dosinst.exe
901 - if exist mzscheme_base.c del mzscheme_base.c
903 $(MAKE
) /NOLOGO
-f Make_mvc.mak
clean
906 $(MAKE
) /NOLOGO
-f Makefile
clean
909 $(MAKE
) /NOLOGO
-f Makefile
clean
911 - if exist testdir\
*.out del testdir\
*.out
915 $(MAKE
) /NOLOGO
-f Make_dos.mak win32
920 $(MAKE
) /NOLOGO
-f Make_dos.mak
clean
923 ###########################################################################
925 # Create a default rule for transforming .c files to .obj files in $(OUTDIR)
926 # Batch compilation is supported by nmake 1.62 (part of VS 5.0) and later)
927 !IF
"$(MSVCVER)" == "4.0"
934 # Create a default rule for transforming .cpp files to .obj files in $(OUTDIR)
935 # Batch compilation is supported by nmake 1.62 (part of VS 5.0) and later)
936 !IF
"$(MSVCVER)" == "4.0"
937 .
cpp{$(OUTDIR
)/}.obj
:
939 .
cpp{$(OUTDIR
)/}.obj
::
943 $(OUTDIR
)/buffer.obj
: $(OUTDIR
) buffer.c
$(INCL
)
945 $(OUTDIR
)/charset.obj
: $(OUTDIR
) charset.c
$(INCL
)
947 $(OUTDIR
)/diff.obj
: $(OUTDIR
) diff.c
$(INCL
)
949 $(OUTDIR
)/digraph.obj
: $(OUTDIR
) digraph.c
$(INCL
)
951 $(OUTDIR
)/edit.obj
: $(OUTDIR
) edit.c
$(INCL
)
953 $(OUTDIR
)/eval.obj
: $(OUTDIR
) eval.c
$(INCL
)
955 $(OUTDIR
)/ex_cmds.obj
: $(OUTDIR
) ex_cmds.c
$(INCL
)
957 $(OUTDIR
)/ex_cmds2.obj
: $(OUTDIR
) ex_cmds2.c
$(INCL
)
959 $(OUTDIR
)/ex_docmd.obj
: $(OUTDIR
) ex_docmd.c
$(INCL
) ex_cmds.h
961 $(OUTDIR
)/ex_eval.obj
: $(OUTDIR
) ex_eval.c
$(INCL
) ex_cmds.h
963 $(OUTDIR
)/ex_getln.obj
: $(OUTDIR
) ex_getln.c
$(INCL
)
965 $(OUTDIR
)/fileio.obj
: $(OUTDIR
) fileio.c
$(INCL
)
967 $(OUTDIR
)/fold.obj
: $(OUTDIR
) fold.c
$(INCL
)
969 $(OUTDIR
)/getchar.obj
: $(OUTDIR
) getchar.c
$(INCL
)
971 $(OUTDIR
)/hardcopy.obj
: $(OUTDIR
) hardcopy.c
$(INCL
)
973 $(OUTDIR
)/hashtab.obj
: $(OUTDIR
) hashtab.c
$(INCL
)
975 $(OUTDIR
)/gui.obj
: $(OUTDIR
) gui.c
$(INCL
) $(GUI_INCL
)
977 $(OUTDIR
)/gui_beval.obj
: $(OUTDIR
) gui_beval.c
$(INCL
) $(GUI_INCL
)
979 $(OUTDIR
)/gui_w32.obj
: $(OUTDIR
) gui_w32.c gui_w48.c
$(INCL
) $(GUI_INCL
)
981 $(OUTDIR
)/if_cscope.obj
: $(OUTDIR
) if_cscope.c
$(INCL
)
983 $(OUTDIR
)/if_lua.obj
: $(OUTDIR
) if_lua.c
$(INCL
)
984 $(CC
) $(CFLAGS
) $(LUA_INC
) if_lua.c
986 if_perl.c
: if_perl.xs typemap
987 $(PERL_EXE
) $(XSUBPP
) -prototypes
-typemap
$(XSUBPP_TYPEMAP
) \
988 -typemap typemap if_perl.xs
> if_perl.c
990 $(OUTDIR
)/if_perl.obj
: $(OUTDIR
) if_perl.c
$(INCL
)
991 $(CC
) $(CFLAGS
) $(PERL_INC
) if_perl.c
993 $(OUTDIR
)/if_perlsfio.obj
: $(OUTDIR
) if_perlsfio.c
$(INCL
)
994 $(CC
) $(CFLAGS
) $(PERL_INC
) if_perlsfio.c
996 $(OUTDIR
)/if_mzsch.obj
: $(OUTDIR
) if_mzsch.c
$(INCL
) $(MZSCHEME_EXTRA_DEP
)
997 $(CC
) $(CFLAGS
) if_mzsch.c \
998 -DMZSCHEME_COLLECTS
=\"$(MZSCHEME
:\
=\\)\\collects
\"
1000 $(MZSCHEME
)\mzc
--c-mods mzscheme_base.c
++lib scheme
/base
1002 $(OUTDIR
)/if_python.obj
: $(OUTDIR
) if_python.c
$(INCL
)
1003 $(CC
) $(CFLAGS
) $(PYTHON_INC
) if_python.c
1005 $(OUTDIR
)/if_ole.obj
: $(OUTDIR
) if_ole.
cpp $(INCL
) if_ole.h
1007 $(OUTDIR
)/if_ruby.obj
: $(OUTDIR
) if_ruby.c
$(INCL
)
1008 $(CC
) $(CFLAGS
) $(RUBY_INC
) if_ruby.c
1010 $(OUTDIR
)/if_sniff.obj
: $(OUTDIR
) if_sniff.c
$(INCL
)
1011 $(CC
) $(CFLAGS
) if_sniff.c
1013 $(OUTDIR
)/if_tcl.obj
: $(OUTDIR
) if_tcl.c
$(INCL
)
1014 $(CC
) $(CFLAGS
) $(TCL_INC
) if_tcl.c
1016 $(OUTDIR
)/main.obj
: $(OUTDIR
) main.c
$(INCL
)
1018 $(OUTDIR
)/mark.obj
: $(OUTDIR
) mark.c
$(INCL
)
1020 $(OUTDIR
)/memfile.obj
: $(OUTDIR
) memfile.c
$(INCL
)
1022 $(OUTDIR
)/memline.obj
: $(OUTDIR
) memline.c
$(INCL
)
1024 $(OUTDIR
)/menu.obj
: $(OUTDIR
) menu.c
$(INCL
)
1026 $(OUTDIR
)/message.obj
: $(OUTDIR
) message.c
$(INCL
)
1028 $(OUTDIR
)/misc1.obj
: $(OUTDIR
) misc1.c
$(INCL
)
1030 $(OUTDIR
)/misc2.obj
: $(OUTDIR
) misc2.c
$(INCL
)
1032 $(OUTDIR
)/move.obj
: $(OUTDIR
) move.c
$(INCL
)
1034 $(OUTDIR
)/mbyte.obj
: $(OUTDIR
) mbyte.c
$(INCL
)
1036 $(OUTDIR
)/netbeans.obj
: $(OUTDIR
) netbeans.c
$(NBDEBUG_SRC
) $(INCL
)
1038 $(OUTDIR
)/normal.obj
: $(OUTDIR
) normal.c
$(INCL
)
1040 $(OUTDIR
)/option.obj
: $(OUTDIR
) option.c
$(INCL
)
1042 $(OUTDIR
)/ops.obj
: $(OUTDIR
) ops.c
$(INCL
)
1044 $(OUTDIR
)/os_mswin.obj
: $(OUTDIR
) os_mswin.c
$(INCL
)
1046 $(OUTDIR
)/os_win32.obj
: $(OUTDIR
) os_win32.c
$(INCL
) os_win32.h
1048 $(OUTDIR
)/os_w32exe.obj
: $(OUTDIR
) os_w32exe.c
$(INCL
)
1050 $(OUTDIR
)/pathdef.obj
: $(OUTDIR
) $(PATHDEF_SRC
) $(INCL
)
1051 $(CC
) $(CFLAGS
) $(PATHDEF_SRC
)
1053 $(OUTDIR
)/popupmnu.obj
: $(OUTDIR
) popupmnu.c
$(INCL
)
1055 $(OUTDIR
)/quickfix.obj
: $(OUTDIR
) quickfix.c
$(INCL
)
1057 $(OUTDIR
)/regexp.obj
: $(OUTDIR
) regexp.c
$(INCL
)
1059 $(OUTDIR
)/screen.obj
: $(OUTDIR
) screen.c
$(INCL
)
1061 $(OUTDIR
)/search.obj
: $(OUTDIR
) search.c
$(INCL
)
1063 $(OUTDIR
)/spell.obj
: $(OUTDIR
) spell.c
$(INCL
)
1065 $(OUTDIR
)/syntax.obj
: $(OUTDIR
) syntax.c
$(INCL
)
1067 $(OUTDIR
)/tag.obj
: $(OUTDIR
) tag.c
$(INCL
)
1069 $(OUTDIR
)/term.obj
: $(OUTDIR
) term.c
$(INCL
)
1071 $(OUTDIR
)/ui.obj
: $(OUTDIR
) ui.c
$(INCL
)
1073 $(OUTDIR
)/undo.obj
: $(OUTDIR
) undo.c
$(INCL
)
1075 $(OUTDIR
)/window.obj
: $(OUTDIR
) window.c
$(INCL
)
1077 $(OUTDIR
)/xpm_w32.obj
: $(OUTDIR
) xpm_w32.c
1078 $(CC
) $(CFLAGS
) $(XPM_INC
) xpm_w32.c
1080 $(OUTDIR
)/vim.res
: $(OUTDIR
) vim.rc gvim.exe.mnf version.h tools.bmp tearoff.bmp \
1081 vim.ico vim_error.ico vim_alert.ico vim_info.ico vim_quest.ico
1082 $(RC
) /l
0x409 /Fo
$(OUTDIR
)/vim.res
$(RCFLAGS
) vim.rc
1084 iid_ole.c if_ole.h vim.tlb
: if_ole.idl
1085 midl
/nologo
/error none
/proxy nul
/iid iid_ole.c
/tlb vim.tlb \
1086 /header if_ole.h if_ole.idl
1088 dimm.h dimm_i.c
: dimm.idl
1089 midl
/nologo
/error none
/proxy nul dimm.idl
1091 $(OUTDIR
)/dimm_i.obj
: $(OUTDIR
) dimm_i.c
$(INCL
)
1093 $(OUTDIR
)/glbl_ime.obj
: $(OUTDIR
) glbl_ime.
cpp dimm.h
$(INCL
)
1095 # $CFLAGS may contain backslashes and double quotes, escape them both.
1096 E0_CFLAGS
= $(CFLAGS
:\
=\\)
1097 E_CFLAGS
= $(E0_CFLAGS
:"=\")
1098 # ") stop the string
1100 $(PATHDEF_SRC
): auto
1101 @echo creating
$(PATHDEF_SRC
)
1102 @echo
/* pathdef.c
*/ > $(PATHDEF_SRC
)
1103 @echo
#include "vim.h" >> $(PATHDEF_SRC)
1104 @echo char_u
*default_vim_dir
= (char_u
*)"$(VIMRCLOC:\=\\)"; >> $(PATHDEF_SRC
)
1105 @echo char_u
*default_vimruntime_dir
= (char_u
*)"$(VIMRUNTIMEDIR:\=\\)"; >> $(PATHDEF_SRC
)
1106 @echo char_u
*all_cflags = (char_u
*)"$(CC:\=\\) $(E_CFLAGS)"; >> $(PATHDEF_SRC
)
1107 @echo char_u
*all_lflags
= (char_u
*)"$(link:\=\\) $(LINKARGS1:\=\\) $(LINKARGS2:\=\\)"; >> $(PATHDEF_SRC
)
1108 @echo char_u
*compiled_user
= (char_u
*)"$(USERNAME)"; >> $(PATHDEF_SRC
)
1109 @echo char_u
*compiled_sys
= (char_u
*)"$(USERDOMAIN)"; >> $(PATHDEF_SRC
)
1112 if not exist auto
/nul mkdir auto
1123 proto
/ex_cmds2.pro \
1124 proto
/ex_docmd.pro \
1126 proto
/ex_getln.pro \
1129 proto
/hardcopy.pro \
1144 proto
/os_mswin.pro \
1145 proto
/os_win32.pro \
1146 proto
/popupmnu.pro \
1147 proto
/quickfix.pro \
1162 # Generate foo.cod (mixed source and assembly listing) from foo.c via "nmake
1165 $(CC
) $(CFLAGS
) /FAcs
$<
1167 # Generate foo.i (preprocessor listing) from foo.c via "nmake foo.i"
1169 $(CC
) $(CFLAGS
) /P
/C
$<
1172 # vim: set noet sw=8 ts=8 sts=0 wm=0 tw=0: