blob: 6670254f8cb980e2124c728af80d2a9591973db4 [file] [log] [blame]
# -*- makefile -*-
# -----------------------------------------------------------------------
# Copyright 2022-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: 2022-2024 Open Networking Foundation Contributors
# SPDX-License-Identifier: Apache-2.0
# -----------------------------------------------------------------------
# Intent: Defined constants for makefile use
# -----------------------------------------------------------------------
$(if $(DEBUG),$(warning ENTER))
##-------------------##
##---] GLOBALS [---## # export(s) are visible to sub-make calls
##-------------------##
export dot :=.
export null :=#
export comma := $(null),$(null)
export space := $(null) $(null)
export quote-single := $(null)'$(null)#'
export quote-double := $(null)"$(null)#"
## -----------------------------
## Macro definition for tab stop
## Usage:
## o $(info white$(\t)space
## o @echo "white$(tab)space"
## -----------------------------
\t := $(null) $(null)
tab := $(\t)
## -----------------------------------------------
## Macro definition for newline
## Usage:
## - Format output:
## $(info two$(crlf)lines)
## - Generate dynamic makefile rules:
## $(eval mytarget:$(newline)$(tab)echo FOO)
## -----------------------------------------------
define crlf :=
endef
newline := $(crlf)
# ------------------------------------------------------
# [DEBUG] - Define HIDE=<null> to display shell commands
# ------------------------------------------------------
# Target rule definition:
# show:
# <tab>$(HIDE)echo "Display rule when HIDE != '@'
# ------------------------------------------------------
# Usage: make show HIDE=
# ------------------------------------------------------
HIDE ?= @
# -----------------------------------------------------------------------
# Intent: Define a prefix macro for shell commands that will inhibit
# loading user defined environment vars (consistent command use w/o
# potential for per-user tainting of command behavior).
# -----------------------------------------------------------------------
# Target usage:
# mytarget:
# <tab>$(env-clean) ls
# -----------------------------------------------------------------------
env-clean ?= /usr/bin/env --ignore-environment
# -----------------------------------------------------------------------
# Intent: Define convenience xargs macros to shorten target command lines
# -----------------------------------------------------------------------
# Target usage:
# mytarget:
# <tab>$(env-clean) ls
# -----------------------------------------------------------------------
# Usage:
# lint-shell:
# <tab>find . -name '*.sh' -print0 | $(xargs-n1-clean) shellcheck $(args)
# -----------------------------------------------------------------------
xargs-cmd0 := xargs -0 --no-run-if-empty
xargs-cmd := $(xargs-cmd0) -t
xargs-n1 := $(xargs-cmd) -n1
xargs-n1-clean := $(env-clean) $(xargs-n1)
xargs-cmd-clean := $(env-clean) $(xargs-cmd)
## -----------------------------------------------------------------------
## Intent: NOP command for targets whose dependencies do all heavy lifting
## -----------------------------------------------------------------------
## usage: foo bar tans
## <tab>$(nop-command)
## -----------------------------------------------------------------------
nop-cmd := :
## -----------------------------------------------------------------------
## Default shell:
## o set -e enable error checking
## o set -u report undefined errors
## o set -o pipefail propogate shell pipeline failures.
## -----------------------------------------------------------------------
SHELL ?= /bin/bash
have-shell-bash := $(filter bash,$(subst /,$(space),$(SHELL)))
$(if $(have-shell-bash),$(null),\
$(eval export SHELL := bash -euo pipefail))
export SHELL ?= bash -euo pipefail
$(if $(DEBUG),$(warning LEAVE))
# [EOF]