]> cygwin.com Git - cygwin-apps/setup.git/commitdiff
2001-01-04 Robert Collins <rbtcollins@hotmail.com>
authorRobert Collins <rbtcollins@hotmail.com>
Thu, 3 Jan 2002 11:54:46 +0000 (11:54 +0000)
committerRobert Collins <rbtcollins@hotmail.com>
Thu, 3 Jan 2002 11:54:46 +0000 (11:54 +0000)
        * script.cc (run_script): Change cygpath:// to cygfile://.
        * install.cc (do_install_thread): Fix off-by-one errors.

ChangeLog
install.cc
script.cc [new file with mode: 0644]
script.h [new file with mode: 0644]

index 9d04538b873237a871ce7301edd77d03ea3196c8..bbdec8a526bdae1a91802276654f3f4f39f6fb47 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2001-01-04  Robert Collins  <rbtcollins@hotmail.com>
+
+       * script.cc (run_script): Change cygpath:// to cygfile://.
+       * install.cc (do_install_thread): Fix off-by-one errors.
+
 2001-01-04  Robert Collins  <rbtcollins@hotmail.com>
 
        * package_db.cc (packagedb::flush): Fix an off-by-one error.
index fa40f1f9a9056a5a63a333d8e3ceb985d674a863..1dbdcaa3e87f109cd9081a343c62c78964aeaf83 100644 (file)
@@ -343,7 +343,7 @@ do_install_thread (HINSTANCE h, HWND owner)
   init_run_script ();
 
   packagedb db;
-  for (size_t n = 1; n < db.packages.number (); n++)
+  for (size_t n = 1; n <= db.packages.number (); n++)
     {
       packagemeta & pkg = *db.packages[n];
 
@@ -356,7 +356,7 @@ do_install_thread (HINSTANCE h, HWND owner)
        }
     }
 
-  for (size_t n = 1; n < db.packages.number (); n++)
+  for (size_t n = 1; n <= db.packages.number (); n++)
     {
       packagemeta & pkg = *db.packages[n];
       if (pkg.installed && (!pkg.desired || pkg.desired != pkg.installed))
diff --git a/script.cc b/script.cc
new file mode 100644 (file)
index 0000000..fcfb930
--- /dev/null
+++ b/script.cc
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2001, Jan Nieuwenhuizen.
+ *
+ *     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 <dj@cygnus.com>
+ *            Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ */
+
+/* The purpose of this file is to provide functions for the invocation
+   of install scripts. */
+
+#if 0
+static const char *cvsid =
+  "\n%%% $Id$\n";
+#endif
+
+#include "win32.h"
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include "log.h"
+#include "concat.h"
+#include "mount.h"
+#include "io_stream.h"
+
+static char *sh = 0;
+static const char *cmd = 0;
+static OSVERSIONINFO verinfo;
+
+static const char *shells[] = {
+  "/bin/sh.exe",
+  "/usr/bin/sh.exe",
+  "/bin/bash.exe",
+  "/usr/bin/bash.exe",
+  0
+};
+
+void
+init_run_script ()
+{
+  for (int i = 0; shells[i]; i++)
+    {
+      sh = backslash (cygpath (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));
+  SetEnvironmentVariable ("PATH",
+                         backslash (cygpath ("/bin;",
+                                             get_root_dir (), "/usr/bin;",
+                                             old_path, 0)));
+
+  SetEnvironmentVariable ("CYGWINROOT", get_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;
+    }
+}
+
+static void
+run (const char *sh, const char *args, const char *file)
+{
+  BOOL b;
+  char cmdline[_MAX_PATH];
+  STARTUPINFO si;
+  PROCESS_INFORMATION pi;
+
+  sprintf (cmdline, "%s %s %s", sh, args, file);
+  memset (&pi, 0, sizeof (pi));
+  memset (&si, 0, sizeof (si));
+  si.cb = sizeof (si);
+  si.lpTitle = (char *) "Cygwin Setup Post-Install Script";
+  si.dwFlags = STARTF_USEPOSITION;
+
+  b = CreateProcess (0, cmdline, 0, 0, 0,
+                    CREATE_NEW_CONSOLE, 0, get_root_dir (), &si, &pi);
+
+  if (b)
+    WaitForSingleObject (pi.hProcess, INFINITE);
+}
+
+void
+run_script (char const *dir, char const *fname)
+{
+  char *ext = strrchr (fname, '.');
+  if (!ext)
+    return;
+
+  if (sh && strcmp (ext, ".sh") == 0)
+    {
+      char *f2 = concat (dir, fname, 0);
+      log (0, "running: %s -c %s", sh, f2);
+      run (sh, "-c", f2);
+      free (f2);
+    }
+  else if (cmd && strcmp (ext, ".bat") == 0)
+    {
+      char *f2 = backslash (cygpath (dir, fname, 0));
+      log (0, "running: %s /c %s", cmd, f2);
+      run (cmd, "/c", f2);
+      free (f2);
+    }
+  else
+    return;
+
+  /* if file exists then delete it otherwise just ignore no file error */
+  io_stream::remove (concat ("cygfile://", dir, fname, ".done", 0));
+
+  io_stream::move (concat ("cygfile://", dir, fname, 0),
+                  concat ("cygfile://", dir, fname, ".done", 0));
+}
+
+void
+try_run_script (char const *dir, char const *fname)
+{
+  if (io_stream::exists (concat ("cygfile://", dir, fname, ".sh", 0)))
+    run_script (dir, concat (fname, ".sh", 0));
+  if (io_stream::exists (concat ("cygfile://", dir, fname, ".bat", 0)))
+    run_script (dir, concat (fname, ".bat", 0));
+}
+
diff --git a/script.h b/script.h
new file mode 100644 (file)
index 0000000..46f64fc
--- /dev/null
+++ b/script.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2001, Jan Nieuwenhuizen.
+ *
+ *     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 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ */
+#ifndef SCRIPT_H
+#define SCRIPT_H
+
+/* Run the script fname, found in dir.  If fname has suffix .sh, and
+   we have a Bourne shell, execute it using sh.  Otherwise, if fname
+   has suffix .bat, execute using cmd */
+   
+void run_script (char const *dir, char const *fname);
+
+/* Initialisation stuff for run_script: sh, cmd, CYGWINROOT and PATH */
+void init_run_script ();
+
+/* Run the scripts fname.sh and fname.bat, found in dir. */
+void try_run_script (char const *dir, char const *fname);
+
+#endif /* SCRIPT_H */
This page took 0.040074 seconds and 5 git commands to generate.