On Mar-21, Leopold Toetsch wrote:
> Nicholas Clark wrote:
> 
> >I think that this would make life easier for everyone. (because it also 
> >saves
> >the 3 or 4 people on the list having to read tedious e-mail messages from
> >people about the subject)
> 
> I'm currently not sure, if there are 4 people around, that compile imcc 
> on native windows :-) Anyway, the current problem is not that bison/flex 
> got invoked (which isn't that problem either - every project has some 
> prerequesits) but is somewhere else. If there is a better solution for 
> solving the generated files problem (which AFAIK currently is not on the 
> air) I'll all ok with it.

I implemented a fix for this that people seemed to like a few months
back, but never got around to finishing it off and committing it. It
replaces timestamps with checksums for determining the dependencies.
Sorry about that -- I'll try to polish it off and commit it in the
next day or three, when I find the time.

I'll attach the preliminary patch I made back then, just in case
someone else feels motivated to finish it off.
Index: config/gen/makefiles/imcc.in
===================================================================
RCS file: /cvs/public/parrot/config/gen/makefiles/imcc.in,v
retrieving revision 1.4
diff -a -u -r1.4 imcc.in
--- config/gen/makefiles/imcc.in        25 Sep 2002 22:50:53 -0000      1.4
+++ config/gen/makefiles/imcc.in        6 Nov 2002 04:48:31 -0000
@@ -44,10 +44,10 @@
 ../../$(PARROTLIB): ../../parrot$(EXE)
        cd ../.. && $(MAKE) $(PARROTLIB)
 
-imcparser.c : imcc.y $(H_FILES)
-       $(YACC) -d -o imcparser.c imcc.y
+.PHONY: FORCE
+imcparser.h imcparser.c : imcc.y FORCE
+       $(PERL) runyacc "$(YACC) imcc.y -d -o imcparser.c" imcc.y imcparser.h 
imcparser.c
 
-imcparser.h : imcc.y
 imclexer.c : imcc.l $(H_FILES)
        $(LEX) imcc.l
 
Index: languages/imcc/runyacc
===================================================================
RCS file: languages/imcc/runyacc
diff -N languages/imcc/runyacc
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ languages/imcc/runyacc      6 Nov 2002 04:48:31 -0000
@@ -0,0 +1,54 @@
+use strict;
+
+my $Verbose = 0;
+if ($ARGV[0] eq '-v') {
+    shift;
+    $Verbose = 1;
+}
+
+my ($command, $input, @outputs) = @ARGV;
+my $checksum;
+{
+    local $/;
+    open(INPUT, $input) or die "open $input: $!";
+    $checksum = unpack("%32C*", <INPUT>);
+    close INPUT;
+}
+
+my $up_to_date = 1;
+foreach my $output (@outputs) {
+    if (! open(OUTPUT, $output)) {
+        print "$output does not exist; remaking\n" if $Verbose;
+        $up_to_date = 0;
+        last;
+    }
+    my $checksum_line = (<OUTPUT>)[-1];
+    close OUTPUT;
+    if ($checksum_line !~ m!^/\* CHECKSUM: ([-\d+]+) \*/$!) {
+        print "$output does not have a checksum line; remaking\n" if $Verbose;
+        $up_to_date = 0;
+        last;
+    }
+    if ($1 != $checksum) {
+        print "$output was built from different version of $input; remaking\n"
+          if $Verbose;
+        $up_to_date = 0;
+        last;
+    }
+    print "$output is up to date with respect to $input\n" if $Verbose;
+}
+
+exit 0 if $up_to_date;
+
+print "$command\n";
+my $status = system($command);
+exit 1 if (! defined $status);
+exit($status >> 8) if $status != 0;
+
+foreach my $output (@outputs) {
+    open(OUTPUT, ">>$output") or die "open $output for append: $!";
+    print OUTPUT "/* CHECKSUM: $checksum */\n";
+    close OUTPUT;
+}
+
+exit 0;
Index: MANIFEST
===================================================================
RCS file: /cvs/public/parrot/MANIFEST,v
retrieving revision 1.246
diff -a -u -r1.246 MANIFEST
--- MANIFEST    4 Nov 2002 17:16:04 -0000       1.246
+++ MANIFEST    6 Nov 2002 04:48:38 -0000
@@ -1345,6 +1345,7 @@
 languages/imcc/optimizer.h
 languages/imcc/pbc.c
 languages/imcc/pbc.h
+languages/imcc/runyacc
 languages/imcc/sets.c
 languages/imcc/sets.h
 languages/imcc/stacks.c

Reply via email to