MINOR: config: add predicate "feature" to detect certain built-in features

The "feature(name)" predicate will return true if <name> corresponds to
a name listed after a '+' in the features list, that is it was enabled at
build time with USE_<name>=1. Typical use cases will include OPENSSL, LUA
and LINUX_SPLICE. But maybe it will also be convenient to use with optional
addons such as PROMEX and the device detection modules to help keeping the
same configs across various deployments.
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 9daac06..15e4ad8 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -137,6 +137,7 @@
 enum cond_predicate {
 	CFG_PRED_NONE,            // none
 	CFG_PRED_DEFINED,         // "defined"
+	CFG_PRED_FEATURE,         // "feature"
 	CFG_PRED_STREQ,           // "streq"
 	CFG_PRED_STRNEQ,          // "strneq"
 };
@@ -150,6 +151,7 @@
 /* supported condition predicates */
 const struct cond_pred_kw cond_predicates[] = {
 	{ "defined",          CFG_PRED_DEFINED,         ARG1(1, STR)         },
+	{ "feature",          CFG_PRED_FEATURE,         ARG1(1, STR)         },
 	{ "streq",            CFG_PRED_STREQ,           ARG2(2, STR, STR)    },
 	{ "strneq",           CFG_PRED_STRNEQ,          ARG2(2, STR, STR)    },
 	{ NULL, CFG_PRED_NONE, 0 }
@@ -1722,6 +1724,27 @@
 			ret = getenv(argp[0].data.str.area) != NULL;
 			goto done;
 
+		case CFG_PRED_FEATURE: { // checks if the arg matches an enabled feature
+			const char *p;
+
+			for (p = build_features; (p = strstr(p, argp[0].data.str.area)); p++) {
+				if ((p[argp[0].data.str.data] == ' ' || p[argp[0].data.str.data] == 0) &&
+				    p > build_features) {
+					if (*(p-1) == '+') { // "+OPENSSL"
+						ret = 1;
+						goto done;
+					}
+					else if (*(p-1) == '-') { // "-OPENSSL"
+						ret = 0;
+						goto done;
+					}
+					/* it was a sub-word, let's restart from next place */
+				}
+			}
+			/* not found */
+			ret = 0;
+			goto done;
+		}
 		case CFG_PRED_STREQ:    // checks if the two arg are equal
 			ret = strcmp(argp[0].data.str.area, argp[1].data.str.area) == 0;
 			goto done;