#
#	Makefile for programming examples in "Programming with Threads".
#	Works on Solaris 2.5 FCS
#

CFLAGS = -v -c -O -D_REENTRANT

FSOURCES=correl.f corel2.f
			
CSOURCES=picture_viewer.c 	\
args.c				\
detach.c			\
critical_section.c		\
using_mutexes.c			\
write_strings.c			\
increment_count.c		\
fifo.c				\
broadcast.c			\
timed_wait.c			\
dynamic_init.c			\
file_lock.c			\
countbytes.c			\
positioned_io_1.c	       	\
positioned_io_2.c	       	\
positioned_io_3.c	       	\
positioned_io_4.c	       	\
cat.c				\
fifo_code_lock.c	       	\
fifo_code_lock_invariant.c    	\
read_only_record_cache.c	\
read_only_test.c		\
fifo_data_lock.c		\
faster_rec_get.c		\
rec_transfer.c			\
rec_tryget.c			\
list2.c				\
queue.c				\
hash.c				\
name_cache.c			\
udpclient.c			\
using_tsd.c			\
better_tsd.c			\
waiting_for_signals.c		\
handling_sigfpe.c		\
interprocess_sync.c		\
non_async_safe_semaphores.c	\
sema_crit_section.c		\
cp_with_semaphore.c		\
cancel_with_sigs.c		\
using_cleanup_pop.c		\
deferred_cancellation.c		\
async_cancellation1.c		\
async_cancellation2.c		\
deferred_work.c			\
setup_own_stacks.c		\
handling_fork.c			\
rw_locks.c			\
rw_balance.c			\
rw_condwait.c			\
hash_table.c			\
recursive_lock.c		\
spin_mutex.c			\
spin_block1.c			\
spin_block2.c			\
ms_matrix.c			\
barrier.c			\
relax.c				\
ms_relax.c			\
spin_barrier.c			\
workpile.c			\
quicksort.c			\
token.c				\
calendar_mgr.c			\
mt_calendar_mgr.c		\
lock_lint_example.c	




CCSOURCES = scoped_locking.cc scoped_obj_locking.cc		
	

SIMPLE_PROGS = async_cancellation1 	\
		async_cancellation2 	\
		better_tsd		\
 		broadcast		\
		cancel_with_sigs	\
		cat			\
		countbytes		\
		cp_with_semaphore	\
		deferred_cancellation	\
		deferred_work		\
		detach			\
		fifo_code_lock		\
		fifo_code_lock_invariant		\
		fifo_data_lock		\
		file_lock		\
		handling_fork		\
		hash_table		\
		list2.c			\
		lock_lint_example	\
		picture_viewer		\
		quicksort		\
		recursive_lock		\
		rw_balance		\
		rw_condwait		\
		rw_locks		\
		setup_own_stacks	\
		spin_barrier		\
		using_tsd

PROGRAMS =	name_cache		\
		rw_balance		\
		udpclient		\
		rec_tryget		\
		read_only_test		\
		waiting_for_signals


default:	$(CSOURCES:.c=.o) $(FSOURCES:.f=.o) $(CCSOURCES:.cc=.o) $(SIMPLE_PROGS) $(PROGRAMS)
		echo done

waiting_for_signals.o:	waiting_for_signals.c
		$(CC) -c $(CFLAGS) -D_POSIX_PTHREAD_SEMANTICS waiting_for_signals.c

name_cache:	hash.o list2.o name_cache.o queue.o
		cc -D_REENTRANT hash.o list2.o name_cache.o queue.o -lsocket -lnsl -lpthread -o $@

rw_balance:	rw_balance.o 
		$(CC) -D_REENTRANT rw_balance.o -lpthread -o $@

read_only_test:	read_only_test.o read_only_record_cache.o
		cc -o read_only_test read_only_test.o read_only_record_cache.o -lpthread

rec_tryget:	rec_tryget.o read_only_record_cache.o
		cc -o rec_tryget rec_tryget.o read_only_record_cache.o -lpthread

udpclient:	udpclient.o
		cc -o udpclient udpclient.o -lsocket -lnsl

$(SIMPLE_PROGS:.c=.o):

%:	%.o
	$(CC) -D_REENTRANT $< -lposix4  -lpthread -o $@
	







