# Copyright Neil Van Dyke.  See file "info.rkt".

#---------------------------------------------------------------------- Options

Makefile-options:
	echo "# -*- Makefile -*-" > $@
	echo "" >> $@
	echo "# PLT_BIN_DIR = " >> $@
	echo "# USB_DRIVE   = " >> $@

include Makefile-options

PLT_BIN_DIR ?= /usr/bin
USB_DRIVE   ?= /dev/disk/by-id/usb-YOUR-USB-FLASH-DRIVE-HERE

#------------------------------------------------------------------------------

RACO        = $(PLT_BIN_DIR)/raco

NAME        = rackout
SOURCE_DIR  = $(CURDIR)
DIST_TREE   = dist-tree
BUILD_DIR   = /tmp/$(NAME)-build
BUILD_FILES = Makefile \
              aux.wmclass \
              planet-neil-cpuinfo.rkt \
              planet-neil-hostname.rkt \
              planet-neil-overeasy.rkt \
              planet-neil-sudo.rkt \
              planet-neil-vlc.rkt \
              planet-neil-web-server-xexp.rkt \
              rackout.rkt \
              rackout-about.rkt \
              rackout-doc.rkt \
              rackout-dvd-title.rkt \
              rackout-infidelity.rkt \
              rackout-live-build \
              rackout-live-install.rkt \
              rackout-live-syslinux-splash.png \
              rackout-splash.rkt \
              rackout-system.rkt \
              rackout-xrandr.rkt \
              info.rkt \
              main.rkt \
              static-files/icons \
              static-files/jquery-1.7.1.min.js \
              static-files/jquery.mobile-1.2.0 \
              static-files/rackout.css \
              static-files/rackout.js
TEST_HOST   = rackout.lan
BINARY_FILE = $(LIVE_BUILD_DIR)/binary.img
#BINARY_FILE = $(LIVE_BUILD_DIR)/binary-hybrid.iso

LIVE_BUILD_DIR = rackout-live-build-dir

.PHONY:: help
help:
	@echo ""
	@echo "dist-tree             - Build a standalone RackOut dist-tree."
	@echo "update-test-box       - Install dist-tree on \"$(TEST_HOST)\"."
	@echo "clean                 - Clean temporary files and directories."
	@echo "live                  - "
	@echo "live-run              - "
	@echo "live-burn-stick       - "
	@echo "live-nuke             - "
	@echo "live-clean-burn-stick - "
	@echo ""

.PHONY:: dist-tree
dist-tree:
	/bin/rm rackout rackout-live-install || exit 0
	/bin/rm -r $(DIST_TREE) $(BUILD_DIR) compiled || exit 0
	mkdir $(BUILD_DIR)
	tar cf - --exclude-backups --exclude-vcs $(BUILD_FILES) | (cd $(BUILD_DIR) && tar xvf -)
	cd $(BUILD_DIR) && $(RACO) exe rackout.rkt
	cd $(BUILD_DIR) && $(RACO) exe rackout-live-install.rkt
	cd $(BUILD_DIR) && $(RACO) distribute $(CURDIR)/$(DIST_TREE) rackout rackout-live-install
	find $(DIST_TREE) \( -type d -exec chmod 0755 {} \; \) -o \( -type f -exec chmod 0644 {} \; \)
	chmod 0755 $(DIST_TREE)/bin/* $(DIST_TREE)/lib/plt/*
	/bin/rm -r $(BUILD_DIR)

.PHONY:: update-test-box
update-test-box:
	rsync -rlptv -e ssh --rsync-path="sudo rsync" $(DIST_TREE)/. "$(TEST_HOST):/usr/local/$(NAME)/"

.PHONY:: clean
clean::
	/bin/rm *~ rackout rackout-live-install || exit 0
	/bin/rm -r compiled $(DIST_TREE) $(BUILD_DIR) || exit 0

.PHONY:: live
live:: $(DIST_TREE)
	[ -d "$(LIVE_BUILD_DIR)" ] || mkdir "$(LIVE_BUILD_DIR)"
	cd "$(LIVE_BUILD_DIR)" && ../rackout-live-build
	ls -l "$(BINARY_FILE)"

.PHONY:: live-run
live-run::
	kvm -m 512 -hda "$(BINARY_FILE)"

.PHONY:: live-burn-stick
live-burn-stick:
	PLTSTDERR=debug $(RACO) rackout-live-install --image "$(BINARY_FILE)" --disk "$(USB_DRIVE)" --want-home

.PHONY:: live-burn-cd
live-burn-cd:
	wodim -v -eject -tao "$(BINARY_FILE)"

.PHONY:: live-nuke
live-nuke:
	DeleteFile="$(LIVE_BUILD_DIR)-delete-$$$$" ; mv "$(LIVE_BUILD_DIR)" "$$DeleteFile" ; sudo rm -rf "./$${DeleteFile}"

.PHONY:: live-clean-burn-stick
live-clean-burn-stick: clean live live-burn-stick live-run
