# Copyright 2019-present Open Networking Foundation
#
# Licensed 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.

# Makefile for voltha-protos
default: test

# Variables
PROTO_FILES := $(wildcard protos/voltha_protos/*.proto)
PROTO_PYTHON_DEST_DIR := python/voltha_protos
PROTO_PYTHON_PB2 := $(foreach f, $(PROTO_FILES), $(patsubst protos/voltha_protos/%.proto,$(PROTO_PYTHON_DEST_DIR)/%_pb2.py,$(f)))

print:
	echo "Proto files: $(PROTO_FILES)"
	echo "Python PB2 files: $(PROTO_PYTHON_PB2)"

# set default shell
SHELL = bash -e -o pipefail

# Generic targets
protos: python-protos go-protos

build: protos python-build go-build

test: python-test go-test

clean: python-clean go-clean

# Python targets
python-protos: $(PROTO_PYTHON_PB2)

venv_protos:
	virtualenv $@;\
	source ./$@/bin/activate ; set -u ;\
	pip install grpcio-tools googleapis-common-protos

$(PROTO_PYTHON_DEST_DIR)/%_pb2.py: protos/voltha_protos/%.proto Makefile venv_protos
	source ./venv_protos/bin/activate ; set -u ;\
	python -m grpc_tools.protoc \
		-I protos \
		--python_out=python \
		--grpc_python_out=python \
		--descriptor_set_out=$(PROTO_PYTHON_DEST_DIR)/$(basename $(notdir $<)).desc \
		--include_imports \
		--include_source_info \
		$<

python-build: setup.py
	python ./setup.py sdist

python-test: tox.ini setup.py python-protos
	tox

python-clean:
	rm -rf venv_protos .coverage coverage.xml nose2-results.xml dist $(PROTO_PYTHON_PB2) $(PROTO_PYTHON_DEST_DIR)*.desc

# Go targets
go-protos:
	echo "FIXME: Add golang protos"

go-build:
	echo "FIXME: Add golang build"

go-test:
	echo "FIXME: Add golang tests"

go-clean:
	echo "FIXME: Add golang cleanup"

