File: buildbins

package info (click to toggle)
tiger 2.2.4-22
  • links: PTS
  • area: main
  • in suites: woody
  • size: 2,188 kB
  • ctags: 240
  • sloc: sh: 8,388; ansic: 2,109; makefile: 141; perl: 106
file content (188 lines) | stat: -rwxr-xr-x 3,902 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#!/bin/sh
#
#     tiger - A UN*X security checking system
#     Copyright (C) 1993 Douglas Lee Schales, David K. Hess, David R. Safford
#
#     Please see the file `COPYING' for the complete copyright notice.
#
# buildbins - 06/16/93
#
#-----------------------------------------------------------------------------
#
TigerInstallDir='.'

outfile=
[ -n "$1" ] && {
  case "$1" in
    -*);;
    *) outfile="$1"; shift;;
  esac
}

#
# Set default base directory.
# Order or preference:
#      -B option
#      TIGERHOMEDIR environment variable
#      TigerInstallDir installed location
#
basedir=${TIGERHOMEDIR:=$TigerInstallDir}

for parm
do
   case $parm in
   -B) basedir=$2; break;;
   esac
done

#
# Verify that a config file exists there, and if it does
# source it.
#
[ ! -r $basedir/config ] && {
  echo "--ERROR-- [init002e] No 'config' file in \`$basedir'."
  exit 1
}

TigerNoBuild=Y

. $basedir/config

. $BASEDIR/initdefs

#
# If run in test mode (-t) this will verify that all required
# elements are set.
#
[ "$Tiger_TESTMODE" = 'Y' ] && {
  haveallcmds RM CC CAT MV  || exit 1
  haveallfiles BASEDIR WORKDIR || exit 1
  
  echo "--CONFIG-- [init003c] $0: Configuration ok..."
  exit 0
}

#------------------------------------------------------------------------

haveallcmds CAT || exit 1
haveallfiles BASEDIR BINDIR WORKDIR || exit 1

snefru="snefru.c"
realpath="realpath.c"
testsuid="testsuid.c"
md5="md5.c"
getpermit="getpermit.c"

toplevel=$BASEDIR/systems/$OS

setbintype=0
if [ -f $BINDIR/.bintype ]; then
  read os rev arch < $BINDIR/.bintype
  [ "$os" != "$OS" -o "$rev" != "$REV" -o "$arch" != "$ARCH" ] && {
    for file in $cmds
    do
      $RM -f $BINDIR/$file
    done
    $RM -f $BINDIR/.bintype
    setbintype=1
  }
else
  setbintype=1
fi

{
  while read cmd cmdvar
  do
    foundit=0
    for dir in $REL/$REV/$ARCH $REL/$REV $REL
    do
      if [ $TESTEXEC $toplevel/$dir/$cmd ]; then
	echo "$cmdvar=$toplevel/$dir/$cmd; export $cmdvar"
	foundit=1
	break
      fi
    done

    [ $foundit -eq 0 ] &&
    if [ $setbintype -eq 1 -o ! $TESTEXEC $BINDIR/$cmd ]; then
      haveallcmds CC && {
	eval sources="\$$cmd"
	objlist=
	for source in $sources
	do
	  foundit=0
	  
	  for dir in $REL/$REV/$ARCH $REL/$REV $REL
	  do
	    if [ -f $toplevel/$dir/$source ]; then
	      $CAT $toplevel/$dir/$source > $WORKDIR/$source
	      (cd $WORKDIR; $CC $CFLAGS -c $source)
	      delete $WORKDIR/$source
	      foundit=1
	      break
	    fi
	  done
	  
	  [ $foundit -ne 1 -a -f $BASEDIR/c/$source ] && {
	    $CAT $BASEDIR/c/$source > $WORKDIR/$source
	    (cd $WORKDIR; $CC $CFLAGS -c $source)
	    delete $WORKDIR/$source
	    foundit=1
	  }
	
	  [ $foundit -eq 1 ] && {
	    objlist="$objlist `$BASENAME $source .c`.o"
	  }
	done
      
	(
          umask 022
	  cd $WORKDIR
	  $CC $CFLAGS $objlist -o $cmd $CLIBS
	)
	if [ -f $WORKDIR/$cmd ]; then
	  (
	    umask 022
	    if haveallcmds MV; then
	      $MV $WORKDIR/$cmd $BINDIR 2>/dev/null &&
	        echo "$cmdvar=$BINDIR/$cmd; export $cmdvar"
	    else
	      $CAT $WORKDIR/$cmd > $BINDIR/$cmd 2>/dev/null &&
		echo "$cmdvar=$BINDIR/$cmd; export $cmdvar"
	      delete $WORKDIR/$cmd
	    fi
	    if [ -f $WORKDIR/$cmd ]; then
	      # For some reason it didn't move... use it where it sits
	      # We won't be cleaning this up though... sorry...
	      echo "$cmdvar=$WORKDIR/$cmd; export $cmdvar"
	    fi
	  )
	fi
	for obj in $objlist
	do
	  delete $WORKDIR/$obj
	done
      }
    else
      echo "$cmdvar=$BINDIR/$cmd; export $cmdvar"
    fi
  done << EOF
realpath REALPATH
snefru SNEFRU
testsuid TESTSUID
md5 MD5
getpermit GETPERMIT
EOF
} |
{
  if [ -n "$outfile" ]; then
    $SED -e 's/^\(--[A-Z].*\)$/echo "\1"/' > $outfile
  else
    $SED -e 's/^\(--[A-Z].*\)$/echo "\1"/'
  fi
}

[ $setbintype -eq 1 ] && {
  echo "$OS $REV $ARCH" > $BINDIR/.bintype
  haveallcmds CHMOD && $CHMOD 644 $BINDIR/.bintype
} 2>/dev/null