such values must be set to the string *true* or *false*. For the corresponding
environment variables, the semantics are a bit different: a set environment
variable means ``true'' (even if set to the empty string), the following
-case-insensitive negative values are considered an error (rather than surprise
-the user): "0", "false", "disable" and "no", and an unset environment variable
-means ``false''. Each boolean environment variable also has a negated form
-starting with *CCACHE_NO*. For example, *CCACHE_COMPRESS* can be set to force
-compression and *CCACHE_NOCOMPRESS* can be set to force no compression.
+case-insensitive negative values are considered an error (rather than
+surprising the user): *0*, *false*, *disable* and *no*, and an unset
+environment variable means ``false''. Each boolean environment variable also
+has a negated form starting with *CCACHE_NO*. For example, *CCACHE_COMPRESS*
+can be set to force compression and *CCACHE_NOCOMPRESS* can be set to force no
+compression.
Configuration settings
- Added support for nvcc compiler options `--compiler-bindir/-ccbin`,
`--output-directory/-odir` and `--libdevice-directory/-ldir`.
-- Boolean configuration settings no longer accept the following
- (case-insensitive) values: "0", "false", "disable" and "no". All other values
- are accepted and taken to mean "true". This is intended to avoid users
- setting eg CCACHE_DISABLE=0 and expecting the cache to be used.
+- Boolean environment variable settings no longer accept the following
+ (case-insensitive) values: `0`, `false`, `disable` and `no`. All other values
+ are accepted and taken to mean "true". This is to stop users from setting
+ e.g. `CCACHE_DISABLE=0` and then expect the cache to be used.
Bug fixes
}
if (from_env_variable && item->parser == parse_bool) {
- // Special rule for boolean settings from the environment:
- // "0", "false", "disable" and "no" (case insensitive) are invalid,
- // and all other values mean true.
+ // Special rule for boolean settings from the environment: "0", "false",
+ // "disable" and "no" (case insensitive) are invalid, and all other values
+ // mean true.
//
- // Previously any value meant true, but this was surprising to
- // users, who might do something like CCACHE_DISABLE=0 and expect
- // ccache to be enabled.
-
- if (!strcmp(value, "0") || !strcasecmp(value, "false") ||
- !strcasecmp(value, "disable") || !strcasecmp(value, "no")) {
+ // Previously any value meant true, but this was surprising to users, who
+ // might do something like CCACHE_DISABLE=0 and expect ccache to be
+ // enabled.
+ if (str_eq(value, "0") || strcasecmp(value, "false") == 0
+ || strcasecmp(value, "disable") == 0 || strcasecmp(value, "no") == 0) {
fatal("invalid boolean environment variable value \"%s\"", value);
}
# -------------------------------------------------------------------------
TEST "Invalid boolean environment configuration options"
- for invalid_val in 0 false FALSE disable no ; do
- CCACHE_DISABLE=$invalid_val $CCACHE $COMPILER --version > /dev/null 2>&1
+ for invalid_val in 0 false FALSE disable DISABLE no NO; do
+ CCACHE_DISABLE=$invalid_val $CCACHE $COMPILER --version >&/dev/null
if [ $? -eq 0 ] ; then
- test_failed "'$invalid_val' should be rejected for boolean env vars"
+ test_failed "boolean env var '$invalid_val' should be rejected"
fi
- CCACHE_NODISABLE=$invalid_val $CCACHE $COMPILER --version > /dev/null 2>&1
+ CCACHE_NODISABLE=$invalid_val $CCACHE $COMPILER --version >&/dev/null
if [ $? -eq 0 ] ; then
- test_failed "'$invalid_val' should be rejected for boolean env vars"
+ test_failed "boolean env var '$invalid_val' should be rejected"
fi
done
}