SRC_DIR = $(SRC_TREE)/condor_$(SYSCALL_LIB)
CFLAGS = $(STD_C_FLAGS) -DCONDOR -g

TO_UPPER = $(PLATFORM_DIR)/condor_$(SYSCALL_LIB)/ToUpper

#if NEEDS_GROW_STACK
#define GROW_STACK grow_stack.o
#else
#define GROW_STACK
#endif

#if NEEDS_SPECIAL_SIGVEC
#define SPECIAL_SIGVEC _SIGVEC
#else
#define SPECIAL_SIGVEC
#endif

#if NEEDS_FAKE_GETMNT
#define FAKE_GETMNT_SRC fake_getmnt.c
#define FAKE_GETMNT_OBJ fake_getmnt.o
#else
#define FAKE_GETMNT_SRC
#define FAKE_GETMNT_OBJ
#endif

CKPT_SRC = \
	CONDOR_sysnames.c CONDOR_syscalls.c _mkckpt.c _updateckpt.c ckpt.c \
	restart.c ckpt_main.c syscall_mode.c

OTHER_SRC = \
	xfer_file.c extern_name.c extern_path.c FAKE_GETMNT_SRC intern_path.c \
	nfs.c

CLIB_SRC = \
	_exit.c accept.c access.c acct.c adjtime.c async_daemon.c bind.c \
	chdir.c chmod.c chown.c chroot.c close.c connect.c creat.c dup.c \
	dup2.c execv.c execve.c exportfs.c fchmod.c fchown.c fcntl.c \
	finfo.c flock.c fork.c fstat.c fstatfs.c fsync.c ftruncate.c \
	getdirentries.c getdomainname.c getdopt.c getdtablesize.c getegid.c \
	geteuid.c getfh.c getgid.c getgroups.c gethostid.c gethostname.c \
	getitimer.c getpagesize.c getpeername.c getpgrp.c getpid.c getppid.c \
	getpriority.c getrlimit.c getrusage.c getsockname.c getsockopt.c \
	gettimeofday.c getuid.c ioctl.c isatty.c kill.c killpg.c link.c \
	listen.c lseek.c lstat.c madvise.c mincore.c mkdir.c mknod.c mmap.c \
	mount.c mprotect.c mremap.c munmap.c nfssvc.c open.c pipe.c profil.c \
	ptrace.c quotactl.c read.c readlink.c readv.c reboot.c recv.c \
	recvfrom.c recvmsg.c rename.c rmdir.c select.c send.c sendmsg.c sendto.c \
	setdomainname.c setdopt.c setgroups.c sethostid.c sethostname.c \
	setitimer.c setpgrp.c setpriority.c setregid.c setreuid.c setrlimit.c \
	setsockopt.c settimeofday.c shutdown.c sigblock.c sigpause.c sigreturn.c \
	sigsetmask.c sigstack.c sigvec.c socket.c socketpair.c sstk.c stat.c \
	statfs.c swapon.c symlink.c sync.c truncate.c umask.c unlink.c unmount.c \
	utimes.c vhangup.c wait.c wait3.c write.c writev.c

SOURCE_FILES = $(CKPT_SRC) $(OTHER_SRC) $(CLIB_SRC)

CKPT_OBJ = \
	CONDOR_sysnames.o CONDOR_syscalls.o _mkckpt.o _updateckpt.o ckpt.o \
	restart.o ckpt_main.rem.o syscall_mode.o GROW_STACK

SPEC_OBJ = \
	STATFS.o GETEUID.o GETEGID.o GETPPID.o SIGVEC.o \
	SPECIAL_SIGVEC WAIT3.o

OTHER_OBJ = \
	xfer_file.o extern_name.o extern_path.o FAKE_GETMNT_OBJ intern_path.o \
	nfs.o

CLIB_OBJ = \
	_exit.o accept.o access.o acct.o adjtime.o async_daemon.o bind.o \
	chdir.o chmod.o chown.o chroot.o close.o connect.o creat.o dup.o \
	dup2.o execv.o execve.o exportfs.o fchmod.o fchown.o fcntl.o finfo.o \
	flock.o fork.o fstat.o fstatfs.o fsync.o ftruncate.o getdirentries.o \
	getdomainname.o getdopt.o getdtablesize.o getegid.o geteuid.o getfh.o \
	getgid.o getgroups.o gethostid.o gethostname.o getitimer.o getpagesize.o \
	getpeername.o getpgrp.o getpid.o getppid.o getpriority.o getrlimit.o \
	getrusage.o getsockname.o getsockopt.o gettimeofday.o getuid.o \
	ioctl.o isatty.o kill.o killpg.o link.o listen.o lseek.o lstat.o \
	madvise.o mincore.o mkdir.o mknod.o mmap.o mount.o mprotect.o \
	mremap.o munmap.o nfssvc.o open.o pipe.o profil.o ptrace.o quotactl.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 setdomainname.o setdopt.o \
	setgroups.o sethostid.o sethostname.o setitimer.o setpgrp.o setpriority.o \
	setregid.o setreuid.o setrlimit.o setsockopt.o settimeofday.o shutdown.o \
	sigblock.o sigpause.o sigreturn.o sigsetmask.o sigstack.o sigvec.o \
	socket.o socketpair.o sstk.o stat.o statfs.o swapon.o symlink.o sync.o \
	truncate.o umask.o unlink.o unmount.o utimes.o vhangup.o wait.o wait3.o \
	write.o writev.o

UTIL_OBJ = \
	../condor_util_lib/blankline.o ../condor_util_lib/config.o \
	../condor_util_lib/do_connect.o ../condor_util_lib/dprintf.o \
	../condor_util_lib/dprintf_config.o ../condor_util_lib/except.o \
	../condor_util_lib/expr.o ../condor_util_lib/history.o \
	../condor_util_lib/job_queue.o ../condor_util_lib/ltrunc.o \
	../condor_util_lib/mkargv.o ../condor_util_lib/perror.o \
	../condor_util_lib/proc.o ../condor_util_lib/condor_config.o \
	../condor_util_lib/condor_errlst.o ../condor_util_lib/signames.o \
	../condor_util_lib/status.o ../condor_util_lib/strdup.o \
	../condor_util_lib/stricmp.o ../condor_util_lib/update_rusage.o

XDR_OBJ = \
	../condor_xdr_lib/xdr_Init.o ../condor_xdr_lib/xdr_direntries.o \
	../condor_xdr_lib/xdr_expr.o ../condor_xdr_lib/xdr_fdset.o \
	../condor_xdr_lib/xdr_io.o ../condor_xdr_lib/xdr_itimerval.o \
	../condor_xdr_lib/xdr_mach_rec.o ../condor_xdr_lib/xdr_ports.o \
	../condor_xdr_lib/xdr_prio_rec.o ../condor_xdr_lib/xdr_proc.o \
	../condor_xdr_lib/xdr_ptr.o ../condor_xdr_lib/xdr_record.o \
	../condor_xdr_lib/xdr_rlimit.o ../condor_xdr_lib/xdr_rusage.o \
	../condor_xdr_lib/xdr_stat.o ../condor_xdr_lib/xdr_statfs.o \
	../condor_xdr_lib/xdr_status.o ../condor_xdr_lib/xdr_timeval.o \
	../condor_xdr_lib/xdr_timezone.o ../condor_xdr_lib/xdr_wait.o

OBJECT_FILES = \
	$(CKPT_OBJ) $(SPEC_OBJ) $(OTHER_OBJ) $(CLIB_OBJ) $(UTIL_OBJ) $(XDR_OBJ)


all_target(libcondor.a libckpt.a condor_rt0.o)
tags_target($(SOURCE_FILES))
depend_target($(SOURCE_FILES))
program_target($(TO_UPPER),ToUpper.o,$(NULL),release)
uppercase_target(statfs.o,STATFS.o,statfs)
uppercase_target(getegid.o,GETEGID.o,getegid)
uppercase_target(getppid.o,GETPPID.o,getppid)
uppercase_target(_sigvec.o,_SIGVEC.o,sigvec)
uppercase_target(sigvec.o,SIGVEC.o,sigvec)
uppercase_target(wait3.o,WAIT3.o,wait3)
uppercase_target(geteuid.o,GETEUID.o,geteuid)

#
# Create a replacement for libc.a to be linked with condor programs.
# N.B. This is done differently than other libraries in that we start out
# with a copy of libc, and replace all the system calls.  Don't
# use the default rule for this one!
#
#if IS_SGI_IRIX331
libcondor.a: $(OBJECT_FILES)
	cp $(SIMPLE_LIBC) libcondor.a
	mkdir tmp
	cd tmp; ar x RpcSvc; ar x RpcSun
	AR_REPLACE( libcondor.a, $(OBJECT_FILES) tmp/$(STAR) )
	/bin/rm -rf tmp
#else
libcondor.a: $(OBJECT_FILES)
	cp $(SIMPLE_LIBC) libcondor.a
	AR_REPLACE( libcondor.a, $(OBJECT_FILES) )
#endif
release:: libcondor.a
	cp libcondor.a $(RELEASE_DIR)/lib
	RANLIB_TOUCH( $(RELEASE_DIR)/lib/libcondor.a )
clean::
	rm -f libcondor.a $(OBJECT_FILES)

#
# Create a replacement for libc.a to be linked with programs for
# checkpointing, but not remote execution.  N.B. This is done differently
# than other libraries in that we start out with a copy of libcondor.a,
# and replace ckpt_main.rem.o with ckpt_main.loc.o, (checkpointing
# only, no remote system calls).  Don't use the default rule for this one!
#
libckpt.a: ../condor_$(SYSCALL_LIB)/libcondor.a ckpt_main.loc.o
	rm -f libckpt.a
	cp libcondor.a  libckpt.a
	chmod u+w libckpt.a
	AR_DELETE( libckpt.a, ckpt_main.rem.o )
	AR_REPLACE( libckpt.a, ckpt_main.loc.o )
release:: libckpt.a
	cp libckpt.a $(RELEASE_DIR)/lib
	RANLIB_TOUCH( $(RELEASE_DIR)/lib/libckpt.a )
clean::
	rm -f ckpt_main.rem.o libckpt.a


#
# Create a replacement for crt0.o to be linked with condor programs.
# N.B. This is done differently than other objects in that we start out
# with a copy of crt0.o, and change the name of "main" to "MAIN".
#
condor_rt0.o: Crt0 $(TO_UPPER)
	$(TO_UPPER) Crt0 condor_rt0.o main
release:: condor_rt0.o
	cp condor_rt0.o $(RELEASE_DIR)/lib
clean::
	rm -f condor_rt0.o

#
# In this version we compile with CONDOR defined, and get a
# checkpointing plus remote system call version. 
#
ckpt_main.rem.o: ckpt_main.c
	$(CC) -c $(CFLAGS) ckpt_main.c
	mv ckpt_main.o ckpt_main.rem.o

#
# In this version we compile without defining CONDOR, and get a
# checkpoint only, (no remote system calls) version.
#
ckpt_main.loc.o: ckpt_main.c
	$(CC) -c $(STD_C_FLAGS) ckpt_main.c
	mv ckpt_main.o ckpt_main.loc.o


#
# Special dependencies
#
$(UTIL_OBJ):
	@echo The util library must be remade before the condor library.
	@false

$(XDR_OBJ):
	@echo The xdr library must be remade before the condor library.
	@false
