changeset 2287:573da4dac306 vim73

Make the dos installer work with more compilers.
author Bram Moolenaar <bram@vim.org>
date Wed, 07 Jul 2010 15:14:03 +0200
parents 144aa6167799
children 4dda2bd944e1
files Makefile runtime/doc/todo.txt runtime/doc/version7.txt src/dosinst.c src/dosinst.h src/uninstal.c src/version.h
diffstat 7 files changed, 46 insertions(+), 53 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile
+++ b/Makefile
@@ -157,7 +157,7 @@ DOSBIN_S =  dosbin_s
 # - If building the Win32s version delete vimrun.exe.
 # Win32s GUI version:
 # - Set environment for Visual C++ 4.1 (requires a new console window)
-# - "vcvars32" (use the path for VC 4.1 e:\msdev\bin)
+# - "vcvars32.bat" (use the path for VC 4.1 e:\msdev\bin)
 # - "nmake -f Make_mvc.mak GUI=yes INTL=no clean" (use the path for VC 4.1)
 # - "nmake -f Make_mvc.mak GUI=yes INTL=no" (use the path for VC 4.1)
 # - Rename "gvim.exe" to "gvim_w32s.exe".
@@ -178,6 +178,7 @@ DOSBIN_S =  dosbin_s
 #	VisVim.dll in src/VisVim
 #   Note: VisVim needs to be build with MSVC 5, newer versions don't work.
 #   gvimext64.dll can be obtained from http://code.google.com/p/vim-win3264/
+#	It is part of vim72.zip as vim72/gvimext.dll.
 # - make sure there is a diff.exe two levels up
 # - go to ../nsis and do "makensis gvim.nsi" (takes a few minutes).
 # - Copy gvim##.exe to the dist directory.
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -34,6 +34,9 @@ Bug in undo, using freed memory. (Domini
 
 Cursor positioning wrong with 0x200e character. (John Becket, 2010 May 6)
 
+Test 69 breaks on MS-Windows, both 32 and 64 builds. (George Reilly, 2010 Feb
+26)
+
 E315 when trying to change a file in FileChangedRO autocommand event.
 (Dominique Pelle, 2010 Apr 30)
 
@@ -103,9 +106,6 @@ Shell not recognized properly if it ends
 Find tail?  Might have a / in argument.  Find space?  Might have space in
 path.
 
-Test 69 breaks on MS-Windows, both 32 and 64 builds. (George Reilly, 2010 Feb
-26)
-
 ":function f(x) keepjumps" creates a function where every command is executed
 like it has ":keepjumps" before it.
 
@@ -1094,9 +1094,6 @@ 2010 Jun 30)
 
 
 Vim 7.3:
-- using NSIS 2.46: install on Windows 7 works, but no "Edit with Vim" menu.
-   Use register_shell_extension()?
-   Patch from Geoffrey Reilly, 2010 Jun 22
 - in August remove UF_VERSION_CRYPT_PREV and UF_VERSION_PREV.
 - Conceal feature: no update when moving to another window. (Dominique Pelle,
   2010 Jul 5)  Vince will look into it.
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -7228,5 +7228,9 @@ right compiler flags. (Michael Bienia)
 
 Window title is not updated after dropping a file on Vim. (Hari G)
 
+MS-Windows: The self-installing executable now also works on 64-bit systems.
+The gvim executable is 32 bits, the installed gvimext.dll is either a 32 or 64
+bit version. (George Reilly)
+
 
  vim:tw=78:ts=8:ft=help:norl:
--- a/src/dosinst.c
+++ b/src/dosinst.c
@@ -139,31 +139,6 @@ static char	*(vimfiles_subdirs[]) =
 };
 
 /*
- * Copy a directory name from "dir" to "buf", doubling backslashes.
- * Also make sure it ends in a double backslash.
- */
-    static void
-double_bs(char *dir, char *buf)
-{
-    char *d = buf;
-    char *s;
-
-    for (s = dir; *s; ++s)
-    {
-	if (*s == '\\')
-	    *d++ = '\\';
-	*d++ = *s;
-    }
-    /* when dir is not empty, it must end in a double backslash */
-    if (d > buf && d[-1] != '\\')
-    {
-	*d++ = '\\';
-	*d++ = '\\';
-    }
-    *d = NUL;
-}
-
-/*
  * Obtain a choice from a table.
  * First entry is a question, others are choices.
  */
@@ -442,7 +417,7 @@ get_vim_env(void)
     else
     {
 	printf("Failed to open %s\n", fname);
-	Sleep(2000);
+	sleep(2);
     }
 }
 
@@ -582,10 +557,10 @@ uninstall_check(int skip_question)
 			 * The uninstaller copies itself, executes the copy
 			 * and exits, thus we can't wait for the process to
 			 * finish. */
-			Sleep(1000);  /* wait for uninstaller to start up */
+			sleep(1);  /* wait for uninstaller to start up */
 			num_windows = 0;
 			EnumWindows(window_cb, 0);
-			Sleep(1000);  /* wait for windows to be counted */
+			sleep(1);  /* wait for windows to be counted */
 			if (num_windows == 0)
 			{
 			    /* Did not find the uninstaller, ask user to press
@@ -603,7 +578,7 @@ uninstall_check(int skip_question)
 				fflush(stdout);
 				num_windows = 0;
 				EnumWindows(window_cb, 0);
-				Sleep(1000);  /* wait for windows to be counted */
+				sleep(1);  /* wait for windows to be counted */
 			    } while (num_windows > 0);
 			}
 			printf("\nDone!\n");
@@ -1376,7 +1351,15 @@ init_vimrc_choices(void)
     ++choice_count;
 }
 
-#if defined(DJGPP) || defined(WIN3264) || defined(UNIX_LINT)
+#if defined(WIN3264)
+/*
+ * Modern way of creating registry entries, also works on 64 bit windows when
+ * compiled as a 32 bit program.
+ */
+# ifndef KEY_WOW64_64KEY
+#  define KEY_WOW64_64KEY 0x0100
+# endif
+
     static LONG
 reg_create_key(
     HKEY root,
@@ -1525,7 +1508,7 @@ register_uninstall(
 					 "UninstallString", uninstall_string);
     return lRet;
 }
-#endif /* if defined(DJGPP) || defined(WIN3264) || defined(UNIX_LINT) */
+#endif /* WIN3264 */
 
 /*
  * Add some entries to the registry:
@@ -1534,11 +1517,11 @@ register_uninstall(
  * - to uninstall Vim
  */
 /*ARGSUSED*/
-    static LONG
+    static int
 install_registry(void)
 {
+#ifdef WIN3264
     LONG        lRet = ERROR_SUCCESS;
-#if defined(DJGPP) || defined(WIN3264) || defined(UNIX_LINT)
     const char	*vim_ext_ThreadingModel = "Apartment";
     const char	*vim_ext_name = "Vim Shell Extension";
     const char	*vim_ext_clsid = "{51EEE242-AD87-11d3-9C1E-0090278BBD99}";
@@ -1566,11 +1549,11 @@ install_registry(void)
             HKEY_CLASSES_ROOT, vim_ext_clsid, vim_ext_name,
 						bufg, vim_ext_ThreadingModel);
         if (ERROR_SUCCESS != lRet)
-	    return lRet;
+	    return FAIL;
         lRet = register_shellex(
             HKEY_CLASSES_ROOT, vim_ext_clsid, vim_ext_name, vim_exe_path);
         if (ERROR_SUCCESS != lRet)
-	    return lRet;
+	    return FAIL;
     }
 
     if (install_openwith)
@@ -1579,7 +1562,7 @@ install_registry(void)
 
         lRet = register_openwith(HKEY_CLASSES_ROOT, vim_exe_path);
         if (ERROR_SUCCESS != lRet)
-	    return lRet;
+	    return FAIL;
     }
 
     printf("Creating an uninstall entry\n");
@@ -1601,9 +1584,11 @@ install_registry(void)
         "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim " VIM_VERSION_SHORT,
         display_name,
         uninstall_string);
+    if (ERROR_SUCCESS != lRet)
+	return FAIL;
+#endif /* WIN3264 */
 
-#endif /* if defined(DJGPP) || defined(WIN3264) || defined(UNIX_LINT) */
-    return lRet;
+    return OK;
 }
 
     static void
@@ -2569,7 +2554,7 @@ main(int argc, char **argv)
 	/* When nothing found exit quietly.  If something found wait for
 	 * a little while, so that the user can read the messages. */
 	if (i)
-	    Sleep(3000);
+	    sleep(3);
 	exit(0);
     }
 #endif
@@ -2645,7 +2630,7 @@ main(int argc, char **argv)
 
 	/* Avoid that the user has to hit Enter, just wait a little bit to
 	 * allow reading the messages. */
-	Sleep(2000);
+	sleep(2);
     }
 
     return 0;
--- a/src/dosinst.h
+++ b/src/dosinst.h
@@ -62,6 +62,11 @@ char *searchpath(char *name);
 #  define vim_mkdir(x, y) mkdir((char *)(x))
 # endif
 #endif
+
+#ifndef DJGPP
+# define sleep(n) Sleep((n) * 1000)
+#endif
+
 /* ---------------------------------------- */
 
 
@@ -395,9 +400,10 @@ char *(icon_link_names[ICON_COUNT]) =
 	 "gVim Easy " VIM_VERSION_SHORT ".lnk",
 	 "gVim Read only " VIM_VERSION_SHORT ".lnk"};
 
-/* This is only used for dosinst.c and for uninstal.c when not being able to
- * directly access registry entries. */
-#if !defined(WIN3264) || defined(DOSINST)
+/* This is only used for dosinst.c when WIN3264 is defined and for uninstal.c
+ * when not being able to directly access registry entries. */
+#if (defined(DOSINST) && defined(WIN3264)) \
+	|| (!defined(DOSINST) && !defined(WIN3264))
 /*
  * Run an external command and wait for it to finish.
  */
--- a/src/uninstal.c
+++ b/src/uninstal.c
@@ -438,7 +438,7 @@ main(int argc, char *argv[])
 	(void)getchar();
     }
     else
-	Sleep(3000);
+	sleep(3);
 
     return 0;
 }
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim73a"
 #define VIM_VERSION_SHORT	"7.3a"
 #define VIM_VERSION_MEDIUM	"7.3a BETA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.3 BETA (2010 May 15)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.3 BETA (2010 May 15, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.3 BETA (2010 Jul 7)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.3 BETA (2010 Jul 7, compiled "