[project @ 2001-05-08 14:54:58 by rrt]
authorrrt <unknown>
Tue, 8 May 2001 14:54:58 +0000 (14:54 +0000)
committerrrt <unknown>
Tue, 8 May 2001 14:54:58 +0000 (14:54 +0000)
fixdll.pl renamed decyg.pl, for greater justice.
runexe.c added: it's a little Windows program which takes a command line and
runs it, without any connection to the parent process. This allows cygwin
binaries to be run against our patched cygwin1.dll (under a pseudonym),
without any connection being made if the parent process is also Cygwinised.

ghc/InstallShield/decyg.pl [new file with mode: 0644]
ghc/InstallShield/fixdll.pl [deleted file]
ghc/InstallShield/runexe.c [new file with mode: 0644]

diff --git a/ghc/InstallShield/decyg.pl b/ghc/InstallShield/decyg.pl
new file mode 100644 (file)
index 0000000..7bcfd7e
--- /dev/null
@@ -0,0 +1,21 @@
+#!/usr/bin/perl
+# Patch a DLL or EXE to change the name of the Cygwin DLL it uses or is, so that we can
+# include our own Cygwin DLL that doesn't interfere with the rest of the system, for great justice
+
+@ARGV = ('-') unless @ARGV;
+@FILES = @ARGV;
+while ($ARGV = shift) {
+  $out = $ARGV . ".new";
+  open(IN, $ARGV) or warn "Can't open $ARGV: $!\n";
+  open(OUT, ">$out") or warn "Can't open $out: $!\n";
+  binmode IN;
+  while (<IN>) {
+    s/cygwin1/aybabtu/g;
+    s/c\000y\000g\000w\000i\000n\0001/a\000y\000b\000a\000b\000t\000u/g;
+    print OUT;
+  }
+  close IN;
+  close OUT;
+  unlink $ARGV;
+  rename $out, $ARGV;
+}
diff --git a/ghc/InstallShield/fixdll.pl b/ghc/InstallShield/fixdll.pl
deleted file mode 100644 (file)
index 1d3449d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/perl -i.bak
-# Patch the cygwin dll to make a non-clashing version, for great justice
-
-while (<>) {
-  s/cygwin1/aybabtu/g;
-  s/c\000y\000g\000w\000i\000n\0001/a\000y\000b\000a\000b\000t\000u/g;
-  print;
-}
diff --git a/ghc/InstallShield/runexe.c b/ghc/InstallShield/runexe.c
new file mode 100644 (file)
index 0000000..c01f0b1
--- /dev/null
@@ -0,0 +1,24 @@
+#include <windows.h>
+
+const char *prog = "runexe";
+
+int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
+{
+  STARTUPINFO sInfo;
+  PROCESS_INFORMATION pInfo;
+
+  sInfo.cb              = sizeof(STARTUPINFO);
+  sInfo.lpReserved      = NULL;
+  sInfo.lpReserved2     = NULL;
+  sInfo.cbReserved2     = 0;
+  sInfo.lpDesktop       = NULL;
+  sInfo.lpTitle         = NULL;
+  sInfo.dwFlags         = 0;
+  
+  if (strlen(lpszCmdParam) == 0) {
+    printf("%s: no parameters given\n", prog);
+    exit(1);
+  }
+  CreateProcess(NULL, lpszCmdParam, NULL, NULL, FALSE, 0, NULL, NULL, &sInfo, &pInfo);
+  return 0;
+}