#! /bin/sh

# @(#) $Header: genupd,v 1.36 94/10/30 21:27:08 deyke Exp $

client=$1
patcher=$2

master=/tcp
mirror=/tcp/netupdmirrors/$client

if [ -d /users/funk/dk5sg/tcp ]; then
	master=/users/funk/dk5sg/tcp
fi

have_nr_rc=0
remove=
update=

cd $master

sort /usr/local/lib/users > users.$$
mv users.$$ users

sources=`find \
	*.R \
	Makefile \
	README \
	aos/*.[ch] \
	aos/Makefile \
	bbs/*.[ch] \
	bbs/Makefile \
	bbs/help \
	cc \
	convers/*.[ch] \
	convers/Makefile \
	doc/*.mm \
	doc/*.ms \
	doc/*.txt \
	domain.txt \
	examples/*.* \
	hosts \
	lib/*.[ch] \
	lib/Makefile \
	lib/configure \
	netrom_links \
	src/*.[ch] \
	src/Makefile \
	src/cc \
	src/linux_include/netinet/*.h \
	users \
	util/*.[ch] \
	util/Makefile \
	util/genupd \
	! -name configure.h -print`
if [ -f net.rc.$client ]; then
	have_nr_rc=1
	sources="$sources net.rc.$client"
fi
if [ $client = dk0hu ]; then
	sources="$sources domain.rev.txt"
fi

if [ ! -d $mirror ]; then
	mkdir -p $mirror
fi
for i in $sources; do
	if cmp -s $i $mirror/$i; then
		:
	else
		update="$update $i"
	fi
done

cd $mirror
echo $sources | tr ' ' '\012' | sort > /tmp/src$$
find * -print | sort > /tmp/old$$
for i in `comm -13 /tmp/src$$ /tmp/old$$`; do
	if [ ! -d $master/$i ]; then
		remove="$remove $i"
		j=`dirname $i`/`basename $i .c`
		if [ $j.c = $i ]; then
			remove="$remove $j.o"
		fi
	fi
done
rm -f /tmp/src$$ /tmp/old$$

if [ -n "$update" ]; then
cat <<'@EOF1'
check() {
	if [ ! -d `dirname $1` ]; then
		mkdir -p `dirname $1`
	fi
	if [ $2 = d41d8cd98f00b204e9800998ecf8427e ]; then
		rm -f $1
	fi
	touch $1
	if [ `md5 < $1` != $2 ]; then
		echo ERROR: md5 shows wrong signature for $1 $3 updating.
		echo Update aborted.
		exit 1
	fi
}
@EOF1
fi

cd $mirror
for i in $update; do
	if [ ! -d `dirname $i` ]; then
		mkdir -p `dirname $i`
	fi
	touch $i
	echo check $i `md5 < $i` before
done

for i in $update; do
	echo echo Updating $i
	if [ $patcher = patch ]; then
		echo patch -u -f -s $i "<<'@EOF2'"
		gdiff -U2 $i $master/$i
		echo @EOF2
	else
		echo ex - $i "<<'@EOF3'"
		diff -e $i $master/$i
		echo x
		echo @EOF3
	fi
	echo check $i `md5 < $master/$i` after
	if [ $patcher = patch ]; then
		echo rm -f $i.orig $i~
	fi
done

for i in $remove; do
	echo echo Removing $i
	echo rm -rf $i
done

if [ $have_nr_rc = 1 ]; then
	echo rm -f net.rc
	echo ln net.rc.$client net.rc
fi

echo echo Update complete, no errors.
echo exit 0
