[comp.sources.misc] v18i008: libhoward - libhoward portability library, Patch01b/3

howard@ericsson.se (Howard Gayle) (04/10/91)

Submitted-by: Howard Gayle <howard@ericsson.se>
Posting-number: Volume 18, Issue 8
Archive-name: libhoward/patch01b
Patch-To: libhoward: Volume 8, Issue 80-87,96

#! /bin/sh
# This is a shell patch script from revision 1.7 to revision 2.3.
# Remove anything before this line, then feed it into a shell, for
# example by typing "sh file".  This script was created by:
# $Header: freezePch.b,v 1.2 89/09/25 07:01:13 howard Exp $
#
patch -c MakeCommon << 'EOF'
***************
*** 1,6 ****
  # MakeCommon - common definitions for uMakefile and Makefile for howard
  #
! # $Header: MakeCommon,v 1.3 89/09/22 13:46:45 howard Exp $
  #
  # Copyright 1989 Howard Lee Gayle
  # This file is written in the ISO 8859/1 character set.
--- 1,6 ----
  # MakeCommon - common definitions for uMakefile and Makefile for howard
  #
! # $Header: /usr/local/dist/free-dist/howard/2/work/RCS/MakeCommon,v 1.4 91/02/27 08:52:33 howard Exp $
  #
  # Copyright 1989 Howard Lee Gayle
  # This file is written in the ISO 8859/1 character set.
***************
*** 40,46 ****
  
  
  # C include file search path.
! INCLUDES=-I/usr/local/local-include -I/usr/local/free/howard/1/include
  
  # Special C programs.  These are *not* library functions.
  SCS = mk-smp.c
--- 40,46 ----
  
  
  # C include file search path.
! INCLUDES=-I/usr/local/local-include -I/f/howard/2/include
  
  # Special C programs.  These are *not* library functions.
  SCS = mk-smp.c
EOF

patch -c Makefile << 'EOF'
***************
*** 1,8 ****
  # Makefile - main GNU make file for -lhoward and include/howard
  #
! # $Header: Makefile,v 1.24 89/09/23 15:23:28 howard Exp $
  #
! # Copyright 1989 Howard Lee Gayle
  # This file is written in the ISO 8859/1 character set.
  #
  # This program is free software; you can redistribute it and/or modify
--- 1,8 ----
  # Makefile - main GNU make file for -lhoward and include/howard
  #
! # $Header: /usr/local/dist/free-dist/howard/2/work/RCS/Makefile,v 1.25 91/02/26 14:25:51 howard Exp $
  #
! # Copyright 1989, 1991 Howard Lee Gayle
  # This file is written in the ISO 8859/1 character set.
  #
  # This program is free software; you can redistribute it and/or modify
***************
*** 86,94 ****
  
  # Bourne shell files.
  BS := $(filter %.b,$(SRCS))
- 
- # BibTeX bibliography file.
- BIBS := $(filter %.bib,$(SRCS))
  
  # BibTeX bibliography file.
  BIBS := $(filter %.bib,$(SRCS))
--- 86,91 ----
EOF

patch -c README << 'EOF'
***************
*** 1,4 ****
! $Header: README,v 1.3 89/09/23 15:25:11 howard Exp $
  
        DESCRIPTION
  
--- 1,4 ----
! $Header: /usr/local/dist/free-dist/howard/2/work/RCS/README,v 1.7 91/04/03 13:19:03 howard Exp $
  
        DESCRIPTION
  
***************
*** 14,19 ****
--- 14,26 ----
  This is described in a LaTeX report.
  
  
+       LICENSE
+ 
+ The C library is currently under the GNU General Public
+ License.  I intend to place it under the GNU library license
+ when that is released.
+ 
+ 
        RATIONALE
  
  Many people make each software system they release stand-alone,
***************
*** 34,63 ****
  
  ANSI-C float.h and limits.h include files must be on the C
  include file search path.  If you don't have them, you can use
! Steven Pemberton's config program to make one.  It was posted to
! comp.sources.misc on 30 April 1989 as volume 6 issue 96, archive
! name config2.
  
! The makefiles use features that may only be in GNU make, version
! 3.54 or later.
  
  Chris Tweed's sets command must be on the command search path.
  It was posted to comp.sources.unix on 24 February 1988 as volume
  13, issue 68, archive name sets.
  
! Some of the documentation is in LaTeX.
  
  The Bourne shell scripts use if [...] syntax instead of explicit
! calls to test.  You might need to link test to [ to make this
! work.
  
  
        INSTALLATION
  
! It will be much easier to understand the installation if you
! first read my report.  It is in the LaTeX source file
! hetero.tex.  If you have LaTeX installed, you can format it like
! this.
     % latex hetero
     % bibtex hetero
     % latex hetero
--- 41,91 ----
  
  ANSI-C float.h and limits.h include files must be on the C
  include file search path.  If you don't have them, you can use
! Steven Pemberton's enquire program to make them.  It was posted
! to comp.sources.misc on 16 December 1990 as volume 15 issue 95,
! archive name enquire-4.3.
  
! The makefiles work with GNU make version 3.59, and I hope
! they'll continue to work with later versions of GNU make.  The
! makefiles won't work with SunOS 4.0 or 4.1 make.  I suspect that
! only GNU make has all the required features, but I haven't tried
! all other makes, so I can't be sure.  GNU make can be ordered
! from:
!    Free Software Foundation, Inc.
!    675 Mass Ave
!    Cambridge, MA 02139
!    USA
  
  Chris Tweed's sets command must be on the command search path.
  It was posted to comp.sources.unix on 24 February 1988 as volume
  13, issue 68, archive name sets.
  
! The yrkw.c file includes <tzfile.h> in order to get the macro
! TM_YEAR_BASE.  If your system does not have
! /usr/include/tzfile.h then create this one-line version of
! tzfile.h and place it somewhere on the include search path, e.g.
! /usr/local/include:
  
+ #define TM_YEAR_BASE 1900
+ 
+ Some of the documentation is in LaTeX.  The latest UNIX TeX
+ distribution tape, including LaTeX, can be ordered from:
+    Northwest Computing Support Center
+    DR-10, Thomson Hall 35
+    University of Washington
+    Seattle, Washington 98195
+    USA
+ 
  The Bourne shell scripts use if [...] syntax instead of explicit
! calls to the test command.  You might need to link test to [ in
! order to make this work.
  
  
        INSTALLATION
  
! It will be easier to understand the installation if you first
! read my report.  It is in the LaTeX source file hetero.tex.  If
! you have LaTeX installed, you can format it like this:
     % latex hetero
     % bibtex hetero
     % latex hetero
***************
*** 70,83 ****
  below.
  
  Create a directory for compiling on this machine type.  I'll
! call it /usr/local/free/howard.
  
  Find out the version.  Look at the Header line (typically the
! first line) of the FREEZE file.  The version is the first
! number, and ends at the period.
  
! Create a subdirectory for this version. e.g.
! /usr/local/free/howard/1.
  
  Create the following subdirectories for results:
     bin             Installed Bourne shell scripts.
--- 98,112 ----
  below.
  
  Create a directory for compiling on this machine type.  I'll
! call it /f/howard.
  
  Find out the version.  Look at the Header line (typically the
! first line) of the FREEZE file.  The version is the first number
! after the path name, and ends at the period.  For example, this
! line has version 2:
!    Header: /usr/local/free-dist/howard/2/work/RCS/FREEZE,v 2.1 91/02/26 09:45:19 howard Exp
  
! Create a subdirectory for this version. e.g. /f/howard/2.
  
  Create the following subdirectories for results:
     bin             Installed Bourne shell scripts.
***************
*** 89,151 ****
     tex             Installed TeX & LaTeX macro files.
  
  For example:
!    % cd /usr/local/free/howard/1
     % mkdir bin include include/howard man man/{cat,man}{1,3} tex
     
! Create a subdirectory for doing the actual compilations.  I'll
! call it sun34:
!    % mkdir sun34
  
! Bootstrap the Bourne shell scripts into their installation
! directory.  Let $DD be where the master source is:
     % cp $DD/*.b bin
     % cd bin
     % /bin/ls -1 | sed -e 's;\.b$;;' | xargs -i= -t mv =.b =
     % chmod +x *
     % cd ..
!    
  If you want to override the behavior of any of the Bourne shell
  scripts for portability or because of different local policies,
  this is a good time to do so.  I suggest putting locally changed
  copies in a separate bin directory that is on the command search
  path *before* the bin directory in which the scripts will be
! installed, e.g. create /usr/local/free/howard/1/local-bin, and
! put it on the command search path before
! /usr/local/free/howard/1/bin.  Here is a guide to possible local
! changes:
  
!    mkAr  This makes the ar archive library.  It is very BSDish
!          and must change for the `lorder $* | tsort` crowd.
  
!    mkCIncl    These both assume that calling /lib/cpp -M is the
!    mkLibIncl  way to find out what include files a C source
!               file uses.  Change them if that's wrong for your
!               system.
  
!    mkDistI  This is how files get from the master source
!             directory to the compilation directory.  I use
!             symbolic links.
  
!    mkInstF  This is how non-executable files get installed.  I
!             use hard links.  Shell scripts count as
!             non-executable.
  
!    mkInstX  This is how executable files get installed.  I
!             use hard links.  This would be the place to strip
!             symbol tables.  Shell scripts are *not* considered
!             to be executable.
  
!    mkLaTeXPS  This formats a LaTeX file, including BibTeX
!               processing, all the way to a printable
!               representation, which for me is PostScript.  If
!               you want some other final format, I would suggest
!               writing a separate shell script.
!             
!    mkManPS  This formats a manual entry to PostScript, using
!             TransScript.  If you have some other way to format
!             manual entries, I would suggest writing a separate
!             shell script.
  
  If you write original software with these tools, you may also
  want to change mkDistO, which places files in the distribution
  directory.  I use hard links for this.  Also, the following are
--- 118,210 ----
     tex             Installed TeX & LaTeX macro files.
  
  For example:
!    % cd /f/howard/2
     % mkdir bin include include/howard man man/{cat,man}{1,3} tex
     
! Create a subdirectory for doing the actual compilations.  For
! my example, I'll use sun3-411, corresponding to a Sun-3 running
! SunOS 4.1.1:
!    % mkdir sun3-411
  
! Install the Bourne shell scripts into the correct destination
! directory.  The first two bytes of each .b file are spaces; this
! normally causes the Bourne shell to interpret them, regardless
! of whether the UNIX version handles #! at the beginning of an
! executable.  So normally, it's only necessary to copy foo.b to
! foo, then make foo executable.  For example, let DD be a shell
! variable containing a full path to the master source directory:
     % cp $DD/*.b bin
     % cd bin
     % /bin/ls -1 | sed -e 's;\.b$;;' | xargs -i= -t mv =.b =
     % chmod +x *
     % cd ..
! 
! On some systems it may be necessary to insert a
!    #!/bin/sh
! line at the beginning of each executable.  In that case, you can
! use a simple Bourne shell program like this:
!    #!/bin/sh
!    for f
!    do
!       p=`basename "$f" .b`
!       echo '#!/bin/sh' > "$p"
!       cat "$f" >> "$p"
!    done
! Suppose this program is in the file binstall.  Then you'd use
! these commands instead:
!    % cd bin
!    % binstall $DD/*.b
!    % chmod +x *
!    % cd ..
! 
  If you want to override the behavior of any of the Bourne shell
  scripts for portability or because of different local policies,
  this is a good time to do so.  I suggest putting locally changed
  copies in a separate bin directory that is on the command search
  path *before* the bin directory in which the scripts will be
! installed, e.g. create /f/howard/2/local-bin, and put it on the
! command search path before /f/howard/2/bin.  Then, when
! installing the next version, you don't have to remember which
! programs in /f/howard/2/bin you changed locally; you just copy
! everything in /f/howard/2/local-bin into /f/howard/3/local-bin.
! Here is a guide to possible local changes:
  
!    mkAr        This makes the ar archive library.  It is very BSDish
!                and must change for the `lorder $* | tsort` crowd.
  
!    mkCIncl     These both assume that calling /lib/cpp -M is the
!    mkLibIncl   way to find out what include files a C source
!                file uses.  Change them if that's wrong for your
!                system.
  
!    mkDistI     This is how files get from the master source
!                directory to the compilation directory.  I use
!                symbolic links.
  
!    mkInstF     This is how non-executable files get installed.  I
!                use hard links if possible, otherwise copies.
!                Shell scripts count as non-executable.
  
!    mkInstX     This is how binary executable files get installed.
!                I use hard links.  This would be the place to strip
!                symbol tables.  Shell scripts are *not* considered
!                to be executable.
  
!    mkLaTeXPS   This formats a LaTeX file, including BibTeX
!                processing, all the way to a printable
!                representation, which for me is PostScript.  If
!                you want some other final format, I would suggest
!                writing a separate shell script.  The FMTLATEX
!                make variable has the name of this command as its
!                value.
  
+    mkManPS     This formats a manual entry to PostScript, using
+                TransScript.  As with mkLaTeXPS, if
+                you want some other final format, I would suggest
+                writing a separate shell script.  The FMTMAN
+                make variable has the name of this command as its
+                value.
+ 
  If you write original software with these tools, you may also
  want to change mkDistO, which places files in the distribution
  directory.  I use hard links for this.  Also, the following are
***************
*** 156,173 ****
  Set up the command search path to pick up the Bourne shell
  scripts.  Rehash if necessary.
  
! Change directory into the actual compilation directory, e.g.  cd
! sun34.
  
  Create an mk shell file.  Make it executable.  Here's a starting
  point for SunOS 4.x:
  
! DD=/usr/local/free-dist/howard/1/dist
  SRCS=`cd $DD; echo *`
  RM='rm -f'
  export DD SRCS RM
! make -f uMakefile
! exec make \
     CATMAN=catman \
     FMTLATEX=mkLaTeXPS \
     FMTMAN=mkManPS \
--- 215,233 ----
  Set up the command search path to pick up the Bourne shell
  scripts.  Rehash if necessary.
  
! Change directory into the actual compilation directory, e.g.
!    % cd sun3-411.
  
  Create an mk shell file.  Make it executable.  Here's a starting
  point for SunOS 4.x:
  
! #!/bin/sh
! DD=/usr/local/free-dist/howard/2/dist
  SRCS=`cd $DD; echo *`
  RM='rm -f'
  export DD SRCS RM
! make -e -f uMakefile
! exec make -e \
     CATMAN=catman \
     FMTLATEX=mkLaTeXPS \
     FMTMAN=mkManPS \
***************
*** 174,194 ****
     SLT=libhoward.so.`cat FREEZE.version` \
     $*
  
- 
  If you don't have a catman command, drop that line.  FMTLATEX
  should be the name of a command to turn LaTeX source into
  whatever your printer prints; if you don't have one just drop
  it.  Likewise, FMTMAN should be the name of a command to turn
  manual entries into printable form.  If you don't have shared
! libraries, drop the SLT= line.  Add any local changes you need
! here.  If your C compiler doesn't understand different
! optimization levels, add CFLAGS=-O as an argument to the last
! make.
  
  Here is an alternate mk file for a system using GCC, and with
  results installed in more conventional places:
  
! DD=/usr/local/free-dist/howard/1/dist
  SRCS=`cd $DD; echo *`
  CC=gcc
  CFLAGS='-g -O -traditional'
--- 234,266 ----
     SLT=libhoward.so.`cat FREEZE.version` \
     $*
  
  If you don't have a catman command, drop that line.  FMTLATEX
  should be the name of a command to turn LaTeX source into
  whatever your printer prints; if you don't have one just drop
  it.  Likewise, FMTMAN should be the name of a command to turn
  manual entries into printable form.  If you don't have shared
! libraries, drop the SLT= line.
  
+ The mk shell script is the place to override any make
+ variables.  Theoretically, you should never need to change the
+ MakeCommon, uMakefile, and Makefile files.  MakeCommon contains
+ a few make variables used by both uMakefile and Makefile; it is
+ included by both.  To override these, it is often easiest to
+ define them as environment variables exported from mk.  For
+ example, the make variable RM is defined in MakeCommon, and
+ overridden in the mk example above.  For make variables only
+ used in one of the makefiles (either uMakefile or Makefile but
+ not both), it's usually easier to pass the override value as a
+ command line argument to make.  You can read through MakeCommon
+ and the first parts of uMakefile and Makefile to see what you
+ need to override.  For example, if your C compiler doesn't
+ understand different optimization levels, add CFLAGS=-O as an
+ argument to the last make.
+ 
  Here is an alternate mk file for a system using GCC, and with
  results installed in more conventional places:
  
! DD=/usr/local/free-dist/howard/2/dist
  SRCS=`cd $DD; echo *`
  CC=gcc
  CFLAGS='-g -O -traditional'
***************
*** 195,202 ****
  INCLUDES=-I/usr/local/include
  RM='rm -f'
  export DD SRCS CC CFLAGS INCLUDES RM
! make -f uMakefile
! exec make \
     AID=/usr/local/lib \
     BID=/usr/local/bin \
     CATMAN=catman \
--- 267,274 ----
  INCLUDES=-I/usr/local/include
  RM='rm -f'
  export DD SRCS CC CFLAGS INCLUDES RM
! make -e -f uMakefile
! exec make -e \
     AID=/usr/local/lib \
     BID=/usr/local/bin \
     CATMAN=catman \
***************
*** 226,232 ****
  and can't do.  It will also echo the values of a bunch of make
  variables.  That's normal.
  
! Check out all the generated include files (*.i).  Make sure they
  look reasonable.
  
  Install the include files:
--- 298,304 ----
  and can't do.  It will also echo the values of a bunch of make
  variables.  That's normal.
  
! Look at all the generated include files (*.i).  Make sure they
  look reasonable.
  
  Install the include files:
***************
*** 246,257 ****
  Running "mk test" will compile all the test drivers.  A few of
  the test drivers even do marginally useful things.
  
! Run "mk install" and you're finished.
  
  
        ANOMALIES
  
! GNU make is still (at version 3.54) somewhat buggy.  It does not
  always pick up environment variables, so it is sometimes
  necessary to rewrite mk to pass them as command line arguments
  instead.  Run "mk vars" to check that everything is all right.
--- 318,335 ----
  Running "mk test" will compile all the test drivers.  A few of
  the test drivers even do marginally useful things.
  
! Run "mk install" and you're finished.  (Except that, if you're
! using my "version 0" convention, then you need to set up a
! symbolic link for it, e.g.:
!    % cd ../..
!    % rm -f 0
!    % ln -s 2 0
! This makes version 0 point to version 2.)
  
  
        ANOMALIES
  
! GNU make is still (at version 3.59) somewhat buggy.  It does not
  always pick up environment variables, so it is sometimes
  necessary to rewrite mk to pass them as command line arguments
  instead.  Run "mk vars" to check that everything is all right.
***************
*** 261,282 ****
  around this is to replace command foo by "env - foo".  I needed
  to do this for ranlib in SunOS 4.0.1.  It was OK in 4.0.3.
  Also, the Bourne shell sometimes seems to suffer from an excess
! of environment variables.  Using the C shell instead is a
! possible workaround, e.g. pass SHELL=/usr/bin/csh on the command
! line.  (IMHO, GNU make needs some way to indicate which
  variables should and should not be exported, e.g. something like
  "export" in the Bourne shell.)
  
  The documentation for atof(3) says errno is set to ERANGE on
  overflow and underflow.  In SunOS 4.0.1, and perhaps other
! systems, errno is also sometimes set even without overflow, e.g.
! on an input of 0.  As a workaround, pass DEFS=-DBADATOF to the
! last make in mk.  This skips the check of errno.  Unfortunately,
! this means overflow is *never* detected.  This bug *seems* to
! have been fixed in SunOS 4.0.3.
  --
  Howard Gayle
! TN/ETX/T/BG
  Ericsson Telecom AB
  S-126 25 Stockholm
  Sweden
--- 339,373 ----
  around this is to replace command foo by "env - foo".  I needed
  to do this for ranlib in SunOS 4.0.1.  It was OK in 4.0.3.
  Also, the Bourne shell sometimes seems to suffer from an excess
! of environment variables.  Using BASH or the C shell instead is
! a possible workaround, e.g. pass SHELL=/usr/bin/csh on the
! command line.  (IMHO, GNU make needs some way to indicate which
  variables should and should not be exported, e.g. something like
  "export" in the Bourne shell.)
  
  The documentation for atof(3) says errno is set to ERANGE on
  overflow and underflow.  In SunOS 4.0.1, and perhaps other
! systems, errno is also sometimes set even without overflow,
! e.g.  on an input of 0.  As a workaround, pass DEFS=-DBADATOF to
! the last make in mk.  This skips the check of errno.
! Unfortunately, this means overflow is *never* detected.  This
! bug *seems* to have been fixed in SunOS 4.0.3.
! 
! 
!       WHY NOT JUST NON-COMMERCIAL USE?
! 
! When I released version 1, several people wrote to me to argue
! that I should not use the GNU license but instead a simple
! statement that copying for non-commercial or non-profit use is
! permitted.  One of the reasons I used the GNU license instead
! is that I did not want to prevent anyone from making money from
! my software.  On the contrary, I'd be delighted to hear that
! people make money from my software.
  --
  Howard Gayle
! 
! Up to 9 April 1991:
! TN/ETX/TG/HL
  Ericsson Telecom AB
  S-126 25 Stockholm
  Sweden
***************
*** 283,286 ****
  howard@ericsson.se
  uunet!ericsson.se!howard
  Phone: +46 8 719 5565
! FAX  : +46 8 719 9598
--- 374,388 ----
  howard@ericsson.se
  uunet!ericsson.se!howard
  Phone: +46 8 719 5565
! FAX  : +46 8 719 8439
! 
! After 9 April 1991:
! HaL Computer Systems, Inc.
! 1315 Dell Avenue
! Campbell, California 95008
! USA
! Phone: +1 408 379 7000
! FAX  : +1 408 379 5022
! Unfortunately, HaL isn't on the Net yet; when it does get on
! the Net, my email address will probably be something like
! howard@hal.com.
EOF

patch -c a2.3 << 'EOF'
***************
*** 1,5 ****
! .\" $Header: a2.3,v 1.2 89/08/10 13:53:23 howard Exp $
! .TH A2 "3 -lhoward" "$Revision: 1.2 $" "Howard\'s C library" "Howard\'s C library"
  .SH NAME
  a2 \- convert Ada-syntax numeric literals to internal representations
  .SH SYNOPSIS
--- 1,5 ----
! .\" $Header: /usr/local/dist/free-dist/howard/2/work/RCS/a2.3,v 1.3 91/02/27 05:44:52 howard Exp $
! .TH A2 "3 -lhoward" "$Revision: 1.3 $" "Howard\'s C library" "Howard\'s C library"
  .SH NAME
  a2 \- convert Ada-syntax numeric literals to internal representations
  .SH SYNOPSIS
***************
*** 372,384 ****
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle,
! TN/ETX/T/BG,
! Ericsson Telecom AB,
! S-126 25 Stockholm,
! Sweden,
! howard@ericsson.se,
! uunet!ericsson.se!howard,
! Phone: +46 8 719 5565,
! FAX: +46 8 719 9598,
! Telex: 14910 ERIC S
--- 372,375 ----
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle
EOF

patch -c b.bib << 'EOF'
***************
*** 1,9 ****
  % b.bib - bibliography
  %
! % Copyright 1989 Howard Lee Gayle
  % This file is written in the ISO 8859/1 character set.
  %
! % $Header: b.bib,v 1.1 89/09/20 12:35:29 howard Exp $
  %
  % This program is free software; you can redistribute it and/or modify
  % it under the terms of the GNU General Public License version 1,
--- 1,9 ----
  % b.bib - bibliography
  %
! % Copyright 1989, 1991 Howard Lee Gayle
  % This file is written in the ISO 8859/1 character set.
  %
! % $Header: /usr/local/dist/free-dist/howard/2/work/RCS/b.bib,v 1.3 91/04/03 13:11:31 howard Exp $
  %
  % This program is free software; you can redistribute it and/or modify
  % it under the terms of the GNU General Public License version 1,
***************
*** 17,22 ****
--- 17,40 ----
  % You should have received a copy of the GNU General Public License
  % along with this program; if not, write to the Free Software
  % Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ @misc{Cannon:CStyle,
+    author = {L. W. Cannon and R. A. Elliott and L. W. Kirchhoff
+              and J. H. Miller and J. M. Milner and R. W. Mitze
+              and E. P. Schan and N. O. Whittington and Henry
+              Spencer and David Keppel and Mark Brader},
+    title = {Recommended {C} Style and Coding Standards},
+    howpublished = {Available by anonymous FTP from
+                    cs.washington.edu as pub/cstyle.tar.Z.},
+    month = "June",
+    year = "1990"}
+ @misc{Dolenc:Portable,
+    author = "A. Dolenc and A. Lemmke and D. Keppel and G. V. Reilly",
+    title = "Notes on Writing Portable Programs in {C}",
+    howpublished = {Available by anonymous FTP from sauna.hut.fi
+                    as pub/CompSciLab/doc/portableC.* and from cs.washington.edu
+                    as pub/cport.tar.Z.},
+    month = "November",
+    year = "1990"}
  @book{Lapin,
     author = "J. E. Lapin",
     title = "Portable C and UNIX system programming",
***************
*** 23,28 ****
--- 41,57 ----
     publisher = "Prentice-Hall",
     year = "1987",
     address = "Englewood Cliffs, New Jersey"}
+ @inproceedings{Manheimer:Depot,
+    author = {Kenneth Manheimer and Barry A. Warsaw and
+              Stephen N. Clark and Walter Rowe},
+    title = {The Depot: A Framework for Sharing Software
+             Installation Across Organizational and UNIX
+             Platform Boundaries},
+    booktitle = {Proceedings of the fourth Large Installation
+                 System Administration Conference},
+    year = "1990",
+    organization = "USENIX",
+    month = "October"}
  @article{Weiser:Source,
     author = "Mark Weiser",
     title = "Source Code",
EOF

patch -c cat-path.1 << 'EOF'
***************
*** 1,5 ****
! .\" $Header: cat-path.1,v 1.1 89/09/21 10:52:02 howard Exp $
! .TH CAT-PATH 1 "$Revision: 1.1 $"
  .SH NAME
  cat-path \- search path for files and concatenate them
  .SH SYNOPSIS
--- 1,5 ----
! .\" $Header: /usr/local/dist/free-dist/howard/2/work/RCS/cat-path.1,v 1.2 91/02/27 05:44:20 howard Exp $
! .TH CAT-PATH 1 "$Revision: 1.2 $"
  .SH NAME
  cat-path \- search path for files and concatenate them
  .SH SYNOPSIS
***************
*** 40,52 ****
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle,
! TN/ETX/T/BG,
! Ericsson Telecom AB,
! S-126 25 Stockholm,
! Sweden,
! howard@ericsson.se,
! uunet!ericsson.se!howard,
! Phone: +46 8 719 5565,
! FAX: +46 8 719 9598,
! Telex: 14910 ERIC S
--- 40,43 ----
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle
EOF

patch -c cia.1 << 'EOF'
***************
*** 1,5 ****
! .\" $Header: cia.1,v 1.1 89/09/23 14:11:22 howard Exp $
! .TH CIA 1 "$Revision: 1.1 $"
  .SH NAME
  cia \- check files into RCS with strict locking
  .SH SYNOPSIS
--- 1,5 ----
! .\" $Header: /usr/local/dist/free-dist/howard/2/work/RCS/cia.1,v 1.2 91/02/27 05:44:26 howard Exp $
! .TH CIA 1 "$Revision: 1.2 $"
  .SH NAME
  cia \- check files into RCS with strict locking
  .SH SYNOPSIS
***************
*** 47,59 ****
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle,
! TN/ETX/T/BG,
! Ericsson Telecom AB,
! S-126 25 Stockholm,
! Sweden,
! howard@ericsson.se,
! uunet!ericsson.se!howard,
! Phone: +46 8 719 5565,
! FAX: +46 8 719 9598,
! Telex: 14910 ERIC S
--- 47,50 ----
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle
EOF

patch -c copy-self.1 << 'EOF'
***************
*** 1,5 ****
! .\" $Header: copy-self.1,v 1.2 89/09/20 13:58:12 howard Exp $
! .TH COPY-SELF 1 "$Revision: 1.2 $"
  .SH NAME
  copy-self \- copy files to files with same names
  .SH SYNOPSIS
--- 1,5 ----
! .\" $Header: /usr/local/dist/free-dist/howard/2/work/RCS/copy-self.1,v 1.3 91/02/27 05:44:30 howard Exp $
! .TH COPY-SELF 1 "$Revision: 1.3 $"
  .SH NAME
  copy-self \- copy files to files with same names
  .SH SYNOPSIS
***************
*** 51,63 ****
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle,
! TN/ETX/T/BG,
! Ericsson Telecom AB,
! S-126 25 Stockholm,
! Sweden,
! howard@ericsson.se,
! uunet!ericsson.se!howard,
! Phone: +46 8 719 5565,
! FAX: +46 8 719 9598,
! Telex: 14910 ERIC S
--- 51,54 ----
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle
EOF

patch -c freeze.1 << 'EOF'
***************
*** 1,5 ****
! .\" $Header: freeze.1,v 1.1 89/09/23 14:22:28 howard Exp $
! .TH FREEZE 1 "$Revision: 1.1 $"
  .SH NAME
  freeze \- record latest revisions of all RCS files in directory
  .SH SYNOPSIS
--- 1,5 ----
! .\" $Header: /usr/local/dist/free-dist/howard/2/work/RCS/freeze.1,v 1.2 91/02/27 05:44:34 howard Exp $
! .TH FREEZE 1 "$Revision: 1.2 $"
  .SH NAME
  freeze \- record latest revisions of all RCS files in directory
  .SH SYNOPSIS
***************
*** 53,65 ****
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle,
! TN/ETX/T/BG,
! Ericsson Telecom AB,
! S-126 25 Stockholm,
! Sweden,
! howard@ericsson.se,
! uunet!ericsson.se!howard,
! Phone: +46 8 719 5565,
! FAX: +46 8 719 9598,
! Telex: 14910 ERIC S
--- 53,56 ----
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle
EOF

patch -c freeze.b << 'EOF'
***************
*** 1,9 ****
    
  # freeze - update RCS FREEZE file
  #
! # $Header: freeze.b,v 1.8 89/09/21 19:21:19 howard Exp $
  #
! # Copyright 1989 Howard Lee Gayle
  # This file is written in the ISO 8859/1 character set.
  #
  # This program is free software; you can redistribute it and/or modify
--- 1,9 ----
    
  # freeze - update RCS FREEZE file
  #
! # $Header: /usr/local/dist/free-dist/howard/2/work/RCS/freeze.b,v 1.9 91/02/27 09:38:28 howard Exp $
  #
! # Copyright 1989, 1991 Howard Lee Gayle
  # This file is written in the ISO 8859/1 character set.
  #
  # This program is free software; you can redistribute it and/or modify
***************
*** 24,30 ****
  
  CMDNAME=freeze
  export CMDNAME
! u='Usage: $CMDNAME [-rRevision]'
  if [ $# -gt 1 ]
  then
     echo "$u" 1>&2
--- 24,30 ----
  
  CMDNAME=freeze
  export CMDNAME
! u="Usage: $CMDNAME [-rRevision]"
  if [ $# -gt 1 ]
  then
     echo "$u" 1>&2
***************
*** 32,38 ****
  fi
  if [ ! -d RCS ]
  then
!    echo '$CMDNAME: no RCS directory' 1>&2
     exit 1
  fi
  if [ -f RCS/FREEZE,v ]
--- 32,38 ----
  fi
  if [ ! -d RCS ]
  then
!    echo "$CMDNAME: no RCS directory" 1>&2
     exit 1
  fi
  if [ -f RCS/FREEZE,v ]
***************
*** 46,49 ****
  fi
  echo '========================================' >> FREEZE
  freeze0 RCS/*,v >> FREEZE
! ci $1 FREEZE < /dev/null && rcs -L FREEZE && co FREEZE
--- 46,49 ----
  fi
  echo '========================================' >> FREEZE
  freeze0 RCS/*,v >> FREEZE
! ci -f $1 FREEZE < /dev/null && rcs -L FREEZE && co FREEZE
EOF

patch -c freeze0.b << 'EOF'
***************
*** 1,9 ****
    
  # freeze0 - write name and revision of RCS files
  #
! # $Header: freeze0.b,v 1.6 89/09/21 19:21:28 howard Exp $
  #
! # Copyright 1989 Howard Lee Gayle
  # This file is written in the ISO 8859/1 character set.
  #
  # This program is free software; you can redistribute it and/or modify
--- 1,9 ----
    
  # freeze0 - write name and revision of RCS files
  #
! # $Header: /usr/local/dist/free-dist/howard/2/work/RCS/freeze0.b,v 1.7 91/02/27 09:59:41 howard Exp $
  #
! # Copyright 1989, 1991 Howard Lee Gayle
  # This file is written in the ISO 8859/1 character set.
  #
  # This program is free software; you can redistribute it and/or modify
***************
*** 23,29 ****
  # f - file name
  # u - usage string
  
! u='Usage: freeze0 file...'
  if [ $# -eq 0 ]
  then
     echo "$u" 1>&2
--- 23,29 ----
  # f - file name
  # u - usage string
  
! u="Usage: freeze0 file..."
  if [ $# -eq 0 ]
  then
     echo "$u" 1>&2
EOF

patch -c freezePch.1 << 'EOF'
***************
*** 1,5 ****
! .\" $Header: freezePch.1,v 1.2 89/09/25 07:01:32 howard Exp $
! .TH FREEZEPCH 1 "$Revision: 1.2 $"
  .SH NAME
  freezePch \- make a patch file from one revision to another
  .SH SYNOPSIS
--- 1,5 ----
! .\" $Header: /usr/local/dist/free-dist/howard/2/work/RCS/freezePch.1,v 1.3 91/02/27 05:44:38 howard Exp $
! .TH FREEZEPCH 1 "$Revision: 1.3 $"
  .SH NAME
  freezePch \- make a patch file from one revision to another
  .SH SYNOPSIS
***************
*** 71,83 ****
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle,
! TN/ETX/T/BG,
! Ericsson Telecom AB,
! S-126 25 Stockholm,
! Sweden,
! howard@ericsson.se,
! uunet!ericsson.se!howard,
! Phone: +46 8 719 5565,
! FAX: +46 8 719 9598,
! Telex: 14910 ERIC S
--- 71,74 ----
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle
EOF

patch -c getlin.3 << 'EOF'
***************
*** 1,5 ****
! .\" @(#)$Header: getlin.3,v 1.7 89/07/05 07:31:35 howard Exp $
! .TH GETLIN "3 -lhoward" "$Revision: 1.7 $" "Howard\'s C library" "Howard\'s C library"
  .SH NAME
  getlin, getlic \- read one line from a stream
  .SH SYNOPSIS
--- 1,5 ----
! .\" @(#)$Header: /usr/local/dist/free-dist/howard/2/work/RCS/getlin.3,v 1.8 91/02/27 05:44:57 howard Exp $
! .TH GETLIN "3 -lhoward" "$Revision: 1.8 $" "Howard\'s C library" "Howard\'s C library"
  .SH NAME
  getlin, getlic \- read one line from a stream
  .SH SYNOPSIS
***************
*** 123,135 ****
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle,
! TN/ETX/T/BG,
! Ericsson Telecom AB,
! S-126 25 Stockholm,
! Sweden,
! howard@ericsson.se,
! uunet!ericsson.se!howard,
! Phone: +46 8 719 5565,
! FAX: +46 8 719 9598,
! Telex: 14910 ERIC S
--- 123,126 ----
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle
EOF

patch -c getpwf.3 << 'EOF'
***************
*** 1,5 ****
! .\" $Header: getpwf.3,v 1.2 89/08/21 08:43:59 howard Exp $
! .TH GETPWF "3 -lhoward" "$Revision: 1.2 $" "Howard\'s C library" "Howard\'s C library"
  .SH NAME
  getpwf \- copy full name of user from password file entry
  .SH SYNOPSIS
--- 1,5 ----
! .\" $Header: /usr/local/dist/free-dist/howard/2/work/RCS/getpwf.3,v 1.3 91/02/27 05:45:02 howard Exp $
! .TH GETPWF "3 -lhoward" "$Revision: 1.3 $" "Howard\'s C library" "Howard\'s C library"
  .SH NAME
  getpwf \- copy full name of user from password file entry
  .SH SYNOPSIS
***************
*** 82,94 ****
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle,
! TN/ETX/T/BG,
! Ericsson Telecom AB,
! S-126 25 Stockholm,
! Sweden,
! howard@ericsson.se,
! uunet!ericsson.se!howard,
! Phone: +46 8 719 5565,
! FAX: +46 8 719 9598,
! Telex: 14910 ERIC S
--- 82,85 ----
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  .SH AUTHOR
! Howard Gayle
EOF

patch -c hetero.tex << 'EOF'
***************
*** 1,10 ****
  % hetero.tex - configuration management in a heterogeous net
  %
! % Copyright 1989 Howard Lee Gayle
! % This file is written in the ISO 8859/1 character set.
  %
- % $Header: hetero.tex,v 1.2 89/09/20 13:03:18 howard Exp $
- %
  % This program is free software; you can redistribute it and/or modify
  % it under the terms of the GNU General Public License version 1,
  % as published by the Free Software Foundation.
--- 1,7 ----
  % hetero.tex - configuration management in a heterogeous net
  %
! % $Header: /usr/local/dist/free-dist/howard/2/work/RCS/hetero.tex,v 1.4 91/04/03 13:10:48 howard Exp $
  %
  % This program is free software; you can redistribute it and/or modify
  % it under the terms of the GNU General Public License version 1,
  % as published by the Free Software Foundation.
***************
*** 21,35 ****
  \input gold-lt
  \input latin-lt
  \input unix-lt
! \global \def \today {$Revision: 1.2 $}
  \raggedright
  \arraycolsep 0pt
  \parskip 1.5ex
  \parindent 2em
  \title{Sharing software in a network of heterogeneous UNIX hosts}
! \author{Copyright \copyright\ 1989 Howard Lee Gayle
  \thanks{
! TN/ETX/T/BG,
  Ericsson Telecom~AB,
  S-126~25 Stockholm,
  Sweden,
--- 18,33 ----
  \input gold-lt
  \input latin-lt
  \input unix-lt
! \global \def \today {$Revision: 1.4 $}
  \raggedright
  \arraycolsep 0pt
  \parskip 1.5ex
  \parindent 2em
  \title{Sharing software in a network of heterogeneous UNIX hosts}
! \author{Copyright \copyright\ 1989, 1991 Howard Lee Gayle
  \thanks{
! Up to 9~April~1991, my address is:
! TN/ETX/TG/HL,
  Ericsson Telecom~AB,
  S-126~25 Stockholm,
  Sweden,
***************
*** 36,43 ****
  howard@ericsson.se,
  uunet!ericsson.se!howard,
  Phone: +46~8~719~5565,
! FAX: +46~8~719~9598,
! Telex: 14910~ERIC~S.}}
  \begin{document}
  \maketitle
  \begin{abstract}
--- 34,51 ----
  howard@ericsson.se,
  uunet!ericsson.se!howard,
  Phone: +46~8~719~5565,
! FAX: +46~8~719~8439,
! Telex: 14910~ERIC~S.
! After 9~April~1991, my address is:
! HaL Computer Systems, Inc.,
! 1315 Dell Avenue,
! Campbell, California 95008,
! USA,
! Phone: +1~408~379~7000
! FAX: +1~408~379~5022
! Unfortunately, HaL isn't on the Net yet; when it does get on
! the Net, my email address will probably be something like
! howard@hal.com.}}
  \begin{document}
  \maketitle
  \begin{abstract}
***************
*** 76,82 ****
  architectures, run different versions of the \UNIX\ system, or
  both.
  For example, an organization may have on its network Sun-3s
! and Sun-4s running SunOS~4.0,
  and VAXen running BSD~4.3.
  
  Most \UNIX\ software, as distributed, comes in a form
--- 84,90 ----
  architectures, run different versions of the \UNIX\ system, or
  both.
  For example, an organization may have on its network Sun-3s
! and Sun-4s running SunOS~4.1.1,
  and VAXen running BSD~4.3.
  
  Most \UNIX\ software, as distributed, comes in a form
***************
*** 88,97 ****
  is distributed, and writing new software.
  This report is not about how to write portable software;
  it {\em is} about what to do with portable software once you
! have it.
! (For an excellent treatment of how to write portable \UNIX\
! software, see
! \cite{Lapin}.)
  
  \chapter{Notation}
  In this report, a
--- 96,107 ----
  is distributed, and writing new software.
  This report is not about how to write portable software;
  it {\em is} about what to do with portable software once you
! have
! it.\footnote{For an excellent treatment of how to write
! portable \UNIX\ software, see
! \cite{Lapin}.
! See also \cite{Cannon:CStyle} and
! \cite{Dolenc:Portable}.}
  
  \chapter{Notation}
  In this report, a
***************
*** 108,116 ****
  In my examples I will use abbreviations for types such as
  these:
  \begin{description}
! \item[sun34] A Sun-3 running SunOS~4.$x$.
! \item[sun44] A Sun-4 running SunOS~4.$x$.
! \item[vax43] A DEC VAX-11 running BSD~4.3.
  \end{description}
  These are merely for illustration; each organization must
  choose suitable abbreviations.
--- 118,126 ----
  In my examples I will use abbreviations for types such as
  these:
  \begin{description}
! \item[sun3-403] A Sun-3 running SunOS~4.0.3.
! \item[sun4-411] A Sun-4 running SunOS~4.1.1.
! \item[vax-43] A DEC VAX-11 running BSD~4.3.
  \end{description}
  These are merely for illustration; each organization must
  choose suitable abbreviations.
***************
*** 135,141 ****
  18.54,
  \etcP.
  At the same time, one could have parallel versions, say for
! Japanese, denoted 18.52-ja, 18.53-ja, 18.54-ja,
  \etcP.
  
  A
--- 145,151 ----
  18.54,
  \etcP.
  At the same time, one could have parallel versions, say for
! Japanese, denoted 18.52-jp, 18.53-jp, 18.54-jp,
  \etcP.
  
  A
***************
*** 189,194 ****
--- 199,208 ----
  continue to use an older version during a transition period.
  Users should be able to choose when to switch to a new version.
  \end{enumerate}
+ At Ericsson, responsibility for software system support is
+ widely distributed.
+ An organization with more centralized responsibility would
+ probably have somewhat different goals.
  
  \chapter{Mechanisms}
  \section{Master source virtual host(s)}
***************
*** 212,219 ****
  where
  {\it type\/}
  is one of the type abbreviations above.
! For example, the free-sun34 virtual host has compiled versions for
! Sun-3s running SunOS~4.$x$.
  
  \section{File system}
  \subsection{Path to master source}
--- 226,233 ----
  where
  {\it type\/}
  is one of the type abbreviations above.
! For example, the free-sun3-411 virtual host has compiled versions for
! Sun-3s running SunOS~4.1.1.
  
  \section{File system}
  \subsection{Path to master source}
***************
*** 233,242 ****
  is the version identifier.
  
  At Ericsson there are actually two source-prefixes:
! /usr/local/free-dist and /usr/local/unfree-dist.
  For example, the master source for GNU Emacs version~18.54
  is on the free-dist virtual host in
! /usr/local/free-dist/gnu-emacs/18.54.
  
  \subsection{Path to compiled version}
  Each compiled version also gets its own directory on the
--- 247,256 ----
  is the version identifier.
  
  At Ericsson there are actually two source-prefixes:
! /export/free/dist and /export/unfree/dist.
  For example, the master source for GNU Emacs version~18.54
  is on the free-dist virtual host in
! /export/free/dist/gnu-emacs/18.54.
  
  \subsection{Path to compiled version}
  Each compiled version also gets its own directory on the
***************
*** 246,258 ****
  
  At Ericsson,
  {\it compiled-prefix\/}
! is either /usr/local/free or /usr/local/unfree.
  For example, the compiled GNU Emacs version~18.54 is in
! /usr/local/free/gnu-emacs/18.54
  on
  {\em every}
! host.
  
  \subsection{Currently recommended version}
  Compiled version~0 is an abbreviation for the currently
  recommended version on a given host.
--- 260,292 ----
  
  At Ericsson,
  {\it compiled-prefix\/}
! is /f for free software and public domain software, and
! /u for other software.
  For example, the compiled GNU Emacs version~18.54 is in
! /f/gnu-emacs/18.54
  on
  {\em every}
! host on which it is installed.
  
+ Initially, we used /usr/local/free and /usr/local/unfree as our
+ compiled-prefixes, since /usr/local is the conventional place
+ for third-party software.
+ However, there are two advantages to short compiled-prefixes.
+ Users who want complete control over system version selection
+ end up with long command search paths; a short compiled-prefix
+ makes these shorter.
+ Also, most \UNIX\ versions have a limit of 32~characters for
+ the path of a command interpreter in an executable file.
+ For example,
+ \begin{verbatim}
+ #! /f/perl/3.0.44/bin/perl
+ \end{verbatim}
+ works whereas
+ \begin{verbatim}
+ #! /usr/local/free/perl/3.0.44/bin/perl
+ \end{verbatim}
+ is too long.
+ 
  \subsection{Currently recommended version}
  Compiled version~0 is an abbreviation for the currently
  recommended version on a given host.
***************
*** 298,308 ****
  For example, a site could have a symbolic link from
  /usr/local/bin/emacs
  to
! /usr/local/free/gnu-emacs/0/bin/emacs,
  and a symbolic link from
  /usr/local/man/man1/emacs.1
  to
! /usr/local/free/gnu-emacs/0/man/emacs.1.
  Then users who wish to use the versions selected by the system
  administrators need only add /usr/local/bin to their command
  search paths and /usr/local/man to the values of their MANPATH
--- 332,342 ----
  For example, a site could have a symbolic link from
  /usr/local/bin/emacs
  to
! /f/gnu-emacs/0/bin/emacs,
  and a symbolic link from
  /usr/local/man/man1/emacs.1
  to
! /f/gnu-emacs/0/man/emacs.1.
  Then users who wish to use the versions selected by the system
  administrators need only add /usr/local/bin to their command
  search paths and /usr/local/man to the values of their MANPATH
***************
*** 329,340 ****
  Local file system sharing is possible when several virtual
  hosts are implemented by one physical host.
  For example, if the physical host that implements a master source
! virtual host is a sun44, then the same physical host can
! implement a sun44 type virtual host.
  In addition, the compiled versions the host makes available are
  executable by the host's own users.
  
! Network copying uses command such as rdist or ftp to copy files
  over a network.\footnote{Copying by other means, \eg\ tape,
  could also be used, but is outside the scope of this report.}
  
--- 363,374 ----
  Local file system sharing is possible when several virtual
  hosts are implemented by one physical host.
  For example, if the physical host that implements a master source
! virtual host is a sun4-411, then the same physical host can
! implement a sun4-411 type virtual host.
  In addition, the compiled versions the host makes available are
  executable by the host's own users.
  
! Network copying uses commands such as rdist or ftp to copy files
  over a network.\footnote{Copying by other means, \eg\ tape,
  could also be used, but is outside the scope of this report.}
  
***************
*** 345,351 ****
  
  At Ericsson all three file distribution mechanisms are used.
  The same physical host currently implements the free-dist,
! unfree-dist, free-sun34, and unfree-sun34 virtual hosts.
  NFS distribution is used to other hosts with NFS.
  Hosts without NFS use rdist.
  Sites are encouraged to have local copies of executables, not
--- 379,385 ----
  
  At Ericsson all three file distribution mechanisms are used.
  The same physical host currently implements the free-dist,
! unfree-dist, free-sun3-411, and unfree-sun3-411 virtual hosts.
  NFS distribution is used to other hosts with NFS.
  Hosts without NFS use rdist.
  Sites are encouraged to have local copies of executables, not
***************
*** 366,378 ****
  and the executables for the currently recommended version are
  in
  /net/free/gnu-emacs/0.
! Hosts running Sun's automounter system use that for /net.
  Other hosts with NFS but without automounter simply NFS-mount
  on subdirectories of /net.
  
  \section{Permissions}
  Each system can be supported by a different team.
! In fact, each each (system,~type) pair can be supported by a
  different team.
  Teams can be implemented by \UNIX\ groups.
  
--- 400,413 ----
  and the executables for the currently recommended version are
  in
  /net/free/gnu-emacs/0.
! Hosts running Sun's automounter system use it to mount
! subdirectories of /net on demand.
  Other hosts with NFS but without automounter simply NFS-mount
  on subdirectories of /net.
  
  \section{Permissions}
  Each system can be supported by a different team.
! In fact, each (system,~type) pair can be supported by a
  different team.
  Teams can be implemented by \UNIX\ groups.
  
***************
*** 390,396 ****
  \item How does one contact the support team?
  \end{enumerate}
  At Ericsson, the support team places this information in a
! README file directly under the system directory.
  For example, on any host with NFS, a system administrator can
  get this information about GNU Emacs by reading
  /net/free-dist/gnu-emacs/README.
--- 425,431 ----
  \item How does one contact the support team?
  \end{enumerate}
  At Ericsson, the support team places this information in a
! README file directly under the master source system directory.
  For example, on any host with NFS, a system administrator can
  get this information about GNU Emacs by reading
  /net/free-dist/gnu-emacs/README.
***************
*** 400,406 ****
  must still know what files to copy where.
  At Ericsson, for each type virtual host, the support team
  places this information in a README file directly under the
! system directory.
  For example, on any host with NFS, a system administrator can
  get this information about GNU Emacs by reading
  /net/free/gnu-emacs/README.
--- 435,441 ----
  must still know what files to copy where.
  At Ericsson, for each type virtual host, the support team
  places this information in a README file directly under the
! compiled version system directory.
  For example, on any host with NFS, a system administrator can
  get this information about GNU Emacs by reading
  /net/free/gnu-emacs/README.
***************
*** 485,491 ****
  find . -type f -print | xargs chmod a-w
  \end{verbatim}
  This will reduce the risk of changing master source when
! editing in local changes.
  It also makes it easier to see which files have been changed locally.
  \item If necessary, create a README file directly under the
  system directory, \eg\ /usr/local/free-dist/gnu-emacs/README.
--- 520,526 ----
  find . -type f -print | xargs chmod a-w
  \end{verbatim}
  This will reduce the risk of changing master source when
! editing files to make local changes.
  It also makes it easier to see which files have been changed locally.
  \item If necessary, create a README file directly under the
  system directory, \eg\ /usr/local/free-dist/gnu-emacs/README.
***************
*** 535,546 ****
  \item Set the umask.
  \item Copy the file system hierarchy from the master source
  version to the version for this type.
! If hard or symbolic links can be used, my lnR command can be
  used.
  \item Create a log file under the version directory to record
  details of the installation for future use.
- If there was already a log file in the master version, remove
- it.
  If this is not the first installation of a system, it is often
  convenient to copy the log file from the previous installation,
  and then edit 
--- 570,579 ----
  \item Set the umask.
  \item Copy the file system hierarchy from the master source
  version to the version for this type.
! If hard links are used, my lnR command can be
  used.
  \item Create a log file under the version directory to record
  details of the installation for future use.
  If this is not the first installation of a system, it is often
  convenient to copy the log file from the previous installation,
  and then edit 
***************
*** 572,578 ****
  definitions, it is often more convenient to leave the Makefile
  unchanged and instead override the definitions with command
  line arguments to make.
! The exact command should be logged for future use.
  \item Perform the system-specific installation procedures.
  It is often desirable to bypass the actual installation phase
  (\eg\ make install), and instead do this part by hand.
--- 605,611 ----
  definitions, it is often more convenient to leave the Makefile
  unchanged and instead override the definitions with command
  line arguments to make.
! The exact make command and its arguments should be logged for future use.
  \item Perform the system-specific installation procedures.
  It is often desirable to bypass the actual installation phase
  (\eg\ make install), and instead do this part by hand.
***************
*** 650,657 ****
  INCLUDES='-I/usr/local/local-include -I../../../howard/0'
  WORK=RCS
  export DD SRCS INCLUDES WORK
! make -f uMakefile
! exec make -k \
     CFLAGS='-g -Bstatic' \
     FMTLATEX=mkLaTeXPS \
     FMTMAN=mkManPS \
--- 683,690 ----
  INCLUDES='-I/usr/local/local-include -I../../../howard/0'
  WORK=RCS
  export DD SRCS INCLUDES WORK
! make -e -f uMakefile
! exec make -e -k \
     CFLAGS='-g -Bstatic' \
     FMTLATEX=mkLaTeXPS \
     FMTMAN=mkManPS \
***************
*** 679,685 ****
  The fourth line sets the WORK environment variable, indicating
  development rather than installation.
  These environment variables are exported, and GNU make is run
! using uMakefile.
  This will update the depend file if necessary.
  Then make is run again using the main makefile.
  It is given a number of command-line variable definitions for
--- 712,718 ----
  The fourth line sets the WORK environment variable, indicating
  development rather than installation.
  These environment variables are exported, and GNU make is run
! on uMakefile.
  This will update the depend file if necessary.
  Then make is run again using the main makefile.
  It is given a number of command-line variable definitions for
***************
*** 695,701 ****
  \etcP.
  The makefiles do not need to be changed when a new source file
  is added, nor do developers ever have to remember to run a
! ``make depend'' command.
  
  Of course, all this automation has its price, and on slow
  hardware the price may be too high.
--- 728,734 ----
  \etcP.
  The makefiles do not need to be changed when a new source file
  is added, nor do developers ever have to remember to run a
! ``make depend'' command manually.
  
  Of course, all this automation has its price, and on slow
  hardware the price may be too high.
***************
*** 781,793 ****
  links into the distribution directory,
  but mk must be unique for each type, since mk contains all
  type-specific information.
! For example, here is an mk shell file for a sun34 type for cz:
  \begin{verbatim}
  DD='/net/free-dist/cz/2/dist'
  SRCS=`cd $DD; echo *`
  export DD SRCS
! make -f uMakefile
! exec make \
     $*
  \end{verbatim}
  Here, the value of the SRCS environment variable is a list of
--- 814,826 ----
  links into the distribution directory,
  but mk must be unique for each type, since mk contains all
  type-specific information.
! For example, here is an mk shell file for a sun3-411 type for cz:
  \begin{verbatim}
  DD='/net/free-dist/cz/2/dist'
  SRCS=`cd $DD; echo *`
  export DD SRCS
! make -e -f uMakefile
! exec make -e \
     $*
  \end{verbatim}
  Here, the value of the SRCS environment variable is a list of
***************
*** 810,815 ****
--- 843,862 ----
  links, symbolic links, or copies, and to execute any other
  commands needed.
  For example, mkInstX can run strip.
+ 
+ \chapter{Related work}
+ The
+ {\it depot\/}\cite{Manheimer:Depot}
+ is an independent approach to solving many of the problems
+ addressed by this report.
+ A key difference is that, in the depot, there is a directory
+ for each supported type under each system directory.
+ This arrangement is simpler than the one described above, but
+ it requires that a single team support all types.
+ It is thus more appropriate for smaller or more centralized
+ organizations.
+ Also, the depot does not have a general version selection
+ scheme, merely a simple two-version scheme (develop and primary).
  
  \bibliography{b}
  \bibliographystyle{alpha}
EOF

exit 0 # Just in case...
-- 
Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
Sterling Software, IMD           UUCP:     uunet!sparky!kent
Phone:    (402) 291-8300         FAX:      (402) 291-4362
Please send comp.sources.misc-related mail to kent@uunet.uu.net.