#
# Copyright (c) 2013 Big Switch Networks, Inc.
#
# Licensed under the Eclipse Public License, Version 1.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.eclipse.org/legal/epl-v10.html
#
# 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.

SOURCE = $(shell pwd)
WORKSPACE = $(SOURCE)/workspace
VIRTUALENV = $(WORKSPACE)/ve
TOOLS = $(WORKSPACE)/tools
BUILD_DIR = $(SOURCE)/build
FL_DIR = $(SOURCE)/sdnplatform

all: build-sdnplatform

clean-python:
	printf 'import setuptools\nsetuptools.setup(name="django_cassandra", version="0.1", packages=["django_cassandra", "django_cassandra.db"])' >$(SOURCE)/django_cassandra_backend/setup.py
	echo '$(SOURCE)' >$$(python -c 'import distutils; print distutils.sysconfig.get_python_lib()')/sdnplatform.pth
	set -e; \
	cd $(SOURCE); \
	for p in django_cassandra_backend/setup.py sdncon/setup.py cli/setup.py; do \
	  echo "+++ Preparing Python virtualenv for $$p"; \
	  ( cd $$(dirname $$p); rm -rf *.egg-info; ARCHFLAGS="-arch i386 -arch x86_64" python $$(basename $$p) develop ); \
	done
	( cd $(SOURCE)/cli ; tools/rebuild_model.sh )

clean-sdnplatform:
	cd $(FL_DIR); ant clean

clean: reset-cassandra clean-sdnplatform clean-python

stop-cassandra:
	$(BUILD_DIR)/kill-port-wait.sh -p 9160
	@echo "+++ Cassandra stopped"

reset-cassandra: stop-cassandra
	rm -rf $(VIRTUALENV)/cassandra
	@echo "+++ Cassandra db deleted"

cassandra: start-cassandra
start-cassandra:
	$(BUILD_DIR)/start-and-wait-for-port.sh -p 9160 -l $(VIRTUALENV)/log/cassandra.log $(TOOLS)/cassandra/bin/cassandra
	@echo "+++ Cassandra running"

stop-sdncon:
	$(BUILD_DIR)/kill-port-wait.sh -p 8000
	@echo "+++ sdncon stopped"

reset-sdncon: stop-sdncon reset-cassandra start-cassandra

start-sdncon: start-cassandra
	if ! lsof -iTCP:8000 -sTCP:LISTEN >/dev/null; then \
	( \
	  cd $(SOURCE)/sdncon; \
	  [ -d $(VIRTUALENV)/cassandra/data/sdncon ] || python manage.py syncdb --noinput; \
	  $(BUILD_DIR)/start-and-wait-for-port.sh -p 8000 -l $(VIRTUALENV)/log/sdncon.log python manage.py runserver 0.0.0.0:8000; \
	); \
	fi
	@echo "+++ sdncon running"

stop-sdnplatform:
	while pid=$$(lsof -t -iTCP:6633 -sTCP:LISTEN); do kill $${pid}; sleep 1; done
	@echo "+++ SDN Platform stopped"

start-sdnplatform: start-cassandra
	if ! lsof -iTCP:6633 -sTCP:LISTEN >/dev/null; then \
	  ( cd $(SOURCE)/sdnplatform; ant run &>$(VIRTUALENV)/log/sdnplatform.log & ); \
	fi
	while ! nc -z localhost 6633; do sleep 1; done
	@echo "+++ SDN Platform running"

eclipse:
	cd $(FL_DIR); ant eclipse

build-sdnplatform:
	cd $(FL_DIR); ant dist
