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/lint/license/include.mk b/makefiles/lint/license/include.mk
new file mode 100644
index 0000000..61b0cfb
--- /dev/null
+++ b/makefiles/lint/license/include.mk
@@ -0,0 +1,82 @@
+# -*- 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.
+# -----------------------------------------------------------------------
+
+JSON_FILES ?= $(error JSON_FILES= is required)
+
+.PHONY: lint-license
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+lint : lint-license
+
+lint-license-gargs += --recursive
+
+# ignore: png, xlsx
+# will utf8 be excluded(?)
+lint-license-gargs += --binary-files=without-match
+lint-license-gargs += --files-without-match
+
+# [TODO] license checking accepts either Copy or Apache.
+# [TODO] At least Copyright should be required (both?)
+lint-license-gargs += --extended-regexp
+lint-license-gargs += -e 'Copyright[[:space:]]+[[:digit:]]{4}'
+lint-license-gargs += -e 'Apache License'
+
+# [TODO] --strict, --strict-dates
+
+# TODO: Normalize into .venv for consistent filtering across projects.
+lint-license-gargs += --exclude-dir='.git'
+lint-license-gargs += --exclude-dir='vst_venv'
+lint-license-gargs += --exclude-dir='flog'
+
+lint-license-gargs += --exclude='*.json'
+lint-license-gargs += --exclude='*.md'
+lint-license-gargs += --exclude='*.pyc'
+lint-license-gargs += --exclude='*.xml'
+
+# [FILE(s)]
+lint-license-gargs += --exclude='VERSION'
+
+# [GIT]
+# lint-license-gargs += --exclude='.gitignore'
+# lint-license-gargs += --exclude='.gitreview'
+lint-license-gargs += --exclude='\.*'
+
+# [PYTHON]
+lint-license-gargs += --exclude='requirements.txt'
+
+# [WIP]
+lint-license-gargs += --exclude='patch'
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+lint-license-new:
+ grep $(lint-license-gargs) $(dot)
+
+## -----------------------------------------------------------------------
+## Jenkins job checking logic.
+## -----------------------------------------------------------------------
+lint-license:
+ $(MAKEDIR)/lint/license/license-check.sh
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+help::
+ @echo " lint-license Verify sources contain a license block."
+ @echo " lint-license-new Grep driven replacement logic."
+
+# [EOF]