#-*- Makefile -*-
#
# Makefile for Raid'em.  Everything should go through here.

include Makefile.cfg

CFLAGS += -W -Wall -Werror -Wno-deprecated-declarations \
	-fno-strict-aliasing				\
	-Iinclude -Ilib
#CFLAGS += -g3

#PROFILE := 1
#CFLAGS += -DCHEAT

DESTDIR :=
DEST_BINDIR := $(DESTDIR)$(bindir)
DEST_DOCDIR := $(DESTDIR)$(docdir)
DEST_DATADIR := $(DESTDIR)$(datadir)

include misc/Makefile.all

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

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

GAME-OBJS := $(addprefix obj/,	\
	candy.o			\
	colour-conv.o		\
	collision.o		\
	common.o		\
	config.o		\
	demo-info.o		\
	demo.o			\
	difficulty.o		\
	end-level.o		\
	enter-name.o		\
	fps.o			\
	game-timer.o		\
	game.o			\
	group.o			\
	help.o			\
	hiscore.o		\
	init.o			\
	input.o			\
	input-controller.o	\
	input-joystick.o	\
	input-keyboard.o	\
	key-names.o		\
	linklist.o		\
	main.o			\
	map-save.o		\
	map.o			\
	maybe-fblend.o		\
	mmpk.o			\
	music.o			\
	music-ad.o		\
	newmenu-controls.o	\
	newmenu-credits.o	\
	newmenu-custom.o	\
	newmenu-demo.o		\
	newmenu-dirty.o		\
	newmenu-fileselector.o	\
	newmenu-hiscore.o	\
	newmenu-log.o		\
	newmenu.o		\
	nuke.o			\
	osd.o			\
	player-stats.o		\
	player.o		\
	powerup.o		\
	pregen-circles.o	\
	projectile.o		\
	rotate.o		\
	rottrans.o		\
	scramble-letter.o	\
	screenshot.o		\
	sound.o			\
	star-field.o		\
	strlcpy.o		\
	thing.o			\
	tile.o			\
	unit-intern.o		\
	unit-save.o		\
	unit-seeking.o		\
	unit.o			\
	video.o			\
	weapon.o		\
	waypoint.o		)

CANDIES := $(addprefix obj/candy/,	\
	boat-sinking.o			\
	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-debris.o			\
	tank-track.o			\
	turret.o			\
	zeus.o				)

MAP-EDITOR-OBJS := $(addprefix obj/,	\
	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/map-proc.o		\
	map-editor/mouse-label-proc.o	\
	map-editor/palette-air.o	\
	map-editor/palette-formation.o	\
	map-editor/palette-ground.o	\
	map-editor/palette-parallax.o	\
	map-editor/palette-proc.o	\
	map-editor/palette-switcher.o	\
	map-editor/palette-tile.o	\
	map-editor/redit.o		\
	map-editor/tile-connection.o	\
	map-editor/unit-editor.o	\
	map-editor/unit-extras.o	)

PROJECTILES := $(addprefix obj/projectiles/,	\
	all-projs.o			\
	dumbfire.o			\
	evil-vulcan.o			\
	fireball.o			\
	homing-missile.o		\
	laser.o				\
	lightning-gun.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 obj/seborrhea/,	\
	container-animation.o		\
	container-file.o		\
	container-lump.o		\
	container-metafile.o		\
	container-queue.o		\
	container-shuffle.o		\
	container.o			\
	dirlist-recursive.o		\
	dirlist-zzip.o			\
	dirlist.o			\
	font-glyphkeeper.o		\
	font.o				\
	mp3.o				\
	ogg.o				\
	seborrhea-allegro.o		\
	seborrhea-command.o		\
	seborrhea-datadir.o		\
	seborrhea-filetype.o		\
	seborrhea-property.o		\
	seborrhea.o			\
	sebum.o				\
	spline.o			\
	strdup.o			\
	token.o				\
	zzpk.o)				\
	obj/maybe-alrand.o

ifndef NO_ALRAND
SEB-OBJS +=				\
	lib/alrand/alrand.o		\
	lib/alrand/lcg.o		\
	lib/alrand/mersenne.o
endif

UNITS := $(addprefix obj/units/,\
	all-units.o		\
	anvil.o			\
	apc.o			\
	armadillo.o		\
	baby-boy.o		\
	basic-activation.o	\
	basic-fixed-turret.o	\
	basic-flyer.o		\
	basic-follower.o	\
	basic-formation.o	\
	basic-tank-follower.o	\
	basic-tank.o		\
	basic-turret.o		\
	basic-water-turret.o	\
	battle-cruiser.o	\
	battler.o		\
	bolt.o			\
	boss0.o			\
	boss1.o			\
	bug.o			\
	cargo.o			\
	centipede.o		\
	challenger.o		\
	chopper.o		\
	cluster-bomb.o		\
	conquerer.o		\
	cruiser.o		\
	deceiver.o		\
	dragonfly.o		\
	elephant.o		\
	fear.o			\
	fireflea.o		\
	firefly.o		\
	firefox.o		\
	freeze.o		\
	hatch.o			\
	hippo.o			\
	hunter.o		\
	hunter-seeker.o		\
	interceptor.o		\
	gecko.o			\
	grunt.o			\
	kamikaze.o		\
	khan.o			\
	lint.o			\
	little-death.o		\
	lizard.o		\
	micronuke.o		\
	mine-layer.o		\
	mine.o			\
	miniboss0.o		\
	miniboss1.o		\
	miniboss2.o		\
	moan.o			\
	mote.o			\
	mozzie.o		\
	ms-hoover.o		\
	newt.o			\
	plump.o			\
	polar-bear.o		\
	red-back.o		\
	robot.o			\
	satellite.o		\
	schemer.o		\
	scourge.o		\
	scurvy.o		\
	sea-cucumber.o		\
	sea-dog.o		\
	sea-urchin.o		\
	spirtle.o		\
	stone.o			\
	strumble.o		\
	stubby.o		\
	stumpy.o		\
	trigger.o		\
	tripe.o			\
	turtle.o		\
	viking.o		\
	wraith.o		\
	zippy.o			)

vpath %.c src
vpath %.m src
vpath %.o obj

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

all : $(LIBADIME) $(LIBGK) $(LIBLOADPNG) $(OPTLIBS) $(GAME)

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

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

$(LIBALLEGROOGG) :
	$(MAKE) -C lib/allegroogg

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

$(LIBGK) :
	$(MAKE) -C lib/glyph-keeper lib TARGET=ALLEGRO FT_LIB=$(LIBFREETYPE) HAVE_FREETYPE=$(HAVE_FREETYPE)

lib/freetype/config.mk : 
	$(MAKE) -C lib/freetype

$(LIBFREETYPE) : lib/freetype/config.mk
	$(MAKE) -C lib/freetype

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

$(LIBLOADPNG) :
	$(MAKE) -C lib/loadpng lib

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


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

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

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

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

.PHONY : clean cleaner cleanest
.PHONY : depend strip tags


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

cleaner : clean
	$(RM) Makefile.dep TAGS
	$(RM) $(SEB-OBJS)
	$(MAKE) -C lib/adime veryclean
	$(MAKE) -C lib/almp3 clean
	$(MAKE) -C lib/allegroogg clean
	$(MAKE) -C lib/fblend veryclean
	$(MAKE) -C lib/glyph-keeper clean TARGET=ALLEGRO
	$(MAKE) -C lib/loadpng clean

cleanest : cleaner
	$(RM) $(GAME)
	$(MAKE) -C tools clean
	$(MAKE) -C lib/zziplib clean
	$(MAKE) -C lib/libid3tag clean
	$(MAKE) -C lib/freetype	clean

depend :
	./mkdepend.sh src/*.m src/*/*.m > Makefile.dep

strip :
	strip $(GAME)

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

# This needs to be at the end.
include misc/Makefile.unx-install
-include Makefile.dep
