.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 \
          update.o network.o floattext.o land.o text.o client.o gameloop.o

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

CFLAGS += -g -Wall -Iinclude # -fprofile-arcs -ftest-coverage 

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 globals.h main.h menucontent.h
	$(CPP) -c atanks.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

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

client.o: client.h client.cpp
	$(CPP) -c client.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGSS) $(CFLAGS)

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

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

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

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

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

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

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

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

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

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

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

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

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

virtobj.o: virtobj.cpp virtobj.h
	$(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 sky.h
	$(CPP) -c sky.cpp -o $@ $(FLAGS) $(LFLAGS) $(OFLAGS) $(CFLAGS)

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

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

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

network.o: network.cpp network.h
	$(CPP) -c network.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 
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 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 files.h floattext.h
satellite.cpp: environment.h satellite.h beam.h
sky.cpp: globaldata.h main.h sky.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
