QEF home page
14. Build All, Relinfo, and FSIC

This section does the complete project build, demonstrates the relinfo and fsic package.

Table of Contents
Previous Page
Next Page

First we need to chdir to the root of the object tree and make the missing directories.
% qd -o / ; pwd

% treedirs -a
+ mkdir QefAdm/fsic
+ mkdir QefAdm/relinfo
+ mkdir QefAdm/touchdir

% cats qeffile
set _DefaultArgs_       All

Begin   qefdirs

P = Post        # add Post construction key P
# qefdirs already provides I==Install, L==Local, M==Man

All = Install Man Post

appl            ILm
ctoe            ILm
QefAdm/relinfo  P
QefAdm/fsic     P
Doing the Whole Build

Note the setting of _DefaultArgs_ to All which is bound within the qefdirs script to Install, Man, and Post and note the addition of a new key P for Post.

Let's build what's left to build given we have done level 1 Installs:

% qef -DIto=1  # All is the default
#{ -DIto=1 @gobo 2003/07/20 07:35:37
# QEFHALTFILE: /g/dt/cook/obj/%qef01121b.hlt
#-{ -d appl Man @gobo 2003/07/20 07:35:37
#--{ -d man Man @gobo 2003/07/20 07:35:37
#--} E0 gobo@/g/dt/cook/obj/appl/man 2003/07/20 07:35:37(0)
#-} E0 gobo@/g/dt/cook/obj/appl 2003/07/20 07:35:37(0)
#-{ -d ctoe Man @gobo 2003/07/20 07:35:37
#-} E0 gobo@/g/dt/cook/obj/ctoe 2003/07/20 07:35:37(0)
Produce the relinfo file
#-{ -d QefAdm/relinfo Post @gobo 2003/07/20 07:35:37
+ mkvernum -o relinfo -0Cook -1""
	-u/p/qtree/9.1/linux2_0i/relinfo -l relinfo.vf release
+ cush -o+ relinfo echo "Qvrs settings:"
+ cush -o+ relinfo qvrs -Rn
+ instal -S /g/dt/cook/dest/relinfo relinfo
#-} E0 gobo@/g/dt/cook/obj/QefAdm/relinfo 2003/07/20 07:35:37(0)
#-{ -d QefAdm/fsic Post @gobo 2003/07/20 07:35:37
+ cush -o. ,inst.rls -d /g/dt/cook/dest rls -sN/
+ cush -o. ,objs.rls -d .. rls -sN/
+ bfsic -I ,inst.rls -O ,objs.rls > ,p.errors
+ rm ,inst.rls ,objs.rls
+ transl '/g/dt/cook/dest/\0' ,i.tmps | sort -o ,i.tmps
+ rep -Z '/<_|[!$_][on]>\#' ,i.tmps | linked -nf | rmlist -f
+ fexists -l ,i.tmps | sort -o ,i.tmps
+ fexists -e ,[iop].* | rmlist -q
+ untouch -c ,o.tmps
+ (cd ..; ls QefAdm/fsic/,*) | sort -u -o ,o.tmps - ,o.tmps
+ fixflist -aq -r -d.. -s'..' ../QefAdm/fsic/,o.tmps
+ lls -o .FL ,[iop].* | rtabs -T 8l16l6R
        ,o.tmps              6
        ,p.errors            2
#-} E0 gobo@/g/dt/cook/obj/QefAdm/fsic 2003/07/20 07:35:38(1)
#} E0 gobo@/g/dt/cook/obj 2003/07/20 07:35:38(1)

Given that the manual sections have also been processed, all that needs to be done is the creation and installation of the relinfo file and the file system integrity check (i.e., FSIC).

The relinfo file
% cats QefAdm/relinfo/qeffile
Begin   qsg

relinfo -Q -u @<qtree relinfo>  @# create relinfo

% sed 10q QefAdm/relinfo/relinfo
Cook 3.4(16) - Linux-2.0.34-i686 - 2003/07/20 07:35:37 EDT
        dt on gobo in /g/dt/cook/obj
        Qtree(full) 9.1(57) - Linux-2.0.34-i686 - 2003/07/19
		07:00:44 EDT
Qvrs settings:
          AsSuffix  s
         BeginLine  qefdirs
            Branch  .
         BuildHost  gobo
         BuildPath  /p/qtree/9.1/linux2_0i/bin /bin /usr/bin

The relinfo file is installed in the destination so that the product is clearly identified as to its builder, build host, build location, and the set of qvrs settings.

The File System Integrity Check (FSIC)

The fsic package is an important facility that should be used to check the integrity of your object and installed (a.k.a. _DestDir_ or product) trees. The list of files in these file systems is compared against a model of what they should be expressed by files in the source tree. The database makes provisions for configuration dependent exceptions and optional or normal deviations from the model (e.g., man/cat1/*.1). The run above reported 6 temporary files and 2 errors.

# remove non-existent files from list
% fixflist -ra QefAdm/fsic/,o.tmps

% cat QefAdm/fsic/,o.tmps
,.g			# go diagnostic output

% cat QefAdm/fsic/,p.errors
man/man1/ctoe.1 # i05 new inst file (type=F)
man/man1/etoc.1 # i05 new inst file (type=F)

% x-qfsic i05  # x-qfsic explains messages and solutions
[io]05 : new <inst|objs> file

Example messages:
        dir/file # i05 new inst file (type=F)
        dir/file # o05 new objs file (type=f)

dir/file exists in the inst (objs) tree, but is not named
in inst.fl (objs.fl), and is not typed E (e) or I (i)
in except/<sysnm>.fl.

To Fix:
# rest of item suppressed

Given the errors listed, let us fix the problems and rerun the fsic package:

% g -R  # remove the go file
- rm ,.g
g: No following ,g file

% bfsic -AL man/man1/ctoe.1 man/man1/etoc.1  # update database

% qef -d QefAdm/fsic  # rerun fsic package
#{ -d QefAdm/fsic @gobo 2003/07/20 08:03:10
# suppressed commands as shown above
+ lls -o .FL ,[iop].* | rtabs -T 8l16l6R
        ,o.tmps              2
#} E0 gobo@/g/dt/cook/obj/QefAdm/fsic 2003/07/20 08:03:10(0)

,o.tmps will usually contain itself and a qef._ temporary so 2 files is okay. The fsic package also has facilities to check the integrity of a source file system. Let's look at the fsic qeffile.

% cats QefAdm/fsic/qeffile  # lets look at that qeffile
if @(match /@TreeType /source /baseline)
        set     PermitQef       allowed in source directory
if (@(match /@VCSys /sccs) && !@(exists SCCS)) @
   || (@(match /@VCSys /rcs) && !@(exists RCS))
        set NoSfiles    1

Begin   qsg

fsic @{QefArgs}

The PermitQef setting is to override the prohibition of running qef in a baseline directory or on the wrong machine, as will be demonstrated on the next page. For example, if we were on MOKEY (a WindowsNt machine) and tried to do a build:

% qd -46 /ctoe
Using 46 cook 3.4 object dt gobo linux2_0i /g/dt/cook/obj ...
Warning: mapping /g/dt/cook/obj to //J/dt/cook/obj

% qef etoc
#{ @MOKEY 2003/07/20 08:44:31
# QEFHALTFILE: //J/dt/cook/obj/ctoe/%qefqbzaaa.hlt
qef: Running qef to build target `Linux-2.0.34-i686' on
		system `Windows_NT-4.0-pentium' prohibited
#} E-1 MOKEY@//J/dt/cook/obj/ctoe 2003/07/20 08:44:32(1)

There is a mechanism to permit some cross platform builds, but we'll leave that to another day.

cook24.qh - 1.15 - 03/10/23 QEF home page Table of Contents Previous Page Next Page