SOURCE_FILES ?= $(filter-out CVS .git Makefile %.done, $(wildcard *)) TARGET_DIR ?= $(PREFIX)/share SOURCE_BASE ?= . RELPATHS = $(foreach f,$(SOURCE_FILES),$(shell realpath -s --relative-to $(SOURCE_BASE) $f)) INSTALLED_FILES = $(addprefix $(TARGET_DIR)/,$(RELPATHS)) include $(MODDIR)/make/defs.mk ifeq ($(DEVELOPMENT),true) TARGET_OWNER ?= $(shell id -un) TARGET_GROUP ?= $(shell id -gn) else TARGET_OWNER ?= root TARGET_GROUP ?= root endif TARGET_DIR_OWNER ?= $(TARGET_OWNER) TARGET_DIR_GROUP ?= $(TARGET_GROUP) TARGET_MODE ?= 440 TARGET_DIR_MODE ?= 770 all: install: install.done clean: done.clean distclean: done.clean: $(RM) -f *.done $(TARGET_DIR)/%: $(SOURCE_BASE)/% @if [ -d $< ]; then \ echo $(INSTALL) -d -D -m $(TARGET_DIR_MODE) -o $(TARGET_DIR_OWNER) -g $(TARGET_DIR_GROUP) $@ ;\ $(INSTALL) -d -D -m $(TARGET_DIR_MODE) -o $(TARGET_DIR_OWNER) -g $(TARGET_DIR_GROUP) $@ ;\ else \ echo $(INSTALL) -p -D -m $(TARGET_MODE) -o $(TARGET_OWNER) -g $(TARGET_GROUP) $< $@ ;\ $(INSTALL) -p -D -m $(TARGET_MODE) -o $(TARGET_OWNER) -g $(TARGET_GROUP) $< $@ ;\ fi install.done: $(INSTALLED_FILES) touch $@ # this used to work fine until an enormous $(SOURCE_FILES) was encountered install-old.done: for f in $(SOURCE_FILES); do \ relpath=`realpath -s --relative-to $(SOURCE_BASE) $$f` ;\ if [ -d $$f ]; then \ $(INSTALL) -d -D -m $(TARGET_DIR_MODE) -o $(TARGET_DIR_OWNER) -g $(TARGET_DIR_GROUP) $(TARGET_DIR)/$$relpath ;\ else \ $(INSTALL) -p -D -m $(TARGET_MODE) -o $(TARGET_OWNER) -g $(TARGET_GROUP) $$f $(TARGET_DIR)/$$relpath ;\ fi ;\ done touch $@