#  Makefile for draft 4 pthreads API and the exception handling library.
include    ../Make.defs
MAJOR      = 1
MINOR      = 0
REVISION   = 0
VERSION    = ${MAJOR}.${MINOR}.${REVISION}

D4_HEADERS     = ${INCDIR}/pthreads/pthread_dce.h ${INCDIR}/dce/exc_handling.h

ifeq (${ISELF},yes)
    D4_LIB      = ../lib/${DCE_LIB}.so.${VERSION}
    D4_LINK      = ../lib/${DCE_LIB}.so.1

    EXCEPT_LIB  = ../lib/${EXC_LIB}.so.${VERSION}
    EXC_LINK     = ../lib/${EXC_LIB}.so.1
else
    D4_LIB      = ../lib/${DCE_LIB}.a
    EXCEPT_LIB     = ../lib/${EXC_LIB}.a
endif

DCE_OBJECTS = ${OBJDIR}/pthread_dce.o
EXC_OBJECTS = ${OBJDIR}/exc_handling.o

all: install ${D4_LIB} ${EXCEPT_LIB} tests

${D4_LIB}: ${DCE_OBJECTS}
${EXCEPT_LIB}: ${EXC_OBJECTS}
	@echo + building ${EXCEPT_LIB} and ${D4_LIB}
ifeq (${ISELF},yes)
#
# Builds the ELF libpthreads_dce library
#
	@${CC} -shared -Wl,-soname,${D4_LINK} -o ${D4_LIB} ${DCE_OBJECTS}
	@ln -s ${D4_LIB} ../lib/${D4_LINK}
#
# Builds the ELF libpthread-ext library
#
	@${CC} -shared -Wl,-soname,${EXC_LINK} -o ${EXCEPT_LIB} ${EXC_OBJECTS}
	@ln -s ${EXCEPT_LIB} ${EXC_LINK}
else
	@ar r ${D4_LIB} ${DCE_OBJECTS}
	@ar r ${EXCEPT_LIB} ${EXC_OBJECTS}
endif


${OBJDIR}/pthread_dce.o: pthread_dce.c pthread_dce.h
	@echo + compiling pthread_dce.c
	@${CC} -c ${CFLAGS} pthread_dce.c -o ${OBJDIR}/pthread_dce.o

${OBJDIR}/exc_handling.o: exc_handling.c exc_handling.h
	@echo + compiling exc_handling.c
	@${CC} -c -D_DCE_COMPAT_ ${CFLAGS} exc_handling.c \
              -o ${OBJDIR}/exc_handling.o

tests: prime-${exe}

LINK_LIBS   = ${LFLAGS} -lc_r -lpthreads_dce -lpthreads
DEFINES = -D_THREAD_SAFE_ -D_DCE_COMPAT_
prime-${exe}: prime.c
	@echo + building prime-${exe}
	@${CC} ${CFLAGS} ${DEFINES} prime.c ${LINK_LIBS} -o prime-${exe}

install:
	@cp -f pthread_dce.h ${INCDIR}/pthreads
	@cp -f exc_handling.h ${INCDIR}/dce


clobber: clean
	@rm -f ${D4_LIB} ${EXCEPT_LIB} ${D4_HEADERS} ${D4_LINK} ${EXC_LINK}

clean:
	@rm -f ${DCE_OBJECTS} ${EXC_OBJECTS} *.bak *.rem *~ prime-${exe}



