Provided by: shapetools_1.4pl6-14_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