<%perl>
unless ($relname || $rootname || $localname) {
	die "No file given to generate.";
}

if ($relname) {
	warn 'DEPRECATION: The relname argument to generate is deprecated. Use rootname instead.';
	$rootname = $relname;
} elsif ($localname) {
	my $dir = $m->caller->dir_path;
	$rootname = "$dir/$localname";
}

my $file = $vfs->lookup_source($rootname);

my $result;
if ($file) {
	$log->debug("generate found a file: $file");

	if ($top) {
		my $original_kind = $file->generated_kind;
		$context->original_kind($original_kind);
		$log->debug("File type ",$file->filetype," says $file->{path} generates original kind of $original_kind");
	}

	my $headers = $file->generate_headers($m->request_args);
	while (my ($key, $value) = each %$headers) {
		$r->header_out($key => $value);
	}

	if ($r->method ne 'HEAD') {
		if (defined $to) {
</%perl>
<&| /content/transform/apply_transformation, to => $to, from => $file->generated_kind &>
% $result = $file->generate($m->request_args);
</&>
<%perl>
		} else {
			$result = $file->generate;
		}
	}
} else {
	$result = undef;
}

return $result;
</%perl>
<%args>
$relname => undef
$rootname => undef
$localname => undef
$top => 0
$to => undef
</%args>
