[add script to check for and remove unneeded imports from libraries, remove a bunch from lib/jhc/
John Meacham <john@repetae.net>**20120206061304
 Ignore-this: f090ccc1df9f6386009b1b59b3a8e316
] hunk ./lib/jhc/Data/Char.hs 16
-import Jhc.IO
-import Jhc.Inst.Show
+-- CI import Jhc.IO
+-- CI import Jhc.Inst.Show
hunk ./lib/jhc/Data/Ratio.hs 11
-import Jhc.Type.Basic
+-- CI import Jhc.Type.Basic
hunk ./lib/jhc/Foreign/C/Error.hs 93
-import Foreign.C.Types
+-- CI import Foreign.C.Types
hunk ./lib/jhc/Foreign/C/Error.hs 104
-import System.IO.Unsafe		( unsafePerformIO )
+-- CI import System.IO.Unsafe		( unsafePerformIO )
hunk ./lib/jhc/Foreign/C/String.hs 101
-import Data.Word
+-- CI import Data.Word
hunk ./lib/jhc/Foreign/Marshal/Utils.hs 55
-import Jhc.IO
-import Jhc.List
+-- CI import Jhc.IO
+-- CI import Jhc.List
hunk ./lib/jhc/Foreign/Ptr.hs 18
-import Data.Word
-import Foreign.Storable
+-- CI import Data.Word
+-- CI import Foreign.Storable
hunk ./lib/jhc/Foreign/Ptr.hs 24
-import Jhc.Monad
+-- CI import Jhc.Monad
hunk ./lib/jhc/Foreign/Ptr.hs 26
-import Jhc.Order
-import Jhc.Prim.Bits
+-- CI import Jhc.Order
+-- CI import Jhc.Prim.Bits
hunk ./lib/jhc/Foreign/Storable.hs 8
-import Jhc.Prim.Bits
+-- CI import Jhc.Prim.Bits
hunk ./lib/jhc/Jhc/Addr.hs 15
-import Jhc.Prim
-import Jhc.Prim.Bits
+-- CI import Jhc.Prim
+-- CI import Jhc.Prim.Bits
hunk ./lib/jhc/Jhc/Class/Ord.hs 3
-import Jhc.Type.Basic
+-- CI import Jhc.Type.Basic
hunk ./lib/jhc/Jhc/Enum.hs 9
-import Jhc.Prim.Prim
-import Jhc.Type.Basic
-import Jhc.Type.Word
+-- CI import Jhc.Prim.Prim
+-- CI import Jhc.Type.Basic
+-- CI import Jhc.Type.Word
hunk ./lib/jhc/Jhc/Float.hs 18
-import Jhc.Int
+-- CI import Jhc.Int
hunk ./lib/jhc/Jhc/Float.hs 21
-import Jhc.Prim.Bits
+-- CI import Jhc.Prim.Bits
hunk ./lib/jhc/Jhc/Float.hs 23
-import Prelude.Text
+-- CI import Prelude.Text
hunk ./lib/jhc/Jhc/Handle.hs 19
-import Foreign.C.Types
+-- CI import Foreign.C.Types
hunk ./lib/jhc/Jhc/Handle.hs 21
-import Foreign.Ptr
+-- CI import Foreign.Ptr
hunk ./lib/jhc/Jhc/Handle.hs 26
-import Jhc.IO
-import Jhc.Maybe
+-- CI import Jhc.IO
+-- CI import Jhc.Maybe
hunk ./lib/jhc/Jhc/IO.hs 32
-import Foreign.C.Types
+-- CI import Foreign.C.Types
hunk ./lib/jhc/Jhc/IO.hs 34
-import Jhc.Order
+-- CI import Jhc.Order
hunk ./lib/jhc/Jhc/IO.hs 36
-import Jhc.Prim.IO
-import Jhc.Type.Basic
+-- CI import Jhc.Prim.IO
+-- CI import Jhc.Type.Basic
hunk ./lib/jhc/Jhc/Inst/Enum.hs 5
-import Data.Word
-import Data.Int
+-- CI import Data.Word
+-- CI import Data.Int
hunk ./lib/jhc/Jhc/Inst/Enum.hs 12
-import Jhc.Inst.Order
+-- CI import Jhc.Inst.Order
hunk ./lib/jhc/Jhc/Inst/Num.hs 6
-import Data.Word
-import Data.Int
+-- CI import Data.Word
+-- CI import Data.Int
hunk ./lib/jhc/Jhc/Inst/Num.hs 12
-import Jhc.Inst.Order
+-- CI import Jhc.Inst.Order
hunk ./lib/jhc/Jhc/Inst/PrimEnum.hs 10
-import Jhc.Prim
+-- CI import Jhc.Prim
hunk ./lib/jhc/Jhc/Inst/Storable.hs 4
-import Data.Int
-import Data.Word
-import Jhc.Type.Word
+-- CI import Data.Int
+-- CI import Data.Word
+-- CI import Jhc.Type.Word
hunk ./lib/jhc/Jhc/Inst/Storable.hs 13
-import Jhc.Int
-import Jhc.Prim
-import Jhc.Prim.Bits
+-- CI import Jhc.Int
+-- CI import Jhc.Prim
+-- CI import Jhc.Prim.Bits
hunk ./lib/jhc/Jhc/Numeric.hs 6
-import Jhc.Type.Float
+-- CI import Jhc.Type.Float
hunk ./lib/jhc/Jhc/Order.hs 15
-import Jhc.Prim.Bits
-import Jhc.Prim.Prim
+-- CI import Jhc.Prim.Bits
+-- CI import Jhc.Prim.Prim
hunk ./lib/jhc/Jhc/Prim.hs 5
-import Jhc.String
+-- CI import Jhc.String
hunk ./lib/jhc/Jhc/Prim.hs 7
-import Jhc.Type.Word
+-- CI import Jhc.Type.Word
hunk ./lib/jhc/Jhc/Show.hs 5
-import Jhc.Order
+-- CI import Jhc.Order
hunk ./lib/jhc/Jhc/String.hs 13
-import Jhc.Prim.Bits
+-- CI import Jhc.Prim.Bits
hunk ./lib/jhc/Jhc/Text/Read.hs 9
-import Jhc.Type.Basic
+-- CI import Jhc.Type.Basic
hunk ./lib/jhc/Jhc/Type/Basic.hs 4
-import Jhc.Prim.Bits
+-- CI import Jhc.Prim.Bits
hunk ./lib/jhc/Jhc/Type/Handle.hs 3
-import Jhc.Prim
+-- CI import Jhc.Prim
hunk ./lib/jhc/Jhc/Type/Handle.hs 6
-import Jhc.Type.Basic
+-- CI import Jhc.Type.Basic
hunk ./lib/jhc/Numeric.hs 11
-import Data.Word
+-- CI import Data.Word
hunk ./lib/jhc/Numeric.hs 21
-import Data.Char
+-- CI import Data.Char
hunk ./lib/jhc/Prelude.hs 69
-import Jhc.Inst.Enum
-import Jhc.Inst.Num
-import Jhc.Inst.Order
-import Jhc.Inst.Read
-import Jhc.Inst.Show
-import Jhc.Inst.Storable
+-- CI import Jhc.Inst.Enum
+-- CI import Jhc.Inst.Num
+-- CI import Jhc.Inst.Order
+-- CI import Jhc.Inst.Read
+-- CI import Jhc.Inst.Show
+-- CI import Jhc.Inst.Storable
hunk ./lib/jhc/Prelude.hs 76
-import Data.Ratio
+-- CI import Data.Ratio
hunk ./lib/jhc/Prelude.hs 85
-import Jhc.Show
-import Jhc.Tuples
-import Jhc.Type.Basic
-import Jhc.Type.Word(Int)
-import Prelude.Float
+-- CI import Jhc.Show
+-- CI import Jhc.Tuples
+-- CI import Jhc.Type.Basic
+-- CI import Jhc.Type.Word(Int)
+-- CI import Prelude.Float
hunk ./lib/jhc/Prelude/Float.hs 15
-import Jhc.Prim.Bits
+-- CI import Jhc.Prim.Bits
hunk ./lib/jhc/Prelude/IO.hs 25
-import Foreign.Ptr
+-- CI import Foreign.Ptr
hunk ./lib/jhc/System/Mem.hs 5
-import Jhc.Basics
+-- CI import Jhc.Basics
hunk ./src/data/prelude.m4 6
+m4_define({{m4_for}},{{m4_ifelse($#,0,{{{{$0}}}},{{m4_ifelse(m4_eval($2<=$3),1,
+{{m4_pushdef({{$1}},$2)$4{{}}m4_popdef({{$1}})$0({{$1}},m4_incr($2),$3,{{$4}})}})}})}})
+
+m4_define({{m4_foreach}},{{m4_ifelse(m4_eval($#>2),1,
+{{m4_pushdef({{$1}},{{$3}})$2{{}}m4_popdef({{$1}})m4_dnl
+{{}}m4_ifelse(m4_eval($#>3),1,{{$0({{$1}},{{$2}},m4_shift(m4_shift(m4_shift($@))))}})}})}})
+
addfile ./utils/check_imports.prl
hunk ./utils/check_imports.prl 1
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use YAML;
+use Getopt::Std;
+
+$ARGV[0] || die "no yaml file specified";
+
+my $count = 0;
+
+sub build_attempt {
+    my $r = system "./jhc -L. --build-hl $ARGV[0] --deps tmp/deps$$.yaml --stop typecheck";
+    #my $r = system "./jhc -L. --build-hl $ARGV[0] --deps tmp/deps$$.yaml";
+    if (!$r) {
+        if(++$count == 5) {
+            my $r = system "./jhc -L. --build-hl $ARGV[0] --deps tmp/deps$$.yaml";
+            $count = 0;
+        }
+    }
+    return !$r;
+}
+
+build_attempt || die "unable to build initial hl";
+my $y = YAML::LoadFile("tmp/deps$$.yaml") or die "can't load tmp/deps$$.yaml file";
+
+my @deps = values %{$y->{ModuleSource}};
+
+foreach my $fn (@deps) {
+    print "processing $fn\n";
+    open my $fh, "<$fn" or die "$!: $fn";
+    my @lines = <$fh>;
+    close $fh or die "$!: close $fn";
+    my @imports = grep { !/\(\)/ } grep { /^import / } @lines;
+    next unless @imports;
+    foreach my $i (@imports) {
+        my $s = $i;
+        chomp $s;
+        print " trying $s\n";
+        open my $fh, ">$fn.deptest" or die "$!: $fn.deptest";
+        foreach (@lines) {
+            if ($_ eq $i) {
+                $_ = "-- CI $i";
+            }
+            print $fh $_;
+        }
+        close $fh or die "$!: close $fn.deptest";
+        rename "$fn.deptest", $fn or die "$!: rename $fn.deptest, $fn";
+        if (!build_attempt()) {
+            open my $fh, ">$fn.deptest" or die "$!: $fn.deptest";
+            foreach (@lines) {
+                if ($_ eq "-- CI $i") {
+                    $_ = $i;
+                }
+                print $fh $_;
+            }
+            close $fh or die "$!: close $fn.deptest";
+            rename "$fn.deptest", $fn or die "$!: rename $fn.deptest, $fn";
+        }
+    }
+}