.PHONY: all clean veryclean

MODULES = atanks.o beam.o button.o environment.o explosion.o fade.o files.o globaldata.o \
          missile.o perlin.o physobj.o player.o satellite.o sky.o tank.o team.o teleport.o virtobj.o

CPP=g++
CC=gcc
LD=g++
LIB=ar
WINDRES=
# FLAGS += -DDATA_DIR=\".\"
FLAGS += -DDATA_DIR=\"${INSTALLDIR}\"
OUTPUT = ../atanks
WFLAGS = 
OFLAGS = 
LFLAGS +=
LDFLAGS =  `allegro-config --libs`

CFLAGS += -g -Wall -Iinclude # -fprofile-arcs -ftest-coverage 
# CFLAGS += -g	# debug vs optimize flags
# No, let the user decide!

SRCS  = $(MODULES:.o=.cpp)
GLOBALS	= main.h imagedefs.h externs.h

all: 	$(OUTPUT)

clean:  
	rm -f *.o

veryclean: clean
	rm $(OUTPUT)

$(MODULES): Makefile

atanks.o: atanks.cpp
	$(CPP) -c atanks.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

button.o: button.cpp
	$(CPP) -c button.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

environment.o: environment.cpp
	$(CPP) -c environment.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

explosion.o: explosion.cpp
	$(CPP) -c explosion.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

files.o: files.cpp
	$(CPP) -c files.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

# No longer needed, as floattext is fully inline now!
# floattext.o:
# 	$(CPP) -c floattext.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

globaldata.o: globaldata.cpp
	$(CPP) -c globaldata.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

missile.o: missile.cpp
	$(CPP) -c missile.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

teleport.o: teleport.cpp
	$(CPP) -c teleport.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

physobj.o: physobj.cpp
	$(CPP) -c physobj.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

player.o: player.cpp
	$(CPP) -c player.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

tank.o: tank.cpp
	$(CPP) -c tank.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

team.o: team.cpp
	$(CPP) -c team.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

virtobj.o: virtobj.cpp
	$(CPP) -c virtobj.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

fade.o: fade.cpp
	$(CPP) -c fade.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

perlin.o: perlin.cpp
	$(CPP) -c perlin.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

sky.o: sky.cpp
	$(CPP) -c sky.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

satellite.o: satellite.cpp
	$(CPP) -c satellite.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

%.o: %.cpp %.h
	$(CPP) -c $< -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

$(OUTPUT): $(OBJECTS) $(MODULES)
	$(CPP) $(MODULES) -o $(OUTPUT) $(FLAGS) $(LFLAGS) $(LDFLAGS) $(SFLAGS) $(CFLAGS)
	# strip $(OUTPUT)

# dependencies:
physobj.h: main.h virtobj.h globaldata.h
virtobj.h: main.h player.h
main.h: imagedefs.h externs.h
globaldata.h: main.h
player.h: main.h menu.h
tank.h: physobj.h
floattext.h: virtobj.h main.h environment.h
menu.h: globaldata.h
environment.h: main.h tank.h
files.h: globaldata.h environment.h lineseq.h
globals.h: virtobj.h floattext.h physobj.h tank.h missile.h explosion.h player.h environment.h globaldata.h teleport.h decor.h beam.h
button.h: globaldata.h environment.h
team.h: globaldata.h
satellite.h: environment.h globaldata.h virtobj.h
beam.h: main.h virtobj.h physobj.h
missile.h: main.h physobj.h
teleport.h: main.h virtobj.h
decor.h: main.h physobj.h environment.h globaldata.h
explosion.h: main.h physobj.h
virtobj.cpp: virtobj.h environment.h
physobj.cpp: physobj.h environment.h
atanks.cpp: globals.h lineseq.h menu.h button.h team.h files.h satellite.h menucontent.h
beam.cpp: environment.h globaldata.h physobj.h player.h decor.h tank.h beam.h
button.cpp: button.h
environment.cpp: environment.h globaldata.h virtobj.h missile.h tank.h files.h
explosion.cpp: environment.h globaldata.h explosion.h missile.h decor.h tank.h player.h
fade.cpp: globaldata.h main.h
files.cpp: player.h files.h main.h
globaldata.cpp: player.h globaldata.h files.h
missile.cpp: environment.h globaldata.h explosion.h missile.h decor.h tank.h
perlin.cpp: main.h
player.cpp: environment.h globaldata.h player.h tank.h menu.h lineseq.h files.h floattext.h
satellite.cpp: environment.h satellite.h beam.h
sky.cpp: globaldata.h main.h
tank.cpp: environment.h globaldata.h floattext.h explosion.h teleport.h missile.h player.h beam.h tank.h
team.cpp: tank.h team.h player.h
teleport.cpp: environment.h globaldata.h teleport.h
