# -*- makefile -*-
# -----------------------------------------------------------------------
# Copyright 2017-2024 Open Networking Foundation 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.
# -----------------------------------------------------------------------
# SPDX-FileCopyrightText: 2017-2024 Open Networking Foundation Contributors
# SPDX-License-Identifier: Apache-2.0
# -----------------------------------------------------------------------
# Intent:
# -----------------------------------------------------------------------

$(if $(DEBUG),$(warning ENTER))

GOLANG_FILES ?= $(error PYTHON_FILES= is required)

.PHONY: lint-golang-sca

# lint : lint-golang-sca

## -----------------------------------------------------------------------
## Intent: Run goformat on files on sandbox files.
##   1) find . -name '*.go' -print0
##      - gather all *.go sources (-name '*.go')
##      - pass as a list of null terminated items (-print0)
##   2) xargs --null --max-args=[n] --no-run-if-empty gofmt -d
##      - Iterate over the list (xargs --null)
##      - process one item per line (--max-args=1)
##      - display filename-to-check (--verbose)
##      - display content when diffs are detected:
##           gofmt -d
##           gofmt -d -s
## -----------------------------------------------------------------------
lint-golang-sca-xargs := $(null)
lint-golang-sca-xargs += --null#+           # Source paths are null terminated
lint-golang-sca-xargs += --max-args=1#+     # Check one file at a time
lint-golang-sca-xargs += --no-run-if-empty
lint-golang-sca-xargs += --verbose#+        # Display source path to check

## [INPLACE-EDITS] make lint-golang-sca FIX=1
ifdef FIX
  lint-golang-sca-args += -w
endif

lint-golang-sca:
	find . -name '*.go' -print0 \
	    | xargs $(lint-golang-sca-xargs) gofmt -d -s

help::
	@echo "  lint-golang-sca            Syntax check golang sources"
	@echo "    MODIFIER: FIX=1          Correct problems (gofmt -d -s -w)"

todo ::
	@echo '  Rename sca.mk to source-code-analysis.mk'
	@echo '  lint-golang-sca is a default lint target for repo:voltha-openolt-adapter'
	@echo '  Update logic to support common targets lint-*-{all,mod,src}'
	@echo '  What flag should be used for inplace edits: APPLY=1, FIX=1, UPDATE=1, ??'

$(if $(DEBUG),$(warning LEAVE))

# [EOF]
