448
+ − 1 /*
+ − 2 * Copyright (c) 2000, Red Hat, Inc.
+ − 3 *
+ − 4 * This program is free software; you can redistribute it and/or modify
+ − 5 * it under the terms of the GNU General Public License as published by
+ − 6 * the Free Software Foundation; either version 2 of the License, or
+ − 7 * (at your option) any later version.
+ − 8 *
+ − 9 * A copy of the GNU General Public License can be found at
+ − 10 * http://www.gnu.org/
+ − 11 *
+ − 12 * Written by DJ Delorie <dj@cygnus.com>
+ − 13 *
+ − 14 */
+ − 15
+ − 16 /* The purpose of this file is to run all the post-install scripts
+ − 17 in their various forms. */
+ − 18
+ − 19 #include "win32.h"
+ − 20
+ − 21 #include <io.h>
+ − 22 #include <stdio.h>
+ − 23 #include <stdlib.h>
+ − 24 #ifndef WIN32_NATIVE
+ − 25 #include <unistd.h>
+ − 26 #endif
+ − 27
+ − 28 #include "state.h"
+ − 29 #include "dialog.h"
+ − 30 #include "find.h"
+ − 31 #include "concat.h"
+ − 32 #include "regedit.h"
+ − 33 #include "reginfo.h"
+ − 34 #include "resource.h"
+ − 35 #include "port.h"
+ − 36
+ − 37 static char *sh = 0;
+ − 38 static char *cmd = 0;
+ − 39 static OSVERSIONINFO verinfo;
+ − 40
+ − 41 static void
+ − 42 run (char *shscript, char *args, char *file)
+ − 43 {
+ − 44 BOOL b;
+ − 45 char cmdline [_MAX_PATH];
+ − 46 STARTUPINFO si;
+ − 47 PROCESS_INFORMATION pi;
+ − 48
+ − 49 sprintf (cmdline, "%s %s %s", shscript, args, file);
+ − 50 memset (&pi, 0, sizeof (pi));
+ − 51 memset (&si, 0, sizeof (si));
+ − 52 si.cb = sizeof (si);
+ − 53 si.lpTitle = "XEmacs Setup Post-Install Script";
+ − 54 si.dwFlags = STARTF_USEPOSITION;
+ − 55
+ − 56 b = CreateProcess (0, cmdline, 0, 0, 0,
+ − 57 CREATE_NEW_CONSOLE, 0, root_dir, &si, &pi);
+ − 58
+ − 59 if (b)
+ − 60 WaitForSingleObject (pi.hProcess, INFINITE);
+ − 61 }
+ − 62
+ − 63 static void
+ − 64 each (char *fname, unsigned int size)
+ − 65 {
+ − 66 char *ext = strrchr (fname, '.');
+ − 67 if (!ext)
+ − 68 return;
+ − 69
+ − 70 if (sh && strcmp (ext, ".sh") == 0)
+ − 71 {
+ − 72 char *f2 = concat (root_dir, XEMACS_SETUP_DIR, "postinstall/", fname, 0);
+ − 73 run (sh, "-c", f2);
+ − 74 free (f2);
+ − 75 }
+ − 76 else if (cmd && strcmp (ext, ".bat") == 0)
+ − 77 {
+ − 78 char *f2 = backslash (concat (root_dir, XEMACS_SETUP_DIR, "postinstall/",
+ − 79 fname, 0));
+ − 80 run (cmd, "/c", f2);
+ − 81 free (f2);
+ − 82 }
+ − 83 else
+ − 84 return;
+ − 85
+ − 86 rename (concat (root_dir, XEMACS_SETUP_DIR, "postinstall/", fname, 0),
+ − 87 concat (root_dir, XEMACS_SETUP_DIR, "postinstall/", fname, ".done", 0));
+ − 88 }
+ − 89
+ − 90 static char *shells [] = {
+ − 91 "/bin/sh.exe",
+ − 92 "/usr/bin/sh.exe",
+ − 93 "/bin/bash.exe",
+ − 94 "/usr/bin/bash.exe",
+ − 95 0
+ − 96 };
+ − 97
+ − 98 void
+ − 99 do_postinstall (HINSTANCE h)
+ − 100 {
+ − 101 int issystem;
+ − 102 next_dialog = 0;
+ − 103 char* cygroot = find_cygwin_root (&issystem);
+ − 104 int i;
452
+ − 105
+ − 106 sh = 0;
+ − 107
+ − 108 if (cygroot)
448
+ − 109 {
452
+ − 110 for (i=0; shells[i]; i++)
+ − 111 {
+ − 112 sh = backslash (concat (cygroot, shells[i], 0));
+ − 113 if (_access (sh, 0) == 0)
+ − 114 break;
+ − 115 free (sh);
+ − 116 sh = 0;
+ − 117 }
448
+ − 118 }
+ − 119
+ − 120 char old_path[_MAX_PATH];
+ − 121 GetEnvironmentVariable ("PATH", old_path, sizeof (old_path));
+ − 122 #if 0
+ − 123 SetEnvironmentVariable ("PATH",
+ − 124 backslash (concat (root_dir, "/bin;",
+ − 125 root_dir, "/usr/bin;",
+ − 126 old_path, 0)));
+ − 127
+ − 128 SetEnvironmentVariable ("CYGWINROOT", root_dir);
+ − 129 #endif
+ − 130 SetCurrentDirectory (root_dir);
+ − 131
+ − 132 verinfo.dwOSVersionInfoSize = sizeof (verinfo);
+ − 133 GetVersionEx (&verinfo);
+ − 134
+ − 135 switch (verinfo.dwPlatformId)
+ − 136 {
+ − 137 case VER_PLATFORM_WIN32_NT:
+ − 138 cmd = "cmd.exe";
+ − 139 break;
+ − 140 case VER_PLATFORM_WIN32_WINDOWS:
+ − 141 cmd = "command.com";
+ − 142 break;
+ − 143 default:
+ − 144 cmd = "command.com";
+ − 145 break;
+ − 146 }
+ − 147
+ − 148 find (concat (root_dir, XEMACS_SETUP_DIR, "postinstall", 0), each);
+ − 149 }