###################################
# To compile, type 'make' as root #
###################################

# any changes to be made are in 'config' file.

##############################################################################
#***************  You don't need to edit anything after this *****************
##############################################################################
VERSION=1.5

include config

# Compiled bitmaps always on now.
FEATURES= -DCOMPILE_BITMAPS

ifeq ($(BACKDROPS),YES)
FEATURES := $(FEATURES) -DBACKDROPS
endif

CC	 = g++
INC      = -I/usr/local/include -I./gamelib
DEBUG    = -ggdb
OPTS	 = -Wall -pipe
OPTIMIZE = -fomit-frame-pointer -O2 -ffast-math -funroll-loops

ifeq ($(CPU_IS_386),NO)
OPTS := -m486 $(OPTS)
endif

DEFINES  = $(FEATURES) -DBINDIR=\"$(BINDIR)/\" -DSCOREDIR=\"$(VARDIR)/\" -DVERSION=\"$(VERSION)\"

# regular use
CFLAGS	 = $(DEFINES) $(INC) $(OPTIMIZE) $(OPTS)

# for debugging/profiling
#CFLAGS	 = $(DEFINES) $(INC) $(DEBUG) $(OPTS)

#LFLAGS   = -static -L/usr/local/lib

INSTALLSCRIPT = installbin

BITMAP_CF  = sast.cf
SOUND_CF   = sastsound.cf

PROG    = sasteroids
PROG_O  = sasteroids.o Obj.o
GAMELIB = gamelib/gamelib.a
SOUNDLIB= soundIt/soundIt.o

#LIBS     = -lvgagl -lvga -lm -lgmon
LIBS     = $(GAMELIB) $(SOUNDLIB) -lvgagl -lvga -lm

# name of tar.gz files for source/bin/snd+gfx distributions
PACKAGE  = sast$(VERSION)

.PHONY:	all
all:	$(PROG)
	@echo
	@echo Type \"make install\" to install sasteroids in
	@echo $(BINDIR)
	@echo

.PHONY:	install
install: makeinstallscript $(PROG) 
	@./$(INSTALLSCRIPT)

$(PROG): $(PROG_O) $(GAMELIB) $(SOUNDLIB)
	$(CC) $(LFLAGS) $(PROG_O) -o $(PROG) $(LIBS)
	@echo 
	@echo \"$(PROG)\" has successfully compiled.
	@echo 
	@echo Features: $(FEATURES)
	@echo Version : $(VERSION)

$(GAMELIB): dummy
	$(MAKE) -C gamelib

$(SOUNDLIB): dummy
	$(MAKE) -C soundIt

.PHONY: cleanbin clean
cleanbin: clean
	rm -f $(PROG)

clean:
	rm -f *.o *~
	$(MAKE) -C gamelib clean


# this creates the source .tar.gz distribution.
.PHONY:	distrib
distrib:
	( cd .. ; rm -rf $(PACKAGE)-src.tar.gz ; mv $(PROG) $(PACKAGE) )
	( cd .. ; tar zchvvf $(PACKAGE)-src.tar.gz \
		  $(PACKAGE)/*.[ch] \
		  $(PACKAGE)/$(BITMAP_CF) \
		  $(PACKAGE)/$(SOUND_CF) \
		  $(PACKAGE)/?akefile \
		  $(PACKAGE)/1-* \
		  $(PACKAGE)/config \
		  $(PACKAGE)/dependancies \
		  $(PACKAGE)/gamelib/*.[ch] \
		  $(PACKAGE)/gamelib/Makefile \
                  $(PACKAGE)/gamelib/dependancies \
		  $(PACKAGE)/soundIt/Makefile \
		  $(PACKAGE)/soundIt/soundIt.* \
		  $(PACKAGE)/*.[123456789n] )
	( cd .. ; mv $(PACKAGE) $(PROG) )
	@echo ../$(PACKAGE)-src.tar.gz has been created.

# this creates the bin distribution
.PHONY:	bindistrib
bindistrib: makeinstallscript
	rm -f sasteroids
	$(MAKE) LFLAGS=-static
	strip $(PROG)
	( cd .. ; rm -rf $(PACKAGE)-bin.tar.gz ; mv $(PROG) $(PACKAGE) )        
	( cd .. ; tar zchvvf $(PACKAGE)-bin.tar.gz  \
                  $(PACKAGE)/$(PROG) \
		  $(PACKAGE)/2-* \
		  $(PACKAGE)/*.[123456789n] \
		  $(PACKAGE)/$(BITMAP_CF) \
		  $(PACKAGE)/$(SOUND_CF) \
		  $(PACKAGE)/$(INSTALLSCRIPT) )
	( cd .. ; mv $(PACKAGE) $(PROG) )
	@echo ../$(PACKAGE)-bin.tar.gz has been created.

# this creates the source snd+gfx distribution.
.PHONY:	snd+gfx
snd+gfx:
	( cd .. ; rm -rf $(PACKAGE)-snd+gfx.tar.gz ; mv $(PROG) $(PACKAGE) )
	( cd .. ; tar zchvvf $(PACKAGE)-snd+gfx.tar.gz \
		  $(PACKAGE)/cvf \
		  $(PACKAGE)/ccf \
		  $(PACKAGE)/*-list \
		  $(PACKAGE)/3-* \
		  $(PACKAGE)/sounds \
		  $(PACKAGE)/bitmaps/*.raw \
		  $(PACKAGE)/bitmaps/sprite/make*bat \
		  $(PACKAGE)/bitmaps/sprite/sprite.pal \
		  $(PACKAGE)/bitmaps/sprite/*.raw )
	( cd .. ; mv $(PACKAGE) $(PROG) )
	@echo ../$(PACKAGE)-snd+gfx.tar.gz has been created.



# creates the script to install the final program
# Nothing like using a makefile for code generation.. :-)
.PHONY:	makeinstallscript
makeinstallscript:
	@echo "#!/bin/sh" > $(INSTALLSCRIPT)
	@echo "# script to install sasteroids v$(VERSION)" >> $(INSTALLSCRIPT)

	@echo "install -d $(VARDIR)"  >> $(INSTALLSCRIPT)
	@echo "install -d $(BINDIR)"  >> $(INSTALLSCRIPT)

	@echo "echo" >> $(INSTALLSCRIPT)

	@echo "echo Installing \"$(PROG)\" in $(BINDIR)" >> $(INSTALLSCRIPT)
	@echo "install --strip --mode=4755 $(PROG) $(BINDIR)"  >> $(INSTALLSCRIPT)

	@echo "echo Installing \"$(BITMAP_CF)\" in $(BINDIR)" >> $(INSTALLSCRIPT)
	@echo "install --mode=644 $(BITMAP_CF) $(BINDIR)"  >> $(INSTALLSCRIPT)

	@echo "echo Installing \"$(SOUND_CF)\" in $(BINDIR)" >> $(INSTALLSCRIPT)
	@echo "install --mode=644 $(SOUND_CF) $(BINDIR)"  >> $(INSTALLSCRIPT)

	@echo "echo Installing man page in $(MANDIR)" >> $(INSTALLSCRIPT)
	@echo "install --mode=644 sasteroids.6 $(MANDIR)"  >> $(INSTALLSCRIPT)

	@echo "echo" >> $(INSTALLSCRIPT)

	@chmod +rx $(INSTALLSCRIPT)


# do a 'make cf' to update the .cf files
# Only valid if you've installed the sasteroids snd+gfx package
.PHONY	:cf
cf	: $(SOUND_CF) $(BITMAP_CF)

# create the bitmap .cf file, which contains a collection of graphics
$(BITMAP_CF): $(BITMAP_CF)-list
	./ccf $(BITMAP_CF)-list

# create the sound .cf file, which contains a collection of raw sound files
# ccf (cf compiler) is by John Remyn, and available on request.
$(SOUND_CF): $(SOUND_CF)-list
	./ccf $(SOUND_CF)-list


.PHONY:	dep depend
dep:	depend

depend:
	$(CC) -MM $(INC) *.c > dependancies
	$(MAKE) -C gamelib depend

.c.o:
	$(CC) $(CFLAGS) -c -o $*.o $<

.c.s:
	$(CC) $(CFLAGS) -S -o $*.s $<

dummy:

-include dependancies
