Abstract for CHEP98 David Adams 20may98 1550 CTEST: an interface for building C++ packages D. L. Adams CTEST provides a simple interface to provide instructions for building a package of C++ software. The user-provided interface consists of a series of ascii input files which accompany the usual source files. The user is limited to performing only those tasks supported by CTEST but is saved from having to provide complicated instructions (e.g. make commands), duplicating those instructions for each package and porting those instructions to other environments. The latter is relevant to moving between experiments or between make-based procedures and other development environments. Of course, someone (ideally someone else) must have implemented CTEST in the desired environments. Note that ctest does not provide a full development environment: it provides a standardized interface between code and any supported environment. The instructions for initiating a build are provided by the environment. For example the command line "gmake pkg.lib" in one environment or clicking a button in another. Here we list a few of the input files and their meaning to give a feeling for the interface. Note that all input files are optional and the absence of a file is equivalent to an empty file. Each file consists of a list of values with one value per line. The file SUBDIRS list subdirectories which are to be processed. Subdirectories which are not listed will be ignored. The processing of a subdirectory is completely defined by the input files it contains. The input files in child or parent directories have no effect (except that the parent must include it in SUBDIRS). At present, a directory containing a SUBDIRS entry may not contain any other instructions. Subdirectories are required if different parts of the package (e.g. source and test) are to be linked against different libraries. The file LIBRARIES provides an ordered list of libraries which are to be included when linking. The names do not include standard prefixes or suffixes: on a unix machine the name xyz would be associated with libxyz.a (-lxyz on the link line). Special names (such as cern) may reference multiple libraries and/or cause external directories to be added to the library search path. The file COMPONENTS lists C++ components consisting of header, source and test files. The source is compiled and put in the package library and the main in test is compiled, linked against the object or library and declared passed if it returns zero. In addition to the above, it is possible to create or link against bare objects. There is support for integrated tests (those which test more than a single component), installing scripts and building binaries. There is also a D0-specific extension for generating D0OM linkage files. The original motivation for CTEST was to provide a layer over SoftRelTools at D0 and an implementation exists for that environment. Other implementations will be generated as needed. CTEST is described at http://www.bonner.rice.edu/adams/ctest.