#! /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
# 
#  L쌠҂́Cȉ(1)`(4)̏𖞂ꍇɌC{\tgEF
#  Ai{\tgEFAς̂܂ށDȉjgpEE
#  ρEĔzziȉCpƌĂԁj邱Ƃ𖳏ŋD
#  (1) {\tgEFA\[XR[ȟ`ŗpꍇɂ́CL̒
#      \C̗pщL̖ۏ؋K肪Ĉ܂܂̌`Ń\[
#      XR[hɊ܂܂Ă邱ƁD
#  (2) {\tgEFACCu`ȂǁC̃\tgEFAJɎg
#      pł`ōĔzzꍇɂ́CĔzzɔhLgip
#      ҃}jAȂǁjɁCL̒쌠\C̗pщL
#      ̖ۏ؋Kfڂ邱ƁD
#  (3) {\tgEFAC@ɑgݍނȂǁC̃\tgEFAJɎg
#      płȂ`ōĔzzꍇɂ́Ĉꂩ̏𖞂
#      ƁD
#    (a) ĔzzɔhLgip҃}jAȂǁjɁCL̒
#        쌠\C̗pщL̖ۏ؋Kfڂ邱ƁD
#    (b) Ĕzž`ԂCʂɒ߂@ɂāCTOPPERSvWFNg
#        񍐂邱ƁD
#  (4) {\tgEFA̗pɂ蒼ړI܂͊ԐړIɐ邢Ȃ鑹
#      QCL쌠҂TOPPERSvWFNgƐӂ邱ƁD
#      ܂C{\tgEFÃ[U܂̓Gh[ÛȂ闝
#      RɊÂCL쌠҂TOPPERSvWFNg
#      Ɛӂ邱ƁD
# 
#  {\tgEFÁCۏ؂Œ񋟂Ă̂łDL쌠҂
#  TOPPERSvWFNǵC{\tgEFAɊւāC̎gpړI
#  ɑ΂K܂߂āCȂۏ؂sȂD܂C{\tgEF
#  A̗pɂ蒼ړI܂͊ԐړIɐȂ鑹QɊւĂC
#  ̐ӔC𕉂ȂD
# 
#  @(#) $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 $filename";
	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";
