diff options
author | Bram Moolenaar <Bram@vim.org> | 2010-07-17 21:19:38 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2010-07-17 21:19:38 +0200 |
commit | bd5e15fd5c7e42505d6b0e20f4198d24fc7e219d (patch) | |
tree | 70e3f86ae76494fc094bbe25c58ba2befbcf4872 /src | |
parent | 02c707a87da1b0f78d10a689cc03941a2e8acbc6 (diff) |
Added support for Python 3. (Roland Puntaier)
Diffstat (limited to 'src')
-rw-r--r-- | src/Make_bc5.mak | 56 | ||||
-rw-r--r-- | src/Make_cyg.mak | 34 | ||||
-rw-r--r-- | src/Make_ming.mak | 48 | ||||
-rw-r--r-- | src/Make_mvc.mak | 45 | ||||
-rw-r--r-- | src/Makefile | 84 | ||||
-rwxr-xr-x | src/auto/configure | 290 | ||||
-rw-r--r-- | src/buffer.c | 3 | ||||
-rw-r--r-- | src/config.h.in | 9 | ||||
-rw-r--r-- | src/config.mk.in | 6 | ||||
-rw-r--r-- | src/configure.in | 180 | ||||
-rw-r--r-- | src/eval.c | 17 | ||||
-rw-r--r-- | src/ex_cmds.h | 4 | ||||
-rw-r--r-- | src/ex_docmd.c | 13 | ||||
-rw-r--r-- | src/globals.h | 10 | ||||
-rw-r--r-- | src/if_python.c | 21 | ||||
-rw-r--r-- | src/if_python3.c | 2796 | ||||
-rw-r--r-- | src/main.c | 3 | ||||
-rw-r--r-- | src/proto.h | 4 | ||||
-rw-r--r-- | src/proto/if_python3.pro | 8 | ||||
-rw-r--r-- | src/structs.h | 8 | ||||
-rw-r--r-- | src/version.c | 9 | ||||
-rw-r--r-- | src/vim.h | 1 | ||||
-rw-r--r-- | src/window.c | 4 |
23 files changed, 3610 insertions, 43 deletions
diff --git a/src/Make_bc5.mak b/src/Make_bc5.mak index c3ddf00f62..739fc62ed1 100644 --- a/src/Make_bc5.mak +++ b/src/Make_bc5.mak @@ -44,6 +44,9 @@ # PYTHON define to path to Python dir to get PYTHON support (not defined) # PYTHON_VER define to version of Python being used (22) # DYNAMIC_PYTHON no or yes: use yes to load the Python DLL dynamically (no) +# PYTHON3 define to path to Python3 dir to get PYTHON3 support (not defined) +# PYTHON3_VER define to version of Python3 being used (31) +# DYNAMIC_PYTHON3 no or yes: use yes to load the Python3 DLL dynamically (no) # TCL define to path to TCL dir to get TCL support (not defined) # TCL_VER define to version of TCL being used (83) # DYNAMIC_TCL no or yes: use yes to load the TCL DLL dynamically (no) @@ -141,6 +144,9 @@ NETBEANS = yes ### PYTHON: uncomment this line if you want python support in vim # PYTHON=c:\python22 +### PYTHON3: uncomment this line if you want python3 support in vim +# PYTHON3=c:\python31 + ### RUBY: uncomment this line if you want ruby support in vim # RUBY=c:\ruby @@ -207,6 +213,7 @@ ALIGN = 4 !if ("$(FASTCALL)"=="") && \ ("$(LUA)"=="") && \ ("$(PYTHON)"=="") && \ + ("$(PYTHON3)"=="") && \ ("$(PERL)"=="") && \ ("$(TCL)"=="") && \ ("$(RUBY)"=="") && \ @@ -328,8 +335,14 @@ PERL_LIB_FLAG = /nodefaultlib: !endif !ifdef PYTHON +!ifdef PYTHON3 +DYNAMIC_PYTHON=yes +DYNAMIC_PYTHON3=yes +!endif +!endif + +!ifdef PYTHON INTERP_DEFINES = $(INTERP_DEFINES) -DFEAT_PYTHON -INCLUDE = $(PYTHON)\include;$(INCLUDE) !ifndef PYTHON_VER PYTHON_VER = 22 !endif @@ -339,6 +352,18 @@ PYTHON_LIB_FLAG = /nodefaultlib: !endif !endif +!ifdef PYTHON3 +INTERP_DEFINES = $(INTERP_DEFINES) -DFEAT_PYTHON3 +!ifndef PYTHON3_VER +PYTHON3_VER = 31 +!endif +!if "$(DYNAMIC_PYTHON3)" == "yes" +INTERP_DEFINES = $(INTERP_DEFINES) -DDYNAMIC_PYTHON3 -DDYNAMIC_PYTHON3_DLL=\"python$(PYTHON3_VER).dll\" +PYTHON3_LIB_FLAG = /nodefaultlib: +!endif +!endif + + !ifdef RUBY !ifndef RUBY_VER RUBY_VER = 16 @@ -618,6 +643,11 @@ vimobj = $(vimobj) \ $(OBJDIR)\if_python.obj !endif +!ifdef PYTHON3 +vimobj = $(vimobj) \ + $(OBJDIR)\if_python3.obj +!endif + !ifdef RUBY vimobj = $(vimobj) \ $(OBJDIR)\if_ruby.obj @@ -734,6 +764,12 @@ MSG = $(MSG) PYTHON MSG = $(MSG)(dynamic) ! endif !endif +!ifdef PYTHON3 +MSG = $(MSG) PYTHON3 +! if "$(DYNAMIC_PYTHON3)" == "yes" +MSG = $(MSG)(dynamic) +! endif +!endif !ifdef RUBY MSG = $(MSG) RUBY ! if "$(DYNAMIC_RUBY)" == "yes" @@ -827,6 +863,9 @@ clean: !ifdef PYTHON -@del python.lib !endif +!ifdef PYTHON3 + -@del python3.lib +!endif !ifdef RUBY -@del ruby.lib !endif @@ -867,6 +906,9 @@ $(DLLTARGET): $(OBJDIR) $(vimdllobj) !ifdef PYTHON $(PYTHON_LIB_FLAG)python.lib+ !endif +!ifdef PYTHON3 + $(PYTHON3_LIB_FLAG)python3.lib+ +!endif !ifdef RUBY $(RUBY_LIB_FLAG)ruby.lib+ !endif @@ -919,6 +961,9 @@ $(TARGET): $(OBJDIR) $(vimobj) $(OBJDIR)\$(RESFILE) !ifdef PYTHON $(PYTHON_LIB_FLAG)python.lib+ !endif +!ifdef PYTHON3 + $(PYTHON3_LIB_FLAG)python3.lib+ +!endif !ifdef RUBY $(RUBY_LIB_FLAG)ruby.lib+ !endif @@ -962,7 +1007,10 @@ if_perl.c: if_perl.xs typemap $(PERL)\lib\ExtUtils\typemap if_perl.xs > $@ $(OBJDIR)\if_python.obj: if_python.c python.lib - $(CC) $(CCARG) $(CC1) $(CC2)$@ -pc if_python.c + $(CC) -I$(PYTHON)\include $(CCARG) $(CC1) $(CC2)$@ -pc if_python.c + +$(OBJDIR)\if_python3.obj: if_python3.c python3.lib + $(CC) -I$(PYTHON3)\include $(CCARG) $(CC1) $(CC2)$@ -pc if_python3.c $(OBJDIR)\if_ruby.obj: if_ruby.c ruby.lib $(CC) $(CCARG) $(CC1) $(CC2)$@ -pc if_ruby.c @@ -1017,6 +1065,9 @@ perl.lib: $(PERL)\lib\CORE\perl$(PERL_VER).lib python.lib: $(PYTHON)\libs\python$(PYTHON_VER).lib coff2omf $(PYTHON)\libs\python$(PYTHON_VER).lib $@ +python3.lib: $(PYTHON3)\libs\python$(PYTHON3_VER).lib + coff2omf $(PYTHON3)\libs\python$(PYTHON3_VER).lib $@ + ruby.lib: $(RUBY)\lib\$(RUBY_INSTALL_NAME).lib coff2omf $(RUBY)\lib\$(RUBY_INSTALL_NAME).lib $@ @@ -1065,3 +1116,4 @@ $(OBJDIR)\bcc.cfg: Make_bc5.mak $(OBJDIR) | $@ # vi:set sts=4 sw=4: + diff --git a/src/Make_cyg.mak b/src/Make_cyg.mak index b3650bb05b..0ca7115ce9 100644 --- a/src/Make_cyg.mak +++ b/src/Make_cyg.mak @@ -14,6 +14,9 @@ # PYTHON define to path to Python dir to get PYTHON support (not defined) # PYTHON_VER define to version of Python being used (22) # DYNAMIC_PYTHON no or yes: use yes to load the Python DLL dynamically (yes) +# PYTHON3 define to path to Python3 dir to get PYTHON3 support (not defined) +# PYTHON3_VER define to version of Python3 being used (22) +# DYNAMIC_PYTHON3 no or yes: use yes to load the Python3 DLL dynamically (yes) # TCL define to path to TCL dir to get TCL support (not defined) # TCL_VER define to version of TCL being used (83) # DYNAMIC_TCL no or yes: use yes to load the TCL DLL dynamically (yes) @@ -139,7 +142,6 @@ endif ############################## ifdef PYTHON DEFINES += -DFEAT_PYTHON -INCLUDES += -I$(PYTHON)/include EXTRA_OBJS += $(OUTDIR)/if_python.o ifndef DYNAMIC_PYTHON @@ -158,6 +160,29 @@ endif endif ############################## +# DYNAMIC_PYTHON3=yes works. +# DYNAMIC_PYTHON3=no does not (unresolved externals on link). +############################## +ifdef PYTHON3 +DEFINES += -DFEAT_PYTHON3 +EXTRA_OBJS += $(OUTDIR)/if_python3.o + +ifndef DYNAMIC_PYTHON3 +DYNAMIC_PYTHON3 = yes +endif + +ifndef PYTHON3_VER +PYTHON3_VER = 31 +endif + +ifeq (yes, $(DYNAMIC_PYTHON3)) +DEFINES += -DDYNAMIC_PYTHON3 -DDYNAMIC_PYTHON3_DLL=\"python$(PYTHON3_VER).dll\" +else +EXTRA_LIBS += $(PYTHON3)/libs/python$(PYTHON3_VER).lib +endif +endif + +############################## # DYNAMIC_RUBY=yes works. # DYNAMIC_RUBY=no does not (process exits). ############################## @@ -563,6 +588,12 @@ $(OUTDIR)/if_cscope.o: if_cscope.c $(INCL) if_cscope.h $(OUTDIR)/if_ole.o: if_ole.cpp $(INCL) $(CC) -c $(CFLAGS) if_ole.cpp -o $(OUTDIR)/if_ole.o +$(OUTDIR)/if_python.o : if_python.c $(INCL) + $(CC) -c $(CFLAGS) -I$(PYTHON)/include $< -o $@ + +$(OUTDIR)/if_python3.o : if_python3.c $(INCL) + $(CC) -c $(CFLAGS) -I$(PYTHON3)/include $< -o $@ + if_perl.c: if_perl.xs typemap $(PERL)/bin/perl `cygpath -d $(PERL)/lib/ExtUtils/xsubpp` \ -prototypes -typemap \ @@ -612,3 +643,4 @@ else @echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> pathdef.c @echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> pathdef.c endif + diff --git a/src/Make_ming.mak b/src/Make_ming.mak index 51fd523df8..306dff9253 100644 --- a/src/Make_ming.mak +++ b/src/Make_ming.mak @@ -194,6 +194,28 @@ PYTHONINC=-I $(PYTHON)/win32inc endif endif +#PYTHON3: See comment for Python 2 above + +ifdef PYTHON3 +ifndef DYNAMIC_PYTHON3 +DYNAMIC_PYTHON3=yes +endif + +ifndef PYTHON3_VER +PYTHON3_VER=31 +endif + +ifeq (no,$(DYNAMIC_PYTHON3)) +PYTHON3LIB=-L$(PYTHON3)/libs -lPYTHON$(PYTHON3_VER) +endif + +ifeq ($(CROSS),no) +PYTHON3INC=-I $(PYTHON3)/include +else +PYTHON3INC=-I $(PYTHON3)/win32inc +endif +endif + # TCL interface: # TCL=[Path to TCL directory] # DYNAMIC_TCL=yes (to load the TCL DLL dynamically) @@ -334,9 +356,16 @@ endif endif ifdef PYTHON -CFLAGS += -DFEAT_PYTHON $(PYTHONINC) +CFLAGS += -DFEAT_PYTHON ifeq (yes, $(DYNAMIC_PYTHON)) -CFLAGS += -DDYNAMIC_PYTHON -DDYNAMIC_PYTHON_DLL=\"python$(PYTHON_VER).dll\" +CFLAGS += -DDYNAMIC_PYTHON +endif +endif + +ifdef PYTHON3 +CFLAGS += -DFEAT_PYTHON3 +ifeq (yes, $(DYNAMIC_PYTHON3)) +CFLAGS += -DDYNAMIC_PYTHON3 endif endif @@ -468,6 +497,9 @@ endif ifdef PYTHON OBJ += $(OUTDIR)/if_python.o endif +ifdef PYTHON3 +OBJ += $(OUTDIR)/if_python3.o +endif ifdef RUBY OBJ += $(OUTDIR)/if_ruby.o endif @@ -576,7 +608,7 @@ uninstal.exe: uninstal.c $(CC) $(CFLAGS) -o uninstal.exe uninstal.c $(LIB) $(TARGET): $(OUTDIR) $(OBJ) - $(CC) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(RUBYLIB) + $(CC) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB) upx: exes upx gvim.exe @@ -608,6 +640,12 @@ INCL = vim.h feature.h os_win32.h os_dos.h ascii.h keymap.h term.h macros.h \ structs.h regexp.h option.h ex_cmds.h proto.h globals.h farsi.h \ gui.h +$(OUTDIR)/if_python.o : if_python.c $(INCL) + $(CC) -c $(CFLAGS) $(PYTHONINC) -DDYNAMIC_PYTHON_DLL=\"python$(PYTHON_VER).dll\" $< -o $@ + +$(OUTDIR)/if_python3.o : if_python3.c $(INCL) + $(CC) -c $(CFLAGS) $(PYTHON3INC) -DDYNAMIC_PYTHON3_DLL=\"PYTHON$(PYTHON3_VER).dll\" $< -o $@ + $(OUTDIR)/%.o : %.c $(INCL) $(CC) -c $(CFLAGS) $< -o $@ @@ -659,7 +697,7 @@ ifneq (sh.exe, $(SHELL)) @echo 'char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)";' >> pathdef.c @echo 'char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)";' >> pathdef.c @echo 'char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)";' >> pathdef.c - @echo 'char_u *all_lflags = (char_u *)"$(CC) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(RUBYLIB)";' >> pathdef.c + @echo 'char_u *all_lflags = (char_u *)"$(CC) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)";' >> pathdef.c @echo 'char_u *compiled_user = (char_u *)"$(USERNAME)";' >> pathdef.c @echo 'char_u *compiled_sys = (char_u *)"$(USERDOMAIN)";' >> pathdef.c else @@ -669,7 +707,7 @@ else @echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)"; >> pathdef.c @echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)"; >> pathdef.c @echo char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)"; >> pathdef.c - @echo char_u *all_lflags = (char_u *)"$(CC) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(RUBYLIB)"; >> pathdef.c + @echo char_u *all_lflags = (char_u *)"$(CC) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)"; >> pathdef.c @echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> pathdef.c @echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> pathdef.c endif diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak index 7a144cc30c..c0704503c2 100644 --- a/src/Make_mvc.mak +++ b/src/Make_mvc.mak @@ -52,6 +52,11 @@ # DYNAMIC_PYTHON=yes (to load the Python DLL dynamically) # PYTHON_VER=[Python version, eg 15, 20] (default is 22) # +# Python3 interface: +# PYTHON3=[Path to Python3 directory] +# DYNAMIC_PYTHON3=yes (to load the Python3 DLL dynamically) +# PYTHON3_VER=[Python3 version, eg 30, 31] (default is 31) +# # Ruby interface: # RUBY=[Path to Ruby directory] # DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically) @@ -166,6 +171,9 @@ OBJDIR = $(OBJDIR)L !ifdef PYTHON OBJDIR = $(OBJDIR)Y !endif +!ifdef PYTHON3 +OBJDIR = $(OBJDIR)H +!endif !ifdef TCL OBJDIR = $(OBJDIR)T !endif @@ -641,6 +649,13 @@ LUA_LIB = "$(LUA)\lib\lua$(LUA_VER).lib" !endif !endif +!ifdef PYTHON +!ifdef PYTHON3 +DYNAMIC_PYTHON=yes +DYNAMIC_PYTHON3=yes +!endif +!endif + # PYTHON interface !ifdef PYTHON !ifndef PYTHON_VER @@ -662,6 +677,27 @@ PYTHON_LIB = $(PYTHON)\libs\python$(PYTHON_VER).lib !endif !endif +# PYTHON3 interface +!ifdef PYTHON3 +!ifndef PYTHON3_VER +PYTHON3_VER = 31 +!endif +!message Python3 requested (version $(PYTHON3_VER)) - root dir is "$(PYTHON3)" +!if "$(DYNAMIC_PYTHON3)" == "yes" +!message Python3 DLL will be loaded dynamically +!endif +CFLAGS = $(CFLAGS) -DFEAT_PYTHON3 +PYTHON3_OBJ = $(OUTDIR)\if_python3.obj +PYTHON3_INC = /I "$(PYTHON3)\Include" /I "$(PYTHON3)\PC" +!if "$(DYNAMIC_PYTHON3)" == "yes" +CFLAGS = $(CFLAGS) -DDYNAMIC_PYTHON3 \ + -DDYNAMIC_PYTHON3_DLL=\"python$(PYTHON3_VER).dll\" +PYTHON3_LIB = /nodefaultlib:python$(PYTHON3_VER).lib +!else +PYTHON3_LIB = $(PYTHON3)\libs\python$(PYTHON3_VER).lib +!endif +!endif + # MzScheme interface !ifdef MZSCHEME !message MzScheme requested - root dir is "$(MZSCHEME)" @@ -835,7 +871,7 @@ conflags = $(conflags) /map /mapinfo:lines LINKARGS1 = $(linkdebug) $(conflags) LINKARGS2 = $(CON_LIB) $(GUI_LIB) $(LIBC) $(OLE_LIB) user32.lib $(SNIFF_LIB) \ - $(LUA_LIB) $(MZSCHEME_LIB) $(PERL_LIB) $(PYTHON_LIB) $(RUBY_LIB) \ + $(LUA_LIB) $(MZSCHEME_LIB) $(PERL_LIB) $(PYTHON_LIB) $(PYTHON3_LIB) $(RUBY_LIB) \ $(TCL_LIB) $(NETBEANS_LIB) $(XPM_LIB) $(LINK_PDB) # Report link time code generation progress if used. @@ -851,12 +887,12 @@ all: $(VIM).exe vimrun.exe install.exe uninstal.exe xxd/xxd.exe \ GvimExt/gvimext.dll $(VIM).exe: $(OUTDIR) $(OBJ) $(GUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \ - $(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \ + $(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \ $(SNIFF_OBJ) $(CSCOPE_OBJ) $(NETBEANS_OBJ) $(XPM_OBJ) \ version.c version.h $(CC) $(CFLAGS) version.c $(link) $(LINKARGS1) -out:$(VIM).exe $(OBJ) $(GUI_OBJ) $(OLE_OBJ) \ - $(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(RUBY_OBJ) \ + $(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) \ $(TCL_OBJ) $(SNIFF_OBJ) $(CSCOPE_OBJ) $(NETBEANS_OBJ) \ $(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2) @@ -1016,6 +1052,9 @@ mzscheme_base.c: $(OUTDIR)/if_python.obj: $(OUTDIR) if_python.c $(INCL) $(CC) $(CFLAGS) $(PYTHON_INC) if_python.c +$(OUTDIR)/if_python3.obj: $(OUTDIR) if_python3.c $(INCL) + $(CC) $(CFLAGS) $(PYTHON3_INC) if_python3.c + $(OUTDIR)/if_ole.obj: $(OUTDIR) if_ole.cpp $(INCL) if_ole.h $(OUTDIR)/if_ruby.obj: $(OUTDIR) if_ruby.c $(INCL) diff --git a/src/Makefile b/src/Makefile index 6dfe2bff87..b01029f941 100644 --- a/src/Makefile +++ b/src/Makefile @@ -41,6 +41,7 @@ # --enable-luainterp for Lua interpreter # --enable-perlinterp for Perl interpreter # --enable-pythoninterp for Python interpreter +# --enable-python3interp for Python3 interpreter # --enable-rubyinterp for Ruby interpreter # --enable-tclinterp for Tcl interpreter # --enable-cscope for Cscope interface @@ -383,7 +384,12 @@ CClink = $(CC) # NOTE: This may cause threading to be enabled, which has side effects (such # as using different libraries and debugging becomes more difficult). # NOTE: Using this together with Perl may cause a crash in initialization. +# For Python3 support make a symbolic link in /usr/local/bin: +# ln -s python3 python3.1 +# If both python2.x and python3.x are enabled then the linking will be via +# dlopen(), dlsym(), dlclose(), i.e. pythonX.Y.so must be available #CONF_OPT_PYTHON = --enable-pythoninterp +#CONF_OPT_PYTHON3 = --enable-python3interp # TCL # Uncomment this when you want to include the Tcl interface. @@ -1304,7 +1310,7 @@ SHELL = /bin/sh .SUFFIXES: .c .o .pro PRE_DEFS = -Iproto $(DEFS) $(GUI_DEFS) $(GUI_IPATH) $(CPPFLAGS) $(EXTRA_IPATHS) -POST_DEFS = $(X_CFLAGS) $(LUA_CFLAGS) $(MZSCHEME_CFLAGS) $(PERL_CFLAGS) $(ECL_CFLAGS) $(PYTHON_CFLAGS) $(TCL_CFLAGS) $(RUBY_CFLAGS) $(EXTRA_DEFS) +POST_DEFS = $(X_CFLAGS) $(LUA_CFLAGS) $(MZSCHEME_CFLAGS) $(PERL_CFLAGS) $(ECL_CFLAGS) $(TCL_CFLAGS) $(RUBY_CFLAGS) $(EXTRA_DEFS) ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(POST_DEFS) @@ -1319,7 +1325,23 @@ LINT_EXTRA = -DUSE_SNIFF -DHANGUL_INPUT -D"__attribute__(x)=" DEPEND_CFLAGS = -DPROTO -DDEPEND -DFEAT_GUI $(LINT_CFLAGS) ALL_LIB_DIRS = $(GUI_LIBS_DIR) $(X_LIBS_DIR) -ALL_LIBS = $(GUI_LIBS1) $(GUI_X_LIBS) $(GUI_LIBS2) $(X_PRE_LIBS) $(X_LIBS) $(X_EXTRA_LIBS) $(LIBS) $(EXTRA_LIBS) $(LUA_LIBS) $(MZSCHEME_LIBS) $(PERL_LIBS) $(PYTHON_LIBS) $(TCL_LIBS) $(RUBY_LIBS) $(PROFILE_LIBS) +ALL_LIBS = \ + $(GUI_LIBS1) \ + $(GUI_X_LIBS) \ + $(GUI_LIBS2) \ + $(X_PRE_LIBS) \ + $(X_LIBS) \ + $(X_EXTRA_LIBS) \ + $(LIBS) \ + $(EXTRA_LIBS) \ + $(LUA_LIBS) \ + $(MZSCHEME_LIBS) \ + $(PERL_LIBS) \ + $(PYTHON_LIBS) \ + $(PYTHON3_LIBS) \ + $(TCL_LIBS) \ + $(RUBY_LIBS) \ + $(PROFILE_LIBS) # abbreviations DEST_BIN = $(DESTDIR)$(BINDIR) @@ -1422,15 +1444,24 @@ BASIC_SRC = \ window.c \ $(OS_EXTRA_SRC) -SRC = $(BASIC_SRC) $(GUI_SRC) $(HANGULIN_SRC) $(LUA_SRC) $(MZSCHEME_SRC) \ - $(PERL_SRC) $(PYTHON_SRC) $(TCL_SRC) $(RUBY_SRC) \ - $(SNIFF_SRC) $(WORKSHOP_SRC) $(WSDEBUG_SRC) +SRC = $(BASIC_SRC) \ + $(GUI_SRC) \ + $(HANGULIN_SRC) \ + $(LUA_SRC) \ + $(MZSCHEME_SRC) \ + $(PERL_SRC) \ + $(PYTHON_SRC) $(PYTHON3_SRC) \ + $(TCL_SRC) \ + $(RUBY_SRC) \ + $(SNIFF_SRC) \ + $(WORKSHOP_SRC) \ + $(WSDEBUG_SRC) TAGS_SRC = *.c *.cpp if_perl.xs EXTRA_SRC = hangulin.c if_lua.c if_mzsch.c auto/if_perl.c if_perlsfio.c \ - if_python.c if_tcl.c if_ruby.c if_sniff.c gui_beval.c \ - workshop.c wsdebug.c integration.c netbeans.c + if_python.c if_python3.c if_tcl.c if_ruby.c if_sniff.c \ + gui_beval.c workshop.c wsdebug.c integration.c netbeans.c # All sources, also the ones that are not configured ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(EXTRA_SRC) @@ -1438,7 +1469,7 @@ ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(EXTRA_SRC) # Which files to check with lint. Select one of these three lines. ALL_SRC # checks more, but may not work well for checking a GUI that wasn't configured. # The perl sources also don't work well with lint. -LINT_SRC = $(BASIC_SRC) $(GUI_SRC) $(HANGULIN_SRC) $(PYTHON_SRC) $(TCL_SRC) \ +LINT_SRC = $(BASIC_SRC) $(GUI_SRC) $(HANGULIN_SRC) $(PYTHON_SRC) $(PYTHON3_SRC) $(TCL_SRC) \ $(SNIFF_SRC) $(WORKSHOP_SRC) $(WSDEBUG_SRC) $(NETBEANS_SRC) #LINT_SRC = $(SRC) #LINT_SRC = $(ALL_SRC) @@ -1499,6 +1530,7 @@ OBJ = \ $(MZSCHEME_OBJ) \ $(PERL_OBJ) \ $(PYTHON_OBJ) \ + $(PYTHON3_OBJ) \ $(TCL_OBJ) \ $(RUBY_OBJ) \ $(OS_EXTRA_OBJ) \ @@ -1528,6 +1560,7 @@ PRO_AUTO = \ if_cscope.pro \ if_xcmdsrv.pro \ if_python.pro \ + if_python3.pro \ if_ruby.pro \ main.pro \ mark.pro \ @@ -1589,7 +1622,7 @@ config auto/config.mk: auto/configure config.mk.in config.h.in CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" \ LDFLAGS="$(LDFLAGS)" $(CONF_SHELL) srcdir="$(srcdir)" \ ./configure $(CONF_OPT_GUI) $(CONF_OPT_X) $(CONF_OPT_XSMP) \ - $(CONF_OPT_DARWIN) $(CONF_OPT_PERL) $(CONF_OPT_PYTHON) \ + $(CONF_OPT_DARWIN) $(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \ $(CONF_OPT_TCL) $(CONF_OPT_RUBY) $(CONF_OPT_NLS) \ $(CONF_OPT_CSCOPE) $(CONF_OPT_MULTIBYTE) $(CONF_OPT_INPUT) \ $(CONF_OPT_OUTPUT) $(CONF_OPT_GPM) $(CONF_OPT_WORKSHOP) \ @@ -2464,8 +2497,24 @@ objects/if_perl.o: auto/if_perl.c objects/if_perlsfio.o: if_perlsfio.c $(CCC) -o $@ if_perlsfio.c -objects/if_python.o: if_python.c - $(CCC) -o $@ $(PYTHON_CFLAGS_EXTRA) if_python.c +objects/py_config.o: $(PYTHON_CONFDIR)/config.c + $(CCC) $(PYTHON_CFLAGS) -o $@ $(PYTHON_CONFDIR)/config.c \ + -I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN + +objects/py_getpath.o: $(PYTHON_CONFDIR)/getpath.c + $(CCC) $(PYTHON_CFLAGS) -o $@ $(PYTHON_CONFDIR)/getpath.c \ + -I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN \ + $(PYTHON_GETPATH_CFLAGS) + +objects/py3_config.o: $(PYTHON3_CONFDIR)/config.c + $(CCC) $(PYTHON3_CFLAGS) -o $@ $(PYTHON3_CONFDIR)/config.c \ + -I$(PYTHON3_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN + +objects/if_python.o: if_python.c + $(CCC) $(PYTHON_CFLAGS) $(PYTHON_CFLAGS_EXTRA) -o $@ if_python.c + +objects/if_python3.o: if_python3.c + $(CCC) $(PYTHON3_CFLAGS) $(PYTHON3_CFLAGS_EXTRA) -o $@ if_python3.c objects/if_ruby.o: if_ruby.c $(CCC) -o $@ if_ruby.c @@ -2536,15 +2585,6 @@ objects/os_unix.o: os_unix.c objects/pathdef.o: auto/pathdef.c $(CCC) -o $@ auto/pathdef.c -objects/py_config.o: $(PYTHON_CONFDIR)/config.c - $(CCC) -o $@ $(PYTHON_CONFDIR)/config.c \ - -I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN - -objects/py_getpath.o: $(PYTHON_CONFDIR)/getpath.c - $(CCC) -o $@ $(PYTHON_CONFDIR)/getpath.c \ - -I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN \ - $(PYTHON_GETPATH_CFLAGS) - objects/pty.o: pty.c $(CCC) -o $@ pty.c @@ -2978,6 +3018,10 @@ objects/if_python.o: if_python.c vim.h auto/config.h feature.h os_unix.h \ auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \ regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \ globals.h farsi.h arabic.h +objects/if_python3.o: if_python3.c vim.h auto/config.h feature.h os_unix.h \ + auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \ + regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \ + globals.h farsi.h arabic.h objects/if_tcl.o: if_tcl.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \ ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \ gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \ diff --git a/src/auto/configure b/src/auto/configure index 6d77806577..5d083cb14f 100755 --- a/src/auto/configure +++ b/src/auto/configure @@ -639,6 +639,12 @@ TCL_PRO TCL_OBJ TCL_SRC vi_cv_path_tcl +PYTHON3_OBJ +PYTHON3_SRC +PYTHON3_CFLAGS +PYTHON3_LIBS +PYTHON3_CONFDIR +vi_cv_path_python3 PYTHON_OBJ PYTHON_SRC PYTHON_CFLAGS @@ -755,6 +761,8 @@ with_plthome enable_perlinterp enable_pythoninterp with_python_config_dir +enable_python3interp +with_python3_config_dir enable_tclinterp with_tclsh enable_rubyinterp @@ -1417,6 +1425,7 @@ Optional Features: --enable-mzschemeinterp Include MzScheme interpreter. --enable-perlinterp Include Perl interpreter. --enable-pythoninterp Include Python interpreter. + --enable-python3interp Include Python3 interpreter. --enable-tclinterp Include Tcl interpreter. --enable-rubyinterp Include Ruby interpreter. --enable-cscope Include cscope interface. @@ -1458,6 +1467,7 @@ Optional Packages: --with-lua-prefix=PFX Prefix where Lua is installed. --with-plthome=PLTHOME Use PLTHOME. --with-python-config-dir=PATH Python's config directory + --with-python3-config-dir=PATH Python's config directory --with-tclsh=PATH which tclsh to use (default: tclsh8.0) --with-ruby-command=RUBY name of the Ruby command (default: ruby) --with-x use the X Window System @@ -5362,6 +5372,286 @@ fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-python3interp argument" >&5 +$as_echo_n "checking --enable-python3interp argument... " >&6; } +# Check whether --enable-python3interp was given. +if test "${enable_python3interp+set}" = set; then : + enableval=$enable_python3interp; +else + enable_python3interp="no" +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_python3interp" >&5 +$as_echo "$enable_python3interp" >&6; } +if test "$enable_python3interp" = "yes"; then + # Extract the first word of "python3", so it can be a program name with args. +set dummy python3; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_vi_cv_path_python3+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $vi_cv_path_python3 in + [\\/]* | ?:[\\/]*) + ac_cv_path_vi_cv_path_python3="$vi_cv_path_python3" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_vi_cv_path_python3="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +vi_cv_path_python3=$ac_cv_path_vi_cv_path_python3 +if test -n "$vi_cv_path_python3"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_python3" >&5 +$as_echo "$vi_cv_path_python3" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "X$vi_cv_path_python3" != "X"; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python version" >&5 +$as_echo_n "checking Python version... " >&6; } +if test "${vi_cv_var_python3_version+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + vi_cv_var_python3_version=` + ${vi_cv_path_python3} -c 'import sys; print(sys.version[1:3])'` + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_version" >&5 +$as_echo "$vi_cv_var_python3_version" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's install prefix" >&5 +$as_echo_n "checking Python's install prefix... " >&6; } +if test "${vi_cv_path_python3_pfx+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + vi_cv_path_python3_pfx=` + ${vi_cv_path_python3} -c \ + "import sys; print(sys.prefix)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_python3_pfx" >&5 +$as_echo "$vi_cv_path_python3_pfx" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's execution prefix" >&5 +$as_echo_n "checking Python's execution prefix... " >&6; } +if test "${vi_cv_path_python3_epfx+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + vi_cv_path_python3_epfx=` + ${vi_cv_path_python3} -c \ + "import sys; print(sys.exec_prefix)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_python3_epfx" >&5 +$as_echo "$vi_cv_path_python3_epfx" >&6; } + + + if test "${vi_cv_path_python3path+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + vi_cv_path_python3path=` + unset PYTHONPATH; + ${vi_cv_path_python3} -c \ + "import sys, string; print(':'.join(sys.path))"` +fi + + + + +# Check whether --with-python3-config-dir was given. +if test "${with_python3_config_dir+set}" = set; then : + withval=$with_python3_config_dir; vi_cv_path_python3_conf="${withval}" +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's configuration directory" >&5 +$as_echo_n "checking Python's configuration directory... " >&6; } +if test "${vi_cv_path_python3_conf+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + vi_cv_path_python3_conf= + for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do + for subdir in lib share; do + d="${path}/${subdir}/python3${vi_cv_var_python3_version}/config" + if test -d "$d" && test -f "$d/config.c"; then + vi_cv_path_python3_conf="$d" + fi + done + done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_python3_conf" >&5 +$as_echo "$vi_cv_path_python3_conf" >&6; } + + PYTHON3_CONFDIR="${vi_cv_path_python3_conf}" + + if test "X$PYTHON3_CONFDIR" = "X"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: can't find it!" >&5 +$as_echo "can't find it!" >&6; } + else + + if test "${vi_cv_path_python3_plibs+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + pwd=`pwd` + tmp_mkf="$pwd/config-PyMake$$" + cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}" +__: + @echo "python3_MODLIBS='$(MODLIBS)'" + @echo "python3_LIBS='$(LIBS)'" + @echo "python3_SYSLIBS='$(SYSLIBS)'" + @echo "python3_LINKFORSHARED='$(LINKFORSHARED)'" +eof + eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`" + rm -f -- "${tmp_mkf}" + vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython3${vi_cv_var_python3_version}" + vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_MODLIBS} ${python3_LIBS} ${python3_SYSLIBS} ${python3_LINKFORSHARED}" + vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//` + vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//` + +fi + + + PYTHON3_LIBS="${vi_cv_path_python3_plibs}" + if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then + PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python3${vi_cv_var_python3_version}" + else + PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python3${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python3${vi_cv_var_python3_version}" + fi + PYTHON3_SRC="if_python3.c" + if test "x$MACOSX" = "xyes"; then + PYTHON3_OBJ="objects/if_python3.o" + else + PYTHON3_OBJ="objects/if_python3.o objects/py3_config.o" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5 +$as_echo_n "checking if -pthread should be used... " >&6; } + threadsafe_flag= + thread_lib= + if test "`(uname) 2>/dev/null`" != Darwin; then + test "$GCC" = yes && threadsafe_flag="-pthread" + if test "`(uname) 2>/dev/null`" = FreeBSD; then + threadsafe_flag="-D_THREAD_SAFE" + thread_lib="-pthread" + fi + fi + libs_save_old=$LIBS + if test -n "$threadsafe_flag"; then + cflags_save=$CFLAGS + CFLAGS="$CFLAGS $threadsafe_flag" + LIBS="$LIBS $thread_lib" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; }; PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; LIBS=$libs_save_old + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CFLAGS=$cflags_save + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compile and link flags for Python are sane" >&5 +$as_echo_n "checking if compile and link flags for Python are sane... " >&6; } + |