#	@(#):mkcmd	2.1	

CLEAN="rm -f *.o"
asource=$source
places=${places-/etc/places}
if test ! -r /bin/vax -o ! -r /bin/pdp11 -o ! -r /bin/u3b -o ! -r /bin/u3b5
	then
		echo 'Link /bin/vax to /bin/true or /bin/false,'
		echo 'and /bin/pdp11 to /bin/true or /bin/false.'
		echo 'and /bin/u3b to /bin/true or /bin/false.'
		echo 'and /bin/u3b5 to /bin/true or /bin/false.'
		echo 'Then try again'
		exit 1
	fi
if [ -r $places ]
	then
		. $places
else
	SRC=${SRC-/usr/src}
	LSRC=${LSRC-/usr/lsrc}
	BIN=${BIN-/bin}
	UBIN=${UBIN-/usr/bin}
	LBIN=${LBIN-/usr/lbin}
fi
LDFILE=${LDFILE-${SRC}/ldflags}
cd ${SRC}/cmd
arguments=$*
pflag=
ldflags=
for A in $*
do
	case $A in

	-y)	yflag=-y
		;;

	-f)	fflag=FFLAG=-f
		;;

	-s)	sflag=-s
		yaccrm=YACCRM=:
		iflag=IFLAG=
		;;
	-p)	pflag=-p
		command="sed -e 's/-p //'"
		arguments=`echo $arguments | eval $command`
		command=
		;;
	esac
done


for A in $arguments
do(
	if [ x$A = x-s -o x$A = x-y -o x$A = x-f ]
	then
		continue
	fi

	if [ $asource ]
		then source=$asource
	elif [ -f ${LSRC}/cmd/$A -o -d ${LSRC}/cmd/$A ]
		then source=$LSRC
		else source=$SRC
	fi
	cd ${source}/cmd
	NAME= TEST=./
	B=`echo $A ^ sed -e 's/.*\///' `

	case $B in
		*.c | *.o | *.s)
			_BASENAME_=`basename $B ".[cso]"`
			if [ -f ${_BASENAME_}.mk -o -f ${_BASENAME_}.rc ]
			then continue
			fi
		;;
	esac

	echo ======== $B
	i=$B
	if [ -d $B ] 
		then echo "******** directory $B"
	else	B=`echo $i | sed -e 's/\(.*\)\..*/\1/'`
		if [ -f $B.mk -o -f $LSRC/cmd/$B.mk ]
			then i=$B.mk
		elif [ -f $B.rc -o -f $LSRC/cmd/$B.rc ]
			then i=$B.rc
		elif [ -f $B.c  -o -f $LSRC/cmd/$B.c ] 
			then i=$B.c
		elif [ -f $B.y -o -f $LSRC/cmd/$B.y ]
			then i=$B.y
		elif [ -f $B.l -o -f $LSRC/cmd/$B.l ] 
			then i=$B.l
		elif [ -f $B.s -o -f $LSRC/cmd/$B.s ] 
			then i=$B.s
		elif [ -f $B.sh -o -f $LSRC/cmd/$B.sh ] 
			then i=$B.sh
		elif [ -f $B.ex -o -f $LSRC/cmd/$B.ex ]
			then i=$B.ex
		elif [ -f $B.o -o -f $LSRC/cmd/$B.o ] 
			then rm -f $B.o 
		fi
	fi

	if [ $source = $SRC -a -f ${LSRC}/cmd/$i ]
		then source=$LSRC
			cd ${source}/cmd
	fi
	case $i in

	*.mk)
		command="sed -e 's/$B //'"
		if [ -r ${LDFILE} ]
		then ldflags=`eval grep "'^$B '" $LDFILE`
		fi
		ldflags=`echo $ldflags | eval $command`
		if [ x$sflag = x-s ]
		then
			command="sed -e 's/-i//'"
			ldflags=`echo $ldflags | eval $command`
		else
			command="sed -e 's/-f//'"
			ldflags=`echo $ldflags | eval $command`
			if [ `expr x$ldflags : '.*-i'` != 0 ] 
				then
					command="sed -e 's/-n//'"
					ldflags=`echo $ldflags | eval $command`
			fi
		fi
		COMP="make -b -f $B.mk $iflag $fflag install"
		if [ "x$ldflags" != x ]
			then COMP="$COMP LDFLAGS='$ldflags'"
		fi
		COMP="$COMP && make -b -f $B.mk $iflag $yaccrm clobber"
		echo $COMP
		eval $COMP
		;;
	*.rc)	sh -x ${i}
		;;
	*.y)	if [ x$sflag != x-s -o x$yflag = x-y ]
		then
			echo yacc $i
			if yacc $i
			then	echo mv y.tab.c ${B}.c
				mv y.tab.c ${B}.c
				lib=-ly places=$places LDFILE=$LDFILE ${SRC}/:mkcmd $sflag $yflag ${B}.c
			else	echo "yacc failed"
			fi
			if [ x$sflag != x-s ]
			then
				rm -f ${B}.c
			else
				mv ${B}.c ${B}.x
			fi
		else
			mv ${B}.x ${B}.c
			lib=-ly places=$places LDFILE=$LDFILE ${SRC}/:mkcmd $sflag $yflag ${B}.c
			mv ${B}.c ${B}.x
		fi
		;;

	*.l)	if [ x$sflag != x-s -o x$yflag = x-y ]
		then
			echo lex $i
			if lex $i
			then	echo mv lex.yy.c ${B}.c
				mv lex.yy.c ${B}.c
				lib=-ll places=$places LDFILE=$LDFILE ${SRC}/:mkcmd $sflag $yflag ${B}.c
			else	echo "lex failed"
			fi
			if [ x$sflag != x-s ]
			then
				rm -f ${B}.c
			else
				mv ${B}.c ${B}.x
			fi
		else
			mv ${B}.x ${B}.c
			lib=-ll places=$places LDFILE=$LDFILE ${SRC}/:mkcmd $sflag $yflag ${B}.c
			mv ${B}.c ${B}.x
		fi
		;;

	*.x)
		:
		;;

	*.c)
		command="sed -e 's/$B //'"
		if [ -r ${LDFILE} ]
		then ldflags=`eval grep "'^$B '" $LDFILE`
		fi
		ldflags=`echo $ldflags | eval $command`
		if [ x$fflag = x ]
		then
			command="sed -e 's/-f//'"
			ldflags=`echo $ldflags | eval $command`
		fi
		if [ x$sflag = x-s ]
		then
			command="sed -e 's/-i//'"
			ldflags=`echo $ldflags | eval $command`
		else
			if [ `expr "x$ldflags" : '.*-i'` != 0 ] 
				then
					command="sed -e 's/-n//'"
					ldflags=`echo $ldflags | eval $command`
			fi
		fi
		COMP="cc -O $ldflags -s $i -o $TEST$B $lib"
		echo $COMP
		if eval $COMP
		then
			NAME=$B
		else	echo $B: cc failed
			rm -f $B
		fi
		lib=
		;;

	*.s)	echo "as -o $TEST$B.o /usr/include/sys.s $i && ld -s -o $TEST$B $TEST$B.o"
		if as -o $TEST$B.o /usr/include/sys.s $i && ld -s -o $TEST$B $TEST$B.o
		then	NAME=$B
		else	echo $B: as failed
		fi
		rm -f $TEST$B.o
		;;

	*.ex) 	echo "$i is merely a sample."
		echo "You should use it as a prototype for your own current situation"
		continue
		;;
	*.sh)	echo cp $i $B
		if cp $i $B
		then NAME=$B
		else echo $B: cp failed
		fi
		;;
	*.o)	rm -f $i
		continue
		;;

	*)	NAME= TEST=
		command="sed -e 's/$i //'"
		if [ -r ${LDFILE} ]
		then ldflags=`eval grep "'^$i '" $LDFILE`
		fi;
		ldflags=`echo $ldflags | eval $command`
		if [ x$sflag = x-s ]
		then
			command="sed -e 's/-i//'"
			ldflags=`echo $ldflags | eval $command`
		else
			command="sed -e 's/-f//'"
			ldflags=`echo $ldflags | eval $command`
			if [ `expr x$ldflags : '.*-i'` != 0 ] 
				then
					command="sed -e 's/-n//'"
					ldflags=`echo $ldflags | eval $command`
			fi
		fi
		if [ -d $i ]
		then	echo cd $i
			cd $i
			if [ -f ${i}.mk ]
			then
				COMP="make -b -f ${i}.mk ARGS=\"${ARGS}\" $iflag $fflag install"
				if [ "x$ldflags" != x ]
				then COMP="$COMP LDFLAGS='$ldflags'"
				fi
				echo $COMP
				if eval $COMP
				then make -b -f ${i}.mk $iflag $fflag $yaccrm clobber
				else echo MAKE ERROR
				fi
			elif [ -f ${i}.rc ]
				then sh -x ${i}.rc
			else echo XXXXXXXX Do Not Know How to MAKE $B
			fi
			$CLEAN
		else	echo "XXXXXXXX Cannot make $B"
		fi

	esac

	: Install binary just made in appropriate bin
	case $NAME in

	"")	:
		;;

	*)
		cd $TEST
		if [ $source = $LSRC ]
			then echo /etc/install -n ${LBIN} $NAME
			/etc/install -n ${LBIN} $NAME
			else echo /etc/install -n ${UBIN} $NAME
			/etc/install -n ${UBIN} $NAME
		fi
		rm -f $NAME
		;;
	esac
);done
