CC := gcc
CFLAGS = -W -Wall -Wno-deprecated-declarations -fno-strict-aliasing -I.
CFLAGS += -O2 -ffast-math
# CFLAGS += -g3

# Install paths.
INSTALL := install
prefix := /usr/local
bindir := $(prefix)/games
docdir := $(prefix)/doc/raidem-0.2
datadir := $(prefix)/share/games/raidem
DESTDIR :=
DEST_BINDIR := $(DESTDIR)$(bindir)
DEST_DOCDIR := $(DESTDIR)$(docdir)
DEST_DATADIR := $(DESTDIR)$(datadir)

# Uncomment if any of these are causing trouble.
# NO_FBLEND := 1
# NO_ID3TAGS := 1
# NO_ZZIPLIB := 1
# CFLAGS += -DNO_VIDEO_BITMAPS

# If you already have freetype/libid3tag/zziplib, you can uncomment
# these lines to save on compile time.
# HAVE_FREETYPE := 1
# HAVE_LIBID3TAG := 1
# HAVE_ZZIPLIB := 1

# Special code to make the volume wheel work.
CFLAGS += -DITOUCH

# PROFILE := 1
# CFLAGS += -DCHEAT

ifdef PROFILE
CFLAGS += -p
endif

#------------------------------------------------------------
# Platform specific config
ifdef MINGDIR
include misc/Makefile.mgw
ICON := misc/icon.res
else
include misc/Makefile.unx
CFLAGS += -DRAIDEM_DATA_DIR=\"$(datadir)\"
endif

#------------------------------------------------------------

GAME-OBJS := \
	animation.o			\
	colour-conv.o			\
	common.o			\
	debri.o				\
	end-level.o			\
	game.o				\
	group.o				\
	hiscore.o			\
	init.o				\
	input.o				\
	key-names.o			\
	linklist.o			\
	main.o				\
	map-save.o			\
	map.o				\
	music.o				\
	music-ad.o			\
	newmenu-controls.o		\
	newmenu-credits.o		\
	newmenu-custom.o		\
	newmenu-dirty.o			\
	newmenu-hiscore.o		\
	newmenu-log.o			\
	newmenu.o			\
	nuke.o				\
	player-stats.o			\
	player.o			\
	powerup.o			\
	pregen-circles.o		\
	projectile.o			\
	rotate.o			\
	rottrans.o			\
	scramble-letter.o		\
	sound.o				\
	star-field.o			\
	thing.o				\
	tile.o				\
	unit-intern.o			\
	unit-mapextras.o		\
	unit-save.o			\
	unit-seeking.o			\
	unit.o				\
	weapon.o			\
	waypoint.o

DEBRIS := $(addprefix debris/,		\
	chunk.o				\
	explosion.o			\
	ir-line.o			\
	large-chunk.o			\
	line-spark.o			\
	particle.o			\
	player-zoom.o			\
	ripple.o			\
	satellite-trail.o		\
	smoke.o				\
	spark.o				\
	speed-shadow.o			\
	tank-debri.o			\
	tank-track.o			\
	turret.o)

MAP-EDITOR-OBJS := \
	gui/gui.o			\
	gui/gui-clip.o			\
	gui/gui-dirty.o			\
	gui/gui-keyboard.o		\
	gui/gui-mouse.o			\
	gui/gui-widgets.o		\
	gui/gui-raid.o			\
	gui/widget-packingbox.o		\
	gui/widget-pane.o		\
	gui/widget-scrollbar.o		\
	gui/widget-slider.o		\
	map-editor/help.o		\
	map-editor/redit.o		\
	map-editor/map-proc.o		\
	map-editor/mouse-label-proc.o	\
	map-editor/palette-proc.o	\
	map-editor/quit.o

PROJECTILES := $(addprefix projectiles/,\
	all-projs.o			\
	dumbfire.o			\
	evil-vulcan.o			\
	fireball.o			\
	homing-missile.o		\
	laser.o				\
	maser.o				\
	missile.o			\
	pink.o				\
	plasma.o			\
	pulse-laser.o			\
	railgun.o			\
	rocket.o			\
	shockwave.o			\
	swarm-missile.o			\
	toothpaste.o			\
	vulcan.o)

SEB-OBJS := $(addprefix seborrhea/,	\
	container-animation.o		\
	container-file.o		\
	container-lump.o		\
	container-metafile.o		\
	dirlist-recursive.o		\
	dirlist-zzip.o			\
	font-glyphkeeper.o		\
	seborrhea.o			\
	seborrhea-allegro.o		\
	seborrhea-debug.o		\
	seborrhea-dirlist.o		\
	seborrhea-font.o		\
	seborrhea-mp3.o			\
	seborrhea-spline.o		\
	token.o				\
	zzpk.o)				\
	alrand/alrand.o			\
	alrand/lcg.o			\
	alrand/mersenne.o		\
	glyph-keeper/src/glyph.o

UNITS := $(addprefix units/,		\
	all-units.o			\
	anvil.o				\
	armadillo.o			\
	baby-boy.o			\
	basic-flyer.o			\
	basic-follower.o		\
	basic-tank.o			\
	basic-turret.o			\
	basturk.o			\
	battle-cruiser.o		\
	battler.o			\
	boss0.o				\
	boss1.o				\
	bug.o				\
	cargo.o				\
	centipede.o			\
	challenger.o			\
	conquerer.o			\
	cruiser.o			\
	deceiver.o			\
	dragonfly.o			\
	elephant.o			\
	fear.o				\
	fireflea.o			\
	firefly.o			\
	firefox.o			\
	hatch.o				\
	hippo.o				\
	hunter.o			\
	hunter-seeker.o			\
	gecko.o				\
	grunt.o				\
	kamikaze.o			\
	lint.o				\
	little-death.o			\
	lizard.o			\
	micronuke.o			\
	miniboss0.o			\
	miniboss1.o			\
	moan.o				\
	mozzie.o			\
	ms-hoover.o			\
	newt.o				\
	robot.o				\
	satellite.o			\
	schemer.o			\
	sea-cucumber.o			\
	sea-dog.o			\
	sea-urchin.o			\
	stone.o				\
	strumble.o			\
	stubby.o			\
	stumpy.o			\
	tripe.o				\
	viking.o)

DOCS := ChangeLog		\
	ChangeLog-0.1		\
	INSTALLING.txt		\
	LICENCE.txt		\
	README.txt		\
	damages.txt		\
	joystick.cfg.example	\
	keyboard.cfg.example

#------------------------------------------------------------

all : adime almp3 loadpng $(OPTLIBS) $(GAME)

adime : $(LIBADIME)
$(LIBADIME) :
	$(MAKE) -C adime lib $(ADIMEFLAGS)

almp3 : $(LIBALMP3)
$(LIBALMP3) :
	$(MAKE) -C almp3

$(LIBFREETYPE) :
#	First time generates config.mk
	$(MAKE) -C freetype
	$(MAKE) -C freetype

$(LIBFBLEND) :
	$(MAKE) -C fblend lib

$(LIBID3TAG) :
	$(MAKE) -C libid3tag

$(ZZIPLIB) :
	$(MAKE) -C zziplib

loadpng : $(LIBLOADPNG)
$(LIBLOADPNG) : loadpng/loadpng.c loadpng/savepng.c loadpng/regpng.c
	$(MAKE) -C loadpng lib

$(GAME) : $(GAME-OBJS) $(DEBRIS) $(MAP-EDITOR-OBJS) $(PROJECTILES) $(SEB-OBJS) $(UNITS) $(ICON)
	$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS)

%.o : %.m
	$(CC) $(CFLAGS) -o $@ -c $<

#------------------------------------------------------------

backup :
	./mkbackup.sh

clean :
	$(RM) $(GAME-OBJS) $(DEBRIS) $(MAP-EDITOR-OBJS) $(PROJECTILES) $(UNITS)

cleaner : clean
	$(RM) Makefile.dep TAGS
	$(RM) $(SEB-OBJS)
	$(MAKE) -C adime veryclean
	$(MAKE) -C almp3 clean
	$(MAKE) -C fblend veryclean
	$(MAKE) -C freetype clean
	$(MAKE) -C libid3tag clean
	$(MAKE) -C loadpng clean
	$(MAKE) -C zziplib clean

cleanest : cleaner
	$(RM) $(GAME)
	$(MAKE) -C tools clean

depend :
	makedepend -Y -fMakefile.dep -- -- **/*.m **/*.h 2>/dev/null && rm -f Makefile.dep.bak

install :
	$(INSTALL) -d $(DEST_BINDIR)
	$(INSTALL) -d $(DEST_DATADIR)
	$(INSTALL) -d $(DEST_DOCDIR)
	$(INSTALL) -d -g games -m 770 /var/games/raidem
	$(INSTALL) -g games -m 4750 -s $(GAME) $(DEST_BINDIR)
	$(INSTALL) -d $(DEST_DATADIR)/data
	$(INSTALL) -m 644 data/*.zip $(DEST_DATADIR)/data
	$(INSTALL) -d $(DEST_DATADIR)/maps
	$(INSTALL) -m 644 maps/*.map $(DEST_DATADIR)/maps
	$(INSTALL) -d $(DEST_DATADIR)/music
	$(INSTALL) -d $(DEST_DATADIR)/music/menu
	$(INSTALL) -d $(DEST_DATADIR)/music/level1
	$(INSTALL) -d $(DEST_DATADIR)/music/level2
	$(INSTALL) -m 644 $(DOCS) $(DEST_DOCDIR)

uninstall :
	$(RM) $(addprefix $(DEST_DOCDIR)/, $(DOCS))
	rmdir $(DEST_DATADIR)/music/level2
	rmdir $(DEST_DATADIR)/music/level1
	rmdir $(DEST_DATADIR)/music/menu
	rmdir $(DEST_DATADIR)/music
	$(RM) $(DEST_DATADIR)/maps/*.map
	rmdir $(DEST_DATADIR)/maps
	$(RM) $(DEST_DATADIR)/data/*.zip
	rmdir $(DEST_DATADIR)/data
	$(RM) $(DEST_BINDIR)/$(GAME)
	$(RM) /var/games/raidem/scores.txt
	rmdir /var/games/raidem
#	Don't delete /usr/local/games
	rmdir $(DEST_DATADIR) $(DEST_DOCDIR)

tags :
	etags **/*.c **/*.m **/*.h

-include Makefile.dep
