RolandWolters/cvs-example/Anatomy

From FedoraProject

Jump to: navigation, search

The anatomy of a package checkout

There are two all-important modules that are of concern to developers:

  • The common module contains the Makefile rules for downloading, unpacking, building, testing and packaging your rpm as well as various scripts used in the management of a package module.

In the common module, Makefile.common is the workhorse of each rpm build. This file is meant to be included from each module's own Makefile and provides a host of make targets that are explained in detail later in this document.

  • The rpms module is the main container for all the package modules. The structure of a package module is explained below.

General Structure of a checked-out package

All non-tarball/non-large components of a source package will be kept in CVS. All tarball and large components (think: pristine upstream sources) will be kept in the look-aside repository, and an md5sum of their contents will be kept in CVS in the sources file.

system-config-display/
|-- FC-2
| |-- Makefile
| |-- branch
| |-- sources
| <code>-- system-config-display.spec
|-- Makefile
|-- FC-3
| |-- Makefile
| |-- branch
| |-- sources
| <code>-- system-config-display.spec
|-- common
| |-- Makefile.common
| |-- README
| |-- build.map
| |-- cvs-import.sh
| <code>-- sample.cvsdistrc
|-- devel
| |-- Makefile
| |-- sources
| <code>-- system-config-display.spec
<code>-- import.log

For example, the CVS repository on the FC-2 branch for a small package might contain:

Makefile foo.spec branch sources

The ./sources file lists of the sources that are stored in the lookaside cache; in this case, it would just consist of:

3da5afb85bcdce51113d4b32bd79093f foo-1.2.3.tar.gz

The look-aside repository will contain a directory named foo (after the name of the package module) and a copy of the foo-1.2.3.tar.gz file referenced from the sources file. To check out the sources stored in the lookaside cache, you can simply do a

make sources

in the package checkout. make sources is also the default Makefile target, so a simple make will also have the same effect.