# Klammertext sks/ Makefile # Builds all .so files in sks/ subdirectories K := $(KLAMMERTEXT_HOME) KS := $(K)/sks KM := $(K)/mac # Shared library that all .so files depend on LIBRARY := $(K)/lib/libklammertext.so # Support directories (build .o files used by other sks/ components) SUPPORT_DIRS := kutil target # Excluded directories: # kutil, target - support directories that build .o files, not .so # book, phase - obsolete, not updated for libklammertext.so # Directories that build .so files (excluding support and obsolete directories) # Find all subdirectories with Makefiles that have .so build targets # (look for lines like "xyz.so :" or "all : xyz.so") SO_DIRS := $(shell for dir in $(KS)/*/; do \ if [ -f "$${dir}Makefile" ] && grep -qE '^[a-z]+\.so\s*:|all\s*:.*\.so' "$${dir}Makefile" 2>/dev/null; then \ basename "$$dir"; \ fi; done | grep -v -E '^(kutil|target|book|phase)$$') .PHONY: all clean support $(SUPPORT_DIRS) $(SO_DIRS) # Default target: build support first, then all .so files all : support $(SO_DIRS) # Build support directories support : $(SUPPORT_DIRS) kutil : $(MAKE) -j -C $(KS)/kutil target : kutil $(MAKE) -j -C $(KS)/target # Pattern rule for .so directories # Each depends on the library and support directories $(SO_DIRS) : support $(LIBRARY) $(MAKE) -j -C $(KS)/$@ # Clean all subdirectories clean : @for dir in $(SUPPORT_DIRS) $(SO_DIRS); do \ echo "Cleaning $$dir..."; \ $(MAKE) -C $(KS)/$$dir clean; \ done # Rebuild everything redo : clean all