VOL-4874 - Fix local lint target use problems.

scripts/which_deployment_owns_device.sh
---------------------------------------
   * Fix a few shellcheck complaints.

makefiles/lint/robot.mk
-----------------------
   * Update target logic to use && -vs- ;
   * semicolon use can mask errors.

makefiles/lint/python.mk
------------------------
   * Update target logic to use && -vs- ;
   * Removed pylint option --py3k, switch not suppored by newer interpreters.

makefiles/lint.mk
makefiles/lint/shell.mk
-----------------------
   * Added a lint target to invoke shellcheck on sources.

Makefile
--------
   * target:clean modified to remove generated sources.
   * target:gendocs: unique $(LIBDIRS) and replace for loop with a simple mkdir -vp call.
   * cosmetic indentation cleanup.
   * modified vst_venv target to apply patches after virtualenv created.
   * patches address failures caused by python 3.10+ requiring collections.abc
   * Ignore exit status from 310_migration for now to avoid failing other jobs.

patches/lib/python3.10/site-packages/robot/utils/normalizing.py/patch
patches/lib/python3.10/site-packages/robot/utils/robottypes3.py/patch
---------------------------------------------------------------------
   * Attempt to import the new collections.abc module for Mapping and
     friends so python 3.10+ can be supported.
   * Fall back to existing module import supported by python interpreters
     v3.5 <=> v3.9.

patches/python_310_migration.sh
-------------------------------
   * Self contained helper script used to generate and apply python 3.10+ patches.

Followup edits
--------------
   * Added missing license blocks reported by jenkins.
   * Updated lint checking to detect license errors so problems can be fixed prior to checkin.
   * Add set -x debugging, not clear why pyenv patching failed.

Change-Id: I2b8515bb26874eb8b1564bec87353ea0c1485b61
diff --git a/makefiles/patches/help.mk b/makefiles/patches/help.mk
new file mode 100644
index 0000000..3eb387f
--- /dev/null
+++ b/makefiles/patches/help.mk
@@ -0,0 +1,24 @@
+# -*- makefile -*-
+# -----------------------------------------------------------------------
+# Copyright 2017-2022 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.
+# -----------------------------------------------------------------------
+
+help ::
+	@echo
+	@echo "[PATCHES] - helper on the road to python 3.10+ based testing"
+	@echo "  patch-gather         Gather a list of potential patch sources"
+	@echo "  patch-apply          Apply patches to the virtualenv directory"
+
+# [EOF]
diff --git a/makefiles/patches/include.mk b/makefiles/patches/include.mk
new file mode 100644
index 0000000..58a7c73
--- /dev/null
+++ b/makefiles/patches/include.mk
@@ -0,0 +1,42 @@
+# -*- makefile -*-
+# -----------------------------------------------------------------------
+# Copyright 2022 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.
+# -----------------------------------------------------------------------
+
+include $(MAKEDIR)/patches/help.mk
+
+patch-gather-args += --exclude=Makefile
+patch-gather-args += --exclude-dir=vault
+patch-gather-args += --exclude-dir=makefiles
+patch-gather-args += --exclude-dir=staging
+patch-gather-args += --exclude-dir=patches
+
+# patch-gather-args += -e 'from collections import'
+patch-gather-args += '-e' 'from collections import Mapping'
+patch-gather-args += '-e' 'from collections import MutableMapping'
+
+patch-gather:
+	grep -r $(patch-gather-args)
+
+patch-diff:
+	$(HIDE)diff -qr staging vst_venv \
+	    | awk '{print "# diff -Naur "$$2" "$$4}' \
+	    | tee $@.log
+
+# [SEE ALSO]
+# ---------------------------------------------------------------------------
+# https://bobbyhadz.com/blog/python-importerror-cannot-import-name-mapping-from-collections
+# ---------------------------------------------------------------------------
+# [EOF]