wiki:user-directories

Version 2 (modified by andreasw, 14 years ago) (diff)

first version - need to continue

Understanding the Directory Structure

The directory structure might differ for individual projects in COIN. However, we recommend to project managers to follow the layout below. The example below uses is the Clp project, which requires the CoinUtils project and some data files (to run the unit test program). We assume here that the base directory has been called Coin-Clp by the user.

If you download the source code for a project (here Clp), you will find the following structure.

Coin-Clp --- BuildTools
 |            |--- headers
 |
 |---------- Data
 |            |--- Netlib
 |            ---- Samples
 |
 |---------- CoinUtils
 |            |--- src
 |            |--- inc
 |            |--- test
 |            |--- [doc]      ([ ] means currently missing)
 |            ---- [examples]
 |
 |----------- Clp
              |--- src
              |--- inc
              |--- test
              |--- [doc]
              ---- examples

In the case directory of the package (Coin-Clp) resides the main configuration script and Makefile. A user should only issue commands in this directory. The scripts and Makefiles automatically recurse into the correct subdirectories.

The BuildTools directory contains files and scripts that are only necessary for project maintainers. In its subdirectories {{{headers}} are versions of the configuration header files with system dependent information (such as available of certain system header files). On a UNIX-like system, where the configuration script automatically generates the configuration header files for the system it is run on, the files in this directory are not used. However, if one uses other environments to build the COIN binaries (such as the MS Developer Studio), those header files are required.

Some projects require data files, in order to run the unit test program, or the provided examples. Those files reside in subdirectories of the Data directory.

For each COIN project that is required to build the desired packages, you will find a subdirectory with its name in the Coin-Clp base directory. In the main directory for each project (e.g., Clp) resides the configuration script for this project, as well as the main Makefile. However, you should not run those configuration scripts from these subdirectories; use the configuration scripts from the base directory instead. In the main directory for each project you find also package-specific inforation such as a README and AUTHORS file.

If the project manager of a COIN project follows our suggest directory structure, you will find the following subdirectories in the project's main directory (e.g., in Clp or CoinUtils above):

  • src: Here resides the source code for the package, possible distributed in further subdirectories, together with the Makefile (which is automatically called from the Makefiles below). Note, if you are a user for a COIN library, you should not include the header files from this directories, but instead "install" the package properly and get the headers from the installed {{include}} directory.
  • inc: If the system is using a configuration header file (which is automatically generated when you run the configuration script), it is put here. Again, if you are a user for a COIN library, do not include this file from here, but from the installed include directory.
  • test: We ask project maintainers to provide some test program(s) to be able to verify a successful compilation, so that a user can test that everything is working fine, before (s)he installs the libraries and other files. The code and possibly some data files for this unit test are located here.
  • doc: If documetation s provided for this COIN project, it should be found here.
  • examples: A package might contain some source code examples, for example to demonstrate how a user of a library can hook up his/her own down to the library. The source files and further information for this can be found here.

After you compiled the code successfully, you can "install" the package (and automatically all it's dependencies), using make install (see ????). By default, the files are install in the