/* * MANIFEST: use of SCons in project config file to build itself * * SCons has a Repository feature, introduced in SCons 0.09, that was * designed to work well with Aegis. */ /* * The build_command field of the project config file is used to invoke * the relevant build command. This command tells SCons where to find * the rules. * * The ${bl}/build/scons-src/src/engine points $SCONS_LIB_DIR points * SCons at the last-built scons-src package, which should have * everything. This means that, under Aegis, we're really using the * currently-checked-in baseline to build the current version. This * implies that using a new feature in our own SConscripts is a * two-stage process: check in the underlying feature, then check in a * change to use it in our SConscripts. * * The ${s src/script/scons.py} expands to a path into the baseline * during development if the script file is not in the change. * * Look in aesub(5) for more information about command substitutions. */ build_command = "SCONS_LIB_DIR=src/engine python ${Source src/script/scons.py} -Y${SUBSTitute : \\ -Y $Search_Path} date='${DAte %Y/%m/%d %H:%M:%S}' developer=${DEVeloper} version=${VERsion} change=${Change}"; /* * SCons removes its targets before constructing them, which qualifies it * for the following entry in the config file. The files must be removed * first, otherwise the baseline would cease to be self-consistent. */ link_integration_directory = true; /* * This is set temporarily to allow us to build using the SCons * currently checked in to the src directory. */ create_symlinks_before_build = true; /* * aegis - project change supervisor * This file is in the Public Domain, 1995, 1998 Peter Miller. * * MANIFEST: example of using rcs in the project config file * * The entries for the commands are listed below. 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. * * The ${quote ...} construct is used to quote filenames which contain * shell special characters. A minimum of quoting is performed, so if * the filenames do not contail shell special characters, no quotes will * be used. */ /* * 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. * The "rcs -kk" option is used to specify that keyword substitution is * disabled (only keyword names, not values, are substituted). */ history_create_command = "ci -f -u -d -M -m$c -t/dev/null ${quote $input} ${quote $history,v}; \ rcs -kk -U ${quote $history,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. * The "rcs -kk" option is used to specify that keyword substitution is * disabled (only keyword names, not values, are substituted). */ history_get_command = "co -kk -r${quote $edit} -p ${quote $history,v} > ${quote $output}"; /* * 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 ${quote $input} ${quote $history,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 ${quote $history,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. */ diff3_command = "set +e; \ merge -p -L baseline -L C$c ${quote $mostrecent} ${quote $original} \ ${quote $input} > ${quote $output}; \ test $? -le 1"; diff_command = "set +e; \ diff -c ${quote $original} ${quote $input} > ${quote $output}; \ test $? -le 1"; /* * We use a runtest.pl script to execute tests. This takes care of * massaging environment variables and the like to test against the * unpacked package in the current directory. * * Note that we must include $spe in the batch_test_command line (so * that Aegis thinks we're smart about testing ourselves against the * baseline) but we don't actually need it. Our tests always run * relative to the package built under the current directory, which * is set appropriately during a baseline test. So we just use the * proper aesub variable to comment out the expanded $spe. */ test_command = "python ${Source runtest.py Absolute} -p tar-gz -q ${File_Name}"; batch_test_command = "python ${Source runtest.py Absolute} -p tar-gz -o ${Output} ${File_Names} ${COMment $spe}"; new_test_filename = "test/CHANGETHIS.py"; /* * */ file_template = [ { pattern = [ "src/engine/*__init__.py" ]; body = "${read_file ${source template/__init__.py abs}}"; }, { pattern = [ "src/engine/*Tests.py" ]; body = "${read_file ${source template/Tests.py abs}}"; }, { pattern = [ "src/engine/*.py" ]; body = "${read_file ${source template/file.py abs}}"; }, { pattern = [ "test/*.py" ]; body = "${read_file ${source template/test.py abs}}"; }, ];