SHELL := /bin/bash

# The directory of this file
DIR := $(shell echo $(shell cd "$(shell  dirname "${BASH_SOURCE[0]}" )" && pwd ))

# The local users UID/GID
LUID := $(shell id -u)
LGID := $(shell id -g)

# To mount a specific binary using BINARY=/absolute/path/to/binary
ifdef BINARY
    MOUNTFLAGS += -v $(BINARY):/home/cutter/$(shell basename $(BINARY)):ro
    RUNFLAGS += /home/cutter/$(shell basename $(BINARY))
endif

VERSION ?= latest
IMAGE_NAME ?= rizin/cutter
CONTAINER_NAME ?= cutter

# This will output the help for each task
# thanks to https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
.PHONY: help

help: ## This help
	@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)

.DEFAULT_GOAL := help

# Build the container
build: ## Build the container
	sudo docker build --rm -t $(IMAGE_NAME) .

build-nc: ## Build the container without caching
	sudo docker build --rm --no-cache -t $(IMAGE_NAME) .

run: ## Run container
	XSOCK=/tmp/.X11-unix && \
	XAUTH=$(shell mktemp /tmp/cutter_tmp.XXX.xauth) && \
	xauth nlist $$DISPLAY | sed -e 's/^..../ffff/' | xauth -f $$XAUTH nmerge - && \
	chmod 644 $$XAUTH && \
	touch $(DIR)/rizinrc && \
	mkdir -p $(DIR)/cutter-config && \
	mkdir -p $(DIR)/sharedFolder && \
	sudo docker run \
		-it \
		--name $(CONTAINER_NAME) \
		--cap-add=SYS_PTRACE \
		-e DISPLAY=$$DISPLAY \
		-e XAUTHORITY=$$XAUTH \
		-e LOCAL_USER_ID=$(LUID) \
		-e LOCAL_GROUP_ID=$(LGID) \
		-v $$XSOCK:$$XSOCK:ro \
		-v $$XAUTH:$$XAUTH \
		$(MOUNTFLAGS) \
		-v $(DIR)/sharedFolder:/var/sharedFolder \
		-v $(DIR)/rizinrc:/home/cutter/.rizinrc \
		-v $(DIR)/cutter-config:/home/cutter/.config/rizin \
		$(IMAGE_NAME):$(VERSION) $(RUNFLAGS) && \
	rm $$XAUTH

get: ## Get the latest Cutter image
	sudo docker pull $(IMAGE_NAME):$(VERSION)

stop: ## Stop a running container
	sudo docker stop $(CONTAINER_NAME)

remove: ## Remove a (running) container
	sudo docker rm -f $(CONTAINER_NAME)

remove-image-force: ## Remove the latest image (forced)
	sudo docker rmi -f $(IMAGE_NAME):$(VERSION)