Reformatted.
[chise/xemacs-chise.git.1] / netinstall / postinstall.cc
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
106   sh = 0;
107
108   if (cygroot)
109     {
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         }
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 }