#! /usr/bin/perl
#
#  TOPPERS Software
#      Toyohashi Open Platform for Embedded Real-Time Systems
# 
#  Copyright (C) 2006-2010 by Embedded and Real-Time Systems Laboratory
#              Graduate School of Information Science, Nagoya Univ., JAPAN
# 
#  嵭Ԥϡʲ(1)(4)ξ˸¤ꡤܥեȥ
#  ܥեȥѤΤޤࡥʲƱˤѡʣ
#  ѡۡʰʲѤȸƤ֡ˤ뤳Ȥ̵ǵ롥
#  (1) ܥեȥ򥽡ɤηѤˤϡ嵭
#      ɽѾ浪Ӳ̵ݾڵ꤬Τޤޤηǥ
#      ˴ޤޤƤ뤳ȡ
#  (2) ܥեȥ򡤥饤֥ʤɡ¾Υեȥȯ˻
#      ѤǤǺۤˤϡۤȼɥȡ
#      ԥޥ˥奢ʤɡˤˡ嵭ɽѾ浪Ӳ
#      ̵ݾڵǺܤ뤳ȡ
#  (3) ܥեȥ򡤵Ȥ߹ʤɡ¾Υեȥȯ˻
#      ѤǤʤǺۤˤϡΤ줫ξ
#      ȡ
#    (a) ۤȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭
#        ɽѾ浪Ӳ̵ݾڵǺܤ뤳ȡ
#    (b) ۤη֤̤ˡˤäơTOPPERSץȤ
#        𤹤뤳ȡ
#  (4) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
#      ⡤嵭ԤTOPPERSץȤդ뤳ȡ
#      ޤܥեȥΥ桼ޤϥɥ桼Τʤ
#      ͳ˴Ťᤫ⡤嵭ԤTOPPERSץȤ
#      դ뤳ȡ
# 
#  ܥեȥϡ̵ݾڤ󶡤ƤΤǤ롥嵭Ԥ
#  TOPPERSץȤϡܥեȥ˴ؤơλŪ
#  ФŬޤơʤݾڤԤʤޤܥեȥ
#  ѤˤľŪޤϴŪʤ»˴ؤƤ⡤
#  Ǥʤ
# 
#  @(#) $Id: makerelease 1866 2010-07-25 13:19:17Z ertl-hiro $
# 

require 'getcwd.pl';

$cwd = getcwd();
$cwd =~ s/^.*[\/\\]([^\/\\]+)$/$1/;
$prefix = "./".$cwd;

@file_list = ();
%file_list = ();

if ($#ARGV >= 0) {
	$arg1 = $ARGV[0];
	$arg1 =~ s/\.\///;
}
else {
	$arg1 = "MANIFEST";
}

sub gen_path
{
	local($base, $path) = @_;

	while ($path =~ /^..\/(.*)$/) {
		$path = $1;
		$base =~ s/(\/?)[^\/]*\/$/$1/;
	}
	return($base.$path);
}

sub read_file {
	local($filename) = @_;
	local($fh, $dirname);

	if ($filename =~ /^(.*\/)[^\/]*$/) {
		$dirname = $1;
	}
	else {
		$dirname = "";
	}

	open($fh, $filename) || die "Cannot open $infile";
	while ($line = <$fh>) {
		chomp $line;
		$line =~ s/\r$//;
		$line =~ s/[ \t]*\#.*$//;
		next if ($line =~ /^[ \t]*$/);

		if ($line =~ /^E_PACKAGE[ \t]+(.*)$/) {
			if ($package) {
				die "Duplicated E_PACKAGE directive.";
			}
			else {
				$package = $1;
				$e_package = 1;
			}
		}
		elsif ($line =~ /^PACKAGE[ \t]+(.*)$/) {
			if ($package) {
				if (!$e_package && $package != $1) {
					die "Inconsistent PACKAGE directive.";
				}
			}
			else {
				$package = $1;
			}
		}
		elsif ($line =~ /^VERSION[ \t]+(.*)$/) {
			if ($version) {
				if (!$e_package && $version != $1) {
					die "Inconsistent VERSION directive.";
				}
			}
			else {
				$version = $1;
				if ($version =~ /%date/) {
					@current_time = localtime();
					$vdate = sprintf("%04d%02d%02d", $current_time[5]+1900,
										$current_time[4]+1, $current_time[3]);
					$version =~ s/%date/$vdate/;
				}
			}
		}
		elsif ($line =~ /^INCLUDE[ \t]+(.*)$/) {
			do read_file(do gen_path($dirname, $1));
		}
		else {
			$filename = $prefix."/".$dirname.$line;
			while ($filename =~ s|/[^/]+/\.\./|/|) {}
			if ($file_list{$filename}) {
				die "$filename is duplicated.";
			}
			else {
				push(@file_list, $filename);
				$file_list{$filename} = $filename;
			}
		}
	}
	close($fh);
}

do read_file($arg1);
unless ($package) {
	die "PACKAGE/E_PACKAGE directive not found.";
}
unless ($version) {
	die "VERSION directive not found.";
}

if (! -d "RELEASE") {
	mkdir("RELEASE");
}

$archive_name = $package."-".$version.".tar.gz";
$file_list = join(" ", @file_list);
$command = "tar cvfz RELEASE/$archive_name -C .. $file_list\n";
die if (system($command));
print STDERR "== RELEASE/$archive_name is generated. ==\n";
