Ensure viminfo is written on Cmd-q
[MacVim.git] / src / Make_cyg.mak
blobeaf73098370458d708c67841034b444ff8d829c0
2 # Makefile for VIM on Win32, using Cygnus gcc
3 # Last updated by Dan Sharp. Last Change: 2007 Sep 29
5 # Also read INSTALLpc.txt!
7 # This compiles Vim as a Windows application. If you want Vim to run as a
8 # Cygwin application use the Makefile (just like on Unix).
10 # GUI no or yes: set to yes if you want the GUI version (yes)
11 # PERL define to path to Perl dir to get Perl support (not defined)
12 # PERL_VER define to version of Perl being used (56)
13 # DYNAMIC_PERL no or yes: set to yes to load the Perl DLL dynamically (yes)
14 # PYTHON define to path to Python dir to get PYTHON support (not defined)
15 # PYTHON_VER define to version of Python being used (22)
16 # DYNAMIC_PYTHON no or yes: use yes to load the Python DLL dynamically (yes)
17 # TCL define to path to TCL dir to get TCL support (not defined)
18 # TCL_VER define to version of TCL being used (83)
19 # DYNAMIC_TCL no or yes: use yes to load the TCL DLL dynamically (yes)
20 # RUBY define to path to Ruby dir to get Ruby support (not defined)
21 # RUBY_VER define to version of Ruby being used (16)
22 # DYNAMIC_RUBY no or yes: use yes to load the Ruby DLL dynamically (yes)
23 # MZSCHEME define to path to MzScheme dir to get MZSCHEME support (not defined)
24 # MZSCHEME_VER define to version of MzScheme being used (209_000)
25 # DYNAMIC_MZSCHEME no or yes: use yes to load the MzScheme DLLs dynamically (yes)
26 # MZSCHEME_DLLS path to MzScheme DLLs (libmzgc and libmzsch), for "static" build.
27 # GETTEXT no or yes: set to yes for dynamic gettext support (yes)
28 # ICONV no or yes: set to yes for dynamic iconv support (yes)
29 # MBYTE no or yes: set to yes to include multibyte support (yes)
30 # IME no or yes: set to yes to include IME support (yes)
31 # DYNAMIC_IME no or yes: set to yes to load imm32.dll dynamically (yes)
32 # OLE no or yes: set to yes to make OLE gvim (no)
33 # DEBUG no or yes: set to yes if you wish a DEBUGging build (no)
34 # CPUNR No longer supported, use ARCH.
35 # ARCH i386 through pentium4: select -march argument to compile with (i386)
36 # USEDLL no or yes: set to yes to use the Runtime library DLL (no)
37 # For USEDLL=yes the cygwin1.dll is required to run Vim.
38 # POSTSCRIPT no or yes: set to yes for PostScript printing (no)
39 # FEATURES TINY, SMALL, NORMAL, BIG or HUGE (BIG)
40 # WINVER Lowest Win32 version to support. (0x0400)
41 # CSCOPE no or yes: to include cscope interface support (yes)
42 # OPTIMIZE SPACE, SPEED, or MAXSPEED: set optimization level (MAXSPEED)
43 # NETBEANS no or yes: to include netbeans interface support (yes when GUI
44 # is yes)
45 # NBDEBUG no or yes: to include netbeans interface debugging support (no)
46 # XPM define to path to XPM dir to get XPM image support (not defined)
47 #>>>>> choose options:
48 ifndef GUI
49 GUI=yes
50 endif
52 ifndef FEATURES
53 FEATURES = BIG
54 endif
56 ifndef GETTEXT
57 GETTEXT = yes
58 endif
60 ifndef ICONV
61 ICONV = yes
62 endif
64 ifndef MBYTE
65 MBYTE = yes
66 endif
68 ifndef IME
69 IME = yes
70 endif
72 ifndef ARCH
73 ARCH = i386
74 endif
76 ifndef WINVER
77 WINVER = 0x0400
78 endif
80 ifndef CSCOPE
81 CSCOPE = yes
82 endif
84 ifndef NETBEANS
85 ifeq ($(GUI),yes)
86 NETBEANS = yes
87 endif
88 endif
90 ifndef OPTIMIZE
91 OPTIMIZE = MAXSPEED
92 endif
94 ### See feature.h for a list of optionals.
95 ### Any other defines can be included here.
97 DEFINES = -DWIN32 -DHAVE_PATHDEF -DFEAT_$(FEATURES) \
98 -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER)
99 INCLUDES = -march=$(ARCH) -Iproto
101 #>>>>> name of the compiler and linker, name of lib directory
102 CC = gcc
103 RC = windres
105 ##############################
106 # DYNAMIC_PERL=yes and no both work
107 ##############################
108 ifdef PERL
109 DEFINES += -DFEAT_PERL
110 INCLUDES += -I$(PERL)/lib/CORE
111 EXTRA_OBJS += $(OUTDIR)/if_perl.o
113 ifndef DYNAMIC_PERL
114 DYNAMIC_PERL = yes
115 endif
117 ifndef PERL_VER
118 PERL_VER = 56
119 endif
121 ifeq (yes, $(DYNAMIC_PERL))
122 DEFINES += -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl$(PERL_VER).dll\"
123 else
124 EXTRA_LIBS += $(PERL)/lib/CORE/perl$(PERL_VER).lib
125 endif
126 endif
128 ##############################
129 # DYNAMIC_PYTHON=yes works.
130 # DYNAMIC_PYTHON=no does not (unresolved externals on link).
131 ##############################
132 ifdef PYTHON
133 DEFINES += -DFEAT_PYTHON
134 INCLUDES += -I$(PYTHON)/include
135 EXTRA_OBJS += $(OUTDIR)/if_python.o
137 ifndef DYNAMIC_PYTHON
138 DYNAMIC_PYTHON = yes
139 endif
141 ifndef PYTHON_VER
142 PYTHON_VER = 22
143 endif
145 ifeq (yes, $(DYNAMIC_PYTHON))
146 DEFINES += -DDYNAMIC_PYTHON -DDYNAMIC_PYTHON_DLL=\"python$(PYTHON_VER).dll\"
147 else
148 EXTRA_LIBS += $(PYTHON)/libs/python$(PYTHON_VER).lib
149 endif
150 endif
152 ##############################
153 # DYNAMIC_RUBY=yes works.
154 # DYNAMIC_RUBY=no does not (process exits).
155 ##############################
156 ifdef RUBY
158 ifndef RUBY_VER
159 RUBY_VER=16
160 endif
162 ifndef RUBY_VER_LONG
163 RUBY_VER_LONG=1.6
164 endif
166 ifndef DYNAMIC_RUBY
167 DYNAMIC_RUBY = yes
168 endif
170 ifeq ($(RUBY_VER), 16)
171 ifndef RUBY_PLATFORM
172 RUBY_PLATFORM = i586-mswin32
173 endif
174 ifndef RUBY_INSTALL_NAME
175 RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
176 endif
177 else
178 ifndef RUBY_PLATFORM
179 RUBY_PLATFORM = i386-mswin32
180 endif
181 ifndef RUBY_INSTALL_NAME
182 RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
183 endif
184 endif
186 DEFINES += -DFEAT_RUBY
187 INCLUDES += -I$(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
188 EXTRA_OBJS += $(OUTDIR)/if_ruby.o
190 ifeq (yes, $(DYNAMIC_RUBY))
191 DEFINES += -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\"
192 DEFINES += -DDYNAMIC_RUBY_VER=$(RUBY_VER)
193 else
194 EXTRA_LIBS += $(RUBY)/lib/$(RUBY_INSTALL_NAME).lib
195 endif
196 endif
198 ##############################
199 # DYNAMIC_MZSCHEME=yes works
200 # DYNAMIC_MZSCHEME=no works too
201 ##############################
202 ifdef MZSCHEME
203 DEFINES += -DFEAT_MZSCHEME
204 INCLUDES += -I$(MZSCHEME)/include
205 EXTRA_OBJS += $(OUTDIR)/if_mzsch.o
207 ifndef DYNAMIC_MZSCHEME
208 DYNAMIC_MZSCHEME = yes
209 endif
211 ifndef MZSCHEME_VER
212 MZSCHEME_VER = 209_000
213 endif
215 ifeq (yes, $(DYNAMIC_MZSCHEME))
216 DEFINES += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
217 else
218 ifndef MZSCHEME_DLLS
219 MZSCHEME_DLLS = $(MZSCHEME)
220 endif
221 EXTRA_LIBS += -L$(MZSCHEME_DLLS) -lmzsch$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
222 endif
223 endif
225 ##############################
226 # DYNAMIC_TCL=yes and no both work.
227 ##############################
228 ifdef TCL
229 DEFINES += -DFEAT_TCL
230 INCLUDES += -I$(TCL)/include
231 EXTRA_OBJS += $(OUTDIR)/if_tcl.o
233 ifndef DYNAMIC_TCL
234 DYNAMIC_TCL = yes
235 endif
237 ifndef TCL_VER
238 TCL_VER = 83
239 endif
241 ifeq (yes, $(DYNAMIC_TCL))
242 DEFINES += -DDYNAMIC_TCL -DDYNAMIC_TCL_DLL=\"tcl$(TCL_VER).dll\"
243 EXTRA_LIBS += $(TCL)/lib/tclstub$(TCL_VER).lib
244 else
245 EXTRA_LIBS += $(TCL)/lib/tcl$(TCL_VER).lib
246 endif
247 endif
249 ##############################
250 ifeq (yes, $(GETTEXT))
251 DEFINES += -DDYNAMIC_GETTEXT
252 endif
254 ##############################
255 ifeq (yes, $(ICONV))
256 DEFINES += -DDYNAMIC_ICONV
257 endif
259 ##############################
260 ifeq (yes, $(MBYTE))
261 DEFINES += -DFEAT_MBYTE
262 endif
264 ##############################
265 ifeq (yes, $(IME))
266 DEFINES += -DFEAT_MBYTE_IME
268 ifndef DYNAMIC_IME
269 DYNAMIC_IME = yes
270 endif
272 ifeq (yes, $(DYNAMIC_IME))
273 DEFINES += -DDYNAMIC_IME
274 else
275 EXTRA_LIBS += -limm32
276 endif
277 endif
279 ##############################
280 ifeq (yes, $(DEBUG))
281 DEFINES += -DDEBUG
282 INCLUDES += -g -fstack-check
283 DEBUG_SUFFIX = d
284 else
286 ifeq ($(OPTIMIZE), SIZE)
287 OPTFLAG = -Os
288 else
289 ifeq ($(OPTIMIZE), MAXSPEED)
290 OPTFLAG = -O3 -fomit-frame-pointer -freg-struct-return
291 else
292 OPTFLAG = -O2
293 endif
294 endif
296 # A bug in the GCC <= 3.2 optimizer can cause a crash. The
297 # following option removes the problem optimization.
298 OPTFLAG += -fno-strength-reduce
300 INCLUDES += -s
302 endif
304 ##############################
305 # USEDLL=yes will build a Cygwin32 executable that relies on cygwin1.dll.
306 # USEDLL=no will build a Mingw32 executable with no extra dll dependencies.
307 ##############################
308 ifeq (yes, $(USEDLL))
309 DEFINES += -D_MAX_PATH=256 -D__CYGWIN__
310 else
311 INCLUDES += -mno-cygwin
312 endif
314 ##############################
315 ifeq (yes, $(POSTSCRIPT))
316 DEFINES += -DMSWINPS
317 endif
319 ##############################
320 ifeq (yes, $(CSCOPE))
321 DEFINES += -DFEAT_CSCOPE
322 EXTRA_OBJS += $(OUTDIR)/if_cscope.o
323 endif
325 ##############################
326 ifeq ($(GUI),yes)
328 ##############################
329 ifeq (yes, $(NETBEANS))
330 # Only allow NETBEANS for a GUI build.
331 DEFINES += -DFEAT_NETBEANS_INTG
332 EXTRA_OBJS += $(OUTDIR)/netbeans.o
333 EXTRA_LIBS += -lwsock32
335 ifeq (yes, $(NBDEBUG))
336 DEFINES += -DNBDEBUG
337 NBDEBUG_DEP = nbdebug.h nbdebug.c
338 endif
340 endif
342 ##############################
343 ifdef XPM
344 # Only allow XPM for a GUI build.
345 DEFINES += -DFEAT_XPM_W32
346 INCLUDES += -I$(XPM)/include
347 EXTRA_OBJS += $(OUTDIR)/xpm_w32.o
348 EXTRA_LIBS += -L$(XPM)/lib -lXpm
349 endif
351 ##############################
352 EXE = gvim$(DEBUG_SUFFIX).exe
353 OUTDIR = gobj$(DEBUG_SUFFIX)
354 DEFINES += -DFEAT_GUI_W32 -DFEAT_CLIPBOARD
355 EXTRA_OBJS += $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/gui_beval.o $(OUTDIR)/os_w32exe.o
356 EXTRA_LIBS += -mwindows -lcomctl32 -lversion
357 else
358 EXE = vim$(DEBUG_SUFFIX).exe
359 OUTDIR = obj$(DEBUG_SUFFIX)
360 LIBS += -luser32 -lgdi32 -lcomdlg32
361 endif
363 ##############################
364 ifeq (yes, $(OLE))
365 DEFINES += -DFEAT_OLE
366 EXTRA_OBJS += $(OUTDIR)/if_ole.o
367 EXTRA_LIBS += -loleaut32 -lstdc++
368 endif
370 ##############################
371 ifneq (sh.exe, $(SHELL))
372 DEL = rm
373 MKDIR = mkdir -p
374 DIRSLASH = /
375 else
376 DEL = del
377 MKDIR = mkdir
378 DIRSLASH = \\
379 endif
381 #>>>>> end of choices
382 ###########################################################################
384 INCL = vim.h globals.h option.h keymap.h macros.h ascii.h term.h os_win32.h \
385 structs.h version.h
387 CFLAGS = $(OPTFLAG) $(DEFINES) $(INCLUDES)
389 RCFLAGS = -O coff $(DEFINES)
391 OBJ = \
392 $(OUTDIR)/buffer.o \
393 $(OUTDIR)/charset.o \
394 $(OUTDIR)/diff.o \
395 $(OUTDIR)/digraph.o \
396 $(OUTDIR)/edit.o \
397 $(OUTDIR)/eval.o \
398 $(OUTDIR)/ex_cmds.o \
399 $(OUTDIR)/ex_cmds2.o \
400 $(OUTDIR)/ex_docmd.o \
401 $(OUTDIR)/ex_eval.o \
402 $(OUTDIR)/ex_getln.o \
403 $(OUTDIR)/fileio.o \
404 $(OUTDIR)/fold.o \
405 $(OUTDIR)/getchar.o \
406 $(OUTDIR)/hardcopy.o \
407 $(OUTDIR)/hashtab.o \
408 $(OUTDIR)/main.o \
409 $(OUTDIR)/mark.o \
410 $(OUTDIR)/memfile.o \
411 $(OUTDIR)/memline.o \
412 $(OUTDIR)/menu.o \
413 $(OUTDIR)/message.o \
414 $(OUTDIR)/misc1.o \
415 $(OUTDIR)/misc2.o \
416 $(OUTDIR)/move.o \
417 $(OUTDIR)/mbyte.o \
418 $(OUTDIR)/normal.o \
419 $(OUTDIR)/ops.o \
420 $(OUTDIR)/option.o \
421 $(OUTDIR)/os_win32.o \
422 $(OUTDIR)/os_mswin.o \
423 $(OUTDIR)/pathdef.o \
424 $(OUTDIR)/popupmnu.o \
425 $(OUTDIR)/quickfix.o \
426 $(OUTDIR)/regexp.o \
427 $(OUTDIR)/screen.o \
428 $(OUTDIR)/search.o \
429 $(OUTDIR)/spell.o \
430 $(OUTDIR)/syntax.o \
431 $(OUTDIR)/tag.o \
432 $(OUTDIR)/term.o \
433 $(OUTDIR)/ui.o \
434 $(OUTDIR)/undo.o \
435 $(OUTDIR)/version.o \
436 $(OUTDIR)/vimrc.o \
437 $(OUTDIR)/window.o \
438 $(EXTRA_OBJS)
440 all: $(EXE) xxd/xxd.exe vimrun.exe install.exe uninstal.exe GvimExt/gvimext.dll
442 # According to the Cygwin doc 1.2 FAQ, kernel32 should not be specified for
443 # linking unless calling ld directly.
444 # See /usr/doc/cygwin-doc-1.2/html/faq_toc.html#TOC93 for more information.
445 $(EXE): $(OUTDIR) $(OBJ)
446 $(CC) $(CFLAGS) -o $(EXE) $(OBJ) $(LIBS) -luuid -lole32 $(EXTRA_LIBS)
448 xxd/xxd.exe: xxd/xxd.c
449 $(MAKE) -C xxd -f Make_cyg.mak USEDLL=$(USEDLL)
451 GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
452 $(MAKE) -C GvimExt -f Make_ming.mak
454 vimrun.exe: vimrun.c
455 $(CC) $(CFLAGS) -o vimrun.exe vimrun.c $(LIBS)
457 install.exe: dosinst.c
458 $(CC) $(CFLAGS) -o install.exe dosinst.c $(LIBS) -luuid -lole32
460 uninstal.exe: uninstal.c
461 $(CC) $(CFLAGS) -o uninstal.exe uninstal.c $(LIBS)
463 $(OUTDIR):
464 $(MKDIR) $(OUTDIR)
466 tags:
467 command /c ctags *.c $(INCL)
469 clean:
470 -$(DEL) $(OUTDIR)$(DIRSLASH)*.o
471 -rmdir $(OUTDIR)
472 -$(DEL) $(EXE) vimrun.exe install.exe uninstal.exe
473 ifdef PERL
474 -$(DEL) if_perl.c
475 endif
476 -$(DEL) pathdef.c
477 $(MAKE) -C xxd -f Make_cyg.mak clean
478 $(MAKE) -C GvimExt -f Make_ming.mak clean
480 distclean: clean
481 -$(DEL) obj$(DIRSLASH)*.o
482 -rmdir obj
483 -$(DEL) gobj$(DIRSLASH)*.o
484 -rmdir gobj
485 -$(DEL) objd$(DIRSLASH)*.o
486 -rmdir objd
487 -$(DEL) gobjd$(DIRSLASH)*.o
488 -rmdir gobjd
489 -$(DEL) *.exe
491 ###########################################################################
493 $(OUTDIR)/%.o : %.c $(INCL)
494 $(CC) -c $(CFLAGS) $< -o $@
496 $(OUTDIR)/ex_docmd.o: ex_docmd.c $(INCL) ex_cmds.h
497 $(CC) -c $(CFLAGS) ex_docmd.c -o $(OUTDIR)/ex_docmd.o
499 $(OUTDIR)/ex_eval.o: ex_eval.c $(INCL) ex_cmds.h
500 $(CC) -c $(CFLAGS) ex_eval.c -o $(OUTDIR)/ex_eval.o
502 $(OUTDIR)/if_cscope.o: if_cscope.c $(INCL) if_cscope.h
503 $(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
505 $(OUTDIR)/if_ole.o: if_ole.cpp $(INCL)
506 $(CC) -c $(CFLAGS) if_ole.cpp -o $(OUTDIR)/if_ole.o
508 if_perl.c: if_perl.xs typemap
509 $(PERL)/bin/perl `cygpath -d $(PERL)/lib/ExtUtils/xsubpp` \
510 -prototypes -typemap \
511 `cygpath -d $(PERL)/lib/ExtUtils/typemap` if_perl.xs > $@
513 $(OUTDIR)/if_perl.o: if_perl.c $(INCL)
514 ifeq (yes, $(USEDLL))
515 $(CC) -c $(CFLAGS) -I/usr/include/mingw -D__MINGW32__ if_perl.c -o $(OUTDIR)/if_perl.o
516 endif
518 $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
519 ifeq (16, $(RUBY_VER))
520 $(CC) -c $(CFLAGS) -U_WIN32 if_ruby.c -o $(OUTDIR)/if_ruby.o
521 endif
523 $(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_DEP)
524 $(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
526 $(OUTDIR)/vimrc.o: vim.rc version.h gui_w32_rc.h
527 $(RC) $(RCFLAGS) vim.rc -o $(OUTDIR)/vimrc.o
529 pathdef.c: $(INCL)
530 ifneq (sh.exe, $(SHELL))
531 @echo creating pathdef.c
532 @echo '/* pathdef.c */' > pathdef.c
533 @echo '#include "vim.h"' >> pathdef.c
534 @echo 'char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)";' >> pathdef.c
535 @echo 'char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)";' >> pathdef.c
536 @echo 'char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)";' >> pathdef.c
537 @echo 'char_u *all_lflags = (char_u *)"$(CC) -s -o $(EXE) $(LIBS) -luuid -lole32 $(EXTRA_LIBS)";' >> pathdef.c
538 @echo 'char_u *compiled_user = (char_u *)"$(USERNAME)";' >> pathdef.c
539 @echo 'char_u *compiled_sys = (char_u *)"$(USERDOMAIN)";' >> pathdef.c
540 else
541 @echo creating pathdef.c
542 @echo /* pathdef.c */ > pathdef.c
543 @echo #include "vim.h" >> pathdef.c
544 @echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)"; >> pathdef.c
545 @echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)"; >> pathdef.c
546 @echo char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)"; >> pathdef.c
547 @echo char_u *all_lflags = (char_u *)"$(CC) -s -o $(EXE) $(LIBS) -luuid -lole32 $(EXTRA_LIBS)"; >> pathdef.c
548 @echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> pathdef.c
549 @echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> pathdef.c
550 endif