blob: 7668bba1fdd443bbb04f4d800f8597bd8c7304bd [file] [log] [blame]
Joey Armstronga6890342023-06-01 17:07:51 -04001# -*- makefile -*-
2# -----------------------------------------------------------------------
Joey Armstronga3f9aca2024-02-11 11:58:11 -05003# Copyright 2022-2024 Open Networking Foundation (ONF) and the ONF Contributors
Joey Armstronga6890342023-06-01 17:07:51 -04004#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
Joey Armstrongb2b3b1e2023-06-09 12:24:40 -040017# SPDX-FileCopyrightText: 2022-2023 Open Networking Foundation (ONF) and the ONF Contributors
Joey Armstronga6890342023-06-01 17:07:51 -040018# SPDX-License-Identifier: Apache-2.0
19# -----------------------------------------------------------------------
20
21$(if $(DEBUG),$(warning ENTER))
22
23# usage: $(call if-not,false,5)
24if-not = $(info 1=$(1), 2=$(2), 3=$(3))\
25 $(if $(1),$(null),$(2))
26
Joey Armstronga3f9aca2024-02-11 11:58:11 -050027## -----------------------------------------------------------------------
28## Intent: Derive a filesystem path relative to the active makefile.
29## Primary use is loading adjacent tool config files.
30## Immediate evaluation (:=) needed to preserve path context.
31## Note: We could pass in var=MAKEFILE_LIST
32## -----------------------------------------------------------------------
33## Given:
34## scalar Filename to construct a path for
35## Return:
36## scalar Constructed path for the given filename
37## -----------------------------------------------------------------------
38## Usage:
39## groovy-check-conf := $(call path-by-makefile,.groovylintrc.json)
40## groovy-cmd = npm-groovy-lint --config "$(groovy-check-conf)"
41## -----------------------------------------------------------------------
Joey Armstrong7ebfb1f2024-02-29 12:24:08 -050042path-by-makefilepath-by-makefile = $(strip \
Joey Armstronga3f9aca2024-02-11 11:58:11 -050043 $(foreach filename,$(1),\
44 $(foreach makefile,$(lastword $(MAKEFILE_LIST)),\
Joey Armstrong7ebfb1f2024-02-29 12:24:08 -050045 $(foreach makedir,$(dir $(makefile)),\
46 $(makedir)$(filename)\
Joey Armstronga3f9aca2024-02-11 11:58:11 -050047 )\
48 ))\
49)
50
Joey Armstrong7ebfb1f2024-02-29 12:24:08 -050051## -----------------------------------------------------------------------
52## Intent: Improve function usability for path-by-makefilepath-by-makefile
53## -----------------------------------------------------------------------
54## Given:
55## scalar A makefile variable name to define
56## scalar Path within a makefile subdirectory to construct
57## Return:
58## scalar Constructed path for the given filename
59## -----------------------------------------------------------------------
60## Usage:
61## $(call genpath-makefiles,tox-ini,tox.ini)
62## $(info tox-ini = $(tox-ini))
63## -----------------------------------------------------------------------
64genpath-makefiles = $(strip \
65\
66 $(foreach var,$(1),\
67 $(foreach fyl,$(2),\
Joey Armstrong7ebfb1f2024-02-29 12:24:08 -050068 $(eval $(var) := $(call path-by-makefilepath-by-makefile,$(fyl)))\
69 ))\
70 $(var)\
71)
72
Joey Armstronga6890342023-06-01 17:07:51 -040073$(if $(DEBUG),$(warning LEAVE))
74
75# [EOF]