#!/usr/bin/perl ### ### makemake.pl -> executes a make every time a (set of files) changed on disk ### $DEFAULT_SECONDS = 2; @DEFAULT_MAKEFILES = ("Makefile", "makefile"); $DEFAULT_TARGET = "all"; ### ### do not change anything below ### use Getopt::Std; getopts("s:m:ht:"); if($opt_h) { print "Usage is:\nmakemake.pl [-m makefile] [-t target] [-s secs] [-h] filenam e*\n"; exit(0); } if($opt_m) { $makefile = $opt_m; } else { $makefile = ""; foreach $m (@DEFAULT_MAKEFILES) { if(-r $m) { $makefile = $m; last; } } if($makefile eq "") { printf "Cannot find default makefiles\n"; exit(-1); } } if($opt_t) { $target = $opt_t; } else { $target = $DEFAULT_TARGET; } if($opt_s) { $seconds = $opt_s; } else { $seconds = $DEFAULT_SECONDS; } print "Compiling with make $makefile every $seconds secs (target is $target)\n"; print "File(s): "; @files = @ARGV; foreach $f (@files) { print "$f "; $filetimes{$f} = (stat($f))[9]; } print "\n"; while(true) { sleep($seconds); $recomp = 0; foreach $f (@files) { $t = (stat($f))[9]; if($t != $filetimes{$f}) { print "---> Recompile (due to $f)\n"; $filetimes{$f} = $t; # adjust the modified file time $recomp = 1; } } if($recomp == 1) { print "Recompiling ... \n"; $cmd = "make -m $makefile $target"; ### print "$cmd\nDone!\n"; system($cmd); } else { print "Looping ... \n"; } } exit(0); ### fine lavori