1# 2# Copyright (c) 2024, Arm Limited and Contributors. All rights reserved. 3# 4# SPDX-License-Identifier: BSD-3-Clause 5# 6 7space := 8space := $(space) $(space) 9comma := , 10 11null := � 12 13compat-path = $(subst $(space),$(null),$(1)) 14decompat-path = $(subst $(null), ,$(1)) 15 16absolute-path = $(call decompat-path,$(abspath $(call compat-path,$(1)))) 17real-path = $(call decompat-path,$(realpath $(call compat-path,$(1)))) 18 19file-name = $(call decompat-path,$(notdir $(call compat-path,$(1)))) 20directory-name = $(call decompat-path,$(dir $(call compat-path,$(1)))) 21 22escape-shell = '$(subst ','\'',$(1))' 23 24# 25# The grouped-target symbol. Grouped targets are not supported on versions of 26# GNU Make <= 4.2, which was most recently packaged with Ubuntu 20.04. 27# 28 29& := $(if $(filter grouped-target,$(.FEATURES)),&) 30 31# 32# Upper-case a string value. 33# 34# Parameters: 35# 36# - $(1): The string to upper-case. 37# 38# Example usage: 39# 40# $(call uppercase,HeLlO wOrLd) # "HELLO WORLD" 41# 42 43uppercase = $(shell echo $(call escape-shell,$(1)) | tr '[:lower:]' '[:upper:]') 44 45# 46# Lower-case a string value. 47# 48# Parameters: 49# 50# - $(1): The string to lower-case. 51# 52# Example usage: 53# 54# $(call lowercase,HeLlO wOrLd) # "hello world" 55# 56 57lowercase = $(shell echo $(call escape-shell,$(1)) | tr '[:upper:]' '[:lower:]') 58 59# 60# Determine the "truthiness" of a value. 61# 62# Parameters: 63# 64# - $(1): The value to determine the truthiness of. 65# 66# A value is considered to be falsy if it is: 67# 68# - empty, or 69# - equal to "0", "N", "NO", "F" or "FALSE" after upper-casing. 70# 71# If the value is truthy then the value is returned as-is, otherwise no value 72# is returned. 73# 74# Example usage: 75# 76# truthy := y 77# truthy-bool := $(call bool,$(truthy)) # "y" 78# 79# falsy := n 80# falsy-bool := $(call bool,$(falsy)) # <empty> 81# 82 83bool = $(filter-out 0 n no f false,$(call lowercase,$(1))) 84 85# 86# Determine the "truthiness" of a value, returning 0 or 1. 87# 88# Parameters: 89# 90# - $(1): The value to determine the truthiness of. 91# 92# A value is considered to be falsy if it is: 93# 94# - empty, or 95# - equal to "0", "N", "NO", "F" or "FALSE" after upper-casing. 96# 97# If the value is truthy then the value is returned as-is, otherwise no value 98# is returned. 99# 100# Example usage: 101# 102# truthy := y 103# truthy-bool := $(call bool,$(truthy)) # "1" 104# 105# falsy := n 106# falsy-bool := $(call bool,$(falsy)) # "0" 107# 108 109bool-01 = $(if $(call bool,$(1)),1,0) 110 111# 112# Determine whether a variable is defined or not. 113# 114# Parameters: 115# 116# - $(1): The variable to check. 117# 118# Example usage: 119# 120# xyz-defined := $(call defined,xyz) # <empty> 121# 122# xyz := 123# xyz-defined := $(call defined,xyz) # <non-empty> 124# 125# xyz := hello 126# xyz-defined := $(call defined,xyz) # <non-empty> 127# 128 129defined = $(call bool,$(filter-out undefined,$(origin $(1)))) 130