# Klammertext mac/ Makefile
# Improved version with automatic header dependency tracking

K := $(KLAMMERTEXT_HOME)
KS := $(K)/sks

include $(K)/env/makefile.env

# Source files
BASENAMES := util error locator file argv character ktype katom katom_list \
             log show command argument argument_set argtype argtype_registry \
             state eval eval_python eval_cpp klammer klammer_registry klammerset klammerset_registry \
             option_set option_set_registry deftype \
             target target_registry machine font_store check

SOURCES := $(addsuffix .cpp,$(BASENAMES))
OBJECTS := $(addsuffix .o,$(BASENAMES))
HEADERS := $(addsuffix .h,$(BASENAMES))
DEPFILES := $(addsuffix .d,$(BASENAMES))

# Shared library
LIBDIR := ../lib
LIBRARY := $(LIBDIR)/libklammertext.so

# Compiler flags for dependency generation
DEPFLAGS = -MMD -MP -MF $(@:.o=.d)

# Pattern rule for object files with automatic dependency generation
%.o : %.cpp
	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(DEPFLAGS) $< -o $@

# Default target
.PHONY: all sks clean redo clang

all : $(LIBRARY)
	$(MAKE) sks

# Create lib directory
$(LIBDIR):
	mkdir -p $(LIBDIR)

# Build shared library
$(LIBRARY): $(OBJECTS) | $(LIBDIR)
	$(CXX) $(CXXFLAGS) $(LDFLAGS) $(SHARED) $(SONAME) -o $@ $(OBJECTS) $(LDLIBS)

# Build sks components
sks :
	$(MAKE) -C $(KS)/kutil
	$(MAKE) -C $(KS)/target
	$(MAKE) -C $(KS)/document

clean :
	rm -f $(OBJECTS) $(DEPFILES) $(LIBRARY) *~

redo :
ifneq ($(filter clang,$(MAKECMDGOALS)),)
	@:
else
	$(MAKE) clean
	$(MAKE) -j all
endif

# "make clang" = incremental build; "make clang redo" = full clean rebuild
clang :
	$(MAKE) $(or $(filter-out clang,$(MAKECMDGOALS)),all) COMPILER=clang

# Include generated dependency files (if they exist)
-include $(DEPFILES)
