| # -*- makefile -*- |
| # ----------------------------------------------------------------------- |
| # Copyright 2022-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. |
| # ----------------------------------------------------------------------- |
| |
| ##-------------------## |
| ##---] GLOBALS [---## |
| ##-------------------## |
| lint-shell-dflt := $(venv-activate-bin)/shellcheck |
| |
| lint-shell-cmds += $(shell which shellcheck) |
| lint-shell-cmds += $(lint-shell-dflt) |
| lint-shell-cmds += /usr/bin/shellcheck |
| |
| lint-shell-cmd = \ |
| $(strip \ |
| $(firstword \ |
| $(wildcard $(lint-shell-cmds)) \ |
| $(lint-shell-dflt) \ |
| )) |
| lint-shell-cmd := $(venv-activate-bin)/shellcheck |
| |
| ##-------------------## |
| ##---] TARGETS [---## |
| ##-------------------## |
| |
| ## ----------------------------------------------------------------------- |
| ## Intent: Display shellcheck command version string. |
| ## Note: As a side effect, install shellcheck by dependency |
| ## ----------------------------------------------------------------------- |
| ## Verified: v0.8.0 |
| ## ----------------------------------------------------------------------- |
| .PHONY: lint-shellcheck-cmd-version |
| lint-shellcheck-cmd-version : $(lint-shell-cmd) |
| |
| $(HIDE) echo |
| $< --version |
| |
| ## ----------------------------------------------------------------------- |
| ## Intent: Install shellcheck |
| ## ----------------------------------------------------------------------- |
| ## Note: .venv/bin is somewhat odd for an install directory but: |
| ## o avoids existence and conflict problems with ./bin. |
| ## o auto-exclude from consideration by lint and test targets. |
| ## ----------------------------------------------------------------------- |
| ## Verified: v0.8.0 |
| ## ----------------------------------------------------------------------- |
| |
| lint-shell-download = https://github.com/koalaman/shellcheck/releases/download/$(1)/shellcheck-$(1).$(2).x86_64.tar.xz |
| |
| lint-shell-downloads=\ |
| $(call lint-shell-download,v0.9.0,darwin)\ |
| $(call lint-shell-download,v0.9.0,linux) |
| |
| ## ----------------------------------------------------------------------- |
| ## Intent: Retrieve and install the shellcheck command. |
| ## ----------------------------------------------------------------------- |
| ## Cannot pass wildcards to wget, download endpoint must be dynamic. |
| ## Attempts to glob using curl or wget returns "not found". |
| ## wget -r -l1 --no-parent -A.xz \ |
| ## 'https://github.com/koalaman/shellcheck/releases/download/v0.9.0 |
| ## ----------------------------------------------------------------------- |
| |
| .PHONY: lint-shell-install |
| lint-shell-install : $(lint-shell-cmd) |
| $(lint-shell-cmd) : |
| |
| $(call banner-enter,(Target $@)) |
| |
| $(call banner,(shellcheck: Download)) |
| $(HIDE)wget --quiet --unlink $(lint-shell-downloads) |
| $(HIDE)umask 022 && mkdir -p $(dir $@) |
| |
| $(call banner,(shellcheck: Unpack and install)) |
| $(HIDE)case "$(uname -s)" in \ |
| *arwin*) tar Jxf *darwin*.tar.xz -C $(dir $@) --strip-components=1 ;; \ |
| *) tar Jxf *linux*.tar.xz -C $(dir $@) --strip-components=1 ;; \ |
| esac |
| |
| $(HIDE)$(RM) $(notdir $(lint-shell-downloads)) |
| |
| $(call banner-leave,(Target $@)) |
| |
| ## ----------------------------------------------------------------------- |
| ## ----------------------------------------------------------------------- |
| sterile :: |
| $(RM) $(lint-shell-downloads) |
| |
| ## ----------------------------------------------------------------------- |
| ## Intent: Display command help |
| ## ----------------------------------------------------------------------- |
| lint-shell-help :: |
| @printf ' %-30s %s\n' 'lint-shell-install' \ |
| 'Install syntax checking tool shellcheck' |
| @printf ' %-30s %s\n' 'lint-shellcheck-cmd-version' \ |
| 'Library target able to display version of shellcheck command' |
| |
| # [EOF] |