acrn-hypervisor/misc/config_tools/xforms/config.h.xsl
Junjie Mao 1ea67378f1 xforms: fix incorrect comparison against empty strings
In XSL a string variable can be nul, the empty string or a non-empty
string. While `$var != ''` ensures that `var` is a non-empty string,
`$var = ''` is true only when `var` holds the empty string. In other words,
`$var = ''` and `$var != ''` can be both false if `var` evaluates to nul.

As a result, the config.h/config.mk generating scripts does not use the
given default value if the explicit value is nul.

This patch fixes the incorrect comparison in the XSL scripts that handles
default values, so that the default value behaves as expected.

Tracked-On: #6355
Signed-off-by: Junjie Mao <junjie.mao@intel.com>
2022-01-29 11:54:03 +08:00

83 lines
2.4 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2021 Intel Corporation. All rights reserved. -->
<!-- SPDX-License-Identifier: BSD-3-Clause -->
<xsl:stylesheet
version="1.0"
xmlns:xi="http://www.w3.org/2003/XInclude"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:math="http://exslt.org/math"
xmlns:exslt="http://exslt.org/common"
xmlns:acrn="http://projectacrn.org">
<xsl:include href="lib.xsl" />
<xsl:output method="text" />
<xsl:variable name="integer-suffix" select="'U'" />
<xi:include href="config_common.xsl" xpointer="xpointer(id('config_common')/*)" />
<xsl:template match="/acrn-offline-data">
<xsl:text>#ifndef CONFIG_H&#x0a;</xsl:text>
<xsl:text>#define CONFIG_H&#x0a;</xsl:text>
<xsl:apply-templates select="board-data/acrn-config" />
<xsl:apply-templates select="config-data/acrn-config" />
<xsl:text>#endif&#x0a;</xsl:text>
</xsl:template>
<xsl:template name="entry-by-key-value">
<xsl:param name="prefix" />
<xsl:param name="key" />
<xsl:param name="value" />
<xsl:param name="default" />
<xsl:text>#define </xsl:text>
<xsl:choose>
<xsl:when test="$prefix != ''">
<xsl:value-of select="$prefix" />
</xsl:when>
<xsl:otherwise>
<xsl:text>CONFIG_</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="$key" />
<xsl:text> </xsl:text>
<xsl:choose>
<xsl:when test="$value != ''">
<xsl:value-of select="$value" />
<xsl:text>&#xa;</xsl:text>
</xsl:when>
<xsl:when test="$default != ''">
<xsl:text> </xsl:text>
<xsl:value-of select="$default" />
<xsl:text>&#xa;</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template name="boolean-by-key-value">
<xsl:param name="key" />
<xsl:param name="value" />
<xsl:if test="$value = 'y'">
<xsl:call-template name="entry-by-key-value">
<xsl:with-param name="key" select="$key" />
<xsl:with-param name="value" select="1" />
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="string-by-key-value">
<xsl:param name="key" />
<xsl:param name="value" />
<xsl:call-template name="entry-by-key-value">
<xsl:with-param name="key" select="$key" />
<xsl:with-param name="value" select="concat('&#x22;', $value, '&#x22;')" />
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>