X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fdriver%2Fghc.lprl;h=d45062b3c9af33c8e1767b68a2631331e51ba57e;hb=83697981d1b7c752e51265b0642807fd92e064b7;hp=f2494f422d5e2d89ebc701eee62035bfcb946622;hpb=d4df25a68c0ef63cbdaab2c33dbf6a621a3182b4;p=ghc-hetmet.git diff --git a/ghc/driver/ghc.lprl b/ghc/driver/ghc.lprl index f2494f4..d45062b 100644 --- a/ghc/driver/ghc.lprl +++ b/ghc/driver/ghc.lprl @@ -99,7 +99,7 @@ INSTALLING HOSTPLATFORM TARGETPLATFORM -PROJECTNAME PROJECTVERSION PROJECTPATCHLEVEL +ProjectName ProjectVersion ProjectVersionInt ProjectPatchLevel TOP_PWD @@ -138,7 +138,6 @@ $InstLibDirGhc = "${libdir}"; # $InstLibExecDirGhc = "${libexecdir}"; $InstDataDirGhc = "${datadir}"; -$InstSysLibDir = ( $INSTALLING ) ? "${InstLibDirGhc}/hslibs" : "$TopPwd/hslibs"; $Status = 0; # just used for exit() status $Verbose = ''; @@ -267,7 +266,30 @@ $Lnkr = ''; # "linker" is normally GCC $Nm = ($TargetPlatform =~ /^alpha-/) ? 'nm -B' : 'nm'; \end{code} +Warning packages that are controlled by -W and -Wall. The 'standard' +warnings that you get all the time are + + -fwarn-overlapping-patterns + -fwarn-missing-methods + -fwarn-duplicate-exports + +these are turned off by -Wnot. + +\begin{code} +@StandardWarnings = ('-fwarn-overlapping-patterns', + '-fwarn-missing-methods', + '-fwarn-duplicate-exports'); +@MinusWOpts = (@StandardWarnings, + '-fwarn-incomplete-patterns', + '-fwarn-unused-binds', + '-fwarn-unused-imports'); +@MinusWallOpts = (@MinusWOpts, + '-fwarn-unused-matches', + '-fwarn-name-shadowing'); +\end{code} + What options \tr{-user-setup-a} turn into (user-defined ``packages'' + of options). Note that a particular user-setup implies a particular Prelude ({\em including} its interface file(s)). \begin{code} @@ -349,18 +371,15 @@ require special handling. @Import_dir = ('.'); #-i things @Include_dir = ('.'); #-I things; other default(s) stuck on AFTER option processing -# where to look for interface files (system hi's, i.e., prelude and hslibs) +# where to look for interface files (system hi's, i.e., prelude and syslibs) @SysImport_dir = ( $INSTALLING ) - ? ( "$InstLibDirGhc/imports" ) - : ( "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/required" - , "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/ghc" - , "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/glaExts" - , "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/concurrent" ); + ? ( "$InstLibDirGhc/imports/std" ) + : ( "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/std" ); # We need to look in ghc/ and glaExts/ when searching for implicitly needed .hi files, but # we should really *not* look there for explicitly imported modules. -$GhcVersionInfo = int($PROJECTVERSION * 100 + .5); # i.e., round (X.Y * 100) +$GhcVersionInfo = $ProjectVersionInt; $Haskell1Version = 4; # i.e., Haskell 1.4 @Cpp_define = (); @@ -371,8 +390,8 @@ $Haskell1Version = 4; # i.e., Haskell 1.4 ? $InstLibDirGhc : ( "$TopPwd/$CURRENT_DIR/$GHC_RUNTIME_DIR" , "$TopPwd/$CURRENT_DIR/$GHC_RUNTIME_DIR/gmp" - , "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR" - , "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/cbits" + , "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/std" + , "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/std/cbits" ) ); @SysLibrary = (); # will be built up as we go along @@ -546,37 +565,6 @@ $Cc_consist_options = ''; # we record, in this order: Now slurp through the arguments. \begin{code} -#---------- user defined prelude --------------------------------------- - -if (grep(/^-user-prelude$/, @ARGV)) { - - # If ARGV contains -user-prelude we are compiling a piece of - # prelude for the user, probably with additional specialise pragmas - - # We strip out the -O -f and -user-prelude flags provided on - # the command line and add the ones used to compile the prelude - # ToDo: get these options from a common definition in mkworld - - # We also enable any options forced through with -user-prelude-force - - # Hey, Check out this grep statement ;-) (PS) - - @ARGV = grep((!/^-O/ && !/^-f/ && !/^-user-prelude$/) || s/^-user-prelude-force//, - @ARGV); - - unshift(@ARGV, - '-fcompiling-ghc-internals=???', # ToDo!!!! - '-O', - '-fshow-pragma-name-errs', - '-fshow-import-specs', - '-fglasgow-exts', - '-genSPECS', - '-DUSE_FOLDR_BUILD', - '-dcore-lint'); - - print STDERR "ghc: -user-prelude options:\n", "@ARGV", "\n"; -} - &initDriverGlobals(); &splitCmdLine(@ARGV); # Run through the cmd-line first time. @@ -589,6 +577,10 @@ if ( $Status == 0 && $Only_generate_deps ) { push (@MkDependHS_flags, "-o$Osuffix") if $Osuffix; push (@MkDependHS_flags, "-s$BuildTag") if $BuildTag; push (@MkDependHS_flags, "-D__HASKELL1__=$Haskell1Version"); + # They're not (currently) needed, but we need to quote any -#include options + foreach (@Cmd_opts) { + s/-#include.*$/'$&'/g; + }; local($to_do) = "$MkDependHS @MkDependHS_flags -- @Cmd_opts -- @Input_file" ; &run_something($to_do, 'Haskell dependencies'); exit $Status; @@ -693,11 +685,12 @@ sub setupOptimiseFlags { @HsC_minusNoO_flags = ( '-fsimplify', - '\(', + '[', $Oopt_FB_Support, '-ffloat-lets-exposing-whnf', '-ffloat-primops-ok', '-fcase-of-case', + '-fdo-case-elim', # '-fdo-lambda-eta-expansion', # too complicated '-freuse-con', # '-flet-to-case', # no strictness analysis, so... @@ -715,7 +708,7 @@ sub setupOptimiseFlags { $Oopt_UnfoldingUseThreshold, $Oopt_MaxSimplifierIterations, $Oopt_ShowSimplifierProgress, - '\)', + ']', $Oopt_AddAutoSccs, # '-ffull-laziness', # removed 95/04 WDP following Andr\'e's lead @@ -728,7 +721,7 @@ sub setupOptimiseFlags { # initial simplify: mk specialiser happy: minimum effort please '-fsimplify', - '\(', + '[', $Oopt_FB_Support, '-fkeep-spec-pragma-ids', # required before specialisation @@ -750,7 +743,7 @@ sub setupOptimiseFlags { '-fmax-simplifier-iterations1', $Oopt_PedanticBottoms, - '\)', + ']', ($Oopt_DoSpecialise) ? ( '-fspecialise-overloaded', @@ -759,7 +752,7 @@ sub setupOptimiseFlags { ) : (), '-fsimplify', # need dependency anal after specialiser ... - '\(', # need tossing before calc-inlinings ... + '[', # need tossing before calc-inlinings ... $Oopt_FB_Support, '-ffloat-lets-exposing-whnf', '-ffloat-primops-ok', @@ -774,7 +767,7 @@ sub setupOptimiseFlags { $Oopt_UnfoldingUseThreshold, $Oopt_MaxSimplifierIterations, $Oopt_ShowSimplifierProgress, - '\)', + ']', #LATER: '-fcalc-inlinings1', -- pointless for 2.01 @@ -782,7 +775,7 @@ sub setupOptimiseFlags { # '-ffoldr-build-ww-anal', # '-ffoldr-build-worker-wrapper', # '-fsimplify', -# '\(', +# '[', # $Oopt_FB_Support, # '-ffloat-lets-exposing-whnf', # '-ffloat-primops-ok', @@ -797,7 +790,7 @@ sub setupOptimiseFlags { # $Oopt_UnfoldingUseThreshold, # $Oopt_MaxSimplifierIterations, # $Oopt_ShowSimplifierProgress, -# '\)', +# ']', # ) : (), # this pass-ordering sequence was agreed by Simon and Andr\'e @@ -808,7 +801,7 @@ sub setupOptimiseFlags { '-ffoldr-build-on', # desugar list comprehensions for foldr/build '-fsimplify', - '\(', + '[', '-fignore-inline-pragma', # **** NB! '-fdo-foldr-build', # NB $Oopt_FB_Support, @@ -825,13 +818,13 @@ sub setupOptimiseFlags { $Oopt_UnfoldingUseThreshold, $Oopt_MaxSimplifierIterations, $Oopt_ShowSimplifierProgress, - '\)', + ']', ) : (), '-ffloat-inwards', '-fsimplify', - '\(', + '[', $Oopt_FB_Support, '-ffloat-lets-exposing-whnf', '-ffloat-primops-ok', @@ -850,12 +843,12 @@ sub setupOptimiseFlags { $Oopt_UnfoldingUseThreshold, $Oopt_MaxSimplifierIterations, $Oopt_ShowSimplifierProgress, - '\)', + ']', '-fstrictness', '-fsimplify', - '\(', + '[', $Oopt_FB_Support, '-ffloat-lets-exposing-whnf', '-ffloat-primops-ok', @@ -871,7 +864,7 @@ sub setupOptimiseFlags { $Oopt_UnfoldingUseThreshold, $Oopt_MaxSimplifierIterations, $Oopt_ShowSimplifierProgress, - '\)', + ']', '-ffloat-inwards', @@ -880,12 +873,12 @@ sub setupOptimiseFlags { # ( ($OptLevel != 2) # ? '' -# : "-fliberate-case -fsimplify \\( $Oopt_FB_Support -ffloat-lets-exposing-whnf -ffloat-primops-ok -fcase-of-case -fdo-case-elim -fcase-merge -fdo-eta-reduction -fdo-lambda-eta-expansion -freuse-con -flet-to-case $Oopt_PedanticBottoms $Oopt_MonadEtaExpansion $Oopt_UnfoldingUseThreshold $Oopt_MaxSimplifierIterations $Oopt_ShowSimplifierProgress \\)" ), +# : "-fliberate-case -fsimplify [ $Oopt_FB_Support -ffloat-lets-exposing-whnf -ffloat-primops-ok -fcase-of-case -fdo-case-elim -fcase-merge -fdo-eta-reduction -fdo-lambda-eta-expansion -freuse-con -flet-to-case $Oopt_PedanticBottoms $Oopt_MonadEtaExpansion $Oopt_UnfoldingUseThreshold $Oopt_MaxSimplifierIterations $Oopt_ShowSimplifierProgress ]" ), # Final clean-up simplification: '-fsimplify', - '\(', + '[', $Oopt_FB_Support, '-ffloat-lets-exposing-whnf', '-ffloat-primops-ok', @@ -905,7 +898,7 @@ sub setupOptimiseFlags { $Oopt_UnfoldingUseThreshold, $Oopt_MaxSimplifierIterations, $Oopt_ShowSimplifierProgress, - '\)', + ']', # '-fstatic-args', @@ -988,6 +981,9 @@ sub setupBuildFlags { $Oopt_FinalStgProfilingMassage = '-fmassage-stg-for-profiling'; + # Ignore user sccs when auto annotating, but warn when doing so. + $PROFignore_scc = '-W' if $PROFauto; + push(@HsP_flags, (($PROFignore_scc) ? $PROFignore_scc : '-S')); if ( $SplitObjFiles ) { @@ -1175,6 +1171,23 @@ sub setupMachOpts { } # end of setupMachOpts \end{code} +%************************************************************************ +%* * +\subsection{Set up for warnings} +%* * +%************************************************************************ + +Several warnings are turned on by default. These are supposed to be +the 'I'm pretty sure you've made a mistake here' kind of warnings. +The rest are turned on by the -W and -Wall options, or individually +via their -fwarn and -fno-warn flags. + +\begin{code} +sub setupWarningFlags { +&add_Hsc_flags( @StandardWarnings ); +} +\end{code} + Same unshifting magic, but for special linker flags. The configure script determines whether the object file symbol tables @@ -1194,7 +1207,6 @@ sub setupLinkOpts { ,'-u', "${uscore}PrelBase_CZh_static_info" ,'-u', "${uscore}PrelBase_False_inregs_info" ,'-u', "${uscore}PrelBase_True_inregs_info" - ,'-u', "${uscore}STBase_SZh_static_info" ,'-u', "${uscore}DEBUG_REGS" )); if ($TargetPlatform =~ /^powerpc-|^rs6000-/) { @@ -1325,7 +1337,7 @@ if ($#Input_file < 0 && $#Link_file < 0) { Tell the world who we are, if they asked. \begin{code} -print STDERR "${PROJECTNAME}, version ${PROJECTVERSION}, patchlevel ${PROJECTPATCHLEVEL}\n" +print STDERR "${ProjectName}, version ${ProjectVersion}, patchlevel ${ProjectPatchLevel}\n" if $Verbose; \end{code} @@ -1368,8 +1380,14 @@ if ($Do_lnkr) { # for a linker, use an explicitly given one, or the going C compiler ... local($lnkr) = ( $Lnkr ) ? $Lnkr : $CcRegd; + if ( ($Specific_output_file eq '') && + ($TargetPlatform eq 'i386-unknown-cygwin32') ) { + $Specific_output_file = 'main.exe'; + print STDERR "Output file not specified, defaulting to \"main.exe\"\n"; + } + local($output) = ($Specific_output_file ne '') ? "-o $Specific_output_file" : ''; - @Files_to_tidy = ($Specific_output_file ne '') ? $Specific_output_file : 'a.out'; + @Files_to_tidy = ($Specific_output_file ne '') ? $Specific_output_file : 'a.out'; local($to_do) = "$lnkr $Verbose @Ld_flags $output @Link_file $TopClosureFile $libdirs @UserLibrary @SysLibrary"; &run_something($to_do, 'Linker'); @@ -1416,7 +1434,7 @@ eval 'exec perl -S \$0 \${1+"\$@"}' if \$running_under_some_shell; # =!=!=!=!=!=!=!=!=!=!=! # This script is automatically generated: DO NOT EDIT!!! -# Generated by Glasgow Haskell, version ${PROJECTVERSION} ${PROJECTPATCHLEVEL} +# Generated by Glasgow Haskell, version ${ProjectVersion} ${ProjectPatchLevel} # \$pvm_executable = '$pvm_executable'; \$pvm_executable_base = '$pvm_executable_base'; @@ -1576,6 +1594,7 @@ Again, we'll do the post-recompilation-checker parts of this later. &setupOptimiseFlags(); &setupMachOpts(); &setupIncPaths(); + &setupWarningFlags(); &setupHeapStackSize(); # @@ -1681,10 +1700,15 @@ Finally, decide what to queue up for linker input. #ToDo: local($or_isuf) = ($Isuffix eq '') ? '' : "|$Isuffix"; - if ( $ifile !~ /\.(lhs|hs|hc|c|s)$/ && $ifile !~ /_hc$/ ) { - print STDERR "$Pgm: don't recognise suffix on `$ifile'; passing it through to linker\n" - if $ifile !~ /\.a$/; + if ( $ifile !~ /\.(lhs|hs|hc|c|s|a)$/ && $ifile !~ /_hc$/ ) { + # There's sometimes confusion regarding .hi files; users + # supplying them on the command line. + if ( $ifile =~ /\.hi$/ ) { + print STDERR "$Pgm: warning: found `$ifile' on command line; interface files should not be supplied here - ignoring it.\n"; + } else { + print STDERR "$Pgm: don't recognise suffix on `$ifile'; passing it through to linker\n"; + } # oops; we tentatively pushed the wrong thing; fix & do the right thing pop(@Link_file); push(@Link_file, $ifile); } @@ -1706,10 +1730,10 @@ sub runLit2pgm { local($to_do) = ""; # Only add #line pragma if we're going to need it. - $to_do = "echo '#line 1 \"$in_lit2pgm\"' > $lit2pgm_hscpp && " if ($HsCpp ne $Cat); + $to_do = "echo '#line 1 \"$in_lit2pgm\"' > $lit2pgm_hscpp && " if ($Cpp_flag_set); $to_do .= "$Unlit @Unlit_flags $in_lit2pgm - >> $lit2pgm_hscpp"; - @Files_to_tidy = ( $lit2pgm_hscpp ); + push(@Files_to_tidy, $lit2pgm_hscpp ); &run_something($to_do, 'literate pre-processor'); } @@ -1731,12 +1755,12 @@ sub runHscpp { if ($HsCpp eq $Cat) { $to_do .= "$HsCpp $lit2pgm_hscpp >> $hscpp_hsc"; - @Files_to_tidy = ( $hscpp_hsc ); + push(@Files_to_tidy, $hscpp_hsc ); &run_something($to_do, 'Ineffective C pre-processor'); } else { local($includes) = '-I' . join(' -I',@Include_dir); $to_do .= "$HsCpp $Verbose $genSPECS_flag @HsCpp_flags -D__HASKELL1__=$Haskell1Version -D__GLASGOW_HASKELL__=$GhcVersionInfo $includes $lit2pgm_hscpp >> $hscpp_hsc"; - @Files_to_tidy = ( $hscpp_hsc ); + push(@Files_to_tidy, $hscpp_hsc ); &run_something($to_do, 'Haskellised C pre-processor'); } @@ -1882,7 +1906,7 @@ sub runHsc { # here, we may produce .hc/.s and/or .hi files local($output) = ''; - @Files_to_tidy = (); + #@Files_to_tidy = (); if ( $going_interactive ) { # don't need .hi unless going to show it on stdout: @@ -1893,7 +1917,7 @@ sub runHsc { # set up for producing output/.hi; note that flag twiddling # may mean that nothing will actually be produced: $output = "$ProduceHi$hsc_hi $HscOut$hsc_out"; - @Files_to_tidy = ( $hsc_hi, $hsc_out ); + push(@Files_to_tidy, $hsc_hi, $hsc_out ); # if we're compiling foo.hs, we want the GC stats to end up in foo.stat if ( $CollectingGCstats ) { @@ -1942,18 +1966,18 @@ sub makeHiMap { foreach $d ( @Import_dir ) { if ($HiIncludeString) { - $HiIncludeString = "$HiIncludeString:${d}%.${HiSuffix}"; + $HiIncludeString = "$HiIncludeString:${d}/%.${HiSuffix}"; } else { - $HiIncludeString = "$d%.${HiSuffix}"; + $HiIncludeString = "$d/%.${HiSuffix}"; } } foreach $d ( @SysImport_dir ) { if ($HiIncludeString) { - $HiIncludeString = "$HiIncludeString:${d}%.${HiSuffix_prelude}"; + $HiIncludeString = "$HiIncludeString:${d}/%.${HiSuffix_prelude}"; } else { - $HiIncludeString = "${d}%.${HiSuffix_prelude}"; + $HiIncludeString = "${d}/%.${HiSuffix_prelude}"; } } @@ -2043,7 +2067,7 @@ EOINCL if ( $Only_preprocess_hc ) { # HACK ALERT! $to_do =~ s/ -S\b//g; } - @Files_to_tidy = ( $cc_help, $cc_help_s, $s_output ); + push(@Files_to_tidy, $cc_help, $cc_help_s, $s_output ); $PostprocessCcOutput = 1 if ! $Only_preprocess_hc; # hack, dear hack... &run_something($to_do, 'C compiler'); $PostprocessCcOutput = 0; @@ -2123,7 +2147,7 @@ sub runAs { if ( ! $SplitObjFiles ) { local($to_do) = "$asmblr -o $as_out -c @As_flags $cc_as"; - @Files_to_tidy = ( $as_out ); + push(@Files_to_tidy, $as_out ); &run_something($to_do, 'Unix assembler'); } else { # more complicated split-ification... @@ -2143,7 +2167,7 @@ sub runAs { for ($f = 1; $f <= $NoOfSplitFiles; $f++ ) { local($split_out) = &odir_ify("${ifile_root}__${f}",'o'); local($to_do) = "$asmblr -o $split_out -c @As_flags ${Tmp_prefix}__${f}.s"; - @Files_to_tidy = ( $split_out ); + push(@Files_to_tidy, $split_out ); &run_something($to_do, 'Unix assembler'); } @@ -2262,7 +2286,9 @@ sub process_ghc_timings { $GCs = $1 if /^\s*([0-9,]+) garbage collections? performed/; - if ( /^\s*INIT\s+time\s*(\d+\.\d\d)s\s*\(\s*(\d+\.\d\d)s elapsed\)/ ) { + # The presence of -? in the following pattern is only there to + # accommodate 0.29 && <= 2.05 RTS' + if ( /^\s*INIT\s+time\s*(\d+\.\d\d)s\s*\(\s*-?(\d+\.\d\d)s elapsed\)/ ) { $InitTime = $1; $InitElapsed = $2; } elsif ( /^\s*MUT\s+time\s*(\d+\.\d\d)s\s*\(\s*(\d+\.\d\d)s elapsed\)/ ) { $MutTime = $1; $MutElapsed = $2; @@ -2406,6 +2432,26 @@ sub add_Hsc_flags { } \end{code} +\begin{code} +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")); + + push(@SysLibrary, "-lHS$syslib"); + push(@SysLibrary, "-lHS${syslib}_cbits") + unless $syslib eq 'contrib' || $syslib eq 'exts' || $syslib eq 'conc'; + #HACK! they have no cbits +} +\end{code} + Source files may have {-# OPTIONS ... #-} pragmas at the top, containing command line options we want to append to collection of commands specified directly. @check_for_source_options@ looks at the top of a de-lit'ified Haskell @@ -2476,7 +2522,7 @@ arg: while($_ = $args[0]) { do { push(@Cmd_opts, $_); push(@Cmd_opts,$args[0]); shift(@args); next arg; }; /^--?./ && do { push(@Cmd_opts, $_); next arg; }; - if (/\.[oa]$/) { + if (/\.([^_]+_)?[oa]$/) { push(@Link_file, $_); } else { push(@Input_file, $_); @@ -2536,13 +2582,13 @@ arg: while($_ = $Args[0]) { if (/^-\?$/ || /^--?help$/) { print $LongUsage; exit $Status; } #-----------version ---------------------------------------------------- - /^--version$/ && do { print STDERR "${PROJECTNAME}, version ${PROJECTVERSION}, patchlevel ${PROJECTPATCHLEVEL}\n"; exit $Status; }; + /^--version$/ && do { print STDERR "${ProjectName}, version ${ProjectVersion}, patchlevel ${ProjectPatchLevel}\n"; exit $Status; }; #---------- verbosity and such ----------------------------------------- /^-v$/ && do { $Verbose = '-v'; $Time = 'time'; next arg; }; #---------- what phases are to be run ---------------------------------- - /^-recomp/ && do { $Do_recomp_chkr = 1; next arg; }; + /^-(no-)?recomp/ && do { $Do_recomp_chkr = ($1 eq '') ? 1 : 0; next arg; }; /^-cpp$/ && do { $Cpp_flag_set = 1; next arg; }; # change the global default: @@ -2707,7 +2753,8 @@ arg: while($_ = $Args[0]) { #--------- ticky/concurrent/parallel ----------------------------------- # we sort out the details a bit later on - /^-concurrent$/ && do { $CONCURing = 'c'; next arg; }; # concurrent Haskell + /^-concurrent$/ && do { $CONCURing = 'c'; &add_syslib('conc'); next arg; }; + # concurrent Haskell; implies -syslib conc /^-gransim$/ && do { $GRANing = 'g'; next arg; }; # GranSim /^-ticky$/ && do { $TICKYing = 't'; next arg; }; # ticky-ticky /^-parallel$/ && do { $PARing = 'p'; next arg; }; # parallel Haskell @@ -2747,26 +2794,23 @@ 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 =~ /^(hbc|ghc|posix|contrib)$/; - - unshift(@SysImport_dir, - ${INSTALLING} - ? "$InstSysLibDir/$syslib/imports" - : "$TopPwd/hslibs/$syslib/src"); + $Status++ unless $syslib =~ /^(exts|misc|posix)$/; - if ( ${INSTALLING} ) { - push(@SysLibrary_dir, - ("$InstSysLibDir")); - } else { - push(@SysLibrary_dir, - ("$TopPwd/hslibs/$syslib" - ,"$TopPwd/hslibs/$syslib/cbits")); + # + # The posix library is a `special' in that it relies on + # the ghc system library (packed strings). Wielding our + # sledgehammer, the problem is solved by silently including + # the ghc system library as well. + # (ToDo: `nub' -syslib list) + # + &add_syslib($syslib); + if ( $syslib eq 'posix' ) { + &add_syslib('misc'); + } elsif ( $syslib eq 'misc' && + $TargetName =~ /-solaris2$/ ) { + # needed for Berkeley socket/nwork stuff. + push(@SysLibrary, '-lnsl'); } - - push(@SysLibrary, "-lHS$syslib"); - push(@SysLibrary, "-lHS${syslib}_cbits") - unless $syslib eq 'contrib'; #HACK! it has no cbits - next arg; }; #======================================================================= @@ -2790,6 +2834,7 @@ arg: while($_ = $Args[0]) { /^-optP(.*)$/ && do { push(@HsCpp_flags, $1); next arg; }; /^-optCrts(.*)$/&& do { push(@HsC_rts_flags, $1); next arg; }; /^-optC(.*)$/ && do { push(@HsC_flags, $1); next arg; }; + /^-optp(.*)$/ && do { push(@HsP_flags, $1); next arg; }; /^-optcpp(.*)$/ && do { push(@Cpp_define, $1); $Only_preprocess_hc = ($1 eq "-E"); next arg; }; /^-optc(.*)$/ && do { push(@CcBoth_flags, $1); next arg; }; /^-opta(.*)$/ && do { push(@As_flags, $1); next arg; }; @@ -2834,9 +2879,6 @@ arg: while($_ = $Args[0]) { /^-fticky-ticky$/ && do { push(@HsC_flags,$_); next arg; }; /^-fgransim$/ && do { push(@HsC_flags,$_); next arg; }; - /^-user-prelude-force/ && do { # ignore if not -user-prelude - next arg; }; - /^-split-objs/ && do { if ( $TargetPlatform !~ /^(alpha|hppa1\.1|i386|m68k|mips|powerpc|rs6000|sparc)-/ ) { $SplitObjFiles = 0; @@ -2858,6 +2900,9 @@ arg: while($_ = $Args[0]) { push(@HsP_flags, '-N'); # push(@HsC_flags, '-fshow-import-specs'); + + # -fglasgow-exts implies -syslib exts + &add_syslib('exts'); next arg; }; @@ -2946,15 +2991,23 @@ arg: while($_ = $Args[0]) { /^-fshow-import-specs/ && do { push(@HsC_flags, $_); next arg; }; - # for now, just -fwarn-name-shadowing - /^-fwarn-(.*)$/ && do { push(@HsC_flags, $_); next arg; }; + /^-fsignatures-required/ + && do { push(@HsC_flags, $_); next arg; }; - /^-fno-warn-(.*)$/ && do { push(@HsC_flags, "-fno-warn-$1"); next arg; }; + /^-fwarn-(.*)$/ && do { push(@HsC_flags, $_); next arg; }; /^-fno-(.*)$/ && do { push(@HsC_antiflags, "-f$1"); &squashHscFlag("-f$1"); next arg; }; + /^-W$/ && do { push(@HsC_flags, @MinusWOpts); next arg; }; + /^-Wall$/ && do { push(@HsC_flags, @MinusWallOpts); next arg; }; + /^(-Wnot|w)$/ && do { foreach (@Hsc_flags) { + /^-fwarn-(.*)$/ && do { $_=''; }; + }; + push(@HsC_antiflags, @StandardWarnings); + next arg; }; + # --------------- platform specific flags (for gcc mostly) ---------------- /^-mlong-calls$/ && do { # for GCC for HP-PA boxes, @@ -3017,7 +3070,7 @@ arg: while($_ = $Args[0]) { } next arg; }; - /^-(K|Rmax-(stk|stack)size)(.*)/ && do { + /^(-K|Rmax-(stk|stack)size)(.*)/ && do { local($flag) = $1; local($stk_size) = &grab_arg_arg(*Args,'-Rmax-stksize', $3); if ($stk_size =~ /(\d+)[Kk]$/) {