#
#  Makefile for teaching grandmothers...
#
#  By Shawn Hargreaves.


.PHONY: djgpp msvc linux clean backup zip autodetect

.PRECIOUS: %.o %.obj

GCC_FLAGS = -O3 -Wall -MMD

GCC_LDFLAGS =

MSVC_FLAGS = -W3 -WX -Gd -Ox -GB -MT

GCC_OBJS = eval.o interp.o load.o render.o unload.o var.o

MSVC_OBJS = eval.obj interp.obj load.obj render.obj unload.obj var.obj

ifeq ($(PROFILING),1)
GCC_FLAGS += -pg
GCC_LDFLAGS += -pg
ALLEGRO_LIBTYPE = profile
endif

ifeq ($(OSTYPE),linux-gnu)
autodetected_targed=linux
else
ifeq ($(shell uname -o),GNU/Linux)
autodetected_targed=linux
else
autodetected_targed=djgpp
endif
endif

autodetect: $(autodetected_targed)

linux: libegg.a eggshell evaltest

djgpp: libegg.a eggshell.exe evaltest.exe

msvc: egg.lib egg_win.exe eval_win.exe

eggshell.exe: eggshell.o libegg.a
	gcc $(GCC_LDFLAGS) -o eggshell.exe eggshell.o libegg.a -lalleg

evaltest.exe: evaltest.o libegg.a
	gcc $(GCC_LDFLAGS) -o evaltest.exe evaltest.o libegg.a -lalleg

egg_win.exe: eggshell.obj egg.lib
	cl -nologo -Feegg_win.exe eggshell.obj egg.lib alleg.lib

eval_win.exe: evaltest.obj egg.lib
	cl -nologo -Feeval_win.exe evaltest.obj egg.lib alleg.lib

eggshell: eggshell.o libegg.a
	gcc $(GCC_LDFLAGS) -o eggshell eggshell.o libegg.a `allegro-config --libs $(ALLEGRO_LIBTYPE)`

evaltest: evaltest.o libegg.a
	gcc $(GCC_LDFLAGS) -o evaltest evaltest.o libegg.a `allegro-config --libs $(ALLEGRO_LIBTYPE)`

libegg.a: $(GCC_OBJS)
	ar rs libegg.a $(GCC_OBJS)

egg.lib: $(MSVC_OBJS)
	lib -nologo -out:egg.lib $(MSVC_OBJS)

clean:
	rm -f *.o *.obj *.d *.a *.lib *.exe *.mft *.zip eggshell evaltest

backup:
	mkdir -p backup/examples
	cp *.c backup
	cp *.h backup
	cp makefile backup
	cp examples/*.egg backup/examples

zip:
	rm -f egg.zip
	rm -rf egg
	zip egg.zip *.txt *.c *.h makefile examples/*.egg
	echo egg.mft > egg.mft
	unzip -Z1 egg.zip >> egg.mft
	zip egg.zip egg.mft
	mkdir egg
	(cd egg ; unzip ../egg.zip ; cd ..)
	rm -f egg.zip
	zip -9 -r egg.zip egg
	rm -rf egg

%.o: %.c
	gcc $(GCC_FLAGS) -o $@ -c $<

%.obj: %.c
	cl -nologo $(MSVC_FLAGS) -Fo$@ -c $<

-include *.d
