SHELL := /bin/bash

SRC_ROOT ?= /Users/rcowham/go/src/github.com/perforce/command-runner
TARGET_ROOT ?= .

DOC_FILES := Installer_Guide.md README.md
SCRIPT_FILES := scripts/install_command-runner.sh scripts/install_functions.sh scripts/self_update.sh
CONFIG_FILES := configs/cmd_config.yaml

# Installer-consumed binary artifacts.
BIN_PATTERNS := \
	$(SRC_ROOT)/bin/command-runner-linux-*

P4_PATHS := Installer_Guide.md README.md scripts/... configs/... bin/...

.PHONY: sync-installer sync-installer-dryrun p4-edit p4-revert clean-empty-dirs

sync-installer: p4-edit
	@echo "Syncing installer files from $(SRC_ROOT) -> $(TARGET_ROOT)"
	@mkdir -p "$(TARGET_ROOT)/scripts" "$(TARGET_ROOT)/configs" "$(TARGET_ROOT)/bin"
	@for f in $(DOC_FILES); do \
		rsync -au "$(SRC_ROOT)/$$f" "$(TARGET_ROOT)/$$f"; \
	done
	@for f in $(SCRIPT_FILES); do \
		rsync -au "$(SRC_ROOT)/Install_scripts/$${f##*/}" "$(TARGET_ROOT)/$$f"; \
		chmod +x "$(TARGET_ROOT)/$$f"; \
	done
	@for f in $(CONFIG_FILES); do \
		rsync -au "$(SRC_ROOT)/$$f" "$(TARGET_ROOT)/$$f"; \
	done
	@for p in $(BIN_PATTERNS); do \
		for f in $$p; do \
			if [[ -e "$$f" ]]; then \
				rsync -au "$$f" "$(TARGET_ROOT)/bin/"; \
			fi; \
		done; \
	done
	@$(MAKE) p4-revert
	@echo "Sync complete."

sync-installer-dryrun:
	@echo "Dry run: showing rsync actions only"
	@mkdir -p "$(TARGET_ROOT)/scripts" "$(TARGET_ROOT)/configs" "$(TARGET_ROOT)/bin"
	@for f in $(DOC_FILES); do \
		rsync -aun "$(SRC_ROOT)/$$f" "$(TARGET_ROOT)/$$f"; \
	done
	@for f in $(SCRIPT_FILES); do \
		rsync -aun "$(SRC_ROOT)/Install_scripts/$${f##*/}" "$(TARGET_ROOT)/$$f"; \
	done
	@for f in $(CONFIG_FILES); do \
		rsync -aun "$(SRC_ROOT)/$$f" "$(TARGET_ROOT)/$$f"; \
	done
	@for p in $(BIN_PATTERNS); do \
		for f in $$p; do \
			if [[ -e "$$f" ]]; then \
				rsync -aun "$$f" "$(TARGET_ROOT)/bin/"; \
			fi; \
		done; \
	done

p4-edit:
	@echo "Running: p4 edit $(P4_PATHS)"
	@cd "$(TARGET_ROOT)" && p4 edit $(P4_PATHS) || true

p4-revert:
	@echo "Running: p4 revert -a $(P4_PATHS)"
	@cd "$(TARGET_ROOT)" && p4 revert -a $(P4_PATHS) || true

clean-empty-dirs:
	@find "$(TARGET_ROOT)" -type d -empty -print
