comparison netinstall/postinstall.cc @ 448:3078fd1074e8 r21-2-39

Import from CVS: tag r21-2-39
author cvs
date Mon, 13 Aug 2007 11:38:25 +0200
parents
children 3d3049ae1304
comparison
equal deleted inserted replaced
447:4fc5f13f3bd3 448:3078fd1074e8
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;
105 for (i=0; shells[i]; i++)
106 {
107 sh = backslash (concat (cygroot, shells[i], 0));
108 if (_access (sh, 0) == 0)
109 break;
110 free (sh);
111 sh = 0;
112 }
113
114 char old_path[_MAX_PATH];
115 GetEnvironmentVariable ("PATH", old_path, sizeof (old_path));
116 #if 0
117 SetEnvironmentVariable ("PATH",
118 backslash (concat (root_dir, "/bin;",
119 root_dir, "/usr/bin;",
120 old_path, 0)));
121
122 SetEnvironmentVariable ("CYGWINROOT", root_dir);
123 #endif
124 SetCurrentDirectory (root_dir);
125
126 verinfo.dwOSVersionInfoSize = sizeof (verinfo);
127 GetVersionEx (&verinfo);
128
129 switch (verinfo.dwPlatformId)
130 {
131 case VER_PLATFORM_WIN32_NT:
132 cmd = "cmd.exe";
133 break;
134 case VER_PLATFORM_WIN32_WINDOWS:
135 cmd = "command.com";
136 break;
137 default:
138 cmd = "command.com";
139 break;
140 }
141
142 find (concat (root_dir, XEMACS_SETUP_DIR, "postinstall", 0), each);
143 }