Software Prerequisites.

The BOINC build system uses autoconf 2.57 and automake 1.7.

Maintainer-mode

The BOINC configuration system enables an Automake feature called maintainer-mode. This is enabled at configure-time. "; list_start(); list_heading("command line", "Maintainer mode?", "Effect"); list_item("configure", "Disabled", "If you modify Makefile.am, you need to regenerate Makefile.in using automake, and your machine-dependent Makefile using config.status. (The boinc/_autosetup script takes care of all of these; run this script every time you modify a makefile.)" ); list_item("configure --enable-maintainer-mode", "Enabled", "If you modify Makefile.am, a chain of dependencies automatically generates Makefile.in and Makefile when you 'make'. This is useful if you modify Makefiles a lot but could be annoying if you don't have automake installed, have different versions of it among developers, or check in Makefile.in to CVS at the same time (in which case the timestamp for it will confuse the automatic dependencies)." ); list_end(); echo "

Source layout

The top-level Makefile.am contains the SUBDIRS= line which sets up directory recursion, and the rules for creating source distributions.

Each subdirectory's Makefile.am contains the rules for making the binaries and libraries in that directory and any extra files to distribute.

Usually you will want to run make from the toplevel (the directory containing the file configure), but sometimes it is useful to run make and make check in certain subdirectories (e.g. client/).

Expansion

If you create a new directory with another Makefile.am, you should A) make sure the directory is referenced by a SUBDIRS= line from its parent Makefile.am and B) add it to the AC_CONFIG_FILES directive in configure.ac.

Target machine configure/make

To compile, use the usual
  ./configure
  gmake

Example using multiple build directories under a single source directory (assuming the same directory is mounted on milkyway and shaggy):

    milkyway$ mkdir build
    milkyway$ mkdir build/solaris2.7
    milkyway$ cd build/solaris2.7
    milkyway$ ../../configure
    milkyway$ gmake

    milkyway$ mkdir build/solaris2.7-gcc3
    milkyway$ cd build/solaris2.7-gcc3
    milkyway$ ../../configure CC=/opt/misc/gcc-3.0.4/bin/gcc CXX=/opt/misc/gcc-3.0.4/bin/g++
    milkyway$ gmake

    shaggy$ mkdir build/linux
    shaggy$ cd build/linux
    shaggy$ ../../configure
    shaggy$ gmake
  

Testing

To test the code:
  gmake check
This runs the python tests in the test/ directory. Old PHP-based tests in test/are also available to be run individually but not currently maintained.

Version number

To set the BOINC client version number:
  set-version 7.17
in the BOINC top-level source directory. This updates the AC_INIT line in configure.ac and regenerates files that use the version numbers (config.h, py/version.py, test/version.inc, client/win/win_config.h, Makefiles)

Archival/source distribution

To make source distributions:
  gmake dist

Strict warning

To compile BOINC with strict compiler warnings, use
./configure CXXFLAGS=\"-Wall -W -Wmissing-prototypes -Wstrict-prototypes -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -fno-common -Wnested-externs\"
"; page_tail(); ?>