include ../config

SRC = $(wildcard *.cpp */*.cpp */*/*.cpp)
SRC_EXCLUDE = misc/fibheap.cpp
CSRC = $(wildcard *.c */*.c */*/*.c)

SRC := $(filter-out $(SRC_EXCLUDE), $(SRC))
OBJECTS = $(SRC:.cpp=.o)
OBJECTS += $(CSRC:.c=.o)

OBJECTS = $(SRC:.cpp=.o)
OBJECTS += $(CSRC:.c=.o)

CC ?= gcc
CXX ?= g++

all: freecnc-bin

../freecnc: $(OBJECTS) ../config
	$(CXX) $(FREECNC_LDFLAGS) -o ../freecnc $(OBJECTS) $(FREECNC_LIBS)

freecnc-bin: ../freecnc

.PHONY: clean clean-bin depend

clean-bin:
	\rm -f $(OBJECTS) ../freecnc

clean: clean-bin

.SUFFIXES: .cpp .c
.cpp.o:
	$(CXX) $(CXXFLAGS) -c $< -o $(<:.cpp=.o) $(FREECNC_CFLAGS)

.c.o:
	$(CC) $(CFLAGS) -c $< -o $(<:.c=.o) $(FREECNC_CFLAGS)

depend:
	@touch Makefile.depend # makedepend sucks because it won't create a file for output.
	@makedepend -fMakefile.depend -Y./include $(SRC) &> /dev/null || true
	@\rm -f Makefile.depend.bak # makedepend sucks because it always makes a backup.

-include Makefile.depend
