TERMSRC = /usr/local/src/term
LIBCSRC = /usr/local/src/libc-linux
LIBC_VERSION = 4.6.27
TERM_VERSION = 2.3.5

ROOTBIN = /usr/local/sbin
# If you use a directory other than lib, some older programs won't work when
# termified.
ROOTLIB = /lib
MANDIR = /usr/man

USERBIN = ${HOME}/bin
USERLIB = ${HOME}/term

RM = rm -f
AR = ar 
CP = cp -a
LN = ln -s

all: libt.so.$(LIBC_VERSION)-$(TERM_VERSION) cpacl

install: install.root install.man

help: cpacl.help termify.help

cpacl.help: cpacl.1
	nroff -man cpacl.1 > cpacl.help

termify.help: termify.1
	nroff -man termify.1 > termify.help

install.man:
	$(CP) termify.1 cpacl.1 $(MANDIR)/man1/.

install.root: cpacl termify.root
	$(CP) cpacl $(ROOTBIN)/.
	$(CP) termify.root $(ROOTBIN)/termify
	$(CP) libt.so.$(LIBC_VERSION)-$(TERM_VERSION) $(ROOTLIB)/.
	ldconfig -v

install.user: cpacl termify.user
	if [ ! -d $(USERBIN) ]; then mkdir $(USERBIN); else true; fi
	$(CP) cpacl $(USERBIN)/.
	$(CP) termify.user $(USERBIN)/termify
	@if [ x$$LD_LIBRARY_PATH = x ] ; then  echo >&2; \
		echo "In order for your termified binaries to work you will need to" >&2; \
		echo "add export LD_LIBRARY_PATH='$(USERLIB)' to your ~/.profile" >&2; \
		echo "and add setenv LD_LIBRARY_PATH '$(USERLIB)' to your ~/.login" >&2; \
		echo "Then logout, and login again." >&2; echo >&2; \
	else true; fi
	if [ ! -d $(USERLIB) ]; then mkdir $(USERLIB); else true; fi
	$(CP) libt.so.$(LIBC_VERSION)-$(TERM_VERSION) $(USERLIB)/.

cpacl: cpacl.c
	cc -N -s -o cpacl cpacl.c

libt.so.$(LIBC_VERSION)-$(TERM_VERSION): ./libc-linux/shared/libc.a
	cd libc-linux; make SHARED=true MATH=false STATIC=false
	$(CP) libc-linux/jump/libc/libc.so.$(LIBC_VERSION) \
		libt.so.$(LIBC_VERSION)-$(TERM_VERSION)


./libc-linux/shared/libc.a: 
	make -f Makefile.term clientobjs
	if [ ! -d ./libc-linux/shared ] ; then \
		mkdir ./libc-linux/shared;  \
	else true; fi
	if [ ! -d ./libc-linux/shared/libc ] ; then \
		mkdir ./libc-linux/shared/libc;  \
	else true; fi
	$(AR) ucrv ./libc-linux/shared/libc.a shared/*.o
	mv shared/*.o ./libc-linux/shared/libc/.
	$(RM) *.o 

clean:
	if [ -d ./libc-linux ]; then \
		cd ./libc-linux; make clean ; \
	else true; fi
	$(RM) -r shared *.o *.s


config: realclean jump.dir Makefile.term libc-linux/Makeconfig
	cd libc-linux; ./configure

libc-linux/Makeconfig: libc-linux.link
	$(RM) libc-linux/Makeconfig
	$(CP) $(LIBCSRC)/Makeconfig libc-linux/Makeconfig
	echo "CFLAGS += -DBUILD_LIBC --include $(TERMSRC)/termnet.h" >> libc-linux/Makeconfig

jump.dir: libc-linux.link
	$(RM) -r ./libc-linux/jump/libc ./jump 
	mkdir ./libc-linux/jump/libc
	$(LN) ./libc-linux/jump/libc ./jump
	$(CP) $(LIBCSRC)/jump/libc/. ./jump/.
	touch ./jump/jump.import
	sed 's/libtermnet/libc/g' < $(TERMSRC)/jump/jump.vars >> jump/jump.ignore
	mv jump/jump.funcs jump/jump.funcs.old
	sed `grep '^#define term_.* .*' $(TERMSRC)/termnet.h  \
		| awk '{printf("-e s/___%s[^a-z_0-9]/_%s/\n",$$3,$$3)}'` \
		< jump/jump.funcs.old > jump/jump.funcs
	sed -e s/libtermnet/libc/g \
		`grep '^#define term_.* .*' $(TERMSRC)/termnet.h | \
			awk '{printf("-e s/_%s[^a-z_0-9]/___%s/\n",$$2,$$3)}'` \
		< $(TERMSRC)/jump/jump.funcs \
		| sed 's/___vfork/_vfork/' \
		| grep -v _strerror >> jump/jump.funcs
	for i in `grep '^#define term_.* .*' $(TERMSRC)/termnet.h|awk '{print $$3}'` ; do \
		for j in `find . -name $$i.S`; do \
			sed "s/SYSCALL /SYSCALL__ /g" < $$j > $$j.new ; \
			$(RM) $$j ; \
			mv $$j.new $$j ; \
	done ; done
	sed 's/libtermnet/libc/g' < $(TERMSRC)/jump/jump.ignore >> jump/jump.ignore

libc-linux.link:
	$(RM) -r libc-linux
	$(CP) -s $(LIBCSRC) libc-linux
	$(RM) -r libc-linux/jump/libc libc-linux/config.in
	$(CP) $(LIBCSRC)/config.in libc-linux/config.in

Makefile.term: $(TERMSRC)/Makefile.in $(TERMSRC)/configure
	$(TERMSRC)/configure --root --shlib --jump_lib=libc \
		--Makefile=Makefile.term

realclean: 
	$(RM) -r jump libc-linux shared Makefile.term *.o *.s libt.so.* cpacl \
		config.status *.help


