#!/usr/bin/perl # $Id: build 1414 2006-09-22 06:03:12Z quarl $ use FileHandle; use POSIX; my $transclude = 0; if ($ARGV[0] eq '-t') { $transclude = 1; shift @ARGV; } sub readFile { my ($file) = @_; local $/; my $f = FileHandle->new($file) || die; my $lines = <$f>; $lines =~ s/\s+$//; $lines =~ s/^\s+//; return $lines; } my $inclpath; eval { $inclpath = readFile('.namespace'); # e.g. 'http://www.cubewano.org/wpt/scripts/DEVEL/'; }; if ($@) { die "$0: can't read '.namespace'.\n This file contains the URL prefix. It can be empty but it must exist.\n"; } # my $manifest_file = 'MANIFEST'; sub getModulesFromManifest { # my ($manifest_file) = @_; # my $f = FileHandle->new($manifest_file); my $modules = []; while (<>) { chomp; s,//.*,,; s,^ +,,; s, +$,,; if (!$_) { next; } push(@$modules, $_); } return $modules; } sub cat { my ($file) = @_; local $/; my $f = FileHandle->new($file); if (!$f) { die; } my $lines = <$f>; print $lines; } sub readId { my ($file) = @_; local $_; my $f = FileHandle->new($file); while (<$f>) { if (/\$Id: ([^ ]+) ([0-9]+) (.+?) *\$/) { return [$1, $2, $3]; } } return [$file, ""]; } sub max { return $_[0] > $_[1] ? $_[0] : $_[1]; } sub justify { my ($str, $type, $length) = @_; if ($type eq 'l') { return $str . ' ' x ($length-length($str)); } elsif ($type eq 'r') { return ' ' x ($length-length($str)) . $str; } else { die; } } sub align { my ($just, $ary) = @_; for (my $column = 0; $column <= $#{$ary->[0]}; ++$column) { my $m = 0; for $row (@$ary) { $m = max($m, length($row->[$column])); } for $row (@$ary) { $row->[$column] = justify($row->[$column], $just->[$column], $m); } } return $ary; } sub timestamp { return POSIX::strftime("%Y-%m-%d %H:%M:%SZ", gmtime()) } my $modules = getModulesFromManifest(); my $timestamp = timestamp(); my $hostname = `hostname -f`; chomp $hostname; if ($transclude) { print "/****************************************************************************\n"; print " * Built $timestamp on $hostname from the following files:\n"; my $ids = [ map { readId($_) } @$modules ]; $ids = align([qw/l r l/], $ids); for my $id (@$ids) { # print "** $id\n"; print " * $id->[0] r$id->[1] $id->[2]\n"; } print " ****************************************************************************/\n\n"; for my $module (@$modules) { if (!-f $module) { die "$0: can't find module '$module'\n"; } print "/****************************************************************************\n"; print " * BEGIN $module\n"; print " ****************************************************************************/\n"; print "\n"; cat($module); print "\n"; print "/****************************************************************************\n"; print " * END $module\n"; print " ****************************************************************************/\n"; print "\n"; } } else { print "/* Built $timestamp on $hostname */\n"; if ($modules->[0] =~ /[.]js$/) { print "document.write(\n"; for my $module (@$modules) { print "'' +\n"; } print "'')\n"; } elsif ($modules->[0] =~ /[.]css$/) { for my $module (@$modules) { print "\@import \"$inclpath$module\";\n"; } } else { die "$0: unknown file type for $modules->[0]\n"; } } # Local Variables: # kc-compile-command-make-check: "make" # End: