Patch 7.4.1070
Problem:    The Tcl interface can't be loaded dynamically on Unix.
Solution:   Make it possible to load it dynamically. (Ken Takata)
Files:      runtime/doc/if_tcl.txt, runtime/doc/options.txt,
            runtime/doc/quickref.txt, runtime/optwin.vim, src/Makefile,
            src/config.h.in, src/configure.in, src/auto/configure,
            src/if_tcl.c, src/option.c, src/option.h


*** ../vim-7.4.1069/runtime/doc/if_tcl.txt      2013-08-10 13:24:55.000000000 
+0200
--- runtime/doc/if_tcl.txt      2016-01-09 19:14:48.073879499 +0100
***************
*** 515,533 ****
  ==============================================================================
  9. Dynamic loading                                    *tcl-dynamic*
  
! On MS-Windows the Tcl library can be loaded dynamically.  The |:version|
! output then includes |+tcl/dyn|.
  
! This means that Vim will search for the Tcl DLL file only when needed.  When
! you don't use the Tcl interface you don't need it, thus you can use Vim
! without this DLL file.
  
  To use the Tcl interface the Tcl DLL must be in your search path.  In a
  console window type "path" to see what directories are used.
  
  The name of the DLL must match the Tcl version Vim was compiled with.
! Currently the name is "tcl83.dll".  That is for Tcl 8.3.  To know for sure
  edit "gvim.exe" and search for "tcl\d*.dll\c".
  
  ==============================================================================
   vim:tw=78:ts=8:ft=help:norl:
--- 515,543 ----
  ==============================================================================
  9. Dynamic loading                                    *tcl-dynamic*
  
! On MS-Windows and Unix the Tcl library can be loaded dynamically.  The
! |:version| output then includes |+tcl/dyn|.
  
! This means that Vim will search for the Tcl DLL or shared library file only
! when needed.  When you don't use the Tcl interface you don't need it, thus you
! can use Vim without this file.
! 
! 
! MS-Windows ~
  
  To use the Tcl interface the Tcl DLL must be in your search path.  In a
  console window type "path" to see what directories are used.
  
  The name of the DLL must match the Tcl version Vim was compiled with.
! Currently the name is "tcl86.dll".  That is for Tcl 8.6.  To know for sure
  edit "gvim.exe" and search for "tcl\d*.dll\c".
  
+ 
+ Unix ~
+ 
+ The 'tcldll' option can be used to specify the Tcl shared library file instead
+ of DYNAMIC_TCL_DLL file what was specified at compile time.  The version of
+ the shared library must match the Tcl version Vim was compiled with.
+ 
  ==============================================================================
   vim:tw=78:ts=8:ft=help:norl:
*** ../vim-7.4.1069/runtime/doc/options.txt     2016-01-09 14:57:10.512884859 
+0100
--- runtime/doc/options.txt     2016-01-09 19:16:24.952826990 +0100
***************
*** 7397,7402 ****
--- 7437,7453 ----
        Resetting this option is useful when using a ":tag" command in a
        mapping which should not change the tagstack.
  
+                                               *'tcldll'*
+ 'tcldll'              string  (default depends on the build)
+                       global
+                       {not in Vi}
+                       {only available when compiled with the |+tcl/dyn|
+                       feature}
+       Specifies the name of the Tcl shared library. The default is
+       DYNAMIC_TCL_DLL, which was specified at compile time.
+       This option cannot be set from a |modeline| or in the |sandbox|, for
+       security reasons.
+ 
                                                *'term'* *E529* *E530* *E531*
  'term'                        string  (default is $TERM, if that fails:
                                      in the GUI: "builtin_gui"
*** ../vim-7.4.1069/runtime/doc/quickref.txt    2015-11-24 18:45:52.633647066 
+0100
--- runtime/doc/quickref.txt    2016-01-09 19:14:48.073879499 +0100
***************
*** 772,777 ****
--- 777,783 ----
  'list'                            show <Tab> and <EOL>
  'listchars'     'lcs'     characters for displaying in list mode
  'loadplugins'   'lpl'     load plugin scripts when starting up
+ 'luadll'                  name of the Lua dynamic library
  'macatsui'                Mac GUI: use ATSUI text drawing
  'magic'                           changes special characters in search 
patterns
  'makeef'        'mef'     name of the errorfile for ":make"
***************
*** 811,816 ****
--- 817,823 ----
  'patchexpr'     'pex'     expression used to patch a file
  'patchmode'     'pm'      keep the oldest version of a file
  'path'                  'pa'      list of directories searched with "gf" 
et.al.
+ 'perldll'                 name of the Perl dynamic library
  'preserveindent'  'pi'            preserve the indent structure when 
reindenting
  'previewheight'   'pvh'     height of the preview window
  'previewwindow'   'pvw'     identifies the preview window
***************
*** 823,839 ****
--- 830,850 ----
  'printmbfont'   'pmbfn'   font names to be used for CJK output of :hardcopy
  'printoptions'          'popt'    controls the format of :hardcopy output
  'pumheight'     'ph'      maximum height of the popup menu
+ 'pythondll'               name of the Python 2 dynamic library
+ 'pythonthreedll'          name of the Python 3 dynamic library
  'quoteescape'   'qe'      escape characters used in a string
  'readonly'      'ro'      disallow writing the buffer
  'redrawtime'    'rdt'     timeout for 'hlsearch' and |:match| highlighting
  'regexpengine'          're'      default regexp engine to use
  'relativenumber'  'rnu'           show relative line number in front of each 
line
  'remap'                           allow mappings to work recursively
+ 'renderoptions'         'rop'     options for text rendering on Windows
  'report'                  threshold for reporting nr. of lines changed
  'restorescreen'   'rs'            Win32: restore screen when exiting
  'revins'        'ri'      inserting characters will work backwards
  'rightleft'     'rl'      window is right-to-left oriented
  'rightleftcmd'          'rlc'     commands for which editing works 
right-to-left
+ 'rubydll'                 name of the Ruby dynamic library
  'ruler'                 'ru'      show cursor line and column in the status 
line
  'rulerformat'   'ruf'     custom format for the ruler
  'runtimepath'   'rtp'     list of directories used for runtime files
***************
*** 898,903 ****
--- 909,915 ----
  'tagrelative'   'tr'      file names in tag file are relative
  'tags'                  'tag'     list of file names used by the tag command
  'tagstack'      'tgst'    push tags onto the tag stack
+ 'tcldll'                  name of the Tcl dynamic library
  'term'                            name of the terminal
  'termbidi'      'tbidi'   terminal takes care of bi-directionality
  'termencoding'          'tenc'    character encoding used by the terminal
*** ../vim-7.4.1069/runtime/optwin.vim  2016-01-07 16:51:59.603421970 +0100
--- runtime/optwin.vim  2016-01-09 19:14:48.077879455 +0100
***************
*** 1331,1336 ****
--- 1331,1340 ----
    call append("$", "rubydll\tname of the Ruby dynamic library")
    call <SID>OptionG("rubydll", &rubydll)
  endif
+ if exists("&tcldll")
+   call append("$", "tcldll\tname of the Tcl dynamic library")
+   call <SID>OptionG("tcldll", &tcldll)
+ endif
  
  set cpo&vim
  
*** ../vim-7.4.1069/src/Makefile        2016-01-09 14:57:10.512884859 +0100
--- src/Makefile        2016-01-09 19:37:45.582918805 +0100
***************
*** 445,451 ****
--- 445,453 ----
  
  # TCL
  # Uncomment this when you want to include the Tcl interface.
+ # First one is for static linking, second one for dynamic loading.
  #CONF_OPT_TCL = --enable-tclinterp
+ #CONF_OPT_TCL = --enable-tclinterp=dynamic
  #CONF_OPT_TCL = --enable-tclinterp --with-tclsh=tclsh8.4
  
  # CSCOPE
***************
*** 1375,1381 ****
  .SUFFIXES: .c .o .pro
  
  PRE_DEFS = -Iproto $(DEFS) $(GUI_DEFS) $(GUI_IPATH) $(CPPFLAGS) 
$(EXTRA_IPATHS)
! POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(TCL_CFLAGS) $(EXTRA_DEFS)
  
  ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(SANITIZER_CFLAGS) 
$(LEAK_CFLAGS) $(POST_DEFS)
  
--- 1377,1383 ----
  .SUFFIXES: .c .o .pro
  
  PRE_DEFS = -Iproto $(DEFS) $(GUI_DEFS) $(GUI_IPATH) $(CPPFLAGS) 
$(EXTRA_IPATHS)
! POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(EXTRA_DEFS)
  
  ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(SANITIZER_CFLAGS) 
$(LEAK_CFLAGS) $(POST_DEFS)
  
***************
*** 1383,1389 ****
  # with "-E".
  OSDEF_CFLAGS = $(PRE_DEFS) $(POST_DEFS)
  
! LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(RUBY_CFLAGS) 
$(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) -Dinline= 
-D__extension__= -Dalloca=alloca
  
  LINT_EXTRA = -DUSE_SNIFF -DHANGUL_INPUT -D"__attribute__(x)="
  
--- 1385,1391 ----
  # with "-E".
  OSDEF_CFLAGS = $(PRE_DEFS) $(POST_DEFS)
  
! LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(RUBY_CFLAGS) 
$(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) $(TCL_CFLAGS) 
-Dinline= -D__extension__= -Dalloca=alloca
  
  LINT_EXTRA = -DUSE_SNIFF -DHANGUL_INPUT -D"__attribute__(x)="
  
***************
*** 2756,2762 ****
        $(CCC) -o $@ if_sniff.c
  
  objects/if_tcl.o: if_tcl.c
!       $(CCC) -o $@ if_tcl.c
  
  objects/integration.o: integration.c
        $(CCC) -o $@ integration.c
--- 2758,2764 ----
        $(CCC) -o $@ if_sniff.c
  
  objects/if_tcl.o: if_tcl.c
!       $(CCC) $(TCL_CFLAGS) -o $@ if_tcl.c
  
  objects/integration.o: integration.c
        $(CCC) -o $@ integration.c
***************
*** 2801,2807 ****
        $(CCC) -o $@ ops.c
  
  objects/option.o: option.c
!       $(CCC) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) 
$(RUBY_CFLAGS) -o $@ option.c
  
  objects/os_beos.o: os_beos.c
        $(CCC) -o $@ os_beos.c
--- 2803,2809 ----
        $(CCC) -o $@ ops.c
  
  objects/option.o: option.c
!       $(CCC) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) 
$(RUBY_CFLAGS) $(TCL_CFLAGS) -o $@ option.c
  
  objects/os_beos.o: os_beos.c
        $(CCC) -o $@ os_beos.c
*** ../vim-7.4.1069/src/config.h.in     2015-12-29 18:52:33.344054429 +0100
--- src/config.h.in     2016-01-09 19:14:48.077879455 +0100
***************
*** 360,365 ****
--- 360,368 ----
  /* Define if you want to include the Tcl interpreter. */
  #undef FEAT_TCL
  
+ /* Define for linking via dlopen() or LoadLibrary() */
+ #undef DYNAMIC_TCL
+ 
  /* Define if you want to include the Sniff interface. */
  #undef FEAT_SNIFF
  
*** ../vim-7.4.1069/src/configure.in    2016-01-02 22:46:33.037000177 +0100
--- src/configure.in    2016-01-09 19:14:48.077879455 +0100
***************
*** 1622,1632 ****
  
  AC_MSG_CHECKING(--enable-tclinterp argument)
  AC_ARG_ENABLE(tclinterp,
!       [  --enable-tclinterp      Include Tcl interpreter.], ,
        [enable_tclinterp="no"])
  AC_MSG_RESULT($enable_tclinterp)
  
! if test "$enable_tclinterp" = "yes"; then
  
    dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
    AC_MSG_CHECKING(--with-tclsh argument)
--- 1622,1632 ----
  
  AC_MSG_CHECKING(--enable-tclinterp argument)
  AC_ARG_ENABLE(tclinterp,
!       [  --enable-tclinterp[=OPTS]      Include Tcl interpreter. [default=no] 
[OPTS=no/yes/dynamic]], ,
        [enable_tclinterp="no"])
  AC_MSG_RESULT($enable_tclinterp)
  
! if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
  
    dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
    AC_MSG_CHECKING(--with-tclsh argument)
***************
*** 1660,1665 ****
--- 1660,1666 ----
        tclver=`echo 'puts [[info tclversion]]' | $vi_cv_path_tcl -`
        AC_MSG_RESULT($tclver - OK);
        tclloc=`echo 'set l [[info library]];set i [[string last lib $l]];incr 
i -2;puts [[string range $l 0 $i]]' | $vi_cv_path_tcl -`
+       tcldll=`echo 'puts libtcl[[info tclversion]][[info 
sharedlibextension]]' | $vi_cv_path_tcl -`
  
        AC_MSG_CHECKING(for location of Tcl include)
        if test "x$MACOSX" != "xyes"; then
***************
*** 1694,1700 ****
            AC_MSG_RESULT($try/tclConfig.sh)
            . "$try/tclConfig.sh"
            dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
!           TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
            dnl Use $TCL_DEFS for -D_THREAD_SAFE et al.  But only use the
            dnl "-D_ABC" items.  Watch out for -DFOO=long\ long.
            TCL_DEFS=`echo $TCL_DEFS | sed -e 's/\\\\ /\\\\X/g' | tr ' ' '\012' 
| sed -e '/^[[^-]]/d' -e '/^-[[^D]]/d' -e '/-D[[^_]]/d' -e 's/-D_/ -D_/' | tr 
'\012' ' ' | sed -e 's/\\\\X/\\\\ /g'`
--- 1695,1705 ----
            AC_MSG_RESULT($try/tclConfig.sh)
            . "$try/tclConfig.sh"
            dnl use eval, because tcl 8.2 includes ${TCL_DBGX}
!           if test "$enable_tclinterp" = "dynamic"; then
!             TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
!           else
!             TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
!           fi
            dnl Use $TCL_DEFS for -D_THREAD_SAFE et al.  But only use the
            dnl "-D_ABC" items.  Watch out for -DFOO=long\ long.
            TCL_DEFS=`echo $TCL_DEFS | sed -e 's/\\\\ /\\\\X/g' | tr ' ' '\012' 
| sed -e '/^[[^-]]/d' -e '/^-[[^D]]/d' -e '/-D[[^_]]/d' -e 's/-D_/ -D_/' | tr 
'\012' ' ' | sed -e 's/\\\\X/\\\\ /g'`
***************
*** 1739,1744 ****
--- 1744,1755 ----
        AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
      fi
    fi
+   if test "$enable_tclinterp" = "dynamic"; then
+     if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
+       AC_DEFINE(DYNAMIC_TCL)
+       TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" 
-DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
+     fi
+   fi
    if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
      AC_MSG_ERROR([could not configure Tcl])
    fi
*** ../vim-7.4.1069/src/auto/configure  2016-01-02 22:46:33.037000177 +0100
--- src/auto/configure  2016-01-09 19:18:06.527722873 +0100
***************
*** 1468,1474 ****
    --enable-perlinterp=OPTS     Include Perl interpreter.  default=no 
OPTS=no/yes/dynamic
    --enable-pythoninterp=OPTS   Include Python interpreter. default=no 
OPTS=no/yes/dynamic
    --enable-python3interp=OPTS   Include Python3 interpreter. default=no 
OPTS=no/yes/dynamic
!   --enable-tclinterp      Include Tcl interpreter.
    --enable-rubyinterp=OPTS     Include Ruby interpreter.  default=no 
OPTS=no/yes/dynamic
    --enable-cscope         Include cscope interface.
    --enable-workshop       Include Sun Visual Workshop support.
--- 1468,1474 ----
    --enable-perlinterp=OPTS     Include Perl interpreter.  default=no 
OPTS=no/yes/dynamic
    --enable-pythoninterp=OPTS   Include Python interpreter. default=no 
OPTS=no/yes/dynamic
    --enable-python3interp=OPTS   Include Python3 interpreter. default=no 
OPTS=no/yes/dynamic
!   --enable-tclinterp=OPTS      Include Tcl interpreter. default=no 
OPTS=no/yes/dynamic
    --enable-rubyinterp=OPTS     Include Ruby interpreter.  default=no 
OPTS=no/yes/dynamic
    --enable-cscope         Include cscope interface.
    --enable-workshop       Include Sun Visual Workshop support.
***************
*** 6616,6622 ****
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_tclinterp" >&5
  $as_echo "$enable_tclinterp" >&6; }
  
! if test "$enable_tclinterp" = "yes"; then
  
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-tclsh argument" 
>&5
  $as_echo_n "checking --with-tclsh argument... " >&6; }
--- 6616,6622 ----
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_tclinterp" >&5
  $as_echo "$enable_tclinterp" >&6; }
  
! if test "$enable_tclinterp" = "yes" -o "$enable_tclinterp" = "dynamic"; then
  
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-tclsh argument" 
>&5
  $as_echo_n "checking --with-tclsh argument... " >&6; }
***************
*** 6852,6857 ****
--- 6852,6858 ----
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tclver - OK" >&5
  $as_echo "$tclver - OK" >&6; };
        tclloc=`echo 'set l [info library];set i [string last lib $l];incr i 
-2;puts [string range $l 0 $i]' | $vi_cv_path_tcl -`
+       tcldll=`echo 'puts libtcl[info tclversion][info sharedlibextension]' | 
$vi_cv_path_tcl -`
  
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for location of Tcl 
include" >&5
  $as_echo_n "checking for location of Tcl include... " >&6; }
***************
*** 6888,6894 ****
            { $as_echo "$as_me:${as_lineno-$LINENO}: result: $try/tclConfig.sh" 
>&5
  $as_echo "$try/tclConfig.sh" >&6; }
            . "$try/tclConfig.sh"
!                   TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
                            TCL_DEFS=`echo $TCL_DEFS | sed -e 's/\\\\ /\\\\X/g' 
| tr ' ' '\012' | sed -e '/^[^-]/d' -e '/^-[^D]/d' -e '/-D[^_]/d' -e 's/-D_/ 
-D_/' | tr '\012' ' ' | sed -e 's/\\\\X/\\\\ /g'`
            break
          fi
--- 6889,6899 ----
            { $as_echo "$as_me:${as_lineno-$LINENO}: result: $try/tclConfig.sh" 
>&5
  $as_echo "$try/tclConfig.sh" >&6; }
            . "$try/tclConfig.sh"
!                   if test "$enable_tclinterp" = "dynamic"; then
!             TCL_LIBS=`eval echo "$TCL_STUB_LIB_SPEC $TCL_LIBS"`
!           else
!             TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
!           fi
                            TCL_DEFS=`echo $TCL_DEFS | sed -e 's/\\\\ /\\\\X/g' 
| tr ' ' '\012' | sed -e '/^[^-]/d' -e '/^-[^D]/d' -e '/-D[^_]/d' -e 's/-D_/ 
-D_/' | tr '\012' ' ' | sed -e 's/\\\\X/\\\\ /g'`
            break
          fi
***************
*** 6937,6942 ****
--- 6942,6954 ----
  $as_echo "too old; need Tcl version 8.0 or later" >&6; }
      fi
    fi
+   if test "$enable_tclinterp" = "dynamic"; then
+     if test "X$TCL_SRC" != "X" -a "X$tcldll" != "X"; then
+       $as_echo "#define DYNAMIC_TCL 1" >>confdefs.h
+ 
+       TCL_CFLAGS="-DDYNAMIC_TCL_DLL=\\\"$tcldll\\\" 
-DDYNAMIC_TCL_VER=\\\"$tclver\\\" $TCL_CFLAGS"
+     fi
+   fi
    if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
      as_fn_error $? "could not configure Tcl" "$LINENO" 5
    fi
*** ../vim-7.4.1069/src/if_tcl.c        2015-07-21 17:53:11.577527989 +0200
--- src/if_tcl.c        2016-01-09 19:31:16.651138527 +0100
***************
*** 160,165 ****
--- 160,179 ----
  typedef int HANDLE;
  # endif
  
+ # ifndef WIN3264
+ #  include <dlfcn.h>
+ #  define HANDLE void*
+ #  define TCL_PROC void*
+ #  define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
+ #  define symbol_from_dll dlsym
+ #  define close_dll dlclose
+ # else
+ #  define TCL_PROC FARPROC
+ #  define load_dll vimLoadLib
+ #  define symbol_from_dll GetProcAddress
+ #  define close_dll FreeLibrary
+ # endif
+ 
  /*
   * Declare HANDLE for tcl.dll and function pointers.
   */
***************
*** 170,176 ****
  /*
   * Table of name to function pointer of tcl.
   */
- #define TCL_PROC FARPROC
  static struct {
      char* name;
      TCL_PROC* ptr;
--- 184,189 ----
***************
*** 197,203 ****
  
      if (hTclLib)
        return OK;
!     if (!(hTclLib = vimLoadLib(libname)))
      {
        if (verbose)
            EMSG2(_(e_loadlib), libname);
--- 210,216 ----
  
      if (hTclLib)
        return OK;
!     if (!(hTclLib = load_dll(libname)))
      {
        if (verbose)
            EMSG2(_(e_loadlib), libname);
***************
*** 205,214 ****
      }
      for (i = 0; tcl_funcname_table[i].ptr; ++i)
      {
!       if (!(*tcl_funcname_table[i].ptr = GetProcAddress(hTclLib,
                        tcl_funcname_table[i].name)))
        {
!           FreeLibrary(hTclLib);
            hTclLib = NULL;
            if (verbose)
                EMSG2(_(e_loadfunc), tcl_funcname_table[i].name);
--- 218,227 ----
      }
      for (i = 0; tcl_funcname_table[i].ptr; ++i)
      {
!       if (!(*tcl_funcname_table[i].ptr = symbol_from_dll(hTclLib,
                        tcl_funcname_table[i].name)))
        {
!           close_dll(hTclLib);
            hTclLib = NULL;
            if (verbose)
                EMSG2(_(e_loadfunc), tcl_funcname_table[i].name);
***************
*** 246,258 ****
      int               verbose;
  {
      if (!stubs_initialized && find_executable_arg != NULL
!           && tcl_runtime_link_init(DYNAMIC_TCL_DLL, verbose) == OK)
      {
        Tcl_Interp *interp;
  
        dll_Tcl_FindExecutable(find_executable_arg);
  
!       if (interp = dll_Tcl_CreateInterp())
        {
            if (Tcl_InitStubs(interp, DYNAMIC_TCL_VER, 0))
            {
--- 259,271 ----
      int               verbose;
  {
      if (!stubs_initialized && find_executable_arg != NULL
!           && tcl_runtime_link_init((char *)p_tcldll, verbose) == OK)
      {
        Tcl_Interp *interp;
  
        dll_Tcl_FindExecutable(find_executable_arg);
  
!       if ((interp = dll_Tcl_CreateInterp()) != NULL)
        {
            if (Tcl_InitStubs(interp, DYNAMIC_TCL_VER, 0))
            {
***************
*** 272,278 ****
  #ifdef DYNAMIC_TCL
      if (hTclLib)
      {
!       FreeLibrary(hTclLib);
        hTclLib = NULL;
      }
  #endif
--- 285,291 ----
  #ifdef DYNAMIC_TCL
      if (hTclLib)
      {
!       close_dll(hTclLib);
        hTclLib = NULL;
      }
  #endif
***************
*** 2039,2044 ****
--- 2052,2061 ----
      int               err;
      char      *result;
  
+     /* TODO: this code currently crashes Vim on exit */
+     if (exiting)
+       return;
+ 
      while (ref != NULL)
      {
        next = ref->next;
*** ../vim-7.4.1069/src/option.c        2016-01-09 14:57:10.508884902 +0100
--- src/option.c        2016-01-09 19:16:58.932457617 +0100
***************
*** 2609,2614 ****
--- 2609,2620 ----
      {"tagstack",    "tgst", P_BOOL|P_VI_DEF,
                            (char_u *)&p_tgst, PV_NONE,
                            {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ #if defined(DYNAMIC_TCL)
+     {"tcldll",      NULL,   P_STRING|P_VI_DEF|P_SECURE,
+                           (char_u *)&p_tcldll, PV_NONE,
+                           {(char_u *)DYNAMIC_TCL_DLL, (char_u *)0L}
+                           SCRIPTID_INIT},
+ #endif
      {"term",      NULL,   
P_STRING|P_EXPAND|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RALL,
                            (char_u *)&T_NAME, PV_NONE,
                            {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
*** ../vim-7.4.1069/src/option.h        2016-01-09 15:07:58.601921984 +0100
--- src/option.h        2016-01-09 19:14:48.081879412 +0100
***************
*** 832,837 ****
--- 832,840 ----
  EXTERN int    p_tr;           /* 'tagrelative' */
  EXTERN char_u *p_tags;        /* 'tags' */
  EXTERN int    p_tgst;         /* 'tagstack' */
+ #if defined(DYNAMIC_TCL)
+ EXTERN char_u *p_tcldll;      /* 'tcldll' */
+ #endif
  #ifdef FEAT_ARABIC
  EXTERN int    p_tbidi;        /* 'termbidi' */
  #endif
*** ../vim-7.4.1069/src/version.c       2016-01-09 18:52:36.364327705 +0100
--- src/version.c       2016-01-09 19:34:31.925018949 +0100
***************
*** 743,744 ****
--- 743,746 ----
  {   /* Add new patch number below this line */
+ /**/
+     1070,
  /**/

-- 
   [The rest of the ARMY stand around looking at a loss.]
INSPECTOR END OF FILM: (picks up megaphone) All right!  Clear off!  Go on!
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui