# -*- makefile -*-
# -----------------------------------------------------------------------
# Copyright 2019-2023 Open Networking Foundation (ONF) and the ONF Contributors
#
# 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.
# -----------------------------------------------------------------------

.PHONY: test
.DEFAULT_GOAL := test

##-------------------##
##---]  GLOBALS  [---##
##-------------------##
TOP         ?= .
MAKEDIR     ?= $(TOP)/makefiles

$(if $(VERBOSE),$(eval export VERBOSE=$(VERBOSE))) # visible to include(s)

##--------------------------
## Enable setup.py debugging
##--------------------------
# https://docs.python.org/3/distutils/setupscript.html#debugging-the-setup-script
# export DISTUTILS_DEBUG := 1      # verbose: pip
export DOCKER_DEBUG    := 1      # verbose: docker

# Makefile for voltha-protos
default: test

## Library linting
# NO-LINT-MAKEFILE := true    # cleanup needed
NO-LINT-SHELL    := true    # cleanup needed

##--------------------##
##---]  INCLUDES  [---##
##--------------------##
include $(MAKEDIR)/include.mk

# Function to extract the last path component from go_package line in .proto files
define go_package_path
$(shell grep go_package $(1) | sed -n 's/.*\/\(.*\)";/\1/p')
endef

# -----------------------------------------------------------------------
# Function to extract the last path component from package line in .proto files
#   % grep 'package' will match:
#     o package <name> ;
#     o option java_package='<dot-pkg-fqdn>
# -----------------------------------------------------------------------
# RETURN: protos/voltha_protos/common.proto => common
# -----------------------------------------------------------------------
define java_package_path
$(shell grep package $(1) | sed -n 's/.*\/\(.*\)";/\1/p')
endef

# Variables
PROTO_FILES := $(sort $(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)))
PROTO_PYTHON_PB2_GRPC := $(foreach f, $(PROTO_FILES), $(patsubst protos/voltha_protos/%.proto,$(PROTO_PYTHON_DEST_DIR)/%_pb2_grpc.py,$(f)))
PROTO_GO_DEST_DIR := go
PROTO_GO_PB:= $(foreach f, $(PROTO_FILES), $(patsubst protos/voltha_protos/%.proto,$(PROTO_GO_DEST_DIR)/$(call go_package_path,$(f))/%.pb.go,$(f)))
PROTO_JAVA_DEST_DIR := java
PROTO_JAVA_PB := $(foreach f, $(PROTO_FILES), $(patsubst protos/voltha_protos/%.proto,$(PROTO_JAVA_DEST_DIR)/$(call java_package_path,$(f))/%.pb.java,$(f)))

# -----------------------------------------------------------------------
# Force pb file to be regenerated every time.  Otherwise the make process
# assumes generated version is still valid.
# -----------------------------------------------------------------------
# [TODO]
#   - Revisit: fix target to be dependency driven.
#   - When source not modified make "voltha.pb" behavior always a NOP
# -----------------------------------------------------------------------
.PHONY: voltha.pb

##----------------##
##---]  DEPS  [---##
##----------------##
infra-deps := $(null)
infra-deps += Makefile
infra-deps += $(venv-activate-script)

## -----------------------------------------------------------------------
## -----------------------------------------------------------------------
print:
	@echo "Proto files: $(PROTO_FILES)"
	@echo "Python PB2 files: $(PROTO_PYTHON_PB2)"
	@echo "Go PB files: $(PROTO_GO_PB)"
	@echo "JAVA PB files: $(PROTO_JAVA_PB)"

# Generic targets
protos: python-protos go-protos java-protos

build: protos python-build go-protos java-protos

test: python-test go-test java-test

clean :: python-clean java-clean go-clean

sterile :: clean

## -----------------------------------------------------------------------
## Python targets
## -----------------------------------------------------------------------
python-protos: $(infra-deps) $(PROTO_PYTHON_PB2)

## -----------------------------------------------------------------------
## -----------------------------------------------------------------------
$(PROTO_PYTHON_DEST_DIR)/%_pb2.py: \
  protos/voltha_protos/%.proto \
  Makefile \
  $(venv-activate-script)

	@echo
	@echo "** -----------------------------------------------------------------------"
	@echo "** $(MAKE): processing target [$@]"
	@echo "** -----------------------------------------------------------------------"

	$(activate) && 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 \
    $<

## -----------------------------------------------------------------------
## Intent:
## -----------------------------------------------------------------------
show:
	$(call banner-enter,target $@)
	@echo
	$(call banner-leave,target $@)

## -----------------------------------------------------------------------
## Intent:
## -----------------------------------------------------------------------
python-build: setup.py python-protos

	$(call banner-enter,target $@)

	$(RM) -r dist/
	python ./setup.py sdist

	$(call banner-leave,target $@)

## -----------------------------------------------------------------------
## Intent: Invoke tox to install a python interpreter then run tests.
## -----------------------------------------------------------------------
## See Also:
##   o https://tox.wiki/en/latest/cli_interface.html#tox-verbosity
##     every -v increases, every -q decreases verbosity level,
##     default WARNING (level:2)
##     map 0=CRITICAL|1=ERROR|2=WARNING|3=INFO|4=DEBUG|5=NOTSET
## -----------------------------------------------------------------------
python-test: tox.ini setup.py python-protos
	$(call banner-enter,target $@)

	$(activate) && python --version
	tox -vvv

	$(call banner-leave,target $@)

## -----------------------------------------------------------------------
## Intent:
## -----------------------------------------------------------------------
python-clean:
	find python -name '__pycache__' -type d -print0 \
	    | xargs -0 --no-run-if-empty $(RM) -r
	find python -name '*.pyc' -type f -print0 \
	    | xargs -0 --no-run-if-empty $(RM)
	$(RM) -r \
    .coverage \
    .tox \
    coverage.xml \
    dist \
    nose2-results.xml \
    python/__pycache__ \
    python/test/__pycache__ \
    python/voltha_protos.egg-info \
    "$(venv-abs-path)" \
    $(PROTO_PYTHON_DEST_DIR)/*.desc \
    $(PROTO_PYTHON_PB2) \
    $(PROTO_PYTHON_PB2_GRPC)

## -----------------------------------------------------------------------
## Intent: Revert go to a clean state.
##   o TODO - go/ directory should not be placed under revision control.
##   o Build should retrieve versioned sources from a central repo.
## -----------------------------------------------------------------------
go-clean:
	$(RM) -r go/*
	$(HIDE)$(MAKE) repair

## -----------------------------------------------------------------------
## Intent: Recover from a fatal failed build state:
##   o build removes go/ while regenerating prototypes.
##   o chicken-n-egg: make becomes fatal when go/ is removed and proten fails.
## -----------------------------------------------------------------------
repair:
	/usr/bin/env git checkout go

## -----------------------------------------------------------------------
## Intent: Go targets
## -----------------------------------------------------------------------
go-protos: voltha.pb

	$(call banner-enter,target $@)
	@echo "** Creating *.go.pb files"

	$(if $(LOCAL_FIX_PERMS),chmod -R o+w $(PROTO_GO_DEST_DIR))

	${PROTOC_SH} $(quote-double)\
	  set -e -o pipefail; \
	  for x in ${PROTO_FILES}; do \
	    echo \$$x; \
	    protoc --go_out=plugins=grpc:/go/src -I protos \$$x; \
	  done\
	  $(quote-double)

	$(if $(LOCAL_FIX_PERMS),chmod -R o-w $(PROTO_GO_DEST_DIR))

	$(call banner-leave,target $@)

## -----------------------------------------------------------------------
## Intent: Regenerate voltha.pb
## ----------------------------------------------------------------------
voltha-pb	+= show-proto-files
voltha-pb	+= docker-debug-joey

voltha.pb: $(voltha-pb)
	$(call banner-enter,target $@)

	${PROTOC} \
	  -I protos \
	  -I protos/google/api \
	  --include_imports \
	  --include_source_info \
	  --descriptor_set_out=$@ \
	  ${PROTO_FILES}

	$(call banner-leave,target $@)

## -----------------------------------------------------------------------
## Intent:
## -----------------------------------------------------------------------
go-test:
	$(call banner-enter,target $@)

	test/test-go-proto-consistency.sh
	${GO} mod verify

	$(call banner-leave,target $@)

## -----------------------------------------------------------------------
## Intent: Java targets
## -----------------------------------------------------------------------

java-protos-dirs += java_temp/src/main/java
java-protos-dirs += java_temp/src/main/java/org
# local docker problem
java-protos-dirs += java_temp/src/main/java/org/opencord/voltha/adapter
java-protos-dirs += java_temp/src/main/java/org/opencord/voltha/adapter_service

mkdir-args += -vp

java-protos: voltha.pb

	$(call banner-enter,target $@)

	mkdir $(mkdir-args) $(java-protos-dirs)

	$(docker-sh) $(quote-double) find $(java-protos-dirs) -print0 \
	    | xargs -0 -n1 /bin/ls -ld $(quote-double)

	$(if $(LOCAL_FIX_PERMS),chmod -R o+w java_temp)
	@${PROTOC_SH} $(quote-double) \
	  set -e -o pipefail; \
	  for x in ${PROTO_FILES}; do \
	    echo \$$x; \
	    protoc --java_out=java_temp/src/main/java -I protos \$$x; \
	  done\
	  $(quote-double)
	$(if $(LOCAL_FIX_PERMS),chmod -R o-w java_temp)

        # Move files into place after all prototypes have generated.
        # TODO: Remove the extra step, use makefile deps and
        #       generate in-place as needed.
	@mkdir -p java
	rsync -r --checksum java_temp/src/main/java/. java/.

	$(call banner-leave,target $@)

## -----------------------------------------------------------------------
## Intent: Tests if the generated java classes are compilable
## -----------------------------------------------------------------------
java-test: java-protos
	cp test/pom.xml java_temp
	cd java_temp && mvn compile

## -----------------------------------------------------------------------
## Intent: Custodial service
## -----------------------------------------------------------------------
java-clean:
	$(RM) -r java
	$(RM) -r java_temp

## -----------------------------------------------------------------------
## Intent: Placeholder for library targets
## -----------------------------------------------------------------------
lint :

## -----------------------------------------------------------------------
## Intent: Make sterile is unrecoverable due to handling of java_temp
## -----------------------------------------------------------------------
protos-clean:
	$(MAKE) sterile
	$(MAKE) build
	$(MAKE) protos
	$(MAKE) test

## -----------------------------------------------------------------------
## Intent: Display/debug targets
## -----------------------------------------------------------------------
.PHONY: show-proto-files
show-proto-files:

	$(call banner-enter,Target $@)
	@echo -e "PROTO_FILES:\n$(PROTO_FILES)" | tr ' ' '\n'
	$(call banner-leave,Target $@)

## -----------------------------------------------------------------------
## Intent: Debug mode
##   - New image not logging ssh connections while job is running (?!?)
##   - We should be on label=voltha-1804-micro.
##   - Let(s) see what the reality is while checking configs.
## -----------------------------------------------------------------------
.PHONY: docker-debug-joey
docker-debug-joey:

	$(call banner-enter,Target $@)
	ip --brief addr
	$(call banner-leave,Target $@)

# [EOF]
