# Placed in the public domain - 1995/05/06
#
#	@(#)Makefile	1.9 (2.11BSD) 2000/2/28

CPP= /lib/cpp
LD= /bin/ld
AS= /bin/as

# modules which can not use SYSCALL and must be assembled from sources.  The 
# rest of the system calls are generated with printf(1) and do not have 
# source files associated with them.

PDPSRCS= _exit.s brk.s execl.s execle.s execv.s fork.s pipe.s ptrace.s sbrk.s \
	setlogin.s sigaction.s sigreturn.s vfork.s

PDPOBJS= _exit.o brk.o execl.o execle.o execv.o fork.o pipe.o ptrace.o sbrk.o \
	setlogin.o sigaction.o sigreturn.o vfork.o

# these are generated with a second argument to SYSCALL of 'norm'.  Have to
# split into more than one list because 'make' only permits 80 "lefts".

NORM1= __sysctl.o accept.o access.o adjtime.o bind.o chdir.o chflags.o \
	chmod.o chown.o chroot.o close.o connect.o dup.o dup2.o \
	execve.o fchdir.o fchflags.o fchmod.o fchown.o fcntl.o flock.o fstat.o \
	fsync.o ftruncate.o getdtablesize.o getgroups.o getitimer.o \
	_getlogin.o getsockname.o \
	getpeername.o getpriority.o getrlimit.o getrusage.o getsockopt.o \
	gettimeofday.o ioctl.o kill.o killpg.o link.o listen.o lstat.o mkdir.o

NORM2=  mknod.o mount.o open.o pselect.o quota.o read.o readlink.o readv.o \
	reboot.o \
	recv.o recvfrom.o recvmsg.o rename.o rmdir.o select.o send.o sendmsg.o \
	sendto.o setgroups.o setitimer.o setpgrp.o setpriority.o setquota.o \
	setuid.o seteuid.o setgid.o setegid.o \
	setrlimit.o setsockopt.o settimeofday.o \
	shutdown.o sigaltstack.o socket.o socketpair.o stat.o symlink.o \
	sigprocmask.o sigstack.o sigwait.o \
	statfs.o fstatfs.o getfsstat.o \
	truncate.o umount.o unlink.o utimes.o wait4.o write.o writev.o

# these are generated with a second argument to SYSCALL of 'long'

LONG=	lseek.o

# these are generated with a second argument to SYSCALL of 'error'

ERROR= sigsuspend.o

# these are generated with a second argument to SYSCALL of 'noerror'

NOERROR= getgid.o getegid.o getpgrp.o getpid.o \
	getppid.o getuid.o geteuid.o profil.o sigpending.o sync.o \
	umask.o vhangup.o

OBJS= ${PDPOBJS} ${NORM1} ${NORM2} ${LONG} ${ERROR} ${NOERROR}

TAGSFILE=tags

.s.o:
	/lib/cpp -DPROF ${DEFS} $< | sed -e 's;^#;/;' | as -V -o $@
	-ld -X -r $*.o
	mv a.out profiled/$*.o
	/lib/cpp ${DEFS} $< | sed -e 's;^#;/;' | as -V -o $@
	-ld -X -r $*.o
	mv a.out $*.o

syslib syslib_p: ${OBJS}
	@echo "building profiled syslib"
	@cd profiled; ar cru ../syslib_p ${OBJS}
	@echo "building normal syslib"
	@ar cru syslib ${OBJS}

${NORM1}: SYS.h /usr/include/syscall.h
	@echo creating $*.o profiled/$*.o
	@printf '#include "SYS.h"\nSYSCALL($*,norm)\n' | \
	    ${CPP} -DPROF ${DEFS} | sed -e 's;^#;/;' | ${AS} -o $*.o
	@${LD} -X -r $*.o
	@mv a.out profiled/$*.o
	@printf '#include "SYS.h"\nSYSCALL($*,norm)\n' | \
	    ${CPP} ${DEFS} | sed -e 's;^#;/;' | ${AS} -o $*.o
	@${LD} -x -r $*.o
	@mv a.out $*.o

${NORM2}: SYS.h /usr/include/syscall.h
	@echo creating $*.o profiled/$*.o
	@printf '#include "SYS.h"\nSYSCALL($*,norm)\n' | \
	    ${CPP} -DPROF ${DEFS} | sed -e 's;^#;/;' | ${AS} -o $*.o
	@${LD} -X -r $*.o
	@mv a.out profiled/$*.o
	@printf '#include "SYS.h"\nSYSCALL($*,norm)\n' | \
	    ${CPP} ${DEFS} | sed -e 's;^#;/;' | ${AS} -o $*.o
	@${LD} -x -r $*.o
	@mv a.out $*.o

${LONG}: SYS.h /usr/include/syscall.h
	@echo creating $*.o profiled/$*.o
	@printf '#include "SYS.h"\nSYSCALL($*,long)\n' | \
	    ${CPP} -DPROF ${DEFS} | sed -e 's;^#;/;' | ${AS} -o $*.o
	@${LD} -X -r $*.o
	@mv a.out profiled/$*.o
	@printf '#include "SYS.h"\nSYSCALL($*,long)\n' | \
	    ${CPP} ${DEFS} | sed -e 's;^#;/;' | ${AS} -o $*.o
	@${LD} -x -r $*.o
	@mv a.out $*.o

${ERROR}: SYS.h /usr/include/syscall.h
	@echo creating $*.o profiled/$*.o
	@printf '#include "SYS.h"\nSYSCALL($*,error)\n' | \
	    ${CPP} -DPROF ${DEFS} | sed -e 's;^#;/;' | ${AS} -o $*.o
	@${LD} -X -r $*.o
	@mv a.out profiled/$*.o
	@printf '#include "SYS.h"\nSYSCALL($*,error)\n' | \
	    ${CPP} ${DEFS} | sed -e 's;^#;/;' | ${AS} -o $*.o
	@${LD} -x -r $*.o
	@mv a.out $*.o

${NOERROR}: SYS.h /usr/include/syscall.h
	@echo creating $*.o profiled/$*.o
	@printf '#include "SYS.h"\nSYSCALL($*,noerror)\n' | \
	    ${CPP} -DPROF ${DEFS} | sed -e 's;^#;/;' | ${AS} -o $*.o
	@${LD} -X -r $*.o
	@mv a.out profiled/$*.o
	@printf '#include "SYS.h"\nSYSCALL($*,noerror)\n' | \
	    ${CPP} ${DEFS} | sed -e 's;^#;/;' | ${AS} -o $*.o
	@${LD} -x -r $*.o
	@mv a.out $*.o

clean:
	rm -f *.o profiled/*.o a.out syslib syslib_p