diff options
42 files changed, 1200 insertions, 466 deletions
diff --git a/.gitignore b/.gitignore index 5691e22d00..6aa298b40f 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,8 @@ src/auto/pathdef.c *.suo *.res *.RES +vim*.dll +vim*.lib src/if_perl.c src/pathdef.c src/Obj*/pathdef.c @@ -454,6 +454,7 @@ SRC_DOS = \ src/iscygpty.h \ src/iid_ole.c \ src/os_dos.h \ + src/os_w32dll.c \ src/os_w32exe.c \ src/os_win32.c \ src/os_mswin.c \ diff --git a/nsis/gvim.nsi b/nsis/gvim.nsi index 2e990b8a05..5416a0f886 100644 --- a/nsis/gvim.nsi +++ b/nsis/gvim.nsi @@ -322,6 +322,9 @@ Section "$(str_section_exe)" id_section_exe SetOutPath $0 File /oname=gvim.exe ${VIMSRC}\gvim_ole.exe +!if /FileExists "${VIMSRC}\vim${BIT}.dll" + File ${VIMSRC}\vim${BIT}.dll +!endif File /oname=install.exe ${VIMSRC}\installw32.exe File /oname=uninstal.exe ${VIMSRC}\uninstalw32.exe File ${VIMSRC}\vimrun.exe diff --git a/runtime/doc/gui_w32.txt b/runtime/doc/gui_w32.txt index 15dd275a03..5ce3dc8c46 100644 --- a/runtime/doc/gui_w32.txt +++ b/runtime/doc/gui_w32.txt @@ -1,4 +1,4 @@ -*gui_w32.txt* For Vim version 8.1. Last change: 2017 Oct 27 +*gui_w32.txt* For Vim version 8.1. Last change: 2019 Apr 28 VIM REFERENCE MANUAL by Bram Moolenaar @@ -31,6 +31,17 @@ The GUI will always run in the Windows subsystem. Mostly shells automatically return with a command prompt after starting gvim. If not, you should use the "start" command: > start gvim [options] file .. +< *E988* +The console version with the |-g| option may also start the GUI by executing +gvim.exe: > + vim -g [options] file .. +To make this work, gvim.exe must exist in the same directory as the vim.exe, +and this feature must be enabled at compile time. + +One may also use `:gui` from the console version. However, this is an +experimental feature and this feature must be enabled at compile time. +It uses a session file to recreate the current state of the console Vim in the +GUI Vim. Note: All fonts (bold, italic) must be of the same size!!! If you don't do this, text will disappear or mess up the display. Vim does not check the font diff --git a/src/Make_cyg_ming.mak b/src/Make_cyg_ming.mak index 599b9eeb4c..a2ff64af20 100644 --- a/src/Make_cyg_ming.mak +++ b/src/Make_cyg_ming.mak @@ -36,7 +36,7 @@ FEATURES=HUGE DEBUG=no # set to yes to create a mapfile -# MAP=yes +#MAP=yes # set to SIZE for size, SPEED for speed, MAXSPEED for maximum optimization OPTIMIZE=MAXSPEED @@ -44,6 +44,11 @@ OPTIMIZE=MAXSPEED # set to yes to make gvim, no for vim GUI=yes +# set to yes to enable the DLL support (EXPERIMENTAL). +# Creates vim{32,64}.dll, and stub gvim.exe and vim.exe. +# "GUI" should be also set to "yes". +#VIMDLL=yes + # set to no if you do not want to use DirectWrite (DirectX) # MinGW-w64 is needed, and ARCH should be set to i686 or x86-64. DIRECTX=yes @@ -687,7 +692,7 @@ else # SPEED CFLAGS += -O2 endif endif -CFLAGS += -s +LFLAGS += -s endif LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lnetapi32 -lversion @@ -739,7 +744,6 @@ OBJ = \ $(OUTDIR)/ops.o \ $(OUTDIR)/option.o \ $(OUTDIR)/os_mswin.o \ - $(OUTDIR)/os_w32exe.o \ $(OUTDIR)/os_win32.o \ $(OUTDIR)/pathdef.o \ $(OUTDIR)/popupmnu.o \ @@ -760,10 +764,17 @@ OBJ = \ $(OUTDIR)/usercmd.o \ $(OUTDIR)/userfunc.o \ $(OUTDIR)/version.o \ - $(OUTDIR)/vimrc.o \ $(OUTDIR)/winclip.o \ $(OUTDIR)/window.o +ifeq ($(VIMDLL),yes) +OBJ += $(OUTDIR)/os_w32dll.o $(OUTDIR)/vimrcd.o +EXEOBJC = $(OUTDIR)/os_w32exec.o $(OUTDIR)/vimrcc.o +EXEOBJG = $(OUTDIR)/os_w32exeg.o $(OUTDIR)/vimrcg.o +else +OBJ += $(OUTDIR)/os_w32exe.o $(OUTDIR)/vimrc.o +endif + ifdef PERL OBJ += $(OUTDIR)/if_perl.o endif @@ -870,16 +881,36 @@ endif LFLAGS += -municode -ifeq ($(GUI),yes) +ifeq ($(VIMDLL),yes) +VIMEXE := vim$(DEBUG_SUFFIX).exe +GVIMEXE := gvim$(DEBUG_SUFFIX).exe + ifeq ($(ARCH),x86-64) +VIMDLLBASE := vim64$(DEBUG_SUFFIX) + else +VIMDLLBASE := vim32$(DEBUG_SUFFIX) + endif +TARGET = $(VIMDLLBASE).dll +LFLAGS += -shared +EXELFLAGS += -municode + ifneq ($(DEBUG),yes) +EXELFLAGS += -s + endif +DEFINES += $(DEF_GUI) -DVIMDLL +OBJ += $(GUIOBJ) $(CUIOBJ) +OUTDIR = dobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH) +MAIN_TARGET = $(GVIMEXE) $(VIMEXE) $(VIMDLLBASE).dll +else ifeq ($(GUI),yes) TARGET := gvim$(DEBUG_SUFFIX).exe DEFINES += $(DEF_GUI) OBJ += $(GUIOBJ) LFLAGS += -mwindows OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH) +MAIN_TARGET = $(TARGET) else OBJ += $(CUIOBJ) TARGET := vim$(DEBUG_SUFFIX).exe OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH) +MAIN_TARGET = $(TARGET) endif ifdef GETTEXT @@ -955,7 +986,7 @@ ifeq (yes, $(MAP)) LFLAGS += -Wl,-Map=$(TARGET).map endif -all: $(TARGET) vimrun.exe xxd/xxd.exe tee/tee.exe install.exe uninstal.exe GvimExt/gvimext.dll +all: $(MAIN_TARGET) vimrun.exe xxd/xxd.exe tee/tee.exe install.exe uninstal.exe GvimExt/gvimext.dll vimrun.exe: vimrun.c $(CC) $(CFLAGS) -o vimrun.exe vimrun.c $(LIB) @@ -966,8 +997,19 @@ install.exe: dosinst.c uninstal.exe: uninstal.c $(CC) $(CFLAGS) -o uninstal.exe uninstal.c $(LIB) +ifeq ($(VIMDLL),yes) +$(TARGET): $(OUTDIR) $(OBJ) + $(LINK) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid -lgdi32 $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB) + +$(GVIMEXE): $(OUTDIR) $(EXEOBJG) $(VIMDLLBASE).dll + $(CC) -L. $(EXELFLAGS) -mwindows -o $@ $(EXEOBJG) -l$(VIMDLLBASE) + +$(VIMEXE): $(OUTDIR) $(EXEOBJC) $(VIMDLLBASE).dll + $(CC) -L. $(EXELFLAGS) -o $@ $(EXEOBJC) -l$(VIMDLLBASE) +else $(TARGET): $(OUTDIR) $(OBJ) $(LINK) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB) +endif upx: exes upx gvim.exe @@ -996,7 +1038,7 @@ clean: -$(DEL) $(OUTDIR)$(DIRSLASH)*.o -$(DEL) $(OUTDIR)$(DIRSLASH)*.res -rmdir $(OUTDIR) - -$(DEL) $(TARGET) vimrun.exe install.exe uninstal.exe + -$(DEL) $(MAIN_TARGET) vimrun.exe install.exe uninstal.exe -$(DEL) pathdef.c ifdef PERL -$(DEL) if_perl.c @@ -1025,74 +1067,95 @@ $(OUTDIR)/if_python3.o: if_python3.c if_py_both.h $(INCL) $(OUTDIR)/%.o : %.c $(INCL) $(CC) -c $(CFLAGS) $< -o $@ -$(OUTDIR)/vimrc.o: vim.rc version.h gui_w32_rc.h +ifeq ($(VIMDLL),yes) +$(OUTDIR)/vimrcc.o: vim.rc gvim.exe.mnf version.h gui_w32_rc.h vim.ico + $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) -UFEAT_GUI_MSWIN \ + --input-format=rc --output-format=coff -i vim.rc -o $@ + +$(OUTDIR)/vimrcg.o: vim.rc gvim.exe.mnf version.h gui_w32_rc.h vim.ico + $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \ + --input-format=rc --output-format=coff -i vim.rc -o $@ + +$(OUTDIR)/vimrcd.o: vim.rc version.h gui_w32_rc.h \ + tools.bmp tearoff.bmp vim.ico vim_error.ico \ + vim_alert.ico vim_info.ico vim_quest.ico + $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) -DRCDLL -DVIMDLLBASE=\\\"$(VIMDLLBASE)\\\" \ + --input-format=rc --output-format=coff -i vim.rc -o $@ +else +$(OUTDIR)/vimrc.o: vim.rc gvim.exe.mnf version.h gui_w32_rc.h \ + tools.bmp tearoff.bmp vim.ico vim_error.ico \ + vim_alert.ico vim_info.ico vim_quest.ico $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \ --input-format=rc --output-format=coff -i vim.rc -o $@ +endif $(OUTDIR): $(MKDIR) $(OUTDIR) $(OUTDIR)/gui_dwrite.o: gui_dwrite.cpp $(INCL) gui_dwrite.h - $(CC) -c $(CFLAGS) $(CXXFLAGS) gui_dwrite.cpp -o $(OUTDIR)/gui_dwrite.o + $(CC) -c $(CFLAGS) $(CXXFLAGS) gui_dwrite.cpp -o $@ $(OUTDIR)/gui.o: gui.c $(INCL) $(GUI_INCL) - $(CC) -c $(CFLAGS) gui.c -o $(OUTDIR)/gui.o + $(CC) -c $(CFLAGS) gui.c -o $@ $(OUTDIR)/beval.o: beval.c $(INCL) $(GUI_INCL) - $(CC) -c $(CFLAGS) beval.c -o $(OUTDIR)/beval.o + $(CC) -c $(CFLAGS) beval.c -o $@ $(OUTDIR)/gui_beval.o: gui_beval.c $(INCL) $(GUI_INCL) - $(CC) -c $(CFLAGS) gui_beval.c -o $(OUTDIR)/gui_beval.o + $(CC) -c $(CFLAGS) gui_beval.c -o $@ $(OUTDIR)/gui_w32.o: gui_w32.c $(INCL) $(GUI_INCL) - $(CC) -c $(CFLAGS) gui_w32.c -o $(OUTDIR)/gui_w32.o + $(CC) -c $(CFLAGS) gui_w32.c -o $@ $(OUTDIR)/if_cscope.o: if_cscope.c $(INCL) if_cscope.h - $(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o + $(CC) -c $(CFLAGS) if_cscope.c -o $@ $(OUTDIR)/if_mzsch.o: if_mzsch.c $(INCL) $(MZSCHEME_INCL) $(MZ_EXTRA_DEP) - $(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o + $(CC) -c $(CFLAGS) if_mzsch.c -o $@ mzscheme_base.c: $(MZSCHEME)/mzc --c-mods mzscheme_base.c ++lib scheme/base # Remove -D__IID_DEFINED__ for newer versions of the w32api $(OUTDIR)/if_ole.o: if_ole.cpp $(INCL) if_ole.h - $(CC) $(CFLAGS) $(CXXFLAGS) -c -o $(OUTDIR)/if_ole.o if_ole.cpp + $(CC) -c $(CFLAGS) $(CXXFLAGS) if_ole.cpp -o $@ auto/if_perl.c: if_perl.xs typemap $(XSUBPP) -prototypes -typemap \ $(PERLTYPEMAP) if_perl.xs -output $@ $(OUTDIR)/if_perl.o: auto/if_perl.c $(INCL) - $(CC) -c $(CFLAGS) auto/if_perl.c -o $(OUTDIR)/if_perl.o + $(CC) -c $(CFLAGS) auto/if_perl.c -o $@ $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL) ifeq (16, $(RUBY)) - $(CC) $(CFLAGS) -U_WIN32 -c -o $(OUTDIR)/if_ruby.o if_ruby.c + $(CC) $(CFLAGS) -U_WIN32 -c -o $@ if_ruby.c endif $(OUTDIR)/iscygpty.o: iscygpty.c $(CUI_INCL) $(CC) -c $(CFLAGS) iscygpty.c -o $(OUTDIR)/iscygpty.o -U_WIN32_WINNT -D_WIN32_WINNT=0x0600 -DUSE_DYNFILEID -DENABLE_STUB_IMPL $(OUTDIR)/main.o: main.c $(INCL) $(CUI_INCL) - $(CC) -c $(CFLAGS) main.c -o $(OUTDIR)/main.o + $(CC) -c $(CFLAGS) main.c -o $@ $(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC) - $(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o + $(CC) -c $(CFLAGS) netbeans.c -o $@ + +$(OUTDIR)/os_w32exec.o: os_w32exe.c $(INCL) + $(CC) -c $(CFLAGS) -UFEAT_GUI_MSWIN os_w32exe.c -o $@ + +$(OUTDIR)/os_w32exeg.o: os_w32exe.c $(INCL) + $(CC) -c $(CFLAGS) os_w32exe.c -o $@ $(OUTDIR)/os_win32.o: os_win32.c $(INCL) $(MZSCHEME_INCL) - $(CC) -c $(CFLAGS) os_win32.c -o $(OUTDIR)/os_win32.o + $(CC) -c $(CFLAGS) os_win32.c -o $@ $(OUTDIR)/regexp.o: regexp.c regexp_nfa.c $(INCL) - $(CC) -c $(CFLAGS) regexp.c -o $(OUTDIR)/regexp.o + $(CC) -c $(CFLAGS) regexp.c -o $@ $(OUTDIR)/terminal.o: terminal.c $(INCL) $(TERM_DEPS) - $(CC) -c $(CFLAGS) terminal.c -o $(OUTDIR)/terminal.o - -$(OUTDIR)/textprop.o: textprop.c $(INCL) - $(CC) -c $(CFLAGS) textprop.c -o $(OUTDIR)/textprop.o + $(CC) -c $(CFLAGS) terminal.c -o $@ CCCTERM = $(CC) -c $(CFLAGS) -Ilibvterm/include -DINLINE="" \ @@ -1100,50 +1163,13 @@ CCCTERM = $(CC) -c $(CFLAGS) -Ilibvterm/include -DINLINE="" \ -DIS_COMBINING_FUNCTION=utf_iscomposing_uint \ -DWCWIDTH_FUNCTION=utf_uint2cells -$(OUTDIR)/encoding.o: libvterm/src/encoding.c $(TERM_DEPS) - $(CCCTERM) libvterm/src/encoding.c -o $@ - -$(OUTDIR)/keyboard.o: libvterm/src/keyboard.c $(TERM_DEPS) - $(CCCTERM) libvterm/src/keyboard.c -o $@ - -$(OUTDIR)/mouse.o: libvterm/src/mouse.c $(TERM_DEPS) - $(CCCTERM) libvterm/src/mouse.c -o $@ - -$(OUTDIR)/parser.o: libvterm/src/parser.c $(TERM_DEPS) - $(CCCTERM) libvterm/src/parser.c -o $@ - -$(OUTDIR)/pen.o: libvterm/src/pen.c $(TERM_DEPS) - $(CCCTERM) libvterm/src/pen.c -o $@ +$(OUTDIR)/%.o : libvterm/src/%.c $(TERM_DEPS) + $(CCCTERM) $< -o $@ -$(OUTDIR)/termscreen.o: libvterm/src/termscreen.c $(TERM_DEPS) - $(CCCTERM) libvterm/src/termscreen.c -o $@ -$(OUTDIR)/state.o: libvterm/src/state.c $(TERM_DEPS) - $(CCCTERM) libvterm/src/state.c -o $@ - -$(OUTDIR)/unicode.o: libvterm/src/unicode.c $(TERM_DEPS) - $(CCCTERM) libvterm/src/unicode.c -o $@ - -$(OUTDIR)/vterm.o: libvterm/src/vterm.c $(TERM_DEPS) - $(CCCTERM) libvterm/src/vterm.c -o $@ - -$(OUTDIR)/xdiffi.o: xdiff/xdiffi.c $(XDIFF_DEPS) - $(CC) -c $(CFLAGS) xdiff/xdiffi.c -o $(OUTDIR)/xdiffi.o - -$(OUTDIR)/xemit.o: xdiff/xemit.c $(XDIFF_DEPS) - $(CC) -c $(CFLAGS) xdiff/xemit.c -o $(OUTDIR)/xemit.o - -$(OUTDIR)/xprepare.o: xdiff/xprepare.c $(XDIFF_DEPS) - $(CC) -c $(CFLAGS) xdiff/xprepare.c -o $(OUTDIR)/xprepare.o - -$(OUTDIR)/xutils.o: xdiff/xutils.c $(XDIFF_DEPS) - $(CC) -c $(CFLAGS) xdiff/xutils.c -o $(OUTDIR)/xutils.o - -$(OUTDIR)/xhistogram.o: xdiff/xhistogram.c $(XDIFF_DEPS) - $(CC) -c $(CFLAGS) xdiff/xhistogram.c -o $(OUTDIR)/xhistogram.o +$(OUTDIR)/%.o : xdiff/%.c $(XDIFF_DEPS) + $(CC) -c $(CFLAGS) $< -o $@ -$(OUTDIR)/xpatience.o: xdiff/xpatience.c $(XDIFF_DEPS) - $(CC) -c $(CFLAGS) xdiff/xpatience.c -o $(OUTDIR)/xpatience.o pathdef.c: $(INCL) ifneq (sh.exe, $(SHELL)) diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak index ef2b7f3f9d..07ebb75592 100644 --- a/src/Make_mvc.mak +++ b/src/Make_mvc.mak @@ -40,6 +40,12 @@ # # Terminal support: TERMINAL=yes (default is yes) # +# DLL support (EXPERIMENTAL): VIMDLL=yes (default is no) +# Creates vim{32,64}.dll, and stub gvim.exe and vim.exe. +# The shared codes between the GUI and the console are built into +# the DLL. This reduces the total file size and memory usage. +# Also supports `vim -g` and the `:gui` command. +# # Lua interface: # LUA=[Path to Lua directory] # DYNAMIC_LUA=yes (to load the Lua DLL dynamically) @@ -178,6 +184,10 @@ TARGETOS = WINNT +!if "$(VIMDLL)" == "yes" +GUI = yes +!endif + !ifndef DIRECTX DIRECTX = $(GUI) !endif @@ -185,7 +195,9 @@ DIRECTX = $(GUI) # Select one of eight object code directories, depends on GUI, OLE, DEBUG and # interfaces. # If you change something else, do "make clean" first! -!if "$(GUI)" == "yes" +!if "$(VIMDLL)" == "yes" +OBJDIR = .\ObjD +!elseif "$(GUI)" == "yes" OBJDIR = .\ObjG !else OBJDIR = .\ObjC @@ -410,7 +422,7 @@ CHANNEL = $(GUI) !endif !endif -# GUI sepcific features. +# GUI specific features. !if "$(GUI)" == "yes" # Only allow NETBEANS for a GUI build and CHANNEL. !if "$(NETBEANS)" == "yes" && "$(CHANNEL)" == "yes" @@ -461,7 +473,7 @@ XPM = no XPM_OBJ = $(OBJDIR)/xpm_w32.obj XPM_DEFS = -DFEAT_XPM_W32 !if $(MSVC_MAJOR) >= 14 -# VC14 cannot use a library built by VC12 or eariler, because VC14 uses +# VC14 cannot use a library built by VC12 or earlier, because VC14 uses # Universal CRT. XPM_LIB = $(XPM)\lib-vc14\libXpm.lib !else @@ -566,7 +578,7 @@ CPUARG = # VC<11 generates fp87 code by default ! if $(MSVC_MAJOR) < 11 CPUARG = -# VC>=11 needs explicit insturctions to generate fp87 code +# VC>=11 needs explicit instructions to generate fp87 code ! else CPUARG = /arch:IA32 ! endif @@ -612,6 +624,17 @@ CPUARG = /arch:AVX2 # Pass CPUARG to GvimExt, to avoid using version-dependent defaults MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) CPUARG="$(CPUARG)" +!if "$(VIMDLL)" == "yes" +VIMDLLBASE = vim +! if "$(ASSEMBLY_ARCHITECTURE)" == "i386" +VIMDLLBASE = $(VIMDLLBASE)32 +! else +VIMDLLBASE = $(VIMDLLBASE)64 +! endif +! if "$(DEBUG)" == "yes" +VIMDLLBASE = $(VIMDLLBASE)d +! endif +!endif LIBC = DEBUGINFO = /Zi @@ -747,7 +770,6 @@ OBJ = \ $(OUTDIR)\ops.obj \ $(OUTDIR)\option.obj \ $(OUTDIR)\os_mswin.obj \ - $(OUTDIR)\os_w32exe.obj \ $(OUTDIR)\os_win32.obj \ $(OUTDIR)\pathdef.obj \ $(OUTDIR)\popupmnu.obj \ @@ -769,7 +791,15 @@ OBJ = \ $(OUTDIR)\userfunc.obj \ $(OUTDIR)\winclip.obj \ $(OUTDIR)\window.obj \ - $(OUTDIR)\vim.res + +!if "$(VIMDLL)" == "yes" +OBJ = $(OBJ) $(OUTDIR)\os_w32dll.obj $(OUTDIR)\vimd.res +EXEOBJC = $(OUTDIR)\os_w32exec.obj $(OUTDIR)\vimc.res +EXEOBJG = $(OUTDIR)\os_w32exeg.obj $(OUTDIR)\vimg.res +CFLAGS = $(CFLAGS) -DVIMDLL +!else +OBJ = $(OBJ) $(OUTDIR)\os_w32exe.obj $(OUTDIR)\vim.res +!endif !if "$(OLE)" == "yes" CFLAGS = $(CFLAGS) -DFEAT_OLE @@ -800,7 +830,15 @@ OBJ = $(OBJ) $(OUTDIR)\dimm_i.obj $(OUTDIR)\glbl_ime.obj SUBSYSTEM = windows CFLAGS = $(CFLAGS) -DFEAT_GUI_MSWIN RCFLAGS = $(RCFLAGS) -DFEAT_GUI_MSWIN +! if "$(VIMDLL)" == "yes" +SUBSYSTEM_CON = console +GVIM = g$(VIM) +CUI_INCL = iscygpty.h +CUI_OBJ = $(OUTDIR)\iscygpty.obj +RCFLAGS = $(RCFLAGS) -DVIMDLL +! else VIM = g$(VIM) +! endif GUI_INCL = \ gui.h GUI_OBJ = \ @@ -839,6 +877,9 @@ XDIFF_DEPS = \ !if "$(SUBSYSTEM_VER)" != "" SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER) SUBSYSTEM_TOOLS = $(SUBSYSTEM_TOOLS),$(SUBSYSTEM_VER) +! if "$(VIMDLL)" != "yes" +SUBSYSTEM_CON = $(SUBSYSTEM_CON),$(SUBSYSTEM_VER) +! endif # Pass SUBSYSTEM_VER to GvimExt and other tools MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) SUBSYSTEM_VER=$(SUBSYSTEM_VER) MAKEFLAGS_TOOLS = $(MAKEFLAGS_TOOLS) SUBSYSTEM_VER=$(SUBSYSTEM_VER) @@ -1174,7 +1215,11 @@ CFLAGS = $(CFLAGS) -DFEAT_$(FEATURES) # debug more conveniently (able to look at variables which are in registers) # CFLAGS = $(CFLAGS) /Fd$(OUTDIR)/ $(DEBUGINFO) +!if "$(VIMDLL)" == "yes" +LINK_PDB = /PDB:$(VIMDLLBASE).pdb -debug +!else LINK_PDB = /PDB:$(VIM).pdb -debug +!endif # # End extra feature include @@ -1186,7 +1231,7 @@ CFLAGS_OUTDIR=$(CFLAGS) /Fo$(OUTDIR)/ # Add /opt:ref to remove unreferenced functions and data even when /DEBUG is # added. -conflags = /nologo /subsystem:$(SUBSYSTEM) /opt:ref +conflags = /nologo /opt:ref PATHDEF_SRC = $(OUTDIR)\pathdef.c @@ -1219,7 +1264,13 @@ LINKARGS1 = $(LINKARGS1) /LTCG:STATUS LINKARGS1 = $(LINKARGS1) /HIGHENTROPYVA:NO !endif -all: $(VIM).exe \ +!if "$(VIMDLL)" == "yes" +MAIN_TARGET = $(GVIM).exe $(VIM).exe $(VIMDLLBASE).dll +!else +MAIN_TARGET = $(VIM).exe +!endif + +all: $(MAIN_TARGET) \ vimrun.exe \ install.exe \ uninstal.exe \ @@ -1227,17 +1278,41 @@ all: $(VIM).exe \ tee/tee.exe \ GvimExt/gvimext.dll +!if "$(VIMDLL)" == "yes" + +$(VIMDLLBASE).dll: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \ + $(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \ + $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \ + version.c version.h + $(CC) $(CFLAGS_OUTDIR) version.c + $(link) $(LINKARGS1) /dll -out:$(VIMDLLBASE).dll $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) \ + $(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) \ + $(TCL_OBJ) $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) \ + $(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2) + +$(GVIM).exe: $(OUTDIR) $(EXEOBJG) $(VIMDLLBASE).dll + $(link) $(LINKARGS1) /subsystem:$(SUBSYSTEM) -out:$(GVIM).exe $(EXEOBJG) $(VIMDLLBASE).lib $(LIBC) + if exist $(GVIM).exe.manifest mt.exe -nologo -manifest $(GVIM).exe.manifest -updateresource:$(GVIM).exe;1 + +$(VIM).exe: $(OUTDIR) $(EXEOBJC) $(VIMDLLBASE).dll + $(link) $(LINKARGS1) /subsystem:$(SUBSYSTEM_CON) -out:$(VIM).exe $(EXEOBJC) $(VIMDLLBASE).lib $(LIBC) + if exist $(VIM).exe.manifest mt.exe -nologo -manifest $(VIM).exe.manifest -updateresource:$(VIM).exe;1 + +!else + $(VIM).exe: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \ $(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \ $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \ version.c version.h $(CC) $(CFLAGS_OUTDIR) version.c - $(link) $(LINKARGS1) -out:$(VIM).exe $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) \ + $(link) $(LINKARGS1) /subsystem:$(SUBSYSTEM) -out:$(VIM).exe $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) \ $(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) \ $(TCL_OBJ) $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) \ $(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2) if exist $(VIM).exe.manifest mt.exe -nologo -manifest $(VIM).exe.manifest -updateresource:$(VIM).exe;1 +!endif + $(VIM): $(VIM).exe $(OUTDIR): @@ -1287,6 +1362,15 @@ clean: - if exist $(VIM).pdb del $(VIM).pdb - if exist $(VIM).map del $(VIM).map - if exist $(VIM).ncb del $(VIM).ncb +!if "$(VIMDLL)" == "yes" + - if exist $(GVIM).exe del $(GVIM).exe + - if exist $(GVIM).map del $(GVIM).map + - if exist $(VIMDLLBASE).dll del $(VIMDLLBASE).dll + - if exist $(VIMDLLBASE).lib del $(VIMDLLBASE).lib + - if exist $(VIMDLLBASE).exp del $(VIMDLLBASE).exp + - if exist $(VIMDLLBASE).pdb del $(VIMDLLBASE).pdb + - if exist $(VIMDLLBASE).map del $(VIMDLLBASE).map +!endif - if exist vimrun.exe del vimrun.exe - if exist install.exe del install.exe - if exist uninstal.exe del uninstal.exe @@ -1334,21 +1418,15 @@ $(NEW_TESTS): ########################################################################### # Create a default rule for transforming .c files to .obj files in $(OUTDIR) -# Batch compilation is supported by nmake 1.62 (part of VS 5.0) and later) -!IF "$(_NMAKE_VER)" == "" -.c{$(OUTDIR)/}.obj: -!ELSE .c{$(OUTDIR)/}.obj:: -!ENDIF + $(CC) $(CFLAGS_OUTDIR) $< + +# Create a default rule for xdiff. +{xdiff/}.c{$(OUTDIR)/}.obj:: $(CC) $(CFLAGS_OUTDIR) $< # Create a default rule for transforming .cpp files to .obj files in $(OUTDIR) -# Batch compilation is supported by nmake 1.62 (part of VS 5.0) and later) -!IF "$(_NMAKE_VER)" == "" -.cpp{$(OUTDIR)/}.obj: -!ELSE .cpp{$(OUTDIR)/}.obj:: -!ENDIF $(CC) $(CFLAGS_OUTDIR) $< $(OUTDIR)/arabic.obj: $(OUTDIR) arabic.c $(INCL) @@ -1376,22 +1454,16 @@ $(OUTDIR)/dict.obj: $(OUTDIR) dict.c $(INCL) $(OUTDIR)/diff.obj: $(OUTDIR) diff.c $(INCL) $(OUTDIR)/xdiffi.obj: $(OUTDIR) xdiff/xdiffi.c $(XDIFF_DEPS) - $(CC) $(CFLAGS_OUTDIR) xdiff/xdiffi.c $(OUTDIR)/xemit.obj: $(OUTDIR) xdiff/xemit.c $(XDIFF_DEPS) - $(CC) $(CFLAGS_OUTDIR) xdiff/xemit.c $(OUTDIR)/xprepare.obj: $(OUTDIR) xdiff/xprepare.c $(XDIFF_DEPS) - $(CC) $(CFLAGS_OUTDIR) xdiff/xprepare.c $(OUTDIR)/xutils.obj: $(OUTDIR) xdiff/xutils.c $(XDIFF_DEPS) - $(CC) $(CFLAGS_OUTDIR) xdiff/xutils.c $(OUTDIR)/xhistogram.obj: $(OUTDIR) xdiff/xhistogram.c $(XDIFF_DEPS) - $(CC) $(CFLAGS_OUTDIR) xdiff/xhistogram.c $(OUTDIR)/xpatience.obj: $(OUTDIR) xdiff/xpatience.c $(XDIFF_DEPS) - $(CC) $(CFLAGS_OUTDIR) xdiff/xpatience.c $(OUTDIR)/digraph.obj: $(OUTDIR) digraph.c $(INCL) @@ -1516,8 +1588,16 @@ $(OUTDIR)/winclip.obj: $(OUTDIR) winclip.c $(INCL) $(OUTDIR)/os_win32.obj: $(OUTDIR) os_win32.c $(INCL) $(MZSCHEME_INCL) +$(OUTDIR)/os_w32dll.obj: $(OUTDIR) os_w32dll.c + $(OUTDIR)/os_w32exe.obj: $(OUTDIR) os_w32exe.c $(INCL) +$(OUTDIR)/os_w32exec.obj: $(OUTDIR) os_w32exe.c $(INCL) + $(CC) $(CFLAGS:-DFEAT_GUI_MSWIN=) /Fo$@ os_w32exe.c + +$(OUTDIR)/os_w32exeg.obj: $(OUTDIR) os_w32exe.c $(INCL) + $(CC) $(CFLAGS) /Fo$@ os_w32exe.c + $(OUTDIR)/pathdef.obj: $(OUTDIR) $(PATHDEF_SRC) $(INCL) $(CC) $(CFLAGS_OUTDIR) $(PATHDEF_SRC) @@ -1560,10 +1640,25 @@ $(OUTDIR)/window.obj: $(OUTDIR) window.c $(INCL) $(OUTDIR)/xpm_w32.obj: $(OUTDIR) xpm_w32.c $(CC) $(CFLAGS_OUTDIR) $(XPM_INC) xpm_w32.c -$(OUTDIR)/vim.res: $(OUTDIR) vim.rc gvim.exe.mnf version.h tools.bmp \ - tearoff.bmp vim.ico vim_error.ico \ +!if "$(VIMDLL)" == "yes" +$(OUTDIR)/vimc.res: $(OUTDIR) vim.rc gvim.exe.mnf version.h gui_w32_rc.h \ + vim.ico + $(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS:-DFEAT_GUI_MSWIN=) vim.rc + +$(OUTDIR)/vimg.res: $(OUTDIR) vim.rc gvim.exe.mnf version.h gui_w32_rc.h \ + vim.ico + $(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS) vim.rc + +$(OUTDIR)/vimd.res: $(OUTDIR) vim.rc version.h gui_w32_rc.h \ + tools.bmp tearoff.bmp vim.ico vim_error.ico \ + vim_alert.ico vim_info.ico vim_quest.ico + $(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS) -DRCDLL -DVIMDLLBASE=\"$(VIMDLLBASE)\" vim.rc +!else +$(OUTDIR)/vim.res: $(OUTDIR) vim.rc gvim.exe.mnf version.h gui_w32_rc.h \ + tools.bmp tearoff.bmp vim.ico vim_error.ico \ vim_alert.ico vim_info.ico vim_quest.ico - $(RC) /nologo /l 0x409 /Fo$(OUTDIR)/vim.res $(RCFLAGS) vim.rc + $(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS) vim.rc +!endif iid_ole.c if_ole.h vim.tlb: if_ole.idl midl /nologo /error none /proxy nul /iid iid_ole.c /tlb vim.tlb \ @@ -1583,32 +1678,27 @@ CCCTERM = $(CC) $(CFLAGS) -Ilibvterm/include -DINLINE="" \ -DWCWIDTH_FUNCTION=utf_uint2cells \ -D_CRT_SECURE_NO_WARNINGS +# Create a default rule for libvterm. +{libvterm/src/}.c{$(OUTDIR)/}.obj:: + $(CCCTERM) -Fo$(OUTDIR)/ $< + $(OUTDIR)/encoding.obj: $(OUTDIR) libvterm/src/encoding.c $(TERM_DEPS) - $(CCCTERM) -Fo$@ libvterm/src/encoding.c $(OUTDIR)/keyboard.obj: $(OUTDIR) libvterm/src/keyboard.c $(TERM_DEPS) - $(CCCTERM) -Fo$@ libvterm/src/keyboard.c $(OUTDIR)/mouse.obj: $(OUTDIR) libvterm/src/mouse.c $(TERM_DEPS) - $(CCCTERM) -Fo$@ libvterm/src/mouse.c $(OUTDIR)/parser.obj: $(OUTDIR) libvterm/src/parser.c $(TERM_DEPS) - $(CCCTERM) -Fo$@ libvterm/src/parser.c $(OUTDIR)/pen.obj: $(OUTDIR) libvterm/src/pen.c $(TERM_DEPS) - $(CCCTERM) -Fo$@ libvterm/src/pen.c $(OUTDIR)/termscreen.obj: $(OUTDIR) libvterm/src/termscreen.c $(TERM_DEPS) - $(CCCTERM) -Fo$@ libvterm/src/termscreen.c $(OUTDIR)/state.obj: $(OUTDIR) libvterm/src/state.c $(TERM_DEPS) - $(CCCTERM) -Fo$@ libvterm/src/state.c $(OUTDIR)/unicode.obj: $(OUTDIR) libvterm/src/unicode.c $(TERM_DEPS) - $(CCCTERM) -Fo$@ libvterm/src/unicode.c $(OUTDIR)/vterm.obj: $(OUTDIR) libvterm/src/vterm.c $(TERM_DEPS) - $(CCCTERM) -Fo$@ libvterm/src/vterm.c # $CFLAGS may contain backslashes and double quotes, escape them both. diff --git a/src/channel.c b/src/channel.c index ca8310258e..aac8656cf1 100644 --- a/src/channel.c +++ b/src/channel.c @@ -5319,7 +5319,7 @@ job_still_useful(job_T *job) return job_need_end_check(job) || job_channel_still_useful(job); } -#if defined(GUI_MAY_FORK) || defined(PROTO) +#if defined(GUI_MAY_FORK) || defined(GUI_MAY_SPAWN) || defined(PROTO) /* * Return TRUE when there is any running job that we care about. */ diff --git a/src/evalfunc.c b/src/evalfunc.c index 509a31f0e6..e65ab94e38 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -4201,11 +4201,13 @@ f_foreground(typval_T *argvars UNUSED, typval_T *rettv UNUSED) { #ifdef FEAT_GUI if (gui.in_use) + { gui_mch_set_foreground(); -#else -# ifdef MSWIN + return; + } +#endif +#if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL)) win32_set_foreground(); -# endif #endif } diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 0ab5df6c0f..8766c66707 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -1537,7 +1537,7 @@ do_shell( int |