Skip to content
Snippets Groups Projects
Commit 2896120b authored by Simon Marlow's avatar Simon Marlow
Browse files

[project @ 1998-01-13 12:25:40 by simonm]

Remove fastmake, gmake FAST=YES does the same thing now.
parent 7c042349
No related merge requests found
TOP=..
include $(TOP)/mk/boilerplate.mk
SCRIPT_PROG=fastmake
SCRIPT_OBJS=fastmake.prl
#
# Prepend (perl) bindings for these Makefile variables
# when creating the final script
#
SCRIPT_SUBST_VARS=TMPDIR
INTERP=perl
CLEAN_FILES += $(SCRIPT_PROG)
include $(TOP)/mk/target.mk
#
# Perl stub requires the following variable to be prepended
# TMPDIR
#
#
($Pgm = $0) =~ s/.*\/([^\/]+)$/\1/;
$Usage = "\n" . <<EOUSAGE;
Usage:
$Pgm [-? or -help] [-k] [-n] [-v] [-t] dir/module-target(s)
This script runs `make' to build the requested target, WITHOUT
including the dependencies generated by `mkdependHS' (i.e., all those
derived from import declarations).
With a -t flag, it also sets the modification time of the resulting
.hi file (one target only, please) to some EARLY date, so that changes
to that interface will not trigger much useless recompilation.
Typical uses, for module "Bar" in directory "foo":
(1) You've changed "Bar" and you want to recompile it; you know that
other module interfaces are stable, so you'd rather do without all
of `make''s prognostications:
$Pgm foo/Bar.s
(2) You've ADDED a new function to "Bar"; you want to recompile that
module, BUT NOT TRIGGER LOTS OF FURTHER COMPILATION because of the
"changed" interface file:
$Pgm -t foo/Bar.s
USE AT YOUR OWN RISK: you can make a big mess with this script!
EOUSAGE
$Makefile = 'Makefile';
if ( $ENV{'TMPDIR'} ) { # where to make tmp file names
$Tmpfile = $ENV{'TMPDIR'} . "/Makefile$$";
} else {
$Tmpfile = "${TMPDIR}/Makefile$$";
$ENV{'TMPDIR'} = "${TMPDIR}"; # set the env var as well
}
$SleazyTouch = '/usr/5bin/touch';
$DoTouch = 0;
$Verbose = 0;
$MakeFlags = '';
sub rm_temp_file {
print STDERR "rm $Tmpfile\n" if $Verbose;
unlink $Tmpfile;
exit(1);
}
$SIG{'INT'} = 'rm_temp_file';
$SIG{'QUIT'} = 'rm_temp_file';
$Target = '';
$DirMod = ''; # the dir/module-file to make
# process ARGV
while ($_ = $ARGV[0]) {
shift(@ARGV);
if (/^-\?$/ || /^-help$/) {
print $Usage;
exit 1;
} elsif (/^-v$/) {
$Verbose = 1;
} elsif (/^-t$/) {
$Do_touch = 1;
} elsif (/^-k$/) {
$MakeFlags .= ' -k';
} elsif (/^-n$/) {
$MakeFlags .= ' -n';
} elsif (/^-d$/) {
$MakeFlags .= ' -d';
} elsif (/^-/) {
print STDERR "$Pgm: unknown option: $_\n\n$Usage";
exit 1;
} elsif (/^([A-Z_]+)=(.+)/) {
$MakeFlags .= " $1=\"$2\"";
} elsif ($Do_touch) { # the module file
$Target = $_;
if ( /([^\/]+\/[^\/\.]+)\.[a-z]+/ ) {
$DirMod = $1;
} else {
print STDERR "$Pgm: argument not of the form: directory/Module.suffix: $_\n\n$Usage";
exit 1;
}
} else { # accumulate as "Target"...
$Target .= " $_";
}
}
if ($Do_touch && $Target =~ / /) {
print STDERR "$Pgm: too many arguments\n\n$Usage";
exit 1;
}
open(INF, "<$Makefile") || die "Can't open $Makefile for input\n";
open(OUTF,">$Tmpfile") || die "Can't open $Tmpfile for output\n";
select(OUTF);
$_ = <INF>;
# copy through until ...
while ( $_ && ! /^# DO NOT DELETE: Beginning of Haskell dependencies/ ) {
print $_;
$_ = <INF>;
}
# now copy through 'til the end, omitting the %.{o,s,hc} : %.hi dependencies
while ( $_ ) {
print $_ if ! /^\S+ : \S+\.hi$/;
$_ = <INF>;
}
close(INF);
close(OUTF);
$Make = 'make JMAKE=jmake LIT2PGM=lit2pgm LIT2LATEX=lit2latex LIT2TEXI=lit2texi MKDEPENDLIT=mkdependlit MAKEINFO=makeinfo POSTMAKEINFO=postmakeinfo';
print STDERR "$Make $MakeFlags -f $Tmpfile $Target; rm $Tmpfile\n" if $Verbose;
system( "$Make $MakeFlags -f $Tmpfile $Target; rm $Tmpfile" );
if ($Do_touch) {
print STDERR "$SleazyTouch -m 01010101 $DirMod\.hi\n" if $Verbose;
system( "$SleazyTouch -m 01010101 $DirMod\.hi" );
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment