summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-07-17 21:19:38 +0200
committerBram Moolenaar <Bram@vim.org>2010-07-17 21:19:38 +0200
commitbd5e15fd5c7e42505d6b0e20f4198d24fc7e219d (patch)
tree70e3f86ae76494fc094bbe25c58ba2befbcf4872 /src
parent02c707a87da1b0f78d10a689cc03941a2e8acbc6 (diff)
Added support for Python 3. (Roland Puntaier)
Diffstat (limited to 'src')
-rw-r--r--src/Make_bc5.mak56
-rw-r--r--src/Make_cyg.mak34
-rw-r--r--src/Make_ming.mak48
-rw-r--r--src/Make_mvc.mak45
-rw-r--r--src/Makefile84
-rwxr-xr-xsrc/auto/configure290
-rw-r--r--src/buffer.c3
-rw-r--r--src/config.h.in9
-rw-r--r--src/config.mk.in6
-rw-r--r--src/configure.in180
-rw-r--r--src/eval.c17
-rw-r--r--src/ex_cmds.h4
-rw-r--r--src/ex_docmd.c13
-rw-r--r--src/globals.h10
-rw-r--r--src/if_python.c21
-rw-r--r--src/if_python3.c2796
-rw-r--r--src/main.c3
-rw-r--r--src/proto.h4
-rw-r--r--src/proto/if_python3.pro8
-rw-r--r--src/structs.h8
-rw-r--r--src/version.c9
-rw-r--r--src/vim.h1
-rw-r--r--src/window.c4
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; }
+ cflags_save=$CFLAGS
+ libs_save=$LIBS
+ CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+ LIBS="$LIBS $PYTHON3_LIBS"
+ 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_ok=yes
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: