#  Makefile 
#  Auteur : Farès BELHADJ
#  Email  : amsi@up8.edu
#  Date   : 28/04/2024
# définition des commandes utilisées
SHELL=zsh
CC = gcc
ECHO = echo
RM = rm -f
TAR = tar
ZIP = zip
MKDIR = mkdir
CHMOD = chmod
CP = rsync -R
# déclaration des options du compilateur
CFLAGS = -Wall -O3
CPPFLAGS = -I. -Wno-deprecated-non-prototype
LDFLAGS = -lm
# définition des fichiers et dossiers
BINDIR = bin
SHADERS = $(wildcard shaders/*.?s) 
AUDIOFILE = audio/dreamer_dream.mod
ZIPFILES = bin/shaders.zip bin/music.zip
PACKNAME = amsi
PROGNAME = bee2be
VERSION = 1.0
distdir = $(PACKNAME)_$(PROGNAME)-$(VERSION)
HEADERS = animations.h audioHelper.h ImprovedNoise.h unzip/crypt.h unzip/gfstdlib.h	\
unzip/ioapi.h unzip/iowin32.h unzip/unzip.h
METAC = unzip/miniunz.mc
GENC = $(METAC:.mc=.c)
SRC = animations.c audioHelper.c window.c ImprovedNoise.c noise.c spi.c credits.c unzip/ioapi.c \
unzip/unzip.c unzip/gfstdlib.c
SOURCES = $(METAC) $(SRC)
OBJ = $(SRC:.c=.o) $(GENC:.c=.o)
DISTFILES = $(SOURCES) Makefile $(HEADERS) $(SHADERS) $(AUDIOFILE) bee2be_bin_x86-64_ubuntu_22.tgz README.md
# Traitements automatiques pour ajout de chemins et options (ne pas modifier)
ifneq (,$(shell ls -d /usr/local/include 2>/dev/null | tail -n 1))
	CPPFLAGS += -I/usr/local/include
endif
ifneq (,$(shell ls -d /opt/local/include 2>/dev/null | tail -n 1))
	CPPFLAGS += -I/opt/local/include
endif
ifneq (,$(shell ls -d $(HOME)/local/include 2>/dev/null | tail -n 1))
	CPPFLAGS += -I$(HOME)/local/include
endif
ifneq (,$(shell ls -d /usr/local/lib 2>/dev/null | tail -n 1))
	LDFLAGS += -L/usr/local/lib
endif
ifneq (,$(shell ls -d /opt/local/lib 2>/dev/null | tail -n 1))
	LDFLAGS += -L/opt/local/lib
endif
ifneq (,$(shell ls -d $(HOME)/local/lib 2>/dev/null | tail -n 1))
	LDFLAGS += -L$(HOME)/local/lib
endif
ifeq ($(shell uname),Darwin)
	MACOSX_DEPLOYMENT_TARGET = 11.0
        CFLAGS += -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET)
        LDFLAGS += -framework OpenGL -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET)
else
        LDFLAGS += -lGL
endif
CPPFLAGS += $(shell sdl2-config --cflags)
LDFLAGS  += -lGL4Dummies $(shell sdl2-config --libs) -lSDL2_mixer -lSDL2_ttf -lz
all: $(ZIPFILES)
$(ZIPFILES): $(BINDIR) $(AUDIOFILE) $(SHADERS) $(PROGNAME)
	zip bin/music.zip $(AUDIOFILE)
	zip bin/shaders.zip $(SHADERS)
	$(CP) $(PROGNAME) $(BINDIR)
$(PROGNAME): $(OBJ)
	$(CC) $(OBJ) $(LDFLAGS) -o $(PROGNAME)
	@upx $(PROGNAME) || echo "you should have upx in order to compress binary file"
$(BINDIR):
	mkdir bin
	mkdir bin/audio
	mkdir bin/shaders
unzip/miniunz.c: unzip/miniunz.mc
	@STR="" && \
	for i in $(SHADERS); do STR+="MMM(\"$$i\");"; done && \
	cat $< | sed -e "s@HERE_MUSIC@"$(AUDIOFILE)"@" | sed -e "s@HERE_SHADERS@"$$STR"@" > $@
%.o: %.c
	$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
dist: distdir
	$(CHMOD) -R a+r $(distdir)
	$(TAR) zcvf $(distdir).tgz $(distdir)
	$(RM) -r $(distdir)
zip: distdir
	$(CHMOD) -R a+r $(distdir)
	$(ZIP) -r $(distdir).zip $(distdir)
	$(RM) -r $(distdir)
distdir: $(DISTFILES)
	$(RM) -r $(distdir)
	$(MKDIR) $(distdir)
	$(CHMOD) 777 $(distdir)
	$(CP) $(DISTFILES) $(distdir)
clean:
	@$(RM) -r $(PROGNAME) $(OBJ) $(GENC) $(distdir).tgz $(distdir).zip
	@$(RM) -r gmon.out *~(N) shaders/*~(N) unzip/*~(N) bin
