-include config.override.mk
include config.mk

# The CI environment variable is set automatically in CircleCI and GitLab CI
CI ?= false

# Detect Linux/ARM64 and set a flag to fix the issue with optipng-bin on it:
# please see optipng-bin Linux arm64 support issue (https://github.com/imagemin/optipng-bin/issues/118) for details:
ifeq ($(shell uname)/$(shell uname -m),Linux/aarch64)
  LINUX_ARM64 = true
  CPPFLAGS += -DPNG_ARM_NEON_OPT=0
endif
# Exact same issue but for Linux/PPC64
ifeq ($(findstring Linux/ppc64,$(shell uname)/$(shell uname -m)),Linux/ppc64)
  LINUX_PPC64 = true
  CPPFLAGS += -DPNG_POWERPC_VSX_OPT=0
endif

.PHONY: run
run: node_modules ## Runs app
	@echo Running Mattermost Web App for development

	npm run run

.PHONY: stop
stop: ## Stops webpack
	@echo Stopping changes watching

ifeq ($(OS),Windows_NT)
	wmic process where "Caption='node.exe' and CommandLine like '%webpack%'" call terminate
else
	-@pkill -f webpack || true
endif

.PHONY: restart
restart: | stop run ## Restarts the app

.PHONY: dev
dev: node_modules ## Runs app with webpack-dev-server
	npm run dev-server

.PHONY: test
test: node_modules ## Runs tests
	@echo Running jest unit/component testing

	npm run test

.PHONY: check-style
check-style: node_modules ## Checks JS file for ESLint confirmity
	@echo Checking for style guide compliance

	npm run check

.PHONY: fix-style
fix-style: node_modules ## Fix JS file ESLint issues
	@echo Fixing lint issues to follow style guide

	npm run fix

.PHONY: check-types
check-types: node_modules ## Checks TS file for TypeScript confirmity
	@echo Checking for TypeScript compliance

	npm run check-types

.PHONY: dist
dist: node_modules ## Builds all web app packages
	@echo Packaging Mattermost Web App

	npm run build

node_modules: package.json $(wildcard package-lock.json)
	@echo Getting dependencies using npm

ifeq ($(CI),false)
	CPPFLAGS="$(CPPFLAGS)" npm install
else
	# This runs in CI with NODE_ENV=production which skips devDependencies without this flag
	npm ci --include=dev
endif

	touch $@

.PHONY: clean
clean: ## Clears cached; deletes node_modules and dist directories
	@echo Cleaning Web App

	npm run clean --workspaces --if-present
	rm -rf node_modules

.PHONY: package
package: node_modules dist ## Generates ./mattermost-webapp.tar.gz for use by someone customizing the web app
	mkdir tmp
	mv channels/dist tmp/client
	tar -C tmp -czf mattermost-webapp.tar.gz client
	mv tmp/client channels/dist
	rmdir tmp

## Help documentation à la https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
.PHONY: help
help:
	@grep -E '^[0-9a-zA-Z_-]+:.*?## .*$$' ./Makefile | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
