# Some compilers will not like these options. 
# To get it to compile in the face of adversity, get rid of 
# -Werror -strict -pedantic -ansi 
# Some compilers garble the arbitrary precision predicates in Star.c, 
# so it is worth removing -O3 for Star only and trying without.
CFLAGSLIB=-m32 -Wall -Werror -strict -pedantic -ansi -g -O3
CFLAGSSTAR=-m32 -Wall -strict -pedantic -ansi -g -O3
CFLAGSEXAMPLE=${CFLAGSPULSAR}

LIBLDFLAGS=${shell if test `uname` = Darwin; then echo -dynamic -dylib; else echo -shared -melf_i386; fi}
EXELDFLAGS=${shell if test `uname` = Linux; then echo -m32; fi}

OBJSUFFIX=.o
EXESUFFIX=
LIBSUFFIX=${shell if test `uname` = Darwin; then echo .dylib; else echo .so; fi}

LIBNAME=libstellarlib${LIBSUFFIX}
PULSARNAME=Pulsar${EXESUFFIX}
STELLARNAME=Stellar${EXESUFFIX}

LIBS=-lc -lm
INCDIR=-I examples -I Star -I src
PULSARSRC=examples/dynamic.c examples/tensors.c examples/qualitymeasures.c
STELLARSRC=examples/static.c examples/tensors.c examples/qualitymeasures.c
STARSRC=Star/Star.c
LIBSRC=src/anisotropy.c\
	src/arraypoolstack.c\
	src/classify.c\
	src/convert.c\
	src/globals.c\
	src/improve.c\
	src/improvedyn.c\
	src/insertion.c\
	src/journal.c\
	src/print.c\
	src/stellar.c\
	src/quadric.c\
	src/quality.c\
	src/size.c\
	src/smoothing.c\
	src/timer.c\
	src/topological.c\
	src/util.c\
	src/vector.c

LIBOBJ=${LIBSRC:.c=${OBJSUFFIX}}
STAROBJ=${STARSRC:.c=${OBJSUFFIX}}
PULSAROBJ=${PULSARSRC:.c=${OBJSUFFIX}}
STELLAROBJ=${STELLARSRC:.c=${OBJSUFFIX}}

DEPS=dependencies

RM=rm
CC=gcc
LD=ld
MAKEDEP=gcc -MM ${DEPS}

.DEFAULT: all

-include ${DEPS}

all: ${LIBNAME} ${PULSARNAME} ${STELLARNAME}

clean: 
	${RM} ${LIBNAME} ${STELLARNAME} ${PULSARNAME} ${STELLAROBJ} ${PULSAROBJ} ${STAROBJ} ${LIBOBJ}

$DEPS: ${PULSARSRC} ${STELLARSRC} ${STARSRC} ${LIBSRC}
	${MAKEDEP} ${INCDIR} ${PULSARSRC} ${EXAMPLESRC} ${STARSRC} ${LIBSRC}

${LIBNAME}: ${LIBOBJ} ${STAROBJ}
	${LD} ${LIBLDFLAGS} ${LIBOBJ} ${STAROBJ} ${LIBS} -o ${LIBNAME}
	
${STELLARNAME}: ${LIBNAME} ${STELLAROBJ}
	${CC} ${EXELDFLAGS} ${STELLAROBJ} ${LIBNAME} ${LIBS} -o ${STELLARNAME}
	
${PULSARNAME}: ${LIBNAME} ${PULSAROBJ}
	${CC} ${EXELDFLAGS} ${PULSAROBJ} ${LIBNAME} ${LIBS} -o ${PULSARNAME}
	
${LIBOBJ}: %${OBJSUFFIX}: %.c
	${CC} ${INCDIR} ${CFLAGSLIB} $< -c -o $@

${STAROBJ}: %${OBJSUFFIX}: %.c
	${CC} ${INCDIR} ${CFLAGSSTAR} $< -c -o $@
	
${PULSAROBJ} ${STELLAROBJ}: %${OBJSUFFIX}: %.c
	${CC} ${INCDIR} ${CFLAGSEXAMPLE} $< -c -o $@
	
