--- toast	2005/08/27 23:19:24	1.392
+++ toast	2005/08/29 04:50:38	1.393
@@ -2884,17 +2884,26 @@
     }
   }
 
-  my(@socc) = qw[gcc -fPIC -shared -Wall];
-  push(@socc, qw[-Werror]) if strictpreload;
-  my(@sol) = ();
-  push(@sol, qw[-ldl]) if $^O =~ /linux/i;
+  my($so, $do, $cc, $ld, $libs) =
+      ("so", ".o", "gcc -fPIC", "gcc -shared", "-ldl");
+  eval q{
+    use Config;
+    $so = $Config{"dlext"} or die;
+    $do = $Config{"_o"} or die;
+    $libs = "" unless $Config{"libs"} =~ /-ldl\b/;
+    $cc = "$Config{cc} $Config{cccdlflags}";
+    $ld = "$Config{ld} $Config{lddlflags}";
+    $cc .= " -Wall -Werror" if $Config{ccname} eq "gcc" && strictpreload;
+  };
 
   writefile(path($helperdir, "dummy.c"), "void ____toast_dummy_4u38291(){}\n");
   writefile(path($helperdir, "rewrite.c"), $code);
 
-  return path($helperdir, "rewrite.so")
-      if optcdrun($helperdir, @socc, qw[dummy.c -o rewrite.so])
-      && optcdrun($helperdir, @socc, qw[rewrite.c -o rewrite.so.helper], @sol);
+  return path($helperdir, "rewrite.$so")
+      if optcdrun($helperdir, "$cc -c dummy.c -o dummy$do")
+      && optcdrun($helperdir, "$ld dummy$do -o rewrite.$so")
+      && optcdrun($helperdir, "$cc -c rewrite.c -o rewrite$do")
+      && optcdrun($helperdir, "$ld rewrite$do -o rewrite.$so.helper $libs");
 
   error("unable to compile with strictpreload enabled") if strictpreload;
   explain("unable to compile; strictpreload disabled, continuing");