X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=netinstall%2Fpostinstall.cc;fp=netinstall%2Fpostinstall.cc;h=bf26f66dc714ee38b411bcf39758f963b4bbe96b;hp=0000000000000000000000000000000000000000;hb=1ecbe603154527afa87c21523aedd8e3bda77c2f;hpb=131844b7560952b4f8e1cb8628d9115e0f2f29d2 diff --git a/netinstall/postinstall.cc b/netinstall/postinstall.cc new file mode 100644 index 0000000..bf26f66 --- /dev/null +++ b/netinstall/postinstall.cc @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2000, Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * A copy of the GNU General Public License can be found at + * http://www.gnu.org/ + * + * Written by DJ Delorie + * + */ + +/* The purpose of this file is to run all the post-install scripts + in their various forms. */ + +#include "win32.h" + +#include +#include +#include +#ifndef WIN32_NATIVE +#include +#endif + +#include "state.h" +#include "dialog.h" +#include "find.h" +#include "concat.h" +#include "regedit.h" +#include "reginfo.h" +#include "resource.h" +#include "port.h" + +static char *sh = 0; +static char *cmd = 0; +static OSVERSIONINFO verinfo; + +static void +run (char *shscript, char *args, char *file) +{ + BOOL b; + char cmdline [_MAX_PATH]; + STARTUPINFO si; + PROCESS_INFORMATION pi; + + sprintf (cmdline, "%s %s %s", shscript, args, file); + memset (&pi, 0, sizeof (pi)); + memset (&si, 0, sizeof (si)); + si.cb = sizeof (si); + si.lpTitle = "XEmacs Setup Post-Install Script"; + si.dwFlags = STARTF_USEPOSITION; + + b = CreateProcess (0, cmdline, 0, 0, 0, + CREATE_NEW_CONSOLE, 0, root_dir, &si, &pi); + + if (b) + WaitForSingleObject (pi.hProcess, INFINITE); +} + +static void +each (char *fname, unsigned int size) +{ + char *ext = strrchr (fname, '.'); + if (!ext) + return; + + if (sh && strcmp (ext, ".sh") == 0) + { + char *f2 = concat (root_dir, XEMACS_SETUP_DIR, "postinstall/", fname, 0); + run (sh, "-c", f2); + free (f2); + } + else if (cmd && strcmp (ext, ".bat") == 0) + { + char *f2 = backslash (concat (root_dir, XEMACS_SETUP_DIR, "postinstall/", + fname, 0)); + run (cmd, "/c", f2); + free (f2); + } + else + return; + + rename (concat (root_dir, XEMACS_SETUP_DIR, "postinstall/", fname, 0), + concat (root_dir, XEMACS_SETUP_DIR, "postinstall/", fname, ".done", 0)); +} + +static char *shells [] = { + "/bin/sh.exe", + "/usr/bin/sh.exe", + "/bin/bash.exe", + "/usr/bin/bash.exe", + 0 +}; + +void +do_postinstall (HINSTANCE h) +{ + int issystem; + next_dialog = 0; + char* cygroot = find_cygwin_root (&issystem); + int i; + for (i=0; shells[i]; i++) + { + sh = backslash (concat (cygroot, shells[i], 0)); + if (_access (sh, 0) == 0) + break; + free (sh); + sh = 0; + } + + char old_path[_MAX_PATH]; + GetEnvironmentVariable ("PATH", old_path, sizeof (old_path)); +#if 0 + SetEnvironmentVariable ("PATH", + backslash (concat (root_dir, "/bin;", + root_dir, "/usr/bin;", + old_path, 0))); + + SetEnvironmentVariable ("CYGWINROOT", root_dir); +#endif + SetCurrentDirectory (root_dir); + + verinfo.dwOSVersionInfoSize = sizeof (verinfo); + GetVersionEx (&verinfo); + + switch (verinfo.dwPlatformId) + { + case VER_PLATFORM_WIN32_NT: + cmd = "cmd.exe"; + break; + case VER_PLATFORM_WIN32_WINDOWS: + cmd = "command.com"; + break; + default: + cmd = "command.com"; + break; + } + + find (concat (root_dir, XEMACS_SETUP_DIR, "postinstall", 0), each); +}