# Dossiers contenant les fichiers sources, les en-têtes
# et les sorties
SRC=src/
INC=inc/
OUT=out/

# Configuration du compilateur
CC=gcc
CFLAGS=-Wall -std=c99 -I$(INC)

# Objets et exécutables à construire
PROG=huffman
SOURCES=$(wildcard $(SRC)*.c)
OBJECTS=$(patsubst $(SRC)%.c,$(OUT)%.o,$(SOURCES))

#####################################################

all: $(OUT) $(OUT)$(PROG)

# Créer le dossier de sortie si nécessaire
$(OUT):
	mkdir -p $(OUT)

# Lier les différents fichiers objets générés en un exécutable
$(OUT)$(PROG): $(OBJECTS)
	$(CC) $^ $(CFLAGS) -o $@

# Générer les fichiers objets pour chaque source
$(OUT)buffer.o: $(SRC)buffer.c $(INC)buffer.h
$(OUT)compress.o: $(SRC)compress.c $(INC)compress.h $(INC)common.h \
	$(INC)display.h
$(OUT)display.o: $(SRC)display.c $(INC)display.h $(INC)common.h
$(OUT)huftree.o: $(SRC)huftree.c $(INC)huftree.h $(INC)common.h
$(OUT)main.o: $(SRC)main.c $(INC)compress.h $(INC)common.h

$(OBJECTS):
	$(CC) $(CFLAGS) -o $@ -c $<

# Nettoyer le dossier de sortie
clean:
	rm -rf out