/*
 *	aegis - project change supervisor
 *	Copyright (C) 1991-1996, 1998, 2001, 2002 Peter Miller;
 *	All rights reserved.
 *
 *	This program is free software; you can redistribute it and/or modify
 *	it under the terms of the GNU General Public License as published by
 *	the Free Software Foundation; either version 2 of the License, or
 *	(at your option) any later version.
 *
 *	This program is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *	GNU General Public License for more details.
 *
 *	You should have received a copy of the GNU General Public License
 *	along with this program; if not, write to the Free Software
 *	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
 *
 * MANIFEST: instructions to aegis, per-project configuration
 */

/*
 * how to build the project
 * mandatory
 */
build_command =
	"cook -b ${source etc/Howto.cook} project=$project \
change=$change version=$version arch=$uname -nl -st search_path=$search_path";

/*
 * When do -Integrate_Begin, link the baseline to the integration directory,
 * rather than copying it.  This should be much faster.
 *
 * There is a gotcha: all the recipes in Howto.cook must unlink their targets
 * before re-creating them, otherwise the baseline will be trashed.
 */
link_integration_directory = true;

/* don't link/copy the bin dir */
integrate_begin_exceptions = [ "linux-i486/bin/*" ];

/*
 * At integrate pass time, the modification times of the files are
 * updated.  This commands gives cook a channce to get the fingerprints
 * back in sync, which in turn speeds up development builds.
 */
build_time_adjust_notify_command =
    "set +e; find . -name .cook.fp -print | xargs rm; cook -nl -st --fp-update";

/*
 * create a new history
 * always executed as the project owner
 */
history_create_command =
	"fhist ${quote ${basename $history}} -cr -cu -i ${quote $input} \
-p ${quote ${dirname $history}} -r";

/*
 * get a file from history
 * may be executed by developers
 */
history_get_command =
	"fhist ${quote ${basename $history}} -e ${quote $edit} \
-o ${quote $output} -p ${quote ${dirname $history}} -v 0";

/*
 * add a new change to the history
 * always executed as the project owner
 */
history_put_command =
	"fhist ${quote ${basename $history}} -cr -cu -i ${quote $input} \
-p ${quote ${dirname $history}} -r";

/*
 * query the topmost edit of a history file
 * Result to be printed on stdout.
 * may be executed by developers
 */
history_query_command =
	"fhist ${quote ${basename $history}} -l 0 \
-p ${quote ${dirname $history}} -q";

/*
 * difference of 2 files
 */
diff_command =
	"fcomp -w -s ${quote $original} ${quote $input} -o ${quote $output}";

/*
 * difference of 3 files
 */
merge_command =
	"fmerge ${quote $original} ${quote $mostrecent} ${quote $input} \
-o ${quote $output} -c ${quote $output,C}";

/*
 * whenever files are added to or removed from the change,
 * execute the following command.
 *
 * The project files are wiped, too, because a removed file will alter
 * the project file list.
 */
change_file_command =
    "rm -f etc/cook/change_files.$version etc/cook/project_files.$version";
project_file_command = "rm -f etc/cook/project_files.$version";

/*
 * make sure the filenames are OK with Windows.
 */
windows_filename_required = true;

/*
 * watch out for these
 */
trojan_horse_suspect =
[
	"*.awk",
	"*.cook",
	"*.sh",
];

/*
 * Limit filename to 14 chanracters for maximim portability.
 */
maximum_filename_length = 14;
posix_filename_charset = true;

/*
 * new file templates
 */
file_template =
[
	{
		pattern = [ "*.[cyl]" ];
		body = "${read_file ${source etc/template/c abs}}";
	},
	{
		pattern = [ "*.h" ];
		body = "${read_file ${source etc/template/h abs}}";
	},
	{
		pattern = [ "test/*/*.sh" ];
		body = "${read_file ${source etc/template/test abs}}";
	},
	{
		pattern = [ "*.sh" ];
		body = "${read_file ${source etc/template/sh abs}}";
	},
	{
		pattern = [ "*.man", "*.[12345678]" ];
		body = "${read_file ${source etc/template/man abs}}";
	},
	{
		pattern = [ "*.rpt" ];
		body = "${read_file ${source etc/template/report abs}}";
	},
	{
		pattern = [ "*.so", "*.ms", "*.me" ];
		body = "${read_file ${source etc/template/ms abs}}";
	},
	{
		pattern = [ "*.po" ];
		body = "${read_file ${source etc/template/po abs}}";
	},
	{
		pattern = [ "*" ];
		body = "${read_file ${source etc/template/generic abs}}";
	}
];

develop_begin_command = "ln -s $baseline bl";

/*
 * Remove these files before we start integrating, to ensure that they
 * will be rebuild containing the correct version information.
 */
integrate_begin_command =
	"rm -f \
etc/cook/change_files* \
etc/cook/project_files* \
etc/version.so \
common/patchlevel.h \
bl blbl blblbl blblblbl \
";

/*
 * list of architectures on which each change must build and test
 */
architecture =
[
	{
		name = "linux-i486";
		pattern = "Linux-*-*-i?86";
	},
	{
		name = "sunos-4.1-sparc";
		pattern = "SunOS-4.1*-*-sun4*";
		mode = optional;
	},
	{
		name = "solaris-2.6-sparc";
		pattern = "SunOS-5.6*-*-sun4*";
		mode = optional;
	},
	{
		name = "solaris-2.6-i386";
		pattern = "SunOS-5.6*-*-i86pc";
		mode = optional;
	},
	{
		name = "solaris-7-sparc";
		pattern = "SunOS-5.7*-*-sun4*";
		mode = optional;
	},
	{
		name = "solaris-7-i386";
		pattern = "SunOS-5.7*-*-i86pc";
		mode = optional;
	},
];

test_command =
	"AEGIS_SEARCH_PATH=$search_path "
	"EXEC_SEARCH_PATH=$spe "
	"$sh ${quote $filename} ${quote $arch}";
