[VOL-5064] - Build and deploy voltha-system-tests

makefiles/
----------
  o Copy in latest library makefiles from repo:onf-make

config.mk
makefiles/lint
--------------
  o Support more lint targets

makefiles/virtualenv.mk
-----------------------
  o Update to use library logic.
  o Install/maintain .venv/ VS vst_venv.
  o Proper dependency driven create when needed VS always install.
  o Also support replacing inlined venv logic with library makefile logs.

makefiles/commands/kail.mk
--------------------------
  o mkdir -p for interactive use when WORKSPACE= is set.

Makefile
--------
  o Inline comment delimiters and help targets to improve readabilty.
  o Call macro banner-enter/banner-leave to hilight target output.
  o Change targets clean and help into double-colon rules so they
    are included when library targets are processed.
  o Update include $(MAKEDIR) imports, library makefiles are able to infer paths
    and define MAKDIR=, ONF_MAKEDIR=.
  o Define helper macro run-robot-test= allowing copy & paste robot command
    line to be refactored and reduced.
  o Define local target 'venv-install' allowing installation of the virtualenv
    followed by patching so a newer interpreter can be used locally for testing.
  o Shell command separator: replace ';' with '&&' to improve error detection.
  o target=gendocs: Split run-on command line into independent steps, activate
    script only applies to the for loop invoking tests.

Change-Id: Idc8efd89f36b9f4954d9394a6524e07aa2ea5531
diff --git a/makefiles/lint/python/flake8.mk b/makefiles/lint/python/flake8.mk
index 7a36aaf..6b2b561 100644
--- a/makefiles/lint/python/flake8.mk
+++ b/makefiles/lint/python/flake8.mk
@@ -2,7 +2,7 @@
 # -----------------------------------------------------------------------
 # Copyright 2022-2024 Open Networking Foundation (ONF) and the ONF Contributors
 #
-# Licensed under the Apache License, Version 2.0 (the "License");
+# 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
 #
@@ -15,35 +15,80 @@
 # limitations under the License.
 # -----------------------------------------------------------------------
 
+$(if $(DEBUG),$(warning ENTER))
+
 ##-------------------##
 ##---]  GLOBALS  [---##
 ##-------------------##
+.PHONY: lint-flake8 lint-flake8-all lint-flake8-modified
 
-# Gather sources to check
-# TODO: implement deps, only check modified files
-python-check-find := find . -name '*venv*' -prune\
-  -o \( -name '*.py' \)\
-  -type f -print0
-
-##-------------------##
-##---]  TARGETS  [---##
-##-------------------##
-ifndef NO-LINT-PYTHON-FLAKE8
-  lint        : lint-python-flake8
-  lint-python : lint-python-flake8
-endif
+PYTHON_FILES      ?= $(error PYTHON_FILES= required)
 
 ## -----------------------------------------------------------------------
-## Intent: Perform a lint check on makefile sources
+## Intent: Use the flake8 command to perform syntax checking.
+## Usage:
+##   % make lint
+##   % make lint-flake8-all
 ## -----------------------------------------------------------------------
-lint-python-flake8:
-	$(HIDE)$(env-clean) $(python-check-find) \
+ifndef NO-LINT-FLAKE8
+  lint-flake8-mode := $(if $(have-python-files),modified,all)
+  lint        : lint-flake8
+  lint-flake8 : lint-flake8-$(lint-flake8-mode)
+endif# NO-LINT-FLAKE8
+
+## -----------------------------------------------------------------------
+## Intent: exhaustive flake8 syntax checking
+## -----------------------------------------------------------------------
+# Construct: find . \( -name '__ignored__' -o -name dir -o name dir \)
+# flake8-find-filter := $(null)
+# flake8-find-filter += -name '__ignored__'#    # for alignment
+# flake8-find-filter += $(foreach dir,$(onf-excl-dirs),-o -name $(dir)))
+
+lint-flake8-all: $(venv-activate-script)
+	$(HIDE)$(MAKE) --no-print-directory lint-flake8-install
+
+	$(activate) && $(call gen-python-find-cmd) \
 	    | $(xargs-n1) flake8 --max-line-length=99 --count
 
+#  && find . \( $(flake8-find-filter) \) -prune -o -name '*.py' -print0 \
+# 	| $(xargs-n1) flake8 --max-line-length=99 --count
+
 ## -----------------------------------------------------------------------
-## Intent: Display command help
+## Intent: check deps for format and python3 cleanliness
+## Note:
+##   pylint --py3k option no longer supported
 ## -----------------------------------------------------------------------
-help-summary ::
-	@echo '  lint-python-flake8  Syntax check python sources (*.py)'
+lint-flake8-modified: $(venv-activate-script)
+	$(HIDE)$(MAKE) --no-print-directory lint-flake8-install
+
+	$(activate)\
+ && flake8 --max-line-length=99 --count $(PYTHON_FILES)
+
+## -----------------------------------------------------------------------
+## Intent:
+## -----------------------------------------------------------------------
+.PHONY: lint-flake8-install
+lint-flake8-install: $(venv-activate-script)
+	@echo
+	@echo "** -----------------------------------------------------------------------"
+	@echo "** python flake8 syntax checking"
+	@echo "** -----------------------------------------------------------------------"
+	$(activate) && pip install --upgrade flake8
+	$(activate) && flake8 --version
+	@echo
+
+## -----------------------------------------------------------------------
+## Intent: Display command usage
+## -----------------------------------------------------------------------
+help::
+	@echo '  lint-flake8          Syntax check python using the flake8 command'
+  ifdef VERBOSE
+	@echo '  $(MAKE) lint-pylint PYTHON_FILES=...'
+	@echo '  lint-flake8-modified  flake8 checking: only modified'
+	@echo '  lint-flake8-all       flake8 checking: exhaustive'
+	@echo '  lint-flake8-install   Install the flake8 command'
+  endif
+
+$(if $(DEBUG),$(warning LEAVE))
 
 # [EOF]