Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

# $NetBSD: directive-elif.mk,v 1.8 2023/06/01 20:56:35 rillig Exp $
#
# Tests for the .elif directive.
#
# Misspellings of the .elif directive are not always detected.  They are only
# detected if the conditional branch directly above it is taken.  In all other
# cases, make skips over the skipped branch as fast as possible, looking only
# at the initial '.' of the line and whether the directive is one of the known
# conditional directives.  All other directives are silently ignored, as they
# could be variable assignments or dependency declarations as well, and
# deciding this would cost time.


# TODO: Implementation


# Misspelling '.elsif' below an .if branch that is not taken.
.if 0
.  info This branch is not taken.
# As of 2020-12-19, the misspelling is not recognized as a conditional
# directive and is thus silently skipped.
#
# Since the .if condition evaluated to false, this whole branch is not taken.
.elsif 0
.  info XXX: This misspelling is not detected.
.  info This branch is not taken.
# Even if the misspelling were detected, the branch would not be taken
# since the condition of the '.elsif' evaluates to false as well.
.endif


# Misspelling '.elsif' below an .if branch that is not taken.
.if 0
.  info This branch is not taken.
# As of 2020-12-19, the misspelling is not recognized as a conditional
# directive and is thus silently skipped.  Since the .if condition evaluated
# to false, this whole branch is not taken.
.elsif 1
.  info XXX: This misspelling is not detected.
# If the misspelling were detected, this branch would be taken.
.endif


# Misspelling '.elsif' below an .if branch that is taken.
.if 1
# This misspelling is in an active branch and is therefore detected.
# expect+1: Unknown directive "elsif"
.elsif 0
# The only thing that make detects here is a misspelled directive, make
# doesn't recognize that it was meant to be a conditional directive.
# Therefore the branch continues here, even though the '.elsif' condition
# evaluates to false.
# expect+1: This branch is taken.
.  info This branch is taken.
.endif


# Misspelling '.elsif' below an .if branch that is taken.
.if 1
# The misspelling is in an active branch and is therefore detected.
# expect+1: Unknown directive "elsif"
.elsif 1
# Since both conditions evaluate to true, this branch is taken no matter
# whether make detects a misspelling or not.
# expect+1: This branch is taken.
.  info This branch is taken.
.endif


# Misspelling '.elsif' in a skipped branch below a branch that was taken.
.if 1
# expect+1: This branch is taken.
.  info This branch is taken.
.elif 0
.  info This branch is not taken.
.elsif 1
.  info XXX: This misspelling is not detected.
.endif


# Misspelling '.elsif' in an .else branch that is not taken.
.if 1
.else
.  info This branch is not taken.
.elsif 1
.  info XXX: This misspelling is not detected.
.endif


# Misspelling '.elsif' in an .else branch that is taken.
.if 0
.else
# expect+1: Unknown directive "elsif"
.elsif 1
# expect+1: This misspelling is detected.
.  info This misspelling is detected.
# expect+1: This branch is taken because of the .else.
.  info This branch is taken because of the .else.
.endif


# Misspellings for .elif in a .elif branch that is not taken.
.if 0
.  info This branch is not taken.
.elif 0				# ok
.  info This branch is not taken.
.elsif 0
.  info XXX: This misspelling is not detected.
.  info This branch is not taken.
.elseif 0
.  info XXX: This misspelling is not detected.
.  info This branch is not taken.
.endif


# expect+1: What happens on misspelling in a skipped branch?
.info What happens on misspelling in a skipped branch?
.if 0
.  info 0-then
.elsif 1
.  info XXX: This misspelling is not detected.
.  info 1-elsif
.elsif 2
.  info XXX: This misspelling is not detected.
.  info 2-elsif
.else
# expect+1: else
.  info else
.endif

# expect+1: What happens on misspelling in a taken branch?
.info What happens on misspelling in a taken branch?
.if 1
# expect+1: 1-then
.  info 1-then
# expect+1: Unknown directive "elsif"
.elsif 1
# expect+1: 1-elsif
.  info 1-elsif
# expect+1: Unknown directive "elsif"
.elsif 2
# expect+1: 2-elsif
.  info 2-elsif
.else
.  info else
.endif

# expect+1: if-less elif
.elif 0

.if 1
.else
# expect+1: warning: extra elif
.elif
.endif

all: