Re: [PATCH v2] kbuild: replace $(if A,A,B) with $(or A,B)

From: Masahiro Yamada
Date: Thu Feb 17 2022 - 21:33:23 EST


On Fri, Feb 11, 2022 at 2:14 PM Masahiro Yamada <masahiroy@xxxxxxxxxx> wrote:
>
> $(or ...) is available since GNU Make 3.81, and useful to shorten the
> code in some places.
>
> Covert as follows:
>
> $(if A,A,B) --> $(or A,B)
>
> This patch also converts:
>
> $(if A, A, B) --> $(or A, B)
>
> Strictly speaking, the latter is not an equivalent conversion because
> spaces after commas remain; if A is not empty, $(if A, A, B) expands
> to " A", while $(or A, B) expands to "A".
>
> Anyway, preceding spaces are not significant in the code hunks I touched.
>
> Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx>
> Reviewed-by: Nicolas Schier <nicolas@xxxxxxxxx>
> ---

Applied to linux-kbuild.



> Changes in v2:
> - Fix misconversion in tools/lib/perf/Makefile
> - Remove spaces before the stray backslash in tools/lib/bpf/Makefile
> - Mention the presence of preceding spaces is not important this case
>
> Makefile | 8 ++++----
> scripts/Makefile.build | 3 +--
> scripts/Makefile.clean | 2 +-
> scripts/Makefile.lib | 4 ++--
> tools/bpf/bpftool/Makefile | 4 ++--
> tools/build/Makefile | 2 +-
> tools/counter/Makefile | 2 +-
> tools/gpio/Makefile | 2 +-
> tools/hv/Makefile | 2 +-
> tools/iio/Makefile | 2 +-
> tools/lib/api/Makefile | 2 +-
> tools/lib/bpf/Makefile | 2 +-
> tools/lib/perf/Makefile | 2 +-
> tools/lib/subcmd/Makefile | 2 +-
> tools/objtool/Makefile | 2 +-
> tools/pci/Makefile | 2 +-
> tools/perf/Makefile.perf | 4 ++--
> tools/power/x86/intel-speed-select/Makefile | 2 +-
> tools/scripts/utilities.mak | 2 +-
> tools/spi/Makefile | 6 +++---
> tools/tracing/rtla/Makefile | 2 +-
> tools/usb/Makefile | 2 +-
> 22 files changed, 30 insertions(+), 31 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 402121aca40a..a700edb54939 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1240,8 +1240,8 @@ define filechk_version.h
> echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL)
> endef
>
> -$(version_h): PATCHLEVEL := $(if $(PATCHLEVEL), $(PATCHLEVEL), 0)
> -$(version_h): SUBLEVEL := $(if $(SUBLEVEL), $(SUBLEVEL), 0)
> +$(version_h): PATCHLEVEL := $(or $(PATCHLEVEL), 0)
> +$(version_h): SUBLEVEL := $(or $(SUBLEVEL), 0)
> $(version_h): FORCE
> $(call filechk,version.h)
>
> @@ -1624,7 +1624,7 @@ help:
> @$(MAKE) -f $(srctree)/Documentation/Makefile dochelp
> @echo ''
> @echo 'Architecture specific targets ($(SRCARCH)):'
> - @$(if $(archhelp),$(archhelp),\
> + @$(or $(archhelp),\
> echo ' No architecture specific help defined for $(SRCARCH)')
> @echo ''
> @$(if $(boards), \
> @@ -1841,7 +1841,7 @@ $(clean-dirs):
>
> clean: $(clean-dirs)
> $(call cmd,rmfiles)
> - @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
> + @find $(or $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
> \( -name '*.[aios]' -o -name '*.ko' -o -name '.*.cmd' \
> -o -name '*.ko.*' \
> -o -name '*.dtb' -o -name '*.dtbo' -o -name '*.dtb.S' -o -name '*.dt.yaml' \
> diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> index a4b89b757287..7e177d0ee02d 100644
> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -40,8 +40,7 @@ include $(srctree)/scripts/Makefile.compiler
>
> # The filename Kbuild has precedence over Makefile
> kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
> -kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)
> -include $(kbuild-file)
> +include $(or $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Makefile)
>
> include $(srctree)/scripts/Makefile.lib
>
> diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
> index fd6175322470..74cb1c5c3658 100644
> --- a/scripts/Makefile.clean
> +++ b/scripts/Makefile.clean
> @@ -12,7 +12,7 @@ include $(srctree)/scripts/Kbuild.include
>
> # The filename Kbuild has precedence over Makefile
> kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
> -include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)
> +include $(or $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Makefile)
>
> # Figure out what we need to build from the various variables
> # ==========================================================================
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index 40735a3adb54..49377d2c2d20 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -111,7 +111,7 @@ subdir-ym := $(addprefix $(obj)/,$(subdir-ym))
> modname-multi = $(sort $(foreach m,$(multi-obj-ym),\
> $(if $(filter $*.o, $(call suffix-search, $m, .o, -objs -y -m)),$(m:.o=))))
>
> -__modname = $(if $(modname-multi),$(modname-multi),$(basetarget))
> +__modname = $(or $(modname-multi),$(basetarget))
>
> modname = $(subst $(space),:,$(__modname))
> modfile = $(addprefix $(obj)/,$(__modname))
> @@ -434,7 +434,7 @@ MKIMAGE := $(srctree)/scripts/mkuboot.sh
> # SRCARCH just happens to match slightly more than ARCH (on sparc), so reduces
> # the number of overrides in arch makefiles
> UIMAGE_ARCH ?= $(SRCARCH)
> -UIMAGE_COMPRESSION ?= $(if $(2),$(2),none)
> +UIMAGE_COMPRESSION ?= $(or $(2),none)
> UIMAGE_OPTS-y ?=
> UIMAGE_TYPE ?= kernel
> UIMAGE_LOADADDR ?= arch_must_set_this
> diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile
> index 83369f55df61..ebd21a609910 100644
> --- a/tools/bpf/bpftool/Makefile
> +++ b/tools/bpf/bpftool/Makefile
> @@ -78,7 +78,7 @@ CFLAGS += -O2
> CFLAGS += -W -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers
> CFLAGS += $(filter-out -Wswitch-enum -Wnested-externs,$(EXTRA_WARNINGS))
> CFLAGS += -DPACKAGE='"bpftool"' -D__EXPORTED_HEADERS__ \
> - -I$(if $(OUTPUT),$(OUTPUT),.) \
> + -I$(or $(OUTPUT),.) \
> -I$(LIBBPF_INCLUDE) \
> -I$(srctree)/kernel/bpf/ \
> -I$(srctree)/tools/include \
> @@ -186,7 +186,7 @@ endif
>
> $(OUTPUT)%.bpf.o: skeleton/%.bpf.c $(OUTPUT)vmlinux.h $(LIBBPF_BOOTSTRAP)
> $(QUIET_CLANG)$(CLANG) \
> - -I$(if $(OUTPUT),$(OUTPUT),.) \
> + -I$(or $(OUTPUT),.) \
> -I$(srctree)/tools/include/uapi/ \
> -I$(LIBBPF_BOOTSTRAP_INCLUDE) \
> -g -O2 -Wall -target bpf -c $< -o $@
> diff --git a/tools/build/Makefile b/tools/build/Makefile
> index 6f11e6fc9ffe..17cdf01e29a0 100644
> --- a/tools/build/Makefile
> +++ b/tools/build/Makefile
> @@ -36,7 +36,7 @@ TMP_O := $(if $(OUTPUT),$(OUTPUT)feature/,./)
>
> clean:
> $(call QUIET_CLEAN, fixdep)
> - $(Q)find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
> + $(Q)find $(or $(OUTPUT),.) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
> $(Q)rm -f $(OUTPUT)fixdep
> $(call QUIET_CLEAN, feature-detect)
> ifneq ($(wildcard $(TMP_O)),)
> diff --git a/tools/counter/Makefile b/tools/counter/Makefile
> index 5ebc195fd9c0..8843f0fa6119 100644
> --- a/tools/counter/Makefile
> +++ b/tools/counter/Makefile
> @@ -40,7 +40,7 @@ $(OUTPUT)counter_example: $(COUNTER_EXAMPLE)
> clean:
> rm -f $(ALL_PROGRAMS)
> rm -rf $(OUTPUT)include/linux/counter.h
> - find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete
> + find $(or $(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete
>
> install: $(ALL_PROGRAMS)
> install -d -m 755 $(DESTDIR)$(bindir); \
> diff --git a/tools/gpio/Makefile b/tools/gpio/Makefile
> index 440434027557..d29c9c49e251 100644
> --- a/tools/gpio/Makefile
> +++ b/tools/gpio/Makefile
> @@ -78,7 +78,7 @@ $(OUTPUT)gpio-watch: $(GPIO_WATCH_IN)
> clean:
> rm -f $(ALL_PROGRAMS)
> rm -f $(OUTPUT)include/linux/gpio.h
> - find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete
> + find $(or $(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete
>
> install: $(ALL_PROGRAMS)
> install -d -m 755 $(DESTDIR)$(bindir); \
> diff --git a/tools/hv/Makefile b/tools/hv/Makefile
> index b57143d9459c..fe770e679ae8 100644
> --- a/tools/hv/Makefile
> +++ b/tools/hv/Makefile
> @@ -47,7 +47,7 @@ $(OUTPUT)hv_fcopy_daemon: $(HV_FCOPY_DAEMON_IN)
>
> clean:
> rm -f $(ALL_PROGRAMS)
> - find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete
> + find $(or $(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete
>
> install: $(ALL_PROGRAMS)
> install -d -m 755 $(DESTDIR)$(sbindir); \
> diff --git a/tools/iio/Makefile b/tools/iio/Makefile
> index 5d12ac4e7f8f..fa720f062229 100644
> --- a/tools/iio/Makefile
> +++ b/tools/iio/Makefile
> @@ -58,7 +58,7 @@ $(OUTPUT)iio_generic_buffer: $(IIO_GENERIC_BUFFER_IN)
> clean:
> rm -f $(ALL_PROGRAMS)
> rm -rf $(OUTPUT)include/linux/iio
> - find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete
> + find $(or $(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete
>
> install: $(ALL_PROGRAMS)
> install -d -m 755 $(DESTDIR)$(bindir); \
> diff --git a/tools/lib/api/Makefile b/tools/lib/api/Makefile
> index a13e9c7f1fc5..e21e1b40b525 100644
> --- a/tools/lib/api/Makefile
> +++ b/tools/lib/api/Makefile
> @@ -60,7 +60,7 @@ $(LIBFILE): $(API_IN)
>
> clean:
> $(call QUIET_CLEAN, libapi) $(RM) $(LIBFILE); \
> - find $(if $(OUTPUT),$(OUTPUT),.) -name \*.o -or -name \*.o.cmd -or -name \*.o.d | xargs $(RM)
> + find $(or $(OUTPUT),.) -name \*.o -or -name \*.o.cmd -or -name \*.o.d | xargs $(RM)
>
> FORCE:
>
> diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile
> index f947b61b2107..36b85aea0393 100644
> --- a/tools/lib/bpf/Makefile
> +++ b/tools/lib/bpf/Makefile
> @@ -60,7 +60,7 @@ ifndef VERBOSE
> VERBOSE = 0
> endif
>
> -INCLUDES = -I$(if $(OUTPUT),$(OUTPUT),.) \
> +INCLUDES = -I$(or $(OUTPUT),.) \
> -I$(srctree)/tools/include -I$(srctree)/tools/include/uapi
>
> export prefix libdir src obj
> diff --git a/tools/lib/perf/Makefile b/tools/lib/perf/Makefile
> index 08fe6e3c4089..21df023a2103 100644
> --- a/tools/lib/perf/Makefile
> +++ b/tools/lib/perf/Makefile
> @@ -153,7 +153,7 @@ $(TESTS_STATIC): $(TESTS_IN) $(LIBPERF_A) $(LIBAPI)
> $(QUIET_LINK)$(CC) -o $@ $^
>
> $(TESTS_SHARED): $(TESTS_IN) $(LIBAPI)
> - $(QUIET_LINK)$(CC) -o $@ -L$(if $(OUTPUT),$(OUTPUT),.) $^ -lperf
> + $(QUIET_LINK)$(CC) -o $@ -L$(or $(OUTPUT),.) $^ -lperf
>
> make-tests: libs $(TESTS_SHARED) $(TESTS_STATIC)
>
> diff --git a/tools/lib/subcmd/Makefile b/tools/lib/subcmd/Makefile
> index 1c777a72bb39..8f1a09cdfd17 100644
> --- a/tools/lib/subcmd/Makefile
> +++ b/tools/lib/subcmd/Makefile
> @@ -63,7 +63,7 @@ $(LIBFILE): $(SUBCMD_IN)
>
> clean:
> $(call QUIET_CLEAN, libsubcmd) $(RM) $(LIBFILE); \
> - find $(if $(OUTPUT),$(OUTPUT),.) -name \*.o -or -name \*.o.cmd -or -name \*.o.d | xargs $(RM)
> + find $(or $(OUTPUT),.) -name \*.o -or -name \*.o.cmd -or -name \*.o.d | xargs $(RM)
>
> FORCE:
>
> diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile
> index 92ce4fce7bc7..0dbd397f319d 100644
> --- a/tools/objtool/Makefile
> +++ b/tools/objtool/Makefile
> @@ -13,7 +13,7 @@ srctree := $(patsubst %/,%,$(dir $(srctree)))
> endif
>
> SUBCMD_SRCDIR = $(srctree)/tools/lib/subcmd/
> -LIBSUBCMD_OUTPUT = $(if $(OUTPUT),$(OUTPUT),$(CURDIR)/)
> +LIBSUBCMD_OUTPUT = $(or $(OUTPUT),$(CURDIR)/)
> LIBSUBCMD = $(LIBSUBCMD_OUTPUT)libsubcmd.a
>
> OBJTOOL := $(OUTPUT)objtool
> diff --git a/tools/pci/Makefile b/tools/pci/Makefile
> index 4b95a5176355..57744778b518 100644
> --- a/tools/pci/Makefile
> +++ b/tools/pci/Makefile
> @@ -42,7 +42,7 @@ $(OUTPUT)pcitest: $(PCITEST_IN)
> clean:
> rm -f $(ALL_PROGRAMS)
> rm -rf $(OUTPUT)include/
> - find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete
> + find $(or $(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete
>
> install: $(ALL_PROGRAMS)
> install -d -m 755 $(DESTDIR)$(bindir); \
> diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
> index ac861e42c8f7..8583d18a3739 100644
> --- a/tools/perf/Makefile.perf
> +++ b/tools/perf/Makefile.perf
> @@ -724,7 +724,7 @@ endif
> # get relative building directory (to $(OUTPUT))
> # and '.' if it's $(OUTPUT) itself
> __build-dir = $(subst $(OUTPUT),,$(dir $@))
> -build-dir = $(if $(__build-dir),$(__build-dir),.)
> +build-dir = $(or $(__build-dir),.)
>
> prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h archheaders $(drm_ioctl_array) \
> $(fadvise_advice_array) \
> @@ -1090,7 +1090,7 @@ bpf-skel-clean:
>
> clean:: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clean $(LIBPERF)-clean fixdep-clean python-clean bpf-skel-clean
> $(call QUIET_CLEAN, core-objs) $(RM) $(LIBPERF_A) $(OUTPUT)perf-archive $(OUTPUT)perf-with-kcore $(OUTPUT)perf-iostat $(LANG_BINDINGS)
> - $(Q)find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
> + $(Q)find $(or $(OUTPUT),.) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
> $(Q)$(RM) $(OUTPUT).config-detected
> $(call QUIET_CLEAN, core-progs) $(RM) $(ALL_PROGRAMS) perf perf-read-vdso32 perf-read-vdsox32 $(OUTPUT)pmu-events/jevents $(OUTPUT)$(LIBJVMTI).so
> $(call QUIET_CLEAN, core-gen) $(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope* $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)FEATURE-DUMP $(OUTPUT)util/*-bison* $(OUTPUT)util/*-flex* \
> diff --git a/tools/power/x86/intel-speed-select/Makefile b/tools/power/x86/intel-speed-select/Makefile
> index 12c6939dca2a..7eaa517cd403 100644
> --- a/tools/power/x86/intel-speed-select/Makefile
> +++ b/tools/power/x86/intel-speed-select/Makefile
> @@ -43,7 +43,7 @@ $(OUTPUT)intel-speed-select: $(ISST_IN)
> clean:
> rm -f $(ALL_PROGRAMS)
> rm -rf $(OUTPUT)include/linux/isst_if.h
> - find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete
> + find $(or $(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete
>
> install: $(ALL_PROGRAMS)
> install -d -m 755 $(DESTDIR)$(bindir); \
> diff --git a/tools/scripts/utilities.mak b/tools/scripts/utilities.mak
> index c16ce833079c..172e47273b5d 100644
> --- a/tools/scripts/utilities.mak
> +++ b/tools/scripts/utilities.mak
> @@ -175,5 +175,5 @@ _ge-abspath = $(if $(is-executable),$(1))
> define get-executable-or-default
> $(if $($(1)),$(call _ge_attempt,$($(1)),$(1)),$(call _ge_attempt,$(2)))
> endef
> -_ge_attempt = $(if $(get-executable),$(get-executable),$(call _gea_err,$(2)))
> +_ge_attempt = $(or $(get-executable),$(call _gea_err,$(2)))
> _gea_err = $(if $(1),$(error Please set '$(1)' appropriately))
> diff --git a/tools/spi/Makefile b/tools/spi/Makefile
> index 0aa6dbd31fb8..7fccd245a535 100644
> --- a/tools/spi/Makefile
> +++ b/tools/spi/Makefile
> @@ -53,9 +53,9 @@ $(OUTPUT)spidev_fdx: $(SPIDEV_FDX_IN)
> clean:
> rm -f $(ALL_PROGRAMS)
> rm -rf $(OUTPUT)include/
> - find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete
> - find $(if $(OUTPUT),$(OUTPUT),.) -name '\.*.o.d' -delete
> - find $(if $(OUTPUT),$(OUTPUT),.) -name '\.*.o.cmd' -delete
> + find $(or $(OUTPUT),.) -name '*.o' -delete
> + find $(or $(OUTPUT),.) -name '\.*.o.d' -delete
> + find $(or $(OUTPUT),.) -name '\.*.o.cmd' -delete
>
> install: $(ALL_PROGRAMS)
> install -d -m 755 $(DESTDIR)$(bindir); \
> diff --git a/tools/tracing/rtla/Makefile b/tools/tracing/rtla/Makefile
> index 7c39728d08de..3097f132f096 100644
> --- a/tools/tracing/rtla/Makefile
> +++ b/tools/tracing/rtla/Makefile
> @@ -45,7 +45,7 @@ DATADIR := /usr/share
> DOCDIR := $(DATADIR)/doc
> MANDIR := $(DATADIR)/man
> LICDIR := $(DATADIR)/licenses
> -SRCTREE := $(if $(BUILD_SRC),$(BUILD_SRC),$(CURDIR))
> +SRCTREE := $(or $(BUILD_SRC),$(CURDIR))
>
> # If running from the tarball, man pages are stored in the Documentation
> # dir. If running from the kernel source, man pages are stored in
> diff --git a/tools/usb/Makefile b/tools/usb/Makefile
> index 1b128e551b2e..c6235667dd46 100644
> --- a/tools/usb/Makefile
> +++ b/tools/usb/Makefile
> @@ -38,7 +38,7 @@ $(OUTPUT)ffs-test: $(FFS_TEST_IN)
>
> clean:
> rm -f $(ALL_PROGRAMS)
> - find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete -o -name '\.*.o.cmd' -delete
> + find $(or $(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete -o -name '\.*.o.cmd' -delete
>
> install: $(ALL_PROGRAMS)
> install -d -m 755 $(DESTDIR)$(bindir); \
> --
> 2.32.0
>


--
Best Regards
Masahiro Yamada