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