System and Network Administration lecture in color

Managing Software

Realities

Maintenance

Real-life maintenance example: Emerald

Real-life maintenance example: Oracle-7 for UNIX

Integrity management

Software Maturity Model

Maturity levels

  1. Compiler only: you invoke the compiler yourself.
  2. Source: You are given a Makefile and have to edit it and the source.
  3. Make: you are given a Makefile and have to edit it.
  4. Imake: you are given an Imakefile and run imake to make decisions.
  5. configure: you are given a script that generates a proper Makefile.
  6. autoconf: you are given the ability to make customizations to configure yourself.

Ideal model:

 % cd /usr/local/src
 % gunzip -c something.tar.gz | tar xf -
 % cd something
 % more README
 % ./configure
 % make
 % su
 # make install

Software Maturity (Boehm classification)

  1. organic: having no strong connection to the environment.
  2. semi-detached: has a little coupling to environment: emacs (non-x11) => needs configuration for portability.
  3. embedded: has very complex links to environment. X11 is embedded.

Software Maturity in terms of RELEASE USABILITY

Meta-tools: up the long ladder

Make:

General form of a make rule:

Sample makefile:

 a1: a1.cc
       g++ -g -c a1.cc -o a1
 a2: a2.o /g/15/class/a2/t2.o
       g++ -g -c a2.cc /g/15/class/a2/t2.o -lcurses -ltermcap -o a2
 a2.o: a2.cc
       g++ -g -c a2.cc

Make automatically

Partial results

Default rules

Changing the default rule:

Make target conventions:

Automatic dependency generation

Things to watch out for:

Imake

And the command `imake' generate the real Makefile:

 # Makefile generated by imake - do not edit!
 # $XConsortium: imake.c,v 1.72 92/09/14 11:44:22 rws Exp $
 #
 # The cpp used on this machine replaces all newlines and multiple tabs and
 # spaces in a macro expansion with a single space.  Imake tries to compensate
 # for this, but is not always successful.
 #
 
 # -------------------------------------------------------------------------
 # Makefile generated from "Imake.tmpl" and <Imakefile>
 # $XConsortium: Imake.tmpl,v 1.158 92/09/03 19:54:25 rws Exp $
 #
 # Platform-specific parameters may be set in the appropriate <vendor>.cf
 # configuration files.  Site-specific parameters should be set in the file
 # site.def.  Full rebuilds are recommended if any parameters are changed.
 #
 # If your C preprocessor does not define any unique symbols, you will need
 # to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing
 # "make World" the first time).
 #
 
 # -------------------------------------------------------------------------
 # site-specific configuration parameters that need to come before
 # the platform-specific parameters - edit site.def to change
 
 # site:  $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $
 
 # -------------------------------------------------------------------------
 # platform-specific configuration parameters - edit sun.cf to change
 
 #
 # platform:  $XConsortium: sun.cf,v 1.77 92/05/29 18:37:21 rws Exp $
 
 # operating system:  SunOS 5.0
 
 .INIT: Makefile
 REVCTLARCHFILE = SCCS/s.Imakefile
 REVCTLCMD = sccs get
 
 # $XConsortium: sv4Lib.rules,v 1.8 91/07/19 15:38:53 rws Exp $
 
 # -------------------------------------------------------------------------
 # site-specific configuration parameters that go after
 # the platform-specific parameters - edit site.def to change
 
 # site:  $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $
 
             SHELL = /bin/sh
 
               TOP = .
       CURRENT_DIR = .
 
                AR = ar cq
   BOOTSTRAPCFLAGS =
                CC = cc
                AS = as
 
          COMPRESS = compress
               CPP = /usr/ccs/lib/cpp $(STD_CPP_DEFINES)
     PREPROCESSCMD = cc -E $(STD_CPP_DEFINES)
           INSTALL = $(BINDIR)/bsdinst
                LD = ld
               LEX = lex
              YACC = yacc
              LINT = lint
       LINTLIBFLAG = -o
          LINTOPTS = -ax
                LN = ln -s
              MAKE = make
                MV = mv
                CP = cp
 
                RM = rm -f
             TROFF = psroff -t
          MSMACROS = -ms
               TBL = tbl
               EQN = eqn
      STD_INCLUDES =
   STD_CPP_DEFINES = -DSVR4 -DSYSV
       STD_DEFINES = -DSVR4 -DSYSV
  EXTRA_LOAD_FLAGS =
   EXTRA_LDOPTIONS =
   EXTRA_LIBRARIES = -lsocket -lnsl
              TAGS = ctags
 
     SHAREDCODEDEF =
          SHLIBDEF =
 
     PROTO_DEFINES =
 
      INSTPGMFLAGS =
 
      INSTBINFLAGS = -m 0755
      INSTUIDFLAGS = -m 4755
      INSTLIBFLAGS = -m 0644
      INSTINCFLAGS = -m 0444
      INSTMANFLAGS = -m 0444
      INSTDATFLAGS = -m 0444
     INSTKMEMFLAGS = -m 4755
 
       PROJECTROOT = $(OPENWINHOME)
       DESTDIR =
 
      TOP_INCLUDES = -I$(INCROOT)
 
       CDEBUGFLAGS = -O -xF
         CCOPTIONS = -DSYSV -DSVR4 -xF -Wa,-cg92
 
       ALLINCLUDES = $(INCLUDES) $(EXTRA_INCLUDES) $(TOP_INCLUDES) $(STD_INCLUDES)
        ALLDEFINES = $(ALLINCLUDES) $(STD_DEFINES) $(EXTRA_DEFINES) $(PROTO_DEFINES) $(DEFINES)
            CFLAGS = $(CDEBUGFLAGS) $(CCOPTIONS) $(ALLDEFINES)
         CCFLAGS = $(CDEBUGFLAGS) $(CCCOPTIONS) $(ALLDEFINES)
         LINTFLAGS = $(LINTOPTS) -DLINT $(ALLDEFINES)
 
            LDLIBS = $(SYS_LIBRARIES) $(EXTRA_LIBRARIES)
 
         LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS) $(EXTRA_LDOPTIONS) $(LOCAL_LDFLAGS) -L$(USRLIBDIR)
 
    LDCOMBINEFLAGS = -r
       DEPENDFLAGS =
 
         MACROFILE = sun.cf
            RM_CMD = $(RM) mapfile *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a .emacs_* tags TAGS make.log MakeOut *.O
 
     IMAKE_DEFINES =
 
          IRULESRC = $(CONFIGDIR)
         IMAKE_CMD = $(IMAKE) -DUseInstalled -I$(IRULESRC) $(IMAKE_DEFINES)
 
      ICONFIGFILES = $(IRULESRC)/Imake.tmpl $(IRULESRC)/Imake.rules \
                       $(IRULESRC)/Project.tmpl $(IRULESRC)/site.def \
                       $(IRULESRC)/$(MACROFILE)  \
                       $(EXTRA_ICONFIGFILES)
 
 # -------------------------------------------------------------------------
 # X Window System Build Parameters
 # $XConsortium: Project.tmpl,v 1.152 92/08/10 17:47:45 eswu Exp $
 
 # -------------------------------------------------------------------------
 # X Window System make variables; this need to be coordinated with rules
 
           PATHSEP = /
         USRLIBDIR = $(OPENWINHOME)/lib
          SHLIBDIR = $(OPENWINHOME)/lib
            BINDIR = $(OPENWINHOME)/bin
           DEMODIR = $(OPENWINHOME)/demo
           INCROOT = $(OPENWINHOME)/include
      BUILDINCROOT = $(TOP)
       BUILDINCDIR = $(BUILDINCROOT)/X11
       BUILDINCTOP = ..
            INCDIR = $(INCROOT)/X11
            ADMDIR = /usr/adm
            LIBDIR = $(USRLIBDIR)/X11
         CONFIGDIR = $(LIBDIR)/config
        LINTLIBDIR = $(USRLIBDIR)/lint
 
           FONTDIR = $(LIBDIR)/fonts
          XINITDIR = $(LIBDIR)/xinit
            XDMDIR = $(LIBDIR)/xdm
            TWMDIR = $(LIBDIR)/twm
           MANPATH = $(OPENWINHOME)/man
     MANSOURCEPATH = $(MANPATH)/man
         MANSUFFIX = n
      LIBMANSUFFIX = 3
            MANDIR = $(MANSOURCEPATH)$(MANSUFFIX)
         LIBMANDIR = $(MANSOURCEPATH)$(LIBMANSUFFIX)
            NLSDIR = $(LIBDIR)/nls
         PEXAPIDIR = $(LIBDIR)/PEX
       XAPPLOADDIR = $(LIBDIR)/app-defaults
        FONTCFLAGS = -t
 
      INSTAPPFLAGS = $(INSTDATFLAGS)
 
             IMAKE = imake
            DEPEND = makedepend
               RGB = rgb
 
             FONTC = bdftopcf
 
         MKFONTDIR = mkfontdir
         MKDIRHIER = /bin/sh $(BINDIR)/mkdirhier
 
         CONFIGSRC = $(TOP)/config
        DOCUTILSRC = $(TOP)/doc/util
         CLIENTSRC = $(TOP)/clients
           DEMOSRC = $(TOP)/demos
            LIBSRC = $(TOP)/lib
           FONTSRC = $(TOP)/../../../lib/libfont
        INCLUDESRC = $(TOP)/X11
         SERVERSRC = $(TOP)/server
           DDXSRC  = $(SERVERSRC)/ddx
           UTILSRC = $(TOP)/util
         SCRIPTSRC = $(UTILSRC)/scripts
        EXAMPLESRC = $(TOP)/examples
        CONTRIBSRC = $(TOP)/../contrib
            DOCSRC = $(TOP)/doc
            RGBSRC = $(TOP)/rgb
         DEPENDSRC = $(UTILSRC)/makedepend
          IMAKESRC = $(CONFIGSRC)
          XAUTHSRC = $(LIBSRC)/Xau
           XLIBSRC = $(LIBSRC)/X
            XMUSRC = $(LIBSRC)/Xmu
        TOOLKITSRC = $(LIBSRC)/Xt
        AWIDGETSRC = $(LIBSRC)/Xaw
        OLDXLIBSRC = $(LIBSRC)/oldX
       XDMCPLIBSRC = $(LIBSRC)/Xdmcp
 
       BDFTOPCFSRC = $(FONTSRC)/clients/bdftopcf
 
      MKFONTDIRSRC = $(FONTSRC)/clients/mkfontdir
          FSLIBSRC = $(FONTSRC)/lib/fs
     FONTSERVERSRC = $(FONTSRC)/server
      EXTENSIONSRC = $(TOP)/extensions
          XILIBSRC = $(TOP)/../../../lib/libXinput
       XTESTLIBSRC = $(EXTENSIONSRC)/lib/xtest
         PEXLIBSRC = $(EXTENSIONSRC)/lib/PEXlib
       PHIGSLIBSRC = $(EXTENSIONSRC)/lib/PEX
         DGALIBSRC = $(EXTENSIONSRC)/lib/dga
 
 # $XConsortium: sv4Lib.tmpl,v 1.8 92/06/28 17:43:23 rws Exp $
 
        SERVERETC = $(OPENWINHOME)/server/etc
 
        SERVERLIB = $(OPENWINHOME)/server/lib
 
    SERVERMODULES = $(OPENWINHOME)/server/modules
 
 SHLIBLDFLAGS = -G -z text -M mapfile
 PICFLAGS = -K PIC
 MAPFILE = mapfile
 
   DEPEXTENSIONLIB =
      EXTENSIONLIB = -lXext
 
           DEPXLIB = $(DEPEXTENSIONLIB)
          XLIBONLY = -lX11
              XLIB = $(EXTENSIONLIB) $(XLIBONLY)
 
         DEPXMULIB =
        XMULIBONLY = -lXmu
            XMULIB = $(XMULIBONLY) -z nodefs
 
        DEPOLDXLIB =
           OLDXLIB = -loldX
 
       DEPXTOOLLIB =
          XTOOLLIB = -lXt
 
         DEPXAWLIB =
            XAWLIB = -lXaw
 
         DEPXILIB =
            XILIB = -lXi
 
         DEPXTESTLIB =
            XTESTLIB = -lXtst
 
         DEPPEXLIB =
          PEXLIB = -lPEX5
 
         DEPDGALIB =
            DGALIB = -ldga
 
         SOXLIBREV = 5.0
           SOXTREV = 5.0
          SOXAWREV = 5.0
         SOOLDXREV = 5.0
          SOXMUREV = 5.0
         SOXEXTREV = 5.0
       SOXINPUTREV = 5.0
        SOXTESTREV = 1.0
        SOXTRAPREV = 1.0
          SOPEXREV = 1.0
        SODPSREV = 5
        SODGAREV = 1
 
       DEPXAUTHLIB = $(USRLIBDIR)/libXau.a
          XAUTHLIB =  -lXau
       DEPXDMCPLIB = $(USRLIBDIR)/libXdmcp.a
          XDMCPLIB =  -lXdmcp
 
         DEPPHIGSLIB = $(USRLIBDIR)/libphigs.a
            PHIGSLIB =  -lphigs
 
        DEPXBSDLIB = $(USRLIBDIR)/libXbsd.a
           XBSDLIB =  -lXbsd
 
  LINTEXTENSIONLIB = $(LINTLIBDIR)/llib-lXext.ln
          LINTXLIB = $(LINTLIBDIR)/llib-lX11.ln
           LINTXMU = $(LINTLIBDIR)/llib-lXmu.ln
         LINTXTOOL = $(LINTLIBDIR)/llib-lXt.ln
           LINTXAW = $(LINTLIBDIR)/llib-lXaw.ln
            LINTXI = $(LINTLIBDIR)/llib-lXi.ln
           LINTPEX = $(LINTLIBDIR)/llib-lPEX5.ln
         LINTPHIGS = $(LINTLIBDIR)/llib-lphigs.ln
               LINTDGA = $(LINTLIBDIR)/llib-ldga.ln
 
           DEPLIBS = $(DEPXAWLIB) $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB)
 
          DEPLIBS1 = $(DEPLIBS)
          DEPLIBS2 = $(DEPLIBS)
          DEPLIBS3 = $(DEPLIBS)
 
 # -------------------------------------------------------------------------
 # Imake rules for building libraries, programs, scripts, and data files
 # rules:  $XConsortium: Imake.rules,v 1.129 92/05/29 17:01:19 rws Exp $
 
 # -------------------------------------------------------------------------
 # start of Imakefile
 
 CFLAGS= -g
 foo: foo.c
       $(CC) $(CFLAGS) -c foo.c
 
 realclean:
       $(RM) *.o foo foo.o
 
 # -------------------------------------------------------------------------
 # common rules for all Makefiles - do not edit
 
 emptyrule::
 
 dependlocal::
 includes:: $(HEADERS) $(OTHERFILES)
 
 clean::
       $(RM_CMD) "#"*
 
 Makefile:: Imakefile
       -@if [ -f Makefile ]; then set -x; \
       $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
       else exit 0; fi
       $(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR)
       $(MAKE) $(MFLAGS) dependlocal
 
 tags::
       $(TAGS) -w *.[ch]
       $(TAGS) -xw *.[ch] > TAGS
 
 # -------------------------------------------------------------------------
 # empty rules for directories that do not have SUBDIRS - do not edit
 
 install::
       @echo "install in $(CURRENT_DIR) done"
 
 install.man::
       @echo "install.man in $(CURRENT_DIR) done"
 
 Makefiles::
 
 includes::
 
 # -------------------------------------------------------------------------
 # dependencies generated by makedepend

Configure

Highlights of SSH Configure

Welcome to the next level: autoconf

"Simple" Autoconf Example

What's happening?


lecture in color

/comp/150NET/notes/meta-old.php
downloaded on Nov-23-2009 02:24:55 PM,
was last modified on Feb-17-2004 10:48:42 PM.

All lecture note content is copyright 2004 by
Alva L. Couch, Computer Science, Tufts University