# Makefile for emrys_emotional_simulator
# POSIX-compatible bmake build system

# Program name
PROG = emrys_emotional_simulator
TEST_PROG = emrys_emotional_simulator_test

# Source files
SRCS = src/main.c \
       src/MODULE_emotional_simulator/emotional_simulator.c \
       src/MODULE_emotional_simulator/internal/private_emotional_simulator.c

# Test source files
TEST_SRCS = src/main_test.c \
            src/MODULE_emotional_simulator/tests/test_emotional_simulator.c

# Header search paths
CFLAGS += -I.
CFLAGS += -Isrc
CFLAGS += -Isrc/MODULE_emotional_simulator
CFLAGS += -Isrc/MODULE_emotional_simulator/internal

# Common compiler flags
CFLAGS += -Wall -Wextra -std=c99

# Generate object file list with proper paths
OBJS = ${SRCS:.c=.o}
TEST_OBJS = ${TEST_SRCS:.c=.o}

# Default target
all: ${PROG}

# Link the main program
${PROG}: ${OBJS}
	${CC} ${LDFLAGS} -o $@ ${OBJS}

# Link the test program
${TEST_PROG}: ${TEST_OBJS}
	${CC} ${LDFLAGS} -o $@ ${TEST_OBJS}

# Explicit rules for each source file to ensure .o goes with .c
src/main.o: src/main.c
	${CC} ${CFLAGS} -c $< -o $@

src/MODULE_emotional_simulator/emotional_simulator.o: src/MODULE_emotional_simulator/emotional_simulator.c
	${CC} ${CFLAGS} -c $< -o $@

src/MODULE_emotional_simulator/internal/private_emotional_simulator.o: src/MODULE_emotional_simulator/internal/private_emotional_simulator.c
	${CC} ${CFLAGS} -c $< -o $@

src/main_test.o: src/main_test.c
	${CC} ${CFLAGS} -c $< -o $@

src/MODULE_emotional_simulator/tests/test_emotional_simulator.o: src/MODULE_emotional_simulator/tests/test_emotional_simulator.c
	${CC} ${CFLAGS} -c $< -o $@

# Run tests
test: ${TEST_PROG}
	@echo "Running tests..."
	./${TEST_PROG}

# Clean build artifacts
clean:
	rm -f ${OBJS} ${TEST_OBJS}
	rm -f ${PROG} ${TEST_PROG}

# Dist clean (remove all generated files)
distclean: clean

# Install (optional)
install: ${PROG}
	install -d ${DESTDIR}/usr/local/bin
	install -m 755 ${PROG} ${DESTDIR}/usr/local/bin/

# Uninstall (optional)
uninstall:
	rm -f ${DESTDIR}/usr/local/bin/${PROG}

# Show help
help:
	@echo "Available targets:"
	@echo "  all        - Build the program (default)"
	@echo "  clean      - Remove object files and binaries"
	@echo "  distclean  - Remove all generated files"
	@echo "  install    - Install to DESTDIR"
	@echo "  uninstall  - Remove from DESTDIR"
	@echo "  test       - Run test suite"
	@echo "  help       - Show this help"

.PHONY: all clean distclean install uninstall test help
