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 }
|