#
# Makefile to build up the several programs of the package. it
# wouldn't be a bad idea to have a look at the file README.1st...
#
#
# in the next lines you have to choose the right parameters for your
# system. I've put as default values the ones corresponding to the GNU
# C/C++ compiler, but you should change them if you want to use a
# different compiler. I've added (in commented lines) the corresponding
# values for the compiler that comes with HP UX 10.20.
#
# Ansi C compiler
#
CC=gcc
# CC=cc (this is for HP UX 10.20)
#
# C++ compiler
#
CP=g++
# CP=CC (this is for HP UX 10.20)
#
# compilation flags for the C compiler
#
CFLAGS=-O3 -Wall
# CFLAGS=-O -Aa (this is for HP UX 10.20)
#
# compilation flags for the C++ compiler
#
CPPFLAGS=-O3 -Wall
# CPPFLAGS=-O (this is for HP UX 10.20)
#
# linking flags
#
LFLAGS=-s -lm
#
# directories to store the binaries and to find/store data files resp.
# I've used relative pathnames, but it is better to use absolute ones
# (with the relative pathnames, you have to execute the programs from
# the BIN directory, otherwise they could not find the DATA directory).
#
BIN=../bin/
DAT=../data/
#
# directory to put working files (they will be erased at the end of
# the execution).
#
TMP=../data/
#
# ========================================================
#  you shouldn't need to modify anything beyond this line
# ========================================================
#
#######################################
# to build up the normal form program #
#######################################

NF=main-nf.o exp-l5.o nf6s.o kill-nf.o rnf6s.o basop6s.o io6s.o io3.o iol.o mp6s.o mp3.o uneix.o msgs.o

nf: $(NF)
	$(CP) $(CFLAGS) $(NF) -o $(BIN)nf $(LFLAGS)

############################################
# to build up the central manifold program #
############################################

CM=main-cm.o exp-l123.o nf6s.o kill-cm.o rcm6s.o irex.o basop6s.o io6s.o io4s.o iol.o mp6s.o mp4s.o mp3.o uneix.o msgs.o

cm: $(CM)
	$(CP) $(CFLAGS) $(CM) -o $(BIN)cm $(LFLAGS)

###################################################################
# to build up the program that expands the changes of coordinates #
###################################################################

CVNF=main-cvnf.o cv6sp.o basop6s.o basop6sp.o irex.o re6s.o re6p.o wrcv6sp.o io6s.o io6p.o mp6s.o mp6p.o mp3.o uneix.o msgs.o

cvnf: $(CVNF)
	$(CP) $(CFLAGS) $(CVNF) -o $(BIN)cvnf $(LFLAGS)

CVCM=main-cvcm.o cv6sp.o basop6s.o basop6sp.o irex.o re6s.o re6p.o wrcv4sp.o io6s.o io6p.o mp6s.o mp6p.o mp4s.o mp4p.o mp3.o uneix.o msgs.o

cvcm: $(CVCM)
	$(CP) $(CFLAGS) $(CVCM) -o $(BIN)cvcm $(LFLAGS)

##########################################
# to build up the first integral program #
##########################################

FIN=main-fi.o fi.o exp-l5.o basop6s.o irex.o re6s.o io6s.o mp6s.o mp3.o iol.o uneix.o msgs.o

fi: $(FIN)
	$(CP) $(CFLAGS) $(FIN) -o $(BIN)fi $(LFLAGS)

#######################################################
# to build up the programs that transform coordinates #
#######################################################

TCNF=main-tcnf.o repo.o erpe6.o io6s.o io6p.o mp6s.o mp6p.o iol.o litr5.o uneix.o msgs.o

tcnf: $(TCNF)
	$(CC) $(CFLAGS) $(TCNF) -o $(BIN)tcnf $(LFLAGS)

TCDCM=main-tcdcm.o repo.o erpe4.o io4s.o io4p.o mp4s.o mp4p.o iol.o uneix.o msgs.o

tcdcm: $(TCDCM)
	$(CC) $(CFLAGS) $(TCDCM) -o $(BIN)tcdcm $(LFLAGS)

#####################################
# to perform numerical integrations #
#####################################

NINF=main-ninf.o uneix.o

ninf: $(NINF)
	$(CC) $(CFLAGS) $(NINF) -o $(BIN)ninf $(LFLAGS)

NICM=main-nicm.o rk78.o uneix.o

nicm: $(NICM)
	$(CC) $(CFLAGS) $(NICM) -o $(BIN)nicm $(LFLAGS)

RTBP=main-rtbp.o rk78.o uneix.o

rtbp: $(RTBP)
	$(CC) $(CFLAGS) $(RTBP) -o $(BIN)rtbp $(LFLAGS)

EFI=main-efi.o erpe6.o mp6s.o mp6p.o iol.o litr5.o rk78.o uneix.o msgs.o

efi: $(EFI)
	$(CC) $(CFLAGS) $(EFI) -o $(BIN)efi $(LFLAGS)
 
#######
# all #
#######

all: nf cm cvnf cvcm fi tcnf tcdcm ninf nicm rtbp efi

############################
# how to make the .o files #
############################

main-nf.o: main-nf.cc
	$(CP) -c $(CPPFLAGS) -DDATA=\"$(DAT)\" -DTEMP=\"$(TMP)\" main-nf.cc
main-cm.o: main-cm.cc
	$(CP) -c $(CPPFLAGS) -DDATA=\"$(DAT)\" -DTEMP=\"$(TMP)\" main-cm.cc
main-fi.o: main-fi.cc
	$(CP) -c $(CPPFLAGS) -DDATA=\"$(DAT)\" -DTEMP=\"$(TMP)\" main-fi.cc
main-cvcm.o: main-cvcm.cc
	$(CP) -c $(CPPFLAGS) -DDATA=\"$(DAT)\" -DTEMP=\"$(TMP)\" main-cvcm.cc
main-cvnf.o: main-cvnf.cc
	$(CP) -c $(CPPFLAGS) -DDATA=\"$(DAT)\" -DTEMP=\"$(TMP)\" main-cvnf.cc
main-tcnf.o: main-tcnf.c
	$(CC) -c $(CFLAGS) -DDATA=\"$(DAT)\" main-tcnf.c
main-tcdcm.o: main-tcdcm.c
	$(CC) -c $(CFLAGS) -DDATA=\"$(DAT)\" main-tcdcm.c
main-ninf.o: main-ninf.c
	$(CC) -c $(CFLAGS) -DDATA=\"$(DAT)\" main-ninf.c
main-nicm.o: main-nicm.c
	$(CC) -c $(CFLAGS) -DDATA=\"$(DAT)\" main-nicm.c
main-rtbp.o: main-rtbp.c
	$(CC) -c $(CFLAGS) -DDATA=\"$(DAT)\" main-rtbp.c
main-efi.o: main-efi.c
	$(CC) -c $(CFLAGS) -DDATA=\"$(DAT)\" main-efi.c
exp-l5.o: exp-l5.cc
	$(CP) -c $(CPPFLAGS) exp-l5.cc
exp-l123.o: exp-l123.cc
	$(CP) -c $(CPPFLAGS) exp-l123.cc
nf6s.o: nf6s.cc
	$(CP) -c $(CPPFLAGS) nf6s.cc
kill-nf.o: kill-nf.c
	$(CC) -c $(CFLAGS) kill-nf.c
kill-cm.o: kill-cm.c
	$(CC) -c $(CFLAGS) kill-cm.c
fi.o: fi.cc
	$(CP) -c $(CPPFLAGS) fi.cc
rnf6s.o: rnf6s.cc
	$(CP) -c $(CPPFLAGS) rnf6s.cc
cv6sp.o: cv6sp.cc
	$(CP) -c $(CPPFLAGS) cv6sp.cc
basop6s.o: basop6s.cc
	$(CP) -c $(CPPFLAGS) basop6s.cc
basop6sp.o: basop6sp.cc
	$(CP) -c $(CPPFLAGS) basop6sp.cc
irex.o: irex.cc
	$(CP) -c $(CPPFLAGS) irex.cc
re6s.o: re6s.cc
	$(CP) -c $(CPPFLAGS) re6s.cc
rcm6s.o: rcm6s.cc
	$(CP) -c $(CPPFLAGS) rcm6s.cc
re6p.o: re6p.cc
	$(CP) -c $(CPPFLAGS) re6p.cc
wrcv6sp.o: wrcv6sp.cc
	$(CP) -c $(CPPFLAGS) wrcv6sp.cc
wrcv4sp.o: wrcv4sp.cc
	$(CP) -c $(CPPFLAGS) wrcv4sp.cc
erpe6.o: erpe6.c
	$(CC) -c $(CFLAGS) erpe6.c
erpe4.o: erpe4.c
	$(CC) -c $(CFLAGS) erpe4.c
io6s.o: io6s.c
	$(CC) -c $(CFLAGS) io6s.c
io6p.o: io6p.c
	$(CC) -c $(CFLAGS) io6p.c
io4s.o: io4s.c
	$(CC) -c $(CFLAGS) io4s.c
io4p.o: io4p.c
	$(CC) -c $(CFLAGS) io4p.c
io3.o: io3.c
	$(CC) -c $(CFLAGS) io3.c
iol.o: iol.c
	$(CC) -c $(CFLAGS) iol.c
mp6s.o: mp6s.c
	$(CC) -c $(CFLAGS) mp6s.c
mp6p.o: mp6p.c
	$(CC) -c $(CFLAGS) mp6p.c
mp4s.o: mp4s.c
	$(CC) -c $(CFLAGS) mp4s.c
mp4p.o: mp4p.c
	$(CC) -c $(CFLAGS) mp4p.c
mp3.o: mp3.c
	$(CC) -c $(CFLAGS) mp3.c
uneix.o: uneix.c
	$(CC) -c $(CFLAGS) uneix.c
msgs.o: msgs.c
	$(CC) -c $(CFLAGS) msgs.c
repo.o: repo.c
	$(CC) -c $(CFLAGS) repo.c
litr5.o: litr5.c
	$(CC) -c $(CFLAGS) litr5.c
rk78.o: rk78.c
	$(CC) -c $(CFLAGS) rk78.c
#########
# clean #
#########
clean:
	rm -f *.o
	rm -f $(BIN)*
