[project @ 1998-08-14 11:47:29 by sof]
[ghc-hetmet.git] / ghc / driver / ghc.lprl
index 2afd307..3a1e23c 100644 (file)
@@ -704,6 +704,17 @@ sub setupOptimiseFlags {
 #        '-fsimpl-uf-use-threshold0',
 #        '-fessential-unfoldings-only',
 
+         #
+         # The presence of -fclone-binds is *temporary* to work around
+          # the fact that the desugarer in 3.0{2.3} does generate
+         # bindings with identical ids, and the type checker doesn't perform
+         # properly cloned type substitutions. Instead, we make sure that all 
+         # binders are cloned first time through the simplifier.
+          #
+         # Will be properly fixed in the `new compiler` I hear, at which point
+         # the cloning can be turned off here.
+          '-fclone-binds',
+
          $Oopt_MaxSimplifierIterations,
          $Oopt_ShowSimplifierProgress,
          ']',
@@ -739,6 +750,9 @@ sub setupOptimiseFlags {
 #        '-fessential-unfoldings-only',
 #        '-fsimpl-uf-use-threshold0',
 
+         # See remark re: cloning in defn of minusnotO
+         '-fclone-binds',
+
          '-fmax-simplifier-iterations1',
          $Oopt_PedanticBottoms,
          ']',
@@ -1941,7 +1955,25 @@ sub runHsc {
     }
 
     local($to_do);
-    $to_do = "$HsC @HsP_flags ,$hscpp_hsc $dump @HsC_flags $CoreLint $StgLint $Verbose $output +RTS @HsC_rts_flags";
+    # Win32 only: If the command processor used by system()
+    # exec()s the application as an ordinary Win32 executable,
+    # we're in trouble here, since the command line is likely
+    # to be > 255 chars long. To work around this situation,
+    # $HsC also understands `at-files',  i.e., `@file' on the
+    # command line will cause $HsC to add the contents of `file'
+    # to the command line.
+    #
+    #  [ Note: support for `at-files' is not compiled in by default ]
+    $cmd_line_opts_via_at_file=0;
+    if ($cmd_line_opts_via_at_file) {
+      local($to_do_opts) = "$Tmp_prefix.opts";
+      open(OPTS, "> $Tmp_prefix.opts") || &tidy_up_and_die(1,"Can't open $Tmp_prefix.opts\n");
+      print OPTS "$dump @HsC_flags $CoreLint $StgLint $Verbose";
+      close(OPTS);
+      $to_do = "$HsC @HsP_flags ,$hscpp_hsc \@$Tmp_prefix.opts $output +RTS @HsC_rts_flags";
+    } else {
+      $to_do = "$HsC @HsP_flags ,$hscpp_hsc $dump @HsC_flags $CoreLint $StgLint $Verbose $output +RTS @HsC_rts_flags";
+    }
     &run_something($to_do, 'Haskell compiler');
 
     # finish business w/ nofibbish time/bytes-alloc stats
@@ -2056,7 +2088,6 @@ EOINCL
     # heave in the consistency info
     print TMP "static char ghc_cc_ID[] = \"\@(#)cc $ifile\t$Cc_major_version.$Cc_minor_version,$Cc_consist_options\";\n";
 
-    # and #include the real source
     print TMP "#include \"$hsc_out\"\n";
     close(TMP) || &tidy_up_and_die(1,"Failed writing to $cc_help\n");
 
@@ -2248,7 +2279,6 @@ sub run_something {
         if ($Using_dump_file) {
            print STDERR "Compilation Errors dumped in $Specific_dump_file\n";
        }
-
        &tidy_up_and_die($return_val, '');
     }
     $Using_dump_file = 0;
@@ -2437,19 +2467,23 @@ sub add_Hsc_flags {
 sub add_syslib {
     local($syslib) = @_;
     
-    unshift(@SysImport_dir,
-           $INSTALLING ? "$InstLibDirGhc/imports/$syslib"
-                         : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/$syslib");
-
-    push(@SysLibrary_dir,
-        $INSTALLING ? ("$InstLibDirGhc")
-                       : ("$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/$syslib",
-                         "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/$syslib/cbits"));
-
+    # The Win32 lib sources live in hslibs/
+    if ( $syslib eq 'win32' && ! $INSTALLING ) {
+         unshift(@SysImport_dir, "$TopPwd/hslibs/$syslib/src");
+         push(@SysLibrary_dir, "$TopPwd/hslibs/$syslib/src");
+    } else {
+       unshift(@SysImport_dir,
+              $INSTALLING ? "$InstLibDirGhc/imports/$syslib"
+                          : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/$syslib");
+
+       push(@SysLibrary_dir,
+              $INSTALLING ? ("$InstLibDirGhc")
+                           : ("$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/$syslib",
+                             "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/$syslib/cbits"));
+    }
     push(@SysLibrary, "-lHS$syslib");
     push(@SysLibrary, "-lHS${syslib}_cbits")
-          unless $syslib eq 'contrib' || $syslib eq 'exts' || $syslib eq 'concurrent';
-         #HACK! they have no cbits
+          unless $syslib =~ /^(contrib|exts|concurrent|win32)$/; #HACK! have no cbits
 }
 \end{code}
 
@@ -2759,9 +2793,9 @@ arg: while($_ = $Args[0]) {
 
     /^-concurrent$/ && do { $CONCURing = 'c'; &add_syslib('concurrent'); next arg; }; 
                          # concurrent Haskell; implies -syslib conc
-    /^-gransim$/    && do { $GRANing   = 'g'; next arg; }; # GranSim
+    /^-gransim$/    && do { $GRANing   = 'g'; &add_syslib('concurrent'); next arg; }; # GranSim
     /^-ticky$/     && do { $TICKYing  = 't'; next arg; }; # ticky-ticky
-    /^-parallel$/   && do { $PARing    = 'p'; next arg; }; # parallel Haskell
+    /^-parallel$/   && do { $PARing    = 'p'; &add_syslib('concurrent'); next arg; }; # parallel Haskell
 
     #-------------- "user ways" --------------------------------------------
 
@@ -2798,7 +2832,7 @@ arg: while($_ = $Args[0]) {
 
     /^-syslib(.*)/  && do { local($syslib) = &grab_arg_arg(*Args,'-syslib',$1);
                            print STDERR "$Pgm: no such system library (-syslib): $syslib\n",
-                             $Status++ unless $syslib =~ /^(exts|misc|posix)$/;
+                             $Status++ unless $syslib =~ /^(exts|misc|posix|concurrent|win32)$/;
 
                            #
                            # The posix library is a `special' in that it relies on
@@ -2811,9 +2845,13 @@ arg: while($_ = $Args[0]) {
                            if ( $syslib eq 'posix' ) {
                                &add_syslib('misc');
                            } elsif ( $syslib eq 'misc' && 
-                                     $TargetName =~ /-solaris2$/ ) {
+                                     $TargetPlatform =~ /-solaris2$/ ) {
                                # needed for Berkeley socket/nwork stuff.
-                               push(@SysLibrary, '-lnsl');
+                               push(@SysLibrary, '-lnsl -lsocket');
+                           } elsif ( $syslib eq 'win32' && 
+                                     $TargetPlatform =~ /-cygwin32$/ ) {
+                               # need to get at UI/Graphics functionality.
+                               push(@SysLibrary, '-luser32 -lgdi32');
                            }
                            next arg; };
 
@@ -2895,6 +2933,8 @@ arg: while($_ = $Args[0]) {
                        }
                        next arg; };
 
+    /^-fallow-overlapping-instances$/ && do { push(@HsC_flags, $_); 
+                                             next arg; };
     /^-fglasgow-exts$/
                && do { push(@HsC_flags, $_);
                        push(@HsP_flags, '-N');
@@ -2957,6 +2997,9 @@ arg: while($_ = $Args[0]) {
     /^-funfolding-.*$/
                    && do { push(@HsC_flags, $_); next arg };
 
+    /^-funfold-casms-in-hi-file$/
+                   && do { push(@HsC_flags, $_); next arg };
+
     /^(-fmax-simplifier-iterations)(.*)$/
                    && do { $Oopt_MaxSimplifierIterations = $1 . &grab_arg_arg(*Args,$1, $2);
                            next arg; };