# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

EXTENSIONS = ./extensions
DIST = ./dist
DOCS = ./docs
HTML = ./docs/html
EASY_INSTALL_PTH = $(VIRTUAL_ENV)/lib/python2.7/site-packages/easy-install.pth
PYTHON_VERSION = $$(python -V 2>&1 | cut -f2 -d' ' | cut -f1,2 -d'.' --output-delimiter='')

.DEFAULT_GOAL = default
.PHONY: clean install install-virtual docs test dist deploy

default:
	@echo "Please choose one of the following targets: clean, install, install-virtual, docs, test, dist, requirements.txt"

clean:
	rm -rf "$(DIST)" "$(HTML)" build .tox .coverage*
	-find . -maxdepth 1 -type f -name '.coverage' -delete
	-find . -type f -name '*.pyc' -delete
	-find . -type d -name '__pycache__' -prune -exec rm -rf {} \; 2>/dev/null
	-find . -type d -name '*.egg-info' -exec rm -rf {} \; 2>/dev/null

install:
	pip install .[ssh]

install-virtual:
	pip install --editable .[ssh]
	
	# "pip install --editable" will not add our extensions to the path, so we will patch the virtualenv
	EXTENSIONS_PATH="$$(head -n 1 "$(EASY_INSTALL_PTH)")/extensions" && \
	if ! grep -Fxq "$$EXTENSIONS_PATH" "$(EASY_INSTALL_PTH)"; then \
		echo "$$EXTENSIONS_PATH" >> "$(EASY_INSTALL_PTH)"; \
	fi

docs:
	pip install --requirement "$(DOCS)/requirements.txt"
	rm -rf "$(HTML)"
	sphinx-build -W -T -b html "$(DOCS)" "$(HTML)"

test:
	pip install --upgrade "tox>=2.7.0"
	tox -e pylint_core \
	    -e pylint_tests \
	    -e core \
	    -e extensions \
	    -e e2e \
	    -e ssh \
	    -e docs

./requirements.txt: ./requirements.in
	pip install --upgrade "pip-tools>=1.9.0"
	rm ./requirements.txt
	pip-compile --output-file ./requirements.txt ./requirements.in
