/*
 *	srecord - manipulate eprom load files
 *	Copyright (C) 1998, 1999, 2000 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: project configuration for Aegis
 */


/*
 * The build_command field of the config file is used to invoke the relevant
 * build command.  The following command tells cook where to find the recipes.
 * The ${s Howto.cook} expands to a path into the baseline during development
 * if the file is not in the change.  Look in aesub(5) for more information
 * about command substitutions.
 */
build_command =
	"cook -b ${s etc/Howto.cook} project=$p change=$c version=$v arch=$arch -nl -st  search_path=$search_path";

/*
 * The recipes in the User Guide will all remove their targets before
 * constructing them, which qualifies them to use the following entry in the
 * config file.  The targets MUST be removed first if this field is true,
 * otherwise the baseline would cease to be self-consistent.
 */
link_integration_directory = true;
 
/*
 * RCS uses a slightly different model than aegis wants, so some
 * maneuvering is required.  The command strings in this section assume
 * that the RCS commands ci and co and rcs and rlog are in the command
 * search PATH, but you may like to hard-wire the paths, or set PATH at
 * the start of each.  You should also note that the strings are always
 * handed to the Bourne shell to be executed, and are set to exit with
 * an error immediately a sub-command fails.
 *
 * In these commands, the RCS file is kept unlocked, since only the owner will
 * be checking changes in.  The RCS functionality for coordinating shared
 * access is not required.
 *
 * One advantage of using RCS version 5.6 or later is that binary files are
 * supported, should you want to have binary files in the baseline.
 */

/*
 * This command is used to create a new file history.
 * This command is always executed as the project owner.
 * The following substitutions are available:
 *
 * ${Input}
 *	absolute path of the source file
 * ${History}
 *	absolute path of the history file
 *
 * The "ci -f" option is used to specify that a copy is to be checked-in even
 *	if there are no changes.
 * The "ci -u" option is used to specify that an unlocked copy will remain in
 *	the baseline.
 * The "ci -d" option is used to specify that the file time rather than the
 *	current time is to be used for the new revision.
 * The "ci -M" option is used to specify that the mode date on the original
 *	file is not to be altered.
 * The "ci -t" option is used to specify that there is to be no description
 *	text for the new RCS file.
 * The "ci -m" option is used to specify that the change number is to be stored
 *	in the file log if this is actually an update (typically from aenf
 *	after aerm on the same file name).
 * The "rcs -U" option is used to specify that the new RCS file is to have
 *	unstrict locking.
 */
history_create_command =
	"ci -f -u -d -M -m$c -t/dev/null $i $h,v; rcs -U $h,v";

/*
 * This command is used to get a specific edit back from history.
 * This command is always executed as the project owner.
 * The following substitutions are available:
 *
 * ${History}
 *	absolute path of the history file
 * ${Edit}
 *	edit number, as given by history_\%query_\%command
 * ${Output}
 *	absolute path of the destination file
 *
 * The "co -r" option is used to specify the edit to be retrieved.
 * The "co -p" option is used to specify that the results be printed on the
 *	standard output; this is because the destination filename will never
 *	look anything like the history source filename.
 */
history_get_command =
	"co -r'$e' -p $h,v > $o";

/*
 * This command is used to add a new "top-most" entry to the history file.
 * This command is always executed as the project owner.
 * The following substitutions are available:
 *
 * ${Input}
 *	absolute path of source file
 * ${History}
 *	absolute path of history file
 *
 * The "ci -f" option is used to specify that a copy is to be checked-in even
 *	if there are no changes.
 * The "ci -u" option is used to specify that an unlocked copy will remain in
 *	the baseline.
 * The "ci -d" option is used to specify that the file time rather than the
 *	current time is to be used for the new revision.
 * The "ci -M" option is used to specify that the mode date on the original
 *	file is not to be altered.
 * The "ci -m" option is used to specify that the change number is to be stored
 *	in the file log, which allows rlog to be used to find the change
 *	numbers to which each revision of the file corresponds.
 *
 * It is possible for a a very cautious approach has been taken, in which case
 * the history_put_command may be set to the same string specified above for
 * the history_create_command.
 */
history_put_command =
	"ci -f -u -d -M -m$c $i $h,v";

/*
 * This command is used to query what the history mechanism calls the top-most
 * edit of a history file.  The result may be any arbitrary string, it need not
 * be anything like a number, just so long as it uniquely identifies the edit
 * for use by the history_get_command at a later date.  The edit number is to
 * be printed on the standard output.  This command is always executed as the
 * project owner.
 *
 * The following substitutions are available:
 *
 * ${History}
 *	absolute path of the history file
 */
history_query_command =
	"rlog -r $h,v | awk '/^head:/ {print $$2}'";

/*
 * RCS also provides a merge program, which can be used to provide a three-way
 * merge.  It has an ouput format some sites prefer to the fmerge output.
 *
 * This command is used by aed(1) to produce a difference listing when a file
 * in the development directory is out of date compared to the current version
 * in the baseline.
 *
 * All of the command substitutions described in aesub(5) are available.
 * In addition, the following substitutions are also available:
 *
 * ${ORiginal}
 *	The absolute path name of a file containing the common ancestor
 *	version of ${MostRecent} and {$Input}.  Usually the version originally
 *	copied into the change.  Usually in a temporary file.
 * ${Most_Recent}
 *	The absolute path name of a file containing the most recent version.
 *	Usually in the baseline.
 * ${Input}
 *	The absolute path name of the edited version of the file.  Usually in
 *	the development directory.
 * ${Output}
 *	The absolute path name of the file in which to write the difference
 *	listing.  Usually in the development directory.
 *
 * An exit status of 0 means successful, even of the files differ (and they
 * usually do).  An exit status which is non-zero means something is wrong.
 *
 * The "merge -L" options are used to specify labels for the baseline and the
 *	development directory, respecticvely, when conflict lines are inserted
 *	into the result.
 * The "merge -p" options is used to specify that the results are to be printed
 *	on the standard output.
 */

merge_command =
	"set +e; \
	merge -p -L baseline -L C$c $mr $orig $in > $out; \
	test $? -le 1";

/*
 * Compare two files using fcomp.  The -w option produces an output of the
 * entire file, with insertions an deletions marked by "change bars" in the
 * left margin.  This is superior to context difference, as it shows the entire
 * file as context.  The -s option could be added to compare runs of white
 * space as equal.
 *
 * This command is used by aed(1) to produce a difference listing when file in
 * the development directory was originally copied from the current version in
 * the baseline.
 *
 * All of the command substitutions described in aesub(5) are available.
 * In addition, the following substitutions are also available:
 *
 * ${ORiginal}
 *	The absolute path name of a file containing the version originally
 *	copied.  Usually in the baseline.
 * ${Input}
 *	The absolute path name of the edited version of the file.  Usually in
 *	the development directory.
 * ${Output}
 *	The absolute path name of the file in which to write the difference
 *	listing.  Usually in the development directory.
 *
 * An exit status of 0 means successful, even of the files differ (and they
 * usually do).  An exit status which is non-zero means something is wrong.
 *
 * The non-zero exit status may be used to overload this command with extra
 * tests, such as line length limits.  The difference files must be produced
 * in addition to these extra tests.
 */
diff_command = "fcomp -w -s $original $input -o $output";

architecture =
[
	{
		name = "linux-i486";
		pattern = "Linux*86*";
	}
];

test_command = "$shell $filename $arch";


/*
 * 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.* etc/cook/project_files.*";
project_file_command = "rm -f etc/cook/project_files.*";


file_template =
[
	{
		pattern = [ "*.cc" ];
		body = "${read_file ${source etc/template/cc abs}}";
	},
	{
		pattern = [ "*.c" ];
		body = "${read_file ${source etc/template/c abs}}";
	},
	{
		pattern = [ "*.h", "*.g", "*.hh" ];
		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 = [ "*.[1-9]" ];
		body = "${read_file ${source etc/template/man abs}}";
	},
	{
		/* This one must be last. */
		pattern = [ "*" ];
		body = "${read_file ${source etc/template/generic abs}}";
	}
];

develop_begin_command = "ln -s $bl 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 \
.cook.fp \
etc/cook/change_files* \
etc/cook/project_files* \
etc/new.so \
etc/version.so \
include/patchlevel.h \
";

symlink_exceptions =
[
	".cook.fp",
	"etc/new.so",
	"etc/version.so",
	"include/patchlevel.h",
	"install-sh",
];

maximum_filename_length = 30;

filename_pattern_reject = [ "*.[cC]", "*.[cC]++" ];
