# Klammertext sks/ Makefile # Builds all the DSOs (document$(DSO): .so, on Windows .dll) in sks/ # subdirectories K := $(KLAMMERTEXT_HOME) KS := $(K)/sks KM := $(K)/mac include $(K)/env/makefile.env # Shared library that all the DSOs depend on LIBRARY := $(K)/lib/$(KLAMMERTEXT_LIBFILE) # 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 a DSO # book, phase - obsolete, not updated for the shared library # Directories that build a DSO (excluding support and obsolete directories): # every subdirectory whose Makefile names its product with makefile.env's # $(DSO) suffix ("document$(DSO) :", "all : document$(DSO)"). SO_DIRS := $(shell for dir in $(KS)/*/; do \ if [ -f "$${dir}Makefile" ] && grep -qE '\$$\(DSO\)' "$${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 every DSO 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 the DSO 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