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 include $(MODDIR)/make/dev-utils.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 [ -L "$<" -o -f "$<" ]; then \ 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) "$<" "$@" ;\ else \ 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) "$@" ;\ 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 $@