Provided by: shapetools_1.4pl6-15_amd64 bug

NAME

       shape_RMS - Introduction to the shapeTools Release Management System

SYNOPSIS

       shape rms - show synopsis of shapeTools Release Management System Functions

DESCRIPTION

       The  shapeTools  Release  Management  System  (shape_RMS)  helps constructing and keeping track of system
       releases in complex (multi programmer) software development projects. This introductory manual page gives
       an overview of the shape_RMS functionality and helps getting started with the release management  system.
       When  reading  this introduction, you should either be familiar with the basics of the shapeTools version
       control system and the shape configuration management program, or you should have the shapeTools  version
       control  and the shape(1) manual pages at hand.  Complementary to this short reference manual page, there
       is a tutorial introduction to the usage of shapeTools, explaining how to introduce  and  use  the  shape-
       toolkit's functionality cleverly in a multi programmer project.

       The cooperation and release management model of a software development project is highly dependent on the
       nature  of  the project. Factors like the programming language used, the size of the programmer team, the
       nature of the developed software, or  local  preferences  strongly  influence  this  model.  The  release
       management  system  as  currently  implemented,  will in most cases not fit all your needs.  Take it as a
       prototype to begin with and try to adapt it little by little. In the current state, modifying the release
       management system requires good skills in Makefile and Shapefile writing and a  lot  of  patience.  Think
       twice  about every modification you perform ! Establishing a good cooperation and release model is not as
       easy as it might look like at the first glance.

       The shapeTools RMS imposes a general frame for the project structure and the development process within a
       software development project. This frame is necessary for the release management system to determine it's
       workpieces and to be able to systematically document the evolution of system configurations. It helps the
       developer to have all system configuration and building actions performed automatically, so that  he  can
       concentrate on his development work, rather than code management activities.

       All functions of the shapeTools RMS are performed by the shape(1) program.  This interprets a description
       file  (the  Shapefile)  and  performs the action associated with a target name given with the shape call.
       Usually, you may perform a bunch of macro definitions together with the  shape  call.  These  definitions
       overwrite  internal  default  macro  settings.  Hence,  calls  of  the  shape_RMS  have  the general form
       shape target [MACRONAME=value ...].

       In detail, shape_RMS automatically performs the following actions, each of  which  is  described  on  the
       referenced manual page.

         •
           System building, installation, and cleaning up (shape_build(1)).

         •
           Generation of prereleases of subsystems or the whole system (shape_releas(1)).

         •
           Generation of releases of subsystems or the whole system (shape_releas(1)).

         •
           Constructing patches to existing releases (shape_patch(1)).

         •
           Reinstantiation of old system releases (shape_releas(1))

         •
           Creation of shippable packages (tar or shar files, etc.)  (shape_tar(1)).

         •
           Determination of file dependencies (shape_depend(1)).

       Additionally, it provides

         •
           Standard version selection rules (shape_stdrul(7)).

         •
           A project wide unified variant control raster (shape_stdvar(7)).

         •
           Automatic generation of (pre)release identifications.

         •
           Storing configuration management specific information with each system component.

         •
           Templates for Shapefiles and Makefiles (shape_tmpl(7)).

       The Project Structure

       The  general  project  structure  is  hierarchical.  Each  node  in the hierarchy consists of a number of
       components and a number of subsystems. The top node in the hierarchy represents the whole  system.  These
       three  terms  -  node  (or  system node), component and subsystem - will be used throughout all shape_RMS
       manual pages. A subsystem and a system node are the same thing in principle, consisting of components and
       subsystems. The notions rather distinguish two different points of view.

       The hierarchical structure is reflected in a UNIX directory tree with directories representing nodes  and
       files  as  system  components. Not each directory necessarily holds a whole system node. Single nodes may
       spread across multiple directories  forming  a  subtree.  The  top  directory  of  this  subtree  is  the
       representant of the node.  Hence, the system structure and the directory tree may differ.

       The  project structure and it's components is described by the system model. The system model consists of
       a interwoven collection of Shapefiles and Makefiles. Each node is equipped  with  one  Makefile  and  one
       Shapefile containing node specific system model information. Additional system model information (such as
       standard  version  selection  rules  or project wide variant definitions) is maintained in a project wide
       central place and accessed through shape's include facility.

       The functional profile of the system model is reflected by predefined  standard  targets  in  the  system
       model  files  (Shape-  and Makefiles). These targets are defined either in the individual (node specific)
       Shape- and Makefiles or in one of the included Shapefile fragments maintained project wide  Shapefile.  A
       set  of  standard macros and implicitly a set of conventions that underlie those macros comprise the data
       interface between the various modules of the system model.  Conformance  with  the  necessary  underlying
       conventions and assumptions is facilitated by templates for Shape- and Makefiles that are provided to the
       programmers  of the various system parts (see shape_tmpl(7)).  Using these templates makes writing system
       model information almost trivial.

       According to the templates, the Makefile components contain most macro definitions, the  usual  component
       dependency  definitions  and  most  of  the  explicit  transformation  rules.  The system of Makefiles is
       carefully designed to be selfcontained enough to be used without shape(1). This is necessary to provide a
       build procedure for compiling and installing software system outside the development area (where shape(1)
       usually is not available).

       The Shapefile components contain information that is specifically related  to  shape's  special  features
       that  are  unavailable in make (e.g.  version selection, variant handling). The complete system of Shape-
       and Makefiles is free of redundancy, making them  easier  to  maintain.   The  Shapefiles,  in  order  to
       represent  a  complete  system  model, contain include directives to include all significant system model
       information that is stored in other objects, namely  the  centrally  maintained  include  files  and  the
       Makefiles.

       The  development work usually happens in the developers' private workspaces, with the results gathered in
       a central location, the projects source repository. The source repository is a  complete  directory  tree
       (complete  in  the  sense  of  incorporating  each developed system node) representing the whole project.
       Private workspaces and corresponding subdirectories in the  source  repository  are  linked  together  by
       common  AtFS  subdirectories  (see  vcintro(1))  holding all saved work results (versions). This mechanis
       makes files from a private workspace get visible in the source repository, as soon as the developer saves
       a copy of a file using the shapeTools version control system.  Development work may also  happen  in  the
       source  repository.  In  this  case,  even  the  busy  version of each workpiece is visible in the source
       repository, which doesn't disturb.

       Each node  in  the  system  must  contain  a  release  identification  file.   This  file  is  maintained
       automatically  and  should never be modified manually. It is also to be derived from a given template and
       contains a string citing the node name and the actual release number.   With  each  new  release,  a  new
       version of the release identification file is generated. In software development, it typically contains a
       routine  returning  the  release identification string mentioned above.  This mechanism automates release
       identification in software systems.

       Beside private workspaces and source repository, a project has a partial release area and a release area.
       Both areas are capable to hold a complete copy of the  project's  source  tree  as  UNIX  files  (without
       version  control).   The  partial  release  area holds the most recent (pre-)release of each system node.
       Every time, a system node gets prereleased or released, a copy of the involved source versions is written
       to the partial release area.  The release area holds prereleases and releases of the whole system. It  is
       only  filled,  when  a  (pre-)release  building  procedure  is  triggered from the top node of the source
       repository.  You find some more details on this topic in the shape_releas(1) manual page.

       The Development Process

       The general development process imposed by the shape  release  management  system  is  described  by  the
       following pattern.

         1)
           local development and test in private workspaces with local versions (save)

         2)
           individual prepublication of single node system (node prerelease)

         3)
           global integration and integration testing (top prerelease)

         4)
           incorporation  of  change  requests  from  global  integration  into  single  node  systems and final
           publication of node systems (node release)

         5)
           global release (top release)

         6)
           local introduction of bug fixes in the released system (node patch prerelease).

         7)
           global integration of patches and integration testing (top patch prerelease).

         8)
           local releases of patched node system releases (node patch release).

         9)
           generating a global patched release (top patch release).

       Of course, there may be several loops in the above list. First, the construction of  node  (pre-)releases
       happens  recursively  from the leaves of the system source tree to the top. Second, several iterations of
       the node/top prerelease mechanism will usually be necessary, to come to a stable final release.

       Individual development and test happens in private  workspaces  of  individual  developers.  A  developer
       typically  uses local busy versions and the latest released components of all other system parts he needs
       (e.g. libraries) in order to test his component. Intermediate results of individual development work  can
       be saved into the version base. The corresponding status of emerging versions is saved.

       When  the developer thinks that a stable state of development is reached or a development transaction has
       been completed he performs an individual prerelease of his work results.  Such a release of work  results
       consists  of  saving  all  yet unsaved busy versions into the version base, marking all components of the
       worked-upon subsystem (i.e. all most recent versions) with  a  common,  unique,  and  well-defined  local
       releasename,  and assigning the status proposed to all these versions. These versions, as residing in the
       central source repository are globally accessible for the system integrator.

       Global integration and integration testing is performed by a special user, the integrator. The integrator
       does typically not do any actual development work himself. In fact the integrator is  a  conceptual  user
       (i.e.  a  special  userId)  who  acts  in  the  central  source  repository  and  hence has access to all
       individually released components and subsystems of the developed system. Integration testing gathers  all
       most  recent  individual  prereleases  (of  components  and  subsystems)  and creates a prerelease of the
       developed system. All components that are part of a prerelease are marked  with  a  common,  unique,  and
       well-defined global prereleasename, and assigned the version status published.

       The purpose of pre-releasing a system prior to actually releasing it, is to make sure that all components
       interoperate  properly,  the  system  installation  procedure works properly, the new release does build,
       install, and run correctly on all supported platforms without the risk of assigning (and thereby wasting)
       the planned official releasename prematurely. During integration testing, no new features or enhancements
       should be allowed to be incorporated into the system. The only sort of modification request that shall be
       processed during this phase are bugs  in  the  installation  procedure  and  portability  problems  (this
       includes fixing of bugs that are found during porting).

       Once  the  prerelease  cycle  has  produced  a  stable  state  of the entire system, it can be officially
       released. The official release procedure is similar to the prerelease procedure, but marks all components
       with the planned official releasename, and assigns the version status frozen to them.

       Setting up a Project

       In the following you find two checklists. The first one says, what to do when  initiating  a  project  as
       project administrator. The second one helps , connecting to an established project as developer.

       Checklist for initial setup:

       A1)
           Create  a  (UNIX)  user to be project owner. This should be a conceptual user, not a natural one. The
           home directory of this user will be the project home.

       A2)
           Define a project group (in /etc/group) and add all project participants to this group.

       A3)
           Set up the central project source repository in project owner's home.

             •    Create development directory

             •    Create bin, lib and include directory in development directory.

             •    Install system source tree with src directory in the development directory as root.

             •    Create a directory named AtFS in each directory of the system source tree.

       A4)
           Set up release and partial release areas by creating the directories release and  partial.release  in
           project owner's home.

       A5)
           Make all previously created directories group-writable.

       A6)
           Create  a directory named shape in development/lib and copy the shape_RMS templates and include files
           to that directory.
           These are Shapefile.tmpl, Makefile.tmpl, Release.tmpl, release.c.tmpl, stdconf, stdtargets,  stdrules
           and stdvar.

       A7)
           Adjust macro default values in Makefile.tmpl and Shapefile.tmpl in development/lib/shape according to
           local  installation.  The shape_tmpl(7) manual page gives you information about the semantics of each
           macro definition. The Makefile template defines

             •    base paths for source repository, partial release area, release area, and system  installation
                  locations.

             •    a description of the host system environment.

             •    tools and tool options to be used.

             •    libraries to be used.

             •    default build and installation actions.

       A8)
           Check  the  stdvar (project wide variant definitions) file.  See shape_stdvar(7) for more information
           about this.

       If you stick strictly to the structuring and release model as implemented  in  the  templates  and  shape
       include  files given in the shapeTools distribution, your job is done now. Additional adaptations require
       changes to be performed manually on the files in shape/lib.  Before you do this, we recommend reading the
       shapeTools tutorial first.  Especially the Makefile template you should set up very carefully.   As  most
       make(1)  implementations  do  not  support  inclusion  of  external parts into Makefiles, local Makefiles
       (derived from the template) hold a lot  of  information  that  should  better  be  maintained  centrally.
       Modifications  to  the  Makefile  template  made  after  having  already derived local Makefiles from it,
       requires patching the changes into each local Makefile.  This  is  a  costly  and  error  prone  job.  We
       recommend  to use patch(1) for this, which definitely isn't what you would desire, but there is no better
       solution yet.

       A9)
           define version selection rules

       A10)
           implement additional actions in stdtargets or stdconf.

       A11)
           redefine project wide policies in Makefile.tmpl, Shapefile.tmpl, or stdconf.

       Don't try to find any additional documentation guiding through points A9-A11. There is none yet.

       Checklist for developers, when connecting to an existing project:

       D1)
           Make sure to be member of the project group

       D2)
           Create private development directory/ies

       D3)
           Connect to the central  source  repository  by  establishing  a  link  named  AtFS  from  your  local
           development  directory  to  the corresponding directory in the central source repository. This should
           either be a symbolic link to the AtFS directory there, or, on systems where no symbolic link facility
           is available, a file with the appropriate pathname as contents. The latter will be interpreted by the
           shapeTools version control system as surrogate for a symbolic link.

       D4)
           Copy Makefile.tmpl from project_home/lib/shape as Makefile to your development direcory and  fill  in
           the necessary macro definitions by editing the file. If you already have a Makefile, don't try to use
           that further. You will be much more lucky with a Makefile derived from the template.

       D5)
           Copy  Shapefile.tmpl  as Shapefile to your development direcory.  Usually, no modifications should be
           necessary there.

       D6)
           Copy one of Release.tmpl or release.c.tmpl as Release, resp. release.c to your local directory.

       D7)
           Create an empty Dependencies file and run shape depend (1) afterwards. Check, if your  project  setup
           supports automatic generation of the Dependencies file. If not, you have to maintain it manually.

       D8)
           Run  shape  rms  (1) to get a synopsis of the functions provided by the shapeTools release management
           system.

ATTRIBUTES

       As the shape toolkit has an Attributed Filesystem (AtFS, see afintro(3)) as data storage base,  shape_RMS
       stores  it's  internal management information as attributes attached to the system components. Attributes
       consist of name and a list of values.  Configuration management related attributes are

       __SymbolicName__
              Each component version in the system carries a set of  symbolic  names  uniquely  identifying  the
              (pre-)release(s),  it  is part of. This list may be empty, when a version was never declared to be
              part of a (pre-)release.  __SymbolicName__ is an attribute with a special meaning  throughout  all
              programs in shapeTools. For more information see the -symbolic option of vl(1) and vadm(1).

       nodename
              Is  the name of the node system, the component version belongs to as defined in the NODENAME macro
              in the subsystem's Makefile. Only the release number generator file carries this attribute.

       lastrelease
              The unique name of the last generated prerelease or release. This attribute gets attached only  to
              versions  of  the  release  number generator file. In fact, it makes sense only at the most recent
              version of the release number generator file.

FILES

       Shapefile.tmpl- Template for subsystem specific Shapefiles
       Makefile.tmpl- Template for subsystem specific Makefiles
       stdconf     - standard configuration management tagets
       stdrules    - standard version selection rules
       stdtargets  - common basic targets
       stdvar      - project wide variant raster

SEE ALSO

       shape_build(1), shape_depend(1), shape_patch(1), shape_releas(1), shape_tar(1),
       shape_stdrul(7), shape_stdvar(7), shape_tmpl(7)
       Tutorial Introduction to the shape-toolkit

AUTHOR

       Andreas Lampen, Tech. Univ. Berlin (Andreas.Lampen@cs.tu-berlin.de)

                   Technical University Berlin
                   Computer Science, Secr. FR 5-6
                   Franklinstr. 28/29
                   D-10587 Berlin, Germany

19.7.125                                                                                            SHAPE_RMS(1)