mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-11 22:08:14 +00:00
following improvements: - Arch/OS/platform-specific files are now included/excluded via the preprocessor, rather than via the build system. This is more consistent (we use the pre-processor for small arch/OS/platform-specific chunks within files) and makes the build system much simpler, as the sources for all programs are the same on all platforms. - Vast amounts of cut+paste Makefile.am code has been factored out. If a new platform is implemented, you need to add 11 extra Makefile.am lines. Previously it was over 100 lines. - Vex has been autotoolised. Dependency checking now works in Vex (no more incomplete builds). Parallel builds now also work. --with-vex no longer works; it's little use and a pain to support. VEX/Makefile is still in the Vex repository and gets overwritten at configure-time; it should probably be renamed Makefile-gcc to avoid possible problems, such as accidentally committing a generated Makefile. There's a bunch of hacky copying to deal with the fact that autotools don't handle same-named files in different directories. Julian plans to rename the files to avoid this problem. - Various small Makefile.am things have been made more standard automake style, eg. the use of pkginclude/pkglib prefixes instead of rolling our own. - The existing five top-level Makefile.am include files have been consolidated into three. - Most Makefile.am files now are structured more clearly, with comment headers separating sections, declarations relating to the same things next to each other, better spacing and layout, etc. - Removed the unused exp-ptrcheck/tests/x86 directory. - Renamed some XML files. - Factored out some duplicated dSYM handling code. - Split auxprogs/ into auxprogs/ and mpi/, which allowed the resulting Makefile.am files to be much more standard. - Cleaned up m_coredump by merging a bunch of files that had been overzealously separated. The net result is 630 fewer lines of Makefile.am code, or 897 if you exclude the added Makefile.vex.am, or 997 once the hacky file copying for Vex is removed. And the build system is much simpler. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10364
204 lines
8.6 KiB
Plaintext
204 lines
8.6 KiB
Plaintext
INTRO
|
|
-----
|
|
This directory (nightly/) contains a simple, automatic build-and-test
|
|
system for Valgrind, intended to be run nightly by cron or a similar
|
|
program.
|
|
|
|
|
|
BASIC OPERATIONS
|
|
----------------
|
|
When run, the system checks out two trees: the SVN trunk from 24 hours ago
|
|
and the SVN trunk from now. ("24 hours ago" and "now" are determined when
|
|
the script starts running, so if any commits happen while the tests are
|
|
running they will not be tested.)
|
|
|
|
If the two trees are different (i.e. there have been commits in the past 24
|
|
hours, either to the trunk or a branch) it builds ("make"), installs ("make
|
|
install") and runs the regression tests ("make regtest") in both, and
|
|
compares the results. Note that the "make install" isn't necessary in order
|
|
to run the tests because the regression tests use the code built (with
|
|
"make") within the tree, but it's worth doing because it tests that "make
|
|
install" isn't totally broken. After checking both trees, it emails a
|
|
summary of the results to a recipient. All this typically takes something
|
|
like 30 minutes.
|
|
|
|
If the two trees are identical, the tests are not run and no results are
|
|
emailed. This avoids spamming people with uninteresting results emails when
|
|
no commits have happened recently.
|
|
|
|
|
|
SETTING UP
|
|
----------
|
|
To set up nightly testing for a machine, do the following.
|
|
|
|
(1) Check out just this directory from the repository, eg:
|
|
|
|
svn co svn://svn.valgrind.org/valgrind/trunk/nightly $DIR
|
|
|
|
where $DIR is the name of the directory you want it to be in.
|
|
|
|
Note that this doesn't check out the whole Valgrind tree, just the
|
|
directory containing the nightly testing stuff. This is possible
|
|
because the testing script doesn't check the code in the tree it belongs
|
|
to; rather it checks out new trees (within $DIR) and tests them
|
|
independently.
|
|
|
|
(2) Choose a tag that identifies the test results. This is usually the
|
|
machine name. We'll call it $TAG in what follows.
|
|
|
|
(3) Create a configuration file $DIR/conf/$TAG.conf. It is sourced by the
|
|
'nightly' script, and can define any or all of the following environment
|
|
variables. (In most cases, only ABT_DETAILS is needed.)
|
|
|
|
- ABT_DETAILS: describes the machine in more detail, eg. the OS. The
|
|
default is empty, but you should define it. An example:
|
|
|
|
export ABT_DETAILS="Ubuntu 9.04, Intel x86-64"
|
|
|
|
You could also use some invocation of 'uname' or something similar
|
|
to generate this string. Eg. on Ubuntu Linux this works nicely:
|
|
|
|
export ABT_DETAILS="`cat /etc/issue.net`, `uname -m`"
|
|
|
|
And on Mac OS X this works nicely:
|
|
|
|
export ABT_DETAILS=`uname -mrs`
|
|
|
|
The advantage of doing it like this is that if you update the OS on
|
|
the test machine you won't have to update ABT_DETAILS manually.
|
|
|
|
- ABT_CONFIGURE_OPTIONS: gives extra configure options. The default is
|
|
empty.
|
|
|
|
- ABT_EVAL: if provided, it must be the name of a shell script that
|
|
executes the shell command $1 with arguments $2 .. ${$#}. Allows to
|
|
compile and run the Valgrind regression tests on another system than
|
|
the system the 'nightly' script runs on. It is assumed that the remote
|
|
system shares the local filesystem tree through e.g. NFS. It is the
|
|
responsibility of the shell script to set the remote working directory
|
|
such that it matches the local current directory ($PWD).
|
|
|
|
- ABT_RUN_REGTEST: if provided, it must be the name of an argumentless
|
|
shell function (also specified in the $TAG.conf file) that will be used
|
|
to run the tests. If not specified, the usual "make regtest" will be
|
|
used.
|
|
|
|
- ABT_JOBS: allows parallel builds -- it's passed as the argument to
|
|
"make -j" when building Valgrind and the tests. The default is 1.
|
|
|
|
Note that the appropriate syntax to use in this file will depend on the
|
|
shell from which the $DIR/bin/nightly script is run (which in turn may
|
|
depend on what shell is used by cron or any similar program).
|
|
|
|
(4) Create a mailer script $DIR/conf/$TAG.sendmail. It must be executable.
|
|
It's used to send email results to the desired recipient (e.g.
|
|
valgrind-developers@lists.sourceforge.net) It must handle three command
|
|
line arguments.
|
|
|
|
- The first argument is the email subject line. It contains
|
|
$ABT_DETAILS plus some other stuff.
|
|
|
|
- The second argument is the name of the file containing the email's
|
|
body (which shows the tests that failed, and the differences between now
|
|
and 24 hours ago).
|
|
|
|
- The third is the name of the file containing all the diffs from
|
|
failing tests. Depending on the test results you get, you could
|
|
inline this file into the email body, or attach it, or compress and
|
|
attach it, or even omit it. The right choice depends on how many
|
|
failures you typically get -- if you get few failures, inlining the
|
|
results make them easier to read; if you get many failures,
|
|
compressing might be a good idea to minimise the size of the emails.
|
|
|
|
The best way to do this depends on how mail is set up on your machine.
|
|
You might be able to use /usr/bin/mail, or you might need something more
|
|
elaborate like using Mutt to send mail via an external account.
|
|
|
|
At first, you should probably just send emails to yourself for testing
|
|
purposes. After it's working, then sending it to others might be
|
|
appropriate.
|
|
|
|
(5) To run the tests, execute:
|
|
|
|
$DIR/bin/nightly $DIR $TAG
|
|
|
|
You probably want to put this command into a cron file or equivalent
|
|
so it is run regularly (preferably every night). Actually, it's
|
|
probably better to put that command inside a script, and run the script
|
|
from cron, rather than running $DIR/bin/nightly directly. That way you
|
|
can put any other configuration stuff that's necessary inside the
|
|
script (e.g. make sure that programs used by the mailer script are in
|
|
your PATH).
|
|
|
|
|
|
OUTPUT FILES
|
|
------------
|
|
If the tests are run, the following files are produced:
|
|
|
|
- $DIR/old.verbose and $DIR/new.verbose contain full output of the whole
|
|
process for each of the two trees.
|
|
|
|
- $DIR/old.short and $DIR/new.short contain summary output of the process
|
|
for each of the two trees. The diff between these two files goes in
|
|
$DIR/diff.short.
|
|
|
|
- $DIR/final contains the overall summary, constructed from $DIR/old.short,
|
|
$DIR/new.short, $DIR/diff.short and some other bits and pieces. (The name
|
|
of this file is what's passed as the second argument to
|
|
$DIR/conf/$TAG.sendmail.)
|
|
|
|
- $DIR/diffs holds the diffs from all the failing tests in the newer tree,
|
|
concatenated together; the diff from each failure is truncated at 100
|
|
lines to minimise possible size blow-outs. (The name of this file is
|
|
what's passed as the third argument to $DIR/conf/$TAG.sendmail.)
|
|
|
|
- $DIR/sendmail.log contains the output (stdout and stderr) from
|
|
$DIR/conf/$TAG.sendmail goes in $DIR/sendmail.log.
|
|
|
|
- $DIR/valgrind-old/ and $DIR/valgrind-new/ contain the tested trees (and
|
|
$DIR/valgrind-old/Inst/ and $DIR/valgrind-new/Inst/ contain the installed
|
|
code).
|
|
|
|
If the tests aren't run, the following file is produced:
|
|
|
|
- $DIR/unchanged.log is created only if no tests were run because the two
|
|
trees were identical. It will contain a short explanatory message.
|
|
|
|
Each time the tests are run, all files from previous runs are deleted.
|
|
|
|
|
|
TROUBLESHOOTING
|
|
---------------
|
|
If something goes wrong, looking at the output files can be useful. For
|
|
example, if no email was sent but you expected one, check sendmail.log to
|
|
see if the mailer script had a problem. Or check if unchanged.log exists.
|
|
|
|
Occasionally the SVN server isn't available when the tests runs, for either
|
|
or both trees. When this happens the email will be sent but it won't be
|
|
very informative. Usually it's just a temporary server problem and it'll
|
|
run fine the next time without you having to do anything.
|
|
|
|
Note that the test suite is imperfect:
|
|
- There are very few machines where all tests pass; that's why the old/new
|
|
diff is produced. Some of the tests may not be as portable as intended.
|
|
- Some tests are non-deterministic, and so may pass one day and fail the
|
|
next.
|
|
|
|
Improving the test suite to avoid these problems is a long-term goal but it
|
|
isn't easy.
|
|
|
|
|
|
MAINTENANCE
|
|
-----------
|
|
The scripts in the nightly/ directory occasionally get updated. If that
|
|
happens, you can just "svn update" within $DIR to get the updated versions,
|
|
which will then be used the next time the tests run. (It's possible that
|
|
the scripts will be changed in a way that requires changes to the files in
|
|
$DIR/conf/, but we try to avoid this.)
|
|
|
|
If you want such updates to happen automatically, you could write a script
|
|
that does all the steps in SETTING UP above, and instead run that script
|
|
from cron.
|
|
|
|
|