1#!/bin/perl -w 2# 3# Cute little builder for perl 4# Total waste of development time... 5# 6# This will build all the object files and then the archive .a file 7# requires GCC, GNU make and a sense of humour. 8# 9# Tom St Denis 10use strict; 11 12my $count = 0; 13my $starttime = time; 14my $rate = 0; 15print "Scanning for source files...\n"; 16foreach my $filename (glob "*.c") { 17 ++$count; 18} 19print "Source files to build: $count\nBuilding...\n"; 20my $i = 0; 21my $lines = 0; 22my $filesbuilt = 0; 23foreach my $filename (glob "*.c") { 24 printf("Building %3.2f%%, ", (++$i/$count)*100.0); 25 if ($i % 4 == 0) { print "/, "; } 26 if ($i % 4 == 1) { print "-, "; } 27 if ($i % 4 == 2) { print "\\, "; } 28 if ($i % 4 == 3) { print "|, "; } 29 if ($rate > 0) { 30 my $tleft = ($count - $i) / $rate; 31 my $tsec = $tleft%60; 32 my $tmin = ($tleft/60)%60; 33 my $thour = ($tleft/3600)%60; 34 printf("%2d:%02d:%02d left, ", $thour, $tmin, $tsec); 35 } 36 my $cnt = ($i/$count)*30.0; 37 my $x = 0; 38 print "["; 39 for (; $x < $cnt; $x++) { print "#"; } 40 for (; $x < 30; $x++) { print " "; } 41 print "]\r"; 42 my $tmp = $filename; 43 $tmp =~ s/\.c/".o"/ge; 44 if (open(SRC, "<$tmp")) { 45 close SRC; 46 } else { 47 !system("make $tmp > /dev/null 2>/dev/null") or die "\nERROR: Failed to make $tmp!!!\n"; 48 open( SRC, "<$filename" ) or die "Couldn't open $filename for reading: $!"; 49 ++$lines while (<SRC>); 50 close SRC or die "Error closing $filename after reading: $!"; 51 ++$filesbuilt; 52 } 53 54 # update timer 55 if (time != $starttime) { 56 my $delay = time - $starttime; 57 $rate = $i/$delay; 58 } 59} 60 61# finish building the library 62printf("\nFinished building source (%d seconds, %3.2f files per second).\n", time - $starttime, $rate); 63print "Compiled approximately $filesbuilt files and $lines lines of code.\n"; 64print "Doing final make (building archive...)\n"; 65!system("make > /dev/null 2>/dev/null") or die "\nERROR: Failed to perform last make command!!!\n"; 66print "done.\n";