On Thu, Aug 21, 2008 at 12:14:15PM +0100, Ian Lynagh wrote:
> Is anyone (or any team) interested in taking over maintenance of ghc6
> and related packages?

What else besides ghc6, exactly?  All the packages that you currently
maintain are related to Haskell, did you want to hand over all of
them?

I'm ready to take over ghc6's maintenance.  Wish me luck.  I still
have a lot to learn about ghc6's build system and internals, but I
hope I'll know enough soon enough.

I've attached the diff for the -6 I'm going to upload, in case anyone
wants to comment on it.  Basically I just copied HsBase.h,
Resource.hsc and ghc-split.lprl from 6.8.3.  Running ghc --show-iface
on the .hi files shows that the interface didn't even change with
this, so no need to rebuild any other packages.  Win.

I left Temp.hsc as it was, since replacing that did change the
interface.  The mkstemp call is (still) likely to be broken, but this
is good enough to make geordi work.

I'm likely to skip over packaging 6.8.3.  6.10 shouldn't be too far
away.  One thing I would like to change would be to remove ghc6's
build-dep on itself.  It's fine as long as it works but one buggy
version on any arch and I'd be into Lovecraftian horror.  Madness.
But that's likely to have to wait until 6.12, pending this:
http://hackage.haskell.org/trac/ghc/ticket/1346
diff -u ghc6-6.8.2/driver/split/ghc-split.lprl 
ghc6-6.8.2/driver/split/ghc-split.lprl
--- ghc6-6.8.2/driver/split/ghc-split.lprl
+++ ghc6-6.8.2/driver/split/ghc-split.lprl
@@ -34,7 +34,6 @@
     &collectDyldStuff_darwin() if $TargetPlatform =~ /-apple-darwin/;
 
     $octr = 0; # output file counter
-    $* = 1;    # multi-line matches are OK
 
     %LocalConstant = (); # we have to subvert C compiler's commoning-up of 
constants...
 
@@ -48,7 +47,7 @@
 
     # lie about where this stuff came from
     # Note the \Q: this ignores regex meta-chars in $Tmp_prefix.
-    $prologue_stuff =~ s/\Q"$Tmp_prefix.c"/"$ifile_root.hc"/g;
+    $prologue_stuff =~ s/\Q"$Tmp_prefix.c"/"$ifile_root.hc"/gm;
 
     while ( $_ ne '' ) { # not EOF
        $octr++;
@@ -66,7 +65,7 @@
 
     $NoOfSplitFiles = $octr;
 
-    if ($pieces[$NoOfSplitFiles] =~ /(\n[ \t]*\.section[ 
\t]+\.note\.GNU-stack,[^\n]*\n)/) {
+    if ($pieces[$NoOfSplitFiles] =~ /(\n[ \t]*\.section[ 
\t]+\.note\.GNU-stack,[^\n]*\n)/m) {
         $note_gnu_stack = $1;
         for $octr (1..($NoOfSplitFiles - 1)) {
             $pieces[$octr] .= $note_gnu_stack;
@@ -94,15 +93,15 @@
     %LocalExport = (); # NB: global table
 
     while(<TMPI>) {
-       if (/^\s+\.EXPORT\s+([^,]+),.*\n/) {
+       if (/^\s+\.EXPORT\s+([^,]+),.*\n/m) {
            local($label) = $1;
            local($body)  = "\t.IMPORT $label";
-           if (/,DATA/) { 
+           if (/,DATA/m) { 
                $body .= ",DATA\n"; 
            } else { 
                $body .= ",CODE\n"; 
            }
-           $label =~ s/\$/\\\$/g;
+           $label =~ s/\$/\\\$/gm;
            $LocalExport{$label} = $body;
        }
     }
@@ -116,7 +115,7 @@
     $UNDEFINED_FUNS = ''; # NB: global table
 
     while(<TMPI>) {
-       $UNDEFINED_FUNS .= $_ if /^\t\.globl\s+\S+ \.\S+\n/;
+       $UNDEFINED_FUNS .= $_ if /^\t\.globl\s+\S+ \.\S+\n/m;
        # just save 'em all
     }
 
@@ -138,10 +137,10 @@
     
     while ( 1 ) {
        $_ = <TMPI>;
-       if ( $_ eq '' || (/^L(_.+)\$.+:/ && !(/^L(.*)\$stub_binder:/))) {
+       if ( $_ eq '' || (/^L(_.+)\$.+:/m && !(/^L(.*)\$stub_binder:/m))) {
            if ( $label ne '' ) {
                $DyldChunksDefined{$label} .= $section . $alignment . 
$chunk_label . $ chunk;
-               if( $section =~ s/\.data/\.non_lazy_symbol_pointer/ ) {
+               if( $section =~ s/\.data/\.non_lazy_symbol_pointer/m ) {
                    $chunk = "\t.indirect_symbol $label\n\t.long 0\n";
                }
                $DyldChunks{$label} .= $section . $alignment . $chunk_label . 
$chunk;
@@ -155,16 +154,16 @@
            $section = $cur_section;
            $alignment = $cur_alignment;
            print STDERR "label: $label\n" if $Dump_asm_splitting_info;
-       } elsif ( 
/^\s*\.(symbol_stub|picsymbol_stub|lazy_symbol_pointer|non_lazy_symbol_pointer|data|section
 __IMPORT,.*|section __DATA, __la_sym_ptr(2|3),lazy_symbol_pointers)/ ) {
+       } elsif ( 
/^\s*\.(symbol_stub|picsymbol_stub|lazy_symbol_pointer|non_lazy_symbol_pointer|data|section
 __IMPORT,.*|section __DATA, __la_sym_ptr(2|3),lazy_symbol_pointers)/m ) {
            $cur_section = $_;
            printf STDERR "section: $cur_section\n" if $Dump_asm_splitting_info;
            $cur_alignment = ''
-       } elsif ( 
/^\s*\.section\s+__TEXT,__symbol_stub1,symbol_stubs,pure_instructions,\d+/ ) {
+       } elsif ( 
/^\s*\.section\s+__TEXT,__symbol_stub1,symbol_stubs,pure_instructions,\d+/m ) {
            $cur_section = $_;
            printf STDERR "section: $cur_section\n" if $Dump_asm_splitting_info;
                 # always make sure we align things
            $cur_alignment = '\t.align 2'
-       } elsif ( /^\s*\.align.*/ ) { 
+       } elsif ( /^\s*\.align.*/m ) { 
            $cur_alignment = $_;
            printf STDERR "alignment: $cur_alignment\n" if 
$Dump_asm_splitting_info;
        } else {
@@ -179,7 +178,7 @@
     local($str, $count) = @_; # already read bits
 
     
-    for ( $_ = <TMPI>; $_ ne '' && ! /_?__stg_split_marker/; $_ = <TMPI> ) {
+    for ( $_ = <TMPI>; $_ ne '' && ! /_?__stg_split_marker/m; $_ = <TMPI> ) {
        $str .= $_;
     }
     # if not EOF, then creep forward until next "real" line
@@ -190,26 +189,26 @@
     # Note that the assembler mangler will already have eliminated this code
     # if it's been invoked (which it probably has).
 
-    while ($_ ne '' && (/_?__stg_split_marker/
-                    || /^L[^C].*:$/
-                    || /^\.stab/
-                    || /\t\.proc/
-                    || /\t\.stabd/
-                    || /\t\.even/
-                    || /\tunlk a6/
-                    || /^\t!#PROLOGUE/
-                    || /\t\.prologue/
-                    || /\t\.frame/
+    while ($_ ne '' && (/_?__stg_split_marker/m
+                    || /^L[^C].*:$/m
+                    || /^\.stab/m
+                    || /\t\.proc/m
+                    || /\t\.stabd/m
+                    || /\t\.even/m
+                    || /\tunlk a6/m
+                    || /^\t!#PROLOGUE/m
+                    || /\t\.prologue/m
+                    || /\t\.frame/m
                      # || /\t\.end/ NOT!  Let the split_marker regexp catch it
                      # || /\t\.ent/ NOT!  Let the split_marker regexp catch it
-                    || /^\s+(save|retl?|restore|nop)/)) {
+                    || /^\s+(save|retl?|restore|nop)/m)) {
        $_ = <TMPI>;
     }
 
     print STDERR "### BLOCK:$count:\n$str" if $Dump_asm_splitting_info;
 
     # return str
-    $str =~ tr/\r//d if $TargetPlatform =~ /-mingw32$/; # in case Perl doesn't 
convert line endings
+    $str =~ tr/\r//d if $TargetPlatform =~ /-mingw32$/m; # in case Perl 
doesn't convert line endings
     $str;
 }
 \end{code}
@@ -223,16 +222,16 @@
     local($str) = @_;
 
     return(&process_asm_block_darwin($str))
-                            if $TargetPlatform =~ /-apple-darwin/;
-    return(&process_asm_block_m68k($str))  if $TargetPlatform =~ /^m68k-/;
-    return(&process_asm_block_sparc($str)) if $TargetPlatform =~ /^sparc-/;
-    return(&process_asm_block_iX86($str))  if $TargetPlatform =~ /^i[34]86-/;
-    return(&process_asm_block_x86_64($str))  if $TargetPlatform =~ /^x86_64-/;
-    return(&process_asm_block_alpha($str)) if $TargetPlatform =~ /^alpha-/;
-    return(&process_asm_block_hppa($str))  if $TargetPlatform =~ /^hppa/;
-    return(&process_asm_block_mips($str))   if $TargetPlatform =~ /^mips-/;
+                            if $TargetPlatform =~ /-apple-darwin/m;
+    return(&process_asm_block_m68k($str))  if $TargetPlatform =~ /^m68k-/m;
+    return(&process_asm_block_sparc($str)) if $TargetPlatform =~ /^sparc-/m;
+    return(&process_asm_block_iX86($str))  if $TargetPlatform =~ /^i[34]86-/m;
+    return(&process_asm_block_x86_64($str))  if $TargetPlatform =~ /^x86_64-/m;
+    return(&process_asm_block_alpha($str)) if $TargetPlatform =~ /^alpha-/m;
+    return(&process_asm_block_hppa($str))  if $TargetPlatform =~ /^hppa/m;
+    return(&process_asm_block_mips($str))   if $TargetPlatform =~ /^mips-/m;
     return(&process_asm_block_powerpc_linux($str))
-                            if $TargetPlatform =~ /^powerpc-[^-]+-linux/;
+                            if $TargetPlatform =~ /^powerpc-[^-]+-linux/m;
 
     # otherwise...
     &tidy_up_and_die(1,"$Pgm: no process_asm_block for $TargetPlatform\n");
@@ -243,17 +242,17 @@
 
     # strip the marker
     if ( $OptimiseC ) {
-       $str =~ s/_?__stg_split_marker.*:\n//;
+       $str =~ s/_?__stg_split_marker.*:\n//m;
     } else {
-       $str =~ s/(\.text\n\t\.align 
.\n)\t\.global\s+.*_?__stg_split_marker.*\n\t\.proc.*\n/$1/;
-       $str =~ s/(\t\.align 
.\n)\t\.global\s+.*_?__stg_split_marker.*\n\t\.proc.*\n/$1/;
+       $str =~ s/(\.text\n\t\.align 
.\n)\t\.global\s+.*_?__stg_split_marker.*\n\t\.proc.*\n/$1/m;
+       $str =~ s/(\t\.align 
.\n)\t\.global\s+.*_?__stg_split_marker.*\n\t\.proc.*\n/$1/m;
     }
 
     # make sure the *.hc filename gets saved; not just ghc*.c (temp name)
-    $str =~ s/^\.stabs "(ghc\d+\.c)"/.stabs "$ifile_root.hc"/g; # HACK HACK
+    $str =~ s/^\.stabs "(ghc\d+\.c)"/.stabs "$ifile_root.hc"/gm; # HACK HACK
 
     # remove/record any literal constants defined here
-    while ( $str =~ /(\t\.align .\n\.?(L?LC\d+):\n(\t\.asci[iz].*\n)+)/ ) {
+    while ( $str =~ /(\t\.align .\n\.?(L?LC\d+):\n(\t\.asci[iz].*\n)+)/m ) {
        local($label) = $2;
        local($body)  = $1;
 
@@ -262,12 +261,12 @@
 
        $LocalConstant{$label} = $body;
        
-       $str =~ s/\t\.align .\n\.?LL?C\d+:\n(\t\.asci[iz].*\n)+//;
+       $str =~ s/\t\.align .\n\.?LL?C\d+:\n(\t\.asci[iz].*\n)+//m;
     }
 
     # inject definitions for any local constants now used herein
     foreach $k (keys %LocalConstant) {
-       if ( $str =~ /\b$k\b/ ) {
+       if ( $str =~ /\b$k\b/m ) {
            $str = $LocalConstant{$k} . $str;
        }
     }
@@ -282,14 +281,14 @@
 
     # strip the marker
 
-    $str =~ s/(\.text\n\t\.even\n)\t\.globl\s+.*_?__stg_split_marker.*\n/$1/;
-    $str =~ s/(\t\.even\n)\t\.globl\s+.*_?__stg_split_marker.*\n/$1/;
+    $str =~ s/(\.text\n\t\.even\n)\t\.globl\s+.*_?__stg_split_marker.*\n/$1/m;
+    $str =~ s/(\t\.even\n)\t\.globl\s+.*_?__stg_split_marker.*\n/$1/m;
 
     # it seems prudent to stick on one of these:
     $str = "\.text\n\t.even\n" . $str;
 
     # remove/record any literal constants defined here
-    while ( $str =~ /((LC\d+):\n\t\.ascii.*\n)/ ) {
+    while ( $str =~ /((LC\d+):\n\t\.ascii.*\n)/m ) {
        local($label) = $2;
        local($body)  = $1;
 
@@ -298,12 +297,12 @@
 
        $LocalConstant{$label} = $body;
        
-       $str =~ s/LC\d+:\n\t\.ascii.*\n//;
+       $str =~ s/LC\d+:\n\t\.ascii.*\n//m;
     }
 
     # inject definitions for any local constants now used herein
     foreach $k (keys %LocalConstant) {
-       if ( $str =~ /\b$k\b/ ) {
+       if ( $str =~ /\b$k\b/m ) {
            $str = $LocalConstant{$k} . $str;
        }
     }
@@ -318,13 +317,13 @@
 
     # strip the marker
     if ( $OptimiseC ) {
-       $str =~ s/_?__stg_split_marker.*:\n//;
+       $str =~ s/_?__stg_split_marker.*:\n//m;
     } else {
-       $str =~ s/(\t\.align 
.\n)\t\.globl\s+.*_?__stg_split_marker.*\n\t\.ent.*\n/$1/;
+       $str =~ s/(\t\.align 
.\n)\t\.globl\s+.*_?__stg_split_marker.*\n\t\.ent.*\n/$1/m;
     }
 
     # remove/record any literal constants defined here
-    while ( $str =~ /(\.rdata\n\t\.align \d\n)?(\$(C\d+):\n\t\..*\n)/ ) {
+    while ( $str =~ /(\.rdata\n\t\.align \d\n)?(\$(C\d+):\n\t\..*\n)/m ) {
        local($label) = $3;
        local($body)  = $2;
 
@@ -333,12 +332,12 @@
 
        $LocalConstant{$label} = ".rdata\n\t.align 3\n" . $body . "\t.text\n";
        
-       $str =~ s/(\.rdata\n\t\.align \d\n)?\$C\d+:\n\t\..*\n//;
+       $str =~ s/(\.rdata\n\t\.align \d\n)?\$C\d+:\n\t\..*\n//m;
     }
 
     # inject definitions for any local constants now used herein
     foreach $k (keys %LocalConstant) {
-       if ( $str =~ /\$\b$k\b/ ) {
+       if ( $str =~ /\$\b$k\b/m ) {
            $str = $LocalConstant{$k} . $str;
        }
     }
@@ -346,7 +345,7 @@
     # Slide the dummy direct return code into the vtbl .ent/.end block,
     # to keep the label fixed if it's the last thing in a module, and
     # to avoid having any anonymous text that the linker will complain about
-    $str =~ s/(\t\.end [A-Za-z0-9_]+)\n\t# nop/\tnop\n$1/g;
+    $str =~ s/(\t\.end [A-Za-z0-9_]+)\n\t# nop/\tnop\n$1/gm;
 
     print STDERR "### STRIPPED BLOCK (alpha):\n$str" if 
$Dump_asm_splitting_info;
 
@@ -358,8 +357,8 @@
 
     # strip the marker
 
-    $str =~ s/(\.text\n\t\.align 
.(,0x90)?\n)\.globl\s+.*_?__stg_split_marker.*\n/$1/;
-    $str =~ s/(\t\.align .(,0x90)?\n)\.globl\s+.*_?__stg_split_marker.*\n/$1/;
+    $str =~ s/(\.text\n\t\.align 
.(,0x90)?\n)\.globl\s+.*_?__stg_split_marker.*\n/$1/m;
+    $str =~ s/(\t\.align .(,0x90)?\n)\.globl\s+.*_?__stg_split_marker.*\n/$1/m;
 
     # it seems prudent to stick on one of these:
     $str = "\.text\n\t.align 4\n" . $str;
@@ -369,10 +368,10 @@
     # http://bugs6.perl.org/rt2/Ticket/Display.html?id=1760 and illustrated
     # by the seg fault of perl -e '("x\n" x 5000) =~ /(.*\n)+/'
     # -- ccshan 2002-09-05]
-    while ( ($str =~ 
/((?:^|\.)(LC\d+):\n(\t\.(ascii|string).*\n|\s*\.byte.*\n){1,100})/ )) {
+    while ( ($str =~ 
/((?:^|\.)(LC\d+):\n(\t\.(ascii|string).*\n|\s*\.byte.*\n){1,100})/m )) {
        local($label) = $2;
        local($body)  = $1;
-       local($prefix, $suffix, $*) = ($`, $', 0);
+       local($prefix, $suffix) = ($`, $');
 
        &tidy_up_and_die(1,"Local constant label $label already defined!\n")
            if $LocalConstant{$label};
@@ -387,7 +386,7 @@
 
     # inject definitions for any local constants now used herein
     foreach $k (keys %LocalConstant) {
-       if ( $str =~ /\b$k\b/ ) {
+       if ( $str =~ /\b$k\b/m ) {
            $str = $LocalConstant{$k} . $str;
        }
     }
@@ -407,10 +406,10 @@
     # http://bugs6.perl.org/rt2/Ticket/Display.html?id=1760 and illustrated
     # by the seg fault of perl -e '("x\n" x 5000) =~ /(.*\n)+/'
     # -- ccshan 2002-09-05]
-    while ( ($str =~ 
/((?:^|\.)(LC\d+):\n(\t\.(ascii|string).*\n|\s*\.byte.*\n){1,100})/ )) {
+    while ( ($str =~ 
/((?:^|\.)(LC\d+):\n(\t\.(ascii|string).*\n|\s*\.byte.*\n){1,100})/m )) {
        local($label) = $2;
        local($body)  = $1;
-       local($prefix, $suffix, $*) = ($`, $', 0);
+       local($prefix, $suffix) = ($`, $');
 
        &tidy_up_and_die(1,"Local constant label $label already defined!\n")
            if $LocalConstant{$label};
@@ -425,7 +424,7 @@
 
     # inject definitions for any local constants now used herein
     foreach $k (keys %LocalConstant) {
-       if ( $str =~ /\b$k\b/ ) {
+       if ( $str =~ /\b$k\b/m ) {
            $str = $LocalConstant{$k} . $str;
        }
     }
@@ -441,22 +440,22 @@
     local($str) = @_;
 
     # strip the marker
-    $str =~ s/___stg_split_marker.*\n//;
+    $str =~ s/___stg_split_marker.*\n//m;
 
     # remove/record any imports defined here
-    while ( $str =~ /^(\s+\.IMPORT\s.*\n)/ ) {
+    while ( $str =~ /^(\s+\.IMPORT\s.*\n)/m ) {
        $Imports .= $1;
 
-       $str =~ s/^\s+\.IMPORT.*\n//;
+       $str =~ s/^\s+\.IMPORT.*\n//m;
     }
 
     # remove/record any literal constants defined here
-    while ( $str =~ /^(\s+\.align.*\n(L\$C\d+)\n(\s.*\n)+); end literal\n/ ) {
+    while ( $str =~ /^(\s+\.align.*\n(L\$C\d+)\n(\s.*\n)+); end literal\n/m ) {
        local($label) = $2;
        local($body)  = $1;
        local($prefix) = $`;
        local($suffix) = $';
-       $label =~ s/\$/\\\$/g;
+       $label =~ s/\$/\\\$/gm;
 
        &tidy_up_and_die(1,"Local constant label $label already defined!\n")
            if $LocalConstant{$label};
@@ -468,14 +467,14 @@
 
     # inject definitions for any local constants now used herein
     foreach $k (keys %LocalConstant) {
-       if ( $str =~ /\b$k\b/ ) {
+       if ( $str =~ /\b$k\b/m ) {
            $str = $LocalConstant{$k} . $str;
        }
     }
 
     # inject required imports for local exports in other chunks
     foreach $k (keys %LocalExport) {
-       if ( $str =~ /\b$k\b/ && ! /EXPORT\s+$k\b/ ) {
+       if ( $str =~ /\b$k\b/m && ! /EXPORT\s+$k\b/m ) {
            $str = $LocalExport{$k} . $str;
        }
     }
@@ -496,13 +495,13 @@
 
     # strip the marker
     if ( $OptimiseC ) {
-       $str =~ s/_?__stg_split_marker.*:\n//;
+       $str =~ s/_?__stg_split_marker.*:\n//m;
     } else {
-       $str =~ s/(\t\.align 
.\n)\t\.globl\s+.*_?__stg_split_marker.*\n\t\.ent.*\n/$1/;
+       $str =~ s/(\t\.align 
.\n)\t\.globl\s+.*_?__stg_split_marker.*\n\t\.ent.*\n/$1/m;
     }
 
     # remove/record any literal constants defined here
-    while ( $str =~ /(\t\.rdata\n\t\.align 
\d\n)?^(\$(LC\d+):\n(\t\.byte\t.*\n)+)/ ) {
+    while ( $str =~ /(\t\.rdata\n\t\.align 
\d\n)?^(\$(LC\d+):\n(\t\.byte\t.*\n)+)/m ) {
        local($label) = $3;
        local($body)  = $2;
 
@@ -511,12 +510,12 @@
 
        $LocalConstant{$label} = "\t.rdata\n\t.align 2\n" . $body . "\t.text\n";
        
-       $str =~ s/(\t\.rdata\n\t\.align \d\n)?\$LC\d+:\n(\t\.byte\t.*\n)+//;
+       $str =~ s/(\t\.rdata\n\t\.align \d\n)?\$LC\d+:\n(\t\.byte\t.*\n)+//m;
     }
 
     # inject definitions for any local constants now used herein
     foreach $k (keys %LocalConstant) {
-       if ( $str =~ /\$\b$k\b/ ) {
+       if ( $str =~ /\$\b$k\b/m ) {
            $str = $LocalConstant{$k} . $str;
        }
     }
@@ -524,7 +523,7 @@
     # Slide the dummy direct return code into the vtbl .ent/.end block,
     # to keep the label fixed if it's the last thing in a module, and
     # to avoid having any anonymous text that the linker will complain about
-    $str =~ s/(\t\.end [A-Za-z0-9_]+)\n\t# nop/\tnop\n$1/g;
+    $str =~ s/(\t\.end [A-Za-z0-9_]+)\n\t# nop/\tnop\n$1/gm;
 
     $str .= $UNDEFINED_FUNS; # pin on gratuitiously-large amount of info
 
@@ -542,12 +541,12 @@
     local($dyld_stuff) = '';
 
     # strip the marker
-    $str =~ s/___stg_split_marker.*\n//;
+    $str =~ s/___stg_split_marker.*\n//m;
 
-    $str =~ s/L_.*\$.*:\n(.|\n)*//;
+    $str =~ s/L_.*\$.*:\n(.|\n)*//m;
 
     # remove/record any literal constants defined here
-    while ( $str =~ 
s/^(\s+.const.*\n\s+\.align.*\n(LC\d+):\n(\s\.(byte|short|long|fill|space|ascii).*\n)+)//
 ) {
+    while ( $str =~ 
s/^(\s+.const.*\n\s+\.align.*\n(LC\d+):\n(\s\.(byte|short|long|fill|space|ascii).*\n)+)//m
 ) {
        local($label) = $2;
        local($body)  = $1;
 
@@ -559,14 +558,14 @@
 
     # inject definitions for any local constants now used herein
     foreach $k (keys %LocalConstant) {
-       if ( $str =~ /\b$k(\b|\[)/ ) {
+       if ( $str =~ /\b$k(\b|\[)/m ) {
            $str = $LocalConstant{$k} . $str;
        }
     }
     
     foreach $k (keys %DyldChunks) {
-       if ( $str =~ /\bL$k\$/ ) {
-           if ( $str =~ /^$k:$/ ) {
+       if ( $str =~ /\bL$k\$/m ) {
+           if ( $str =~ /^$k:$/m ) {
                $dyld_stuff .= $DyldChunksDefined{$k};
            } else {
                $dyld_stuff .= $DyldChunks{$k};
@@ -587,10 +586,10 @@
     local($str) = @_;
 
     # strip the marker
-    $str =~ s/__stg_split_marker.*\n//;
+    $str =~ s/__stg_split_marker.*\n//m;
 
     # remove/record any literal constants defined here
-    while ( $str =~ 
s/^(\s+.section\s+\.rodata\n\s+\.align.*\n(\.LC\d+):\n(\s\.(byte|short|long|quad|2byte|4byte|8byte|fill|space|ascii|string).*\n)+)//
 ) {
+    while ( $str =~ 
s/^(\s+.section\s+\.rodata\n\s+\.align.*\n(\.LC\d+):\n(\s\.(byte|short|long|quad|2byte|4byte|8byte|fill|space|ascii|string).*\n)+)//m
 ) {
        local($label) = $2;
        local($body)  = $1;
 
@@ -602,7 +601,7 @@
 
     # inject definitions for any local constants now used herein
     foreach $k (keys %LocalConstant) {
-       if ( $str =~ /[\s,]$k\b/ ) {
+       if ( $str =~ /[\s,]$k\b/m ) {
            $str = $LocalConstant{$k} . $str;
        }
     }
diff -u ghc6-6.8.2/debian/changelog ghc6-6.8.2/debian/changelog
--- ghc6-6.8.2/debian/changelog
+++ ghc6-6.8.2/debian/changelog
@@ -1,3 +1,14 @@
+ghc6 (6.8.2-6) unstable; urgency=low
+
+  * New maintainer.
+  * Made the perl script driver/split/ghc-split not use the obsolete $*
+    var (Closes: #489157)
+  * Copied libraries/unix/System/Posix/Resource.hsc and
+    libraries/base/include/HsBase.h from 6.8.3 to fix issues with
+    setResourceLimit. (Closes: #491909)
+
+ -- Kari Pahula <[EMAIL PROTECTED]>  Tue, 02 Sep 2008 11:28:21 +0300
+
 ghc6 (6.8.2-5) unstable; urgency=low
 
   * Don't build template-haskell if we're not building GHCi.
diff -u ghc6-6.8.2/debian/control ghc6-6.8.2/debian/control
--- ghc6-6.8.2/debian/control
+++ ghc6-6.8.2/debian/control
@@ -1,7 +1,7 @@
 Source: ghc6
 Section: devel
 Priority: optional
-Maintainer: Ian Lynagh (wibble) <[EMAIL PROTECTED]>
+Maintainer: Kari Pahula <[EMAIL PROTECTED]>
 Standards-Version: 3.7.3
 Build-Depends: debhelper (>= 4), libgmp3-dev, xsltproc, libreadline5-dev | 
libreadline-dev, devscripts, haddock (>= 0.8-2), hscolour, ghc6, grep-dctrl, 
autotools-dev, docbook-xsl, docbook-xml, gcc (>= 4:4.2), procps
 
only in patch2:
unchanged:
--- ghc6-6.8.2.orig/libraries/unix/System/Posix/Resource.hsc
+++ ghc6-6.8.2/libraries/unix/System/Posix/Resource.hsc
@@ -59,10 +59,10 @@
 
 type RLimit = ()
 
-foreign import ccall unsafe "getrlimit"
+foreign import ccall unsafe "HsBase.h __hscore_getrlimit"
   c_getrlimit :: CInt -> Ptr RLimit -> IO CInt
 
-foreign import ccall unsafe "setrlimit"
+foreign import ccall unsafe "HsBase.h __hscore_setrlimit"
   c_setrlimit :: CInt -> Ptr RLimit -> IO CInt
 
 getResourceLimit :: Resource -> IO ResourceLimits
only in patch2:
unchanged:
--- ghc6-6.8.2.orig/libraries/base/include/HsBase.h
+++ ghc6-6.8.2/libraries/base/include/HsBase.h
@@ -406,6 +406,9 @@
 #elif defined(HAVE__CHSIZE)
   return _chsize(fd,where);
 #else
+// ToDo: we should use _chsize_s() on Windows which allows a 64-bit
+// offset, but it doesn't seem to be available from mingw at this time 
+// --SDM (01/2008)
 #error at least ftruncate or _chsize functions are required to build
 #endif
 }
@@ -491,18 +494,32 @@
 #endif
 }
 
+#if defined(__MINGW32__)
+// We want the versions of stat/fstat/lseek that use 64-bit offsets,
+// and you have to ask for those explicitly.  Unfortunately there
+// doesn't seem to be a 64-bit version of truncate/ftruncate, so while
+// hFileSize and hSeek will work with large files, hSetFileSize will not.
+#define stat(file,buf)       _stati64(file,buf)
+#define fstat(fd,buf)        _fstati64(fd,buf)
+typedef struct _stati64 struct_stat;
+typedef off64_t stsize_t;
+#else
+typedef struct stat struct_stat;
+typedef off_t stsize_t;
+#endif
+
 INLINE HsInt
 __hscore_sizeof_stat( void )
 {
-  return sizeof(struct stat);
+  return sizeof(struct_stat);
 }
 
-INLINE time_t __hscore_st_mtime ( struct stat* st ) { return st->st_mtime; }
-INLINE off_t  __hscore_st_size  ( struct stat* st ) { return st->st_size; }
+INLINE time_t __hscore_st_mtime ( struct_stat* st ) { return st->st_mtime; }
+INLINE stsize_t __hscore_st_size  ( struct_stat* st ) { return st->st_size; }
 #if !defined(_MSC_VER)
-INLINE mode_t __hscore_st_mode  ( struct stat* st ) { return st->st_mode; }
-INLINE mode_t __hscore_st_dev  ( struct stat* st ) { return st->st_dev; }
-INLINE mode_t __hscore_st_ino  ( struct stat* st ) { return st->st_ino; }
+INLINE mode_t __hscore_st_mode  ( struct_stat* st ) { return st->st_mode; }
+INLINE dev_t  __hscore_st_dev  ( struct_stat* st ) { return st->st_dev; }
+INLINE ino_t  __hscore_st_ino  ( struct_stat* st ) { return st->st_ino; }
 #endif
 
 #if HAVE_TERMIOS_H
@@ -652,18 +669,40 @@
 // macros which redirect to the 64-bit-off_t versions when large file
 // support is enabled.
 //
+#if defined(__MINGW32__)
+INLINE off64_t __hscore_lseek(int fd, off64_t off, int whence) {
+       return (_lseeki64(fd,off,whence));
+}
+#else
 INLINE off_t __hscore_lseek(int fd, off_t off, int whence) {
        return (lseek(fd,off,whence));
 }
+#endif
 
-INLINE int __hscore_stat(char *file, struct stat *buf) {
+INLINE int __hscore_stat(char *file, struct_stat *buf) {
        return (stat(file,buf));
 }
 
-INLINE int __hscore_fstat(int fd, struct stat *buf) {
+INLINE int __hscore_fstat(int fd, struct_stat *buf) {
        return (fstat(fd,buf));
 }
 
+#if !defined(__MINGW32__)
+INLINE int __hscore_mkstemp(char *filetemplate) {
+    return (mkstemp(filetemplate));
+}
+#endif
+
+#if !defined(__MINGW32__) && !defined(irix_HOST_OS)
+INLINE int __hscore_getrlimit(int resource, struct rlimit *rlim) {
+    return (getrlimit(resource, rlim));
+}
+
+INLINE int __hscore_setrlimit(int resource, struct rlimit *rlim) {
+    return (setrlimit(resource, rlim));
+}
+#endif
+
 // select-related stuff
 
 #if !defined(__MINGW32__)

Attachment: signature.asc
Description: Digital signature

_______________________________________________
debian-haskell mailing list
[email protected]
http://urchin.earth.li/mailman/listinfo/debian-haskell

Reply via email to