# HG changeset patch
# User Mike Becker
# Date 1764433863 -3600
# Node ID f4f11f755ee78190367f13be0b271a2d75c7c391
# Parent 099448bcc943cb603e0d9a9151b7e8dc3008f8e8
add full spectrum config var configurations
resolves #680
resolves #740
resolves #741
resolves #742
diff -r 099448bcc943 -r f4f11f755ee7 src/main/java/de/unixwork/uwproj/AbstractOption.java
--- a/src/main/java/de/unixwork/uwproj/AbstractOption.java Sat Nov 29 13:50:15 2025 +0100
+++ b/src/main/java/de/unixwork/uwproj/AbstractOption.java Sat Nov 29 17:31:03 2025 +0100
@@ -1,11 +1,19 @@
package de.unixwork.uwproj;
public abstract class AbstractOption {
- protected final String arg;
+ protected String arg = "";
protected String desc = "";
- public AbstractOption(String arg) {
- this.arg = arg;
+ public AbstractOption() {
+ }
+
+ /**
+ * Indicates whether the option can be overridden by command line arguments.
+ *
+ * @return {@code true} if the option can be overridden, {@code false} otherwise
+ */
+ public final boolean isOverridable() {
+ return !arg.isEmpty();
}
/**
@@ -14,7 +22,9 @@
* @return the argument name
* @see #getHelpTextArg()
*/
- public abstract String getArg();
+ public final String getArg() {
+ return arg;
+ }
/**
* The display text for the argument.
@@ -34,7 +44,9 @@
* @return the description without any formatting
* @see #getHelpText()
*/
- public abstract String getDesc();
+ public final String getDesc() {
+ return desc;
+ }
/**
* The internal variable name for the option.
diff -r 099448bcc943 -r f4f11f755ee7 src/main/java/de/unixwork/uwproj/Config.java
--- a/src/main/java/de/unixwork/uwproj/Config.java Sat Nov 29 13:50:15 2025 +0100
+++ b/src/main/java/de/unixwork/uwproj/Config.java Sat Nov 29 17:31:03 2025 +0100
@@ -18,11 +18,21 @@
platform = element.getAttribute("platform");
not = element.getAttribute("not");
- Util.getChildElements(element).forEach(elm -> {
- if (elm.getNodeName().equals("var")) {
- vars.add(new ConfigVar(elm));
+ Util.getChildElements(element).forEach(elm ->
+ vars.add(new ConfigVar(elm))
+ );
+
+ // special case: prefix is requested, but exec_prefix is not
+ // insert exec_prefix default directly after the prefix
+ if (vars.stream().noneMatch(v -> v.getVarName().equals("exec_prefix"))) {
+ for (var iter = vars.listIterator(); iter.hasNext();) {
+ final var v = iter.next();
+ if (v.getVarName().equals("prefix")) {
+ iter.add(new ConfigVar("exec_prefix"));
+ break;
+ }
}
- });
+ }
}
diff -r 099448bcc943 -r f4f11f755ee7 src/main/java/de/unixwork/uwproj/ConfigVar.java
--- a/src/main/java/de/unixwork/uwproj/ConfigVar.java Sat Nov 29 13:50:15 2025 +0100
+++ b/src/main/java/de/unixwork/uwproj/ConfigVar.java Sat Nov 29 17:31:03 2025 +0100
@@ -2,34 +2,115 @@
import org.w3c.dom.Element;
-public final class ConfigVar {
+public final class ConfigVar extends AbstractOption {
private final String varName;
private final String value;
private final boolean exec;
+ public ConfigVar(String varName) {
+ this.varName = varName;
+ desc = getDefaultHelpText(varName);
+ arg = varName.toLowerCase().replace('_', '-');
+ value = "";
+ exec = false;
+ }
+
public ConfigVar(Element e) {
- this(e, false);
+ this(e, e.getNodeName().replace('-', '_'));
}
- public ConfigVar(Element e, boolean varNameIsElemName) {
- if (varNameIsElemName) {
- // take the node name literally and don't apply shId()
- varName = e.getNodeName().toUpperCase();
+ public ConfigVar(Element e, String defaultVarName) {
+ super();
+ varName = Util.getAttrOrDefault(e, "name", defaultVarName);
+ desc = Util.getAttrOrDefault(e, "option-help", getDefaultHelpText(varName));
+ if (desc.isEmpty()) {
+ // no help text, add an option only when requested
+ arg = e.getAttribute("option");
} else {
- varName = e.getAttribute("name");
+ // there is a help text, generate an option if none is specified
+ arg = Util.getAttrOrDefault(e, "option", varName.toLowerCase().replace('_', '-'));
}
- value = Util.getContent(e);
+
+ if (e.hasChildNodes()) {
+ value = Util.getContent(e);
+ } else if (arg.equals("prefix")) {
+ // special treatment for prefix
+ value = "/usr";
+ } else {
+ value = "";
+ }
exec = Boolean.parseBoolean(e.getAttribute("exec"));
+
+ if (exec) {
+ desc = desc.replace("%default", String.format("{{%s}}", value));
+ } else {
+ desc = desc.replace("%default", value);
+ }
}
+ /**
+ * A set of default help texts for standard config variables.
+ *
+ * Returns an empty string for custom config variables.
+ *
+ * @param varName the variable name
+ * @return the default help text
+ */
+ private static String getDefaultHelpText(String varName) {
+ return switch (varName) {
+ case "prefix" -> "path prefix for architecture-independent files [%default]";
+ case "exec_prefix" -> "path prefix for architecture-dependent files [PREFIX]";
+ case "bindir" -> "user executables [EPREFIX/bin]";
+ case "sbindir" -> "system admin executables [EPREFIX/sbin]";
+ case "libexecdir" -> "program executables [EPREFIX/libexec]";
+ case "sysconfdir" -> "system configuration files [PREFIX/etc]";
+ case "sharedstatedir" -> "modifiable architecture-independent data [PREFIX/com]";
+ case "localstatedir" -> "modifiable single-machine data [PREFIX/var]";
+ case "runstatedir" -> "run-time variable data [LOCALSTATEDIR/run]";
+ case "libdir" -> "object code libraries [EPREFIX/lib]";
+ case "includedir" -> "C header files [PREFIX/include]";
+ case "datarootdir" -> "read-only architecture-independent data root [PREFIX/share]";
+ case "datadir" -> "read-only architecture-independent data [DATAROOTDIR]";
+ case "infodir" -> "info documentation [DATAROOTDIR/info]";
+ case "mandir" -> "man documentation [DATAROOTDIR/man]";
+ case "localedir" -> "locale-dependent data [DATAROOTDIR/locale]";
+ default -> "";
+ };
+ }
+
+ /**
+ * The name of the variable where the value will be stored.
+ *
+ * This is also the name of the variable that shall be added to the make config.
+ *
+ * @return the variable name
+ */
+ @Override
public String getVarName() {
return varName;
}
+ @Override
+ public String getHelpTextArg() {
+ return "--" + arg;
+ }
+
+ /**
+ * The value with which this variable shall be initialized.
+ *
+ * If {@link #isExec()} returns {@code true}, this value is used as the command to execute.
+ *
+ * @return the initial value for this variable
+ */
public String getValue() {
return value;
}
+ /**
+ * Indicates whether the value is a command to execute.
+ *
+ * @return {@code true} if the value is a command, {@code false} otherwise.
+ */
public boolean isExec() {
return exec;
}
diff -r 099448bcc943 -r f4f11f755ee7 src/main/java/de/unixwork/uwproj/Dependency.java
--- a/src/main/java/de/unixwork/uwproj/Dependency.java Sat Nov 29 13:50:15 2025 +0100
+++ b/src/main/java/de/unixwork/uwproj/Dependency.java Sat Nov 29 17:31:03 2025 +0100
@@ -31,7 +31,8 @@
Util.getChildElements(element).forEach(elm -> {
switch (elm.getNodeName()) {
- case "cflags", "cxxflags", "ldflags" -> flags.add(new ConfigVar(elm, true));
+ // TODO: instead of re-using ConfigVar, we should add a Flags type
+ case "cflags", "cxxflags", "ldflags" -> flags.add(new ConfigVar(elm, elm.getNodeName().toUpperCase()));
case "pkgconfig" -> pkgconfig.add(new PkgConfigPackage(elm));
case "test" -> tests.add(Util.getContent(elm));
case "make" -> make.add(Util.getContent(elm));
@@ -41,8 +42,8 @@
}
/**
- * Returns the ID of this dependency, if it has a name.
- * @return the ID that can be used for shell scripts - empty if dependency has not a name
+ * Returns the ID of this dependency if it has a name.
+ * @return the ID that can be used for shell scripts - empty if the dependency has not a name
*/
public String getId() {
return id;
diff -r 099448bcc943 -r f4f11f755ee7 src/main/java/de/unixwork/uwproj/Feature.java
--- a/src/main/java/de/unixwork/uwproj/Feature.java Sat Nov 29 13:50:15 2025 +0100
+++ b/src/main/java/de/unixwork/uwproj/Feature.java Sat Nov 29 17:31:03 2025 +0100
@@ -13,7 +13,7 @@
private final TargetData disabled = new TargetData();
public Feature(Element e) {
- super(Util.getAttrOrDefault(e, "arg", e.getAttribute("name")));
+ arg = Util.getAttrOrDefault(e, "arg", e.getAttribute("name"));
name = e.getAttribute("name");
auto = Boolean.parseBoolean(e.getAttribute("default"));
targetData = new TargetData(e);
@@ -54,14 +54,6 @@
return name;
}
- public String getArg() {
- return arg;
- }
-
- public String getDesc() {
- return desc;
- }
-
public boolean isAuto() {
return auto;
}
diff -r 099448bcc943 -r f4f11f755ee7 src/main/java/de/unixwork/uwproj/Main.java
--- a/src/main/java/de/unixwork/uwproj/Main.java Sat Nov 29 13:50:15 2025 +0100
+++ b/src/main/java/de/unixwork/uwproj/Main.java Sat Nov 29 17:31:03 2025 +0100
@@ -70,6 +70,7 @@
context.put("features", project.getFeatures());
context.put("project", project);
context.put("config", project.getConfig());
+ context.put("vars", project.getVars());
context.put("languages", project.getLang());
new VelocityEngine().getTemplate(tplFileName).merge(context, out);
}
diff -r 099448bcc943 -r f4f11f755ee7 src/main/java/de/unixwork/uwproj/Option.java
--- a/src/main/java/de/unixwork/uwproj/Option.java Sat Nov 29 13:50:15 2025 +0100
+++ b/src/main/java/de/unixwork/uwproj/Option.java Sat Nov 29 17:31:03 2025 +0100
@@ -13,7 +13,7 @@
private final LinkedList defaults = new LinkedList<>();
public Option(Element element) {
- super(element.getAttribute("arg"));
+ arg = element.getAttribute("arg");
Util.getChildElements(element).forEach(elm -> {
switch (elm.getNodeName()) {
case "desc" -> desc = Util.getContent(elm);
@@ -28,16 +28,6 @@
}
@Override
- public String getDesc() {
- return desc;
- }
-
- @Override
- public String getArg() {
- return arg;
- }
-
- @Override
public String getHelpTextArg() {
return "--" + arg + "=" + getValuesString();
}
diff -r 099448bcc943 -r f4f11f755ee7 src/main/java/de/unixwork/uwproj/Project.java
--- a/src/main/java/de/unixwork/uwproj/Project.java Sat Nov 29 13:50:15 2025 +0100
+++ b/src/main/java/de/unixwork/uwproj/Project.java Sat Nov 29 17:31:03 2025 +0100
@@ -12,6 +12,8 @@
private final List features = new LinkedList<>();
private final List configList = new LinkedList<>();
+ private final Set configOptions = new HashSet<>();
+ private final List vars = new LinkedList<>();
private final Set lang = new HashSet<>();
@@ -45,6 +47,15 @@
// check if some targets want all named dependencies
targets.stream().filter(Target::wantsAllDependencies)
.forEach(t -> t.replaceAllDependencies(namedDependencies.keySet()));
+
+ // collect and de-duplicate config options
+ configList.forEach(config -> {
+ config.getVars().forEach(configVar -> {
+ if (configOptions.add(configVar.getArg())) {
+ vars.add(configVar);
+ }
+ });
+ });
}
public List getNamedDependencies() {
@@ -74,6 +85,10 @@
public List getConfig() {
return configList;
}
+
+ public List getVars() {
+ return vars;
+ }
public Collection getLang() {
return lang;
diff -r 099448bcc943 -r f4f11f755ee7 src/main/java/de/unixwork/uwproj/Util.java
--- a/src/main/java/de/unixwork/uwproj/Util.java Sat Nov 29 13:50:15 2025 +0100
+++ b/src/main/java/de/unixwork/uwproj/Util.java Sat Nov 29 17:31:03 2025 +0100
@@ -31,7 +31,7 @@
*/
public static String getAttrOrDefault(Element elm, String attr, String def) {
final var v = elm.getAttribute(attr);
- return v.isBlank() ? def : v;
+ return v.isBlank() ? def : v.trim();
}
/**
diff -r 099448bcc943 -r f4f11f755ee7 src/main/resources/make/configure.vm
--- a/src/main/resources/make/configure.vm Sat Nov 29 13:50:15 2025 +0100
+++ b/src/main/resources/make/configure.vm Sat Nov 29 17:31:03 2025 +0100
@@ -86,27 +86,30 @@
printhelp()
{
echo "Usage: $0 [OPTIONS]..."
- cat << __EOF__
-Installation directories:
- --prefix=PREFIX path prefix for architecture-independent files
- [${D}prefix]
- --exec-prefix=EPREFIX path prefix for architecture-dependent files
- [PREFIX]
-
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR system configuration files [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --runstatedir=DIR run-time variable data [LOCALSTATEDIR/run]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ echo 'Configuration:'
+#foreach( $cfg in $config )
+if true \
+#if( $cfg.platform )
+ && isplatform "${cfg.platform}" \
+#end
+#foreach( $np in $cfg.notList )
+ && notisplatform "${np}" \
+#end
+ ; then
+ :
+ #foreach( $var in $cfg.vars )
+ #if( $var.overridable )
+ if test -z "${D}${var.varName}__described__"; then
+ ${var.varName}__described__=1
+ cat << '__EOF__'
+${var.helpText}
+__EOF__
+ fi
+ #end
+ #end
+fi
+#end
+ cat << '__EOF__'
Build Types:
--debug add extra compile flags for debug builds
@@ -127,6 +130,7 @@
#end
__EOF__
+ abort_configure
}
# create temporary directory
@@ -142,26 +146,7 @@
touch "$TEMP_DIR/options"
touch "$TEMP_DIR/features"
-# define standard variables
-# also define standard prefix (this is where we will search for config.site)
-prefix=/usr
-exec_prefix=
-bindir=
-sbindir=
-libdir=
-libexecdir=
-datarootdir=
-datadir=
-sysconfdir=
-sharedstatedir=
-localstatedir=
-runstatedir=
-includedir=
-infodir=
-localedir=
-mandir=
-
-# custom variables
+# config variables
#foreach( $cfg in $config )
if true \
#if( $cfg.platform )
@@ -171,11 +156,17 @@
&& notisplatform "${np}" \
#end
; then
+ :
#foreach( $var in $cfg.vars )
- #if( $var.exec )
- ${var.varName}=`${var.value}`
- #else
- ${var.varName}="${var.value}"
+ #if( $var.overridable )
+ if test -z "${D}${var.varName}__initialized__"; then
+ ${var.varName}__initialized__=1
+ #if( $var.exec )
+ ${var.varName}=`${var.value}`
+ #else
+ ${var.varName}="${var.value}"
+ #end
+ fi
#end
#end
fi
@@ -195,28 +186,17 @@
for ARG in "$@"
do
case "$ARG" in
- "--prefix="*) prefix=${D}{ARG#--prefix=} ;;
- "--exec-prefix="*) exec_prefix=${D}{ARG#--exec-prefix=} ;;
- "--bindir="*) bindir=${D}{ARG#----bindir=} ;;
- "--sbindir="*) sbindir=${D}{ARG#--sbindir=} ;;
- "--libdir="*) libdir=${D}{ARG#--libdir=} ;;
- "--libexecdir="*) libexecdir=${D}{ARG#--libexecdir=} ;;
- "--datarootdir="*) datarootdir=${D}{ARG#--datarootdir=} ;;
- "--datadir="*) datadir=${D}{ARG#--datadir=} ;;
- "--sysconfdir="*) sysconfdir=${D}{ARG#--sysconfdir=} ;;
- "--sharedstatedir="*) sharedstatedir=${D}{ARG#--sharedstatedir=} ;;
- "--localstatedir="*) localstatedir=${D}{ARG#--localstatedir=} ;;
- "--runstatedir="*) runstatedir=${D}{ARG#--runstatedir=} ;;
- "--includedir="*) includedir=${D}{ARG#--includedir=} ;;
- "--infodir="*) infodir=${D}{ARG#--infodir=} ;;
- "--mandir"*) mandir=${D}{ARG#--mandir} ;;
- "--localedir"*) localedir=${D}{ARG#--localedir} ;;
- "--help"*) printhelp; abort_configure ;;
- "--debug") BUILD_TYPE="debug" ;;
- "--release") BUILD_TYPE="release" ;;
+ #foreach( $var in $vars )
+ #if ($var.overridable)
+ "--${var.arg}="*) ${var.varName}=${D}{ARG#--${var.arg}=} ;;
+ #end
+ #end
+ "--help"*) printhelp ;;
+ "--debug") BUILD_TYPE="debug" ;;
+ "--release") BUILD_TYPE="release" ;;
#foreach( $opt in $options )
"--${opt.arg}="*) ${opt.varName}=${D}{ARG#--${opt.arg}=} ;;
- "--${opt.arg}") echo "option '$ARG' needs a value:"; echo " $ARG=${opt.valuesString}"; abort_configure ;;
+ "--${opt.arg}") echo "option '$ARG' needs a value:"; echo " $ARG=${opt.valuesString}"; abort_configure ;;
#end
#foreach( $feature in $features )
"--enable-${feature.arg}") ${feature.varName}=on ;;
@@ -264,22 +244,6 @@
: ${mandir:='${datarootdir}/man'}
: ${localedir:='${datarootdir}/locale'}
-# remember the above values and compare them later
-orig_bindir="$bindir"
-orig_sbindir="$sbindir"
-orig_libdir="$libdir"
-orig_libexecdir="$libexecdir"
-orig_datarootdir="$datarootdir"
-orig_datadir="$datadir"
-orig_sysconfdir="$sysconfdir"
-orig_sharedstatedir="$sharedstatedir"
-orig_localstatedir="$localstatedir"
-orig_runstatedir="$runstatedir"
-orig_includedir="$includedir"
-orig_infodir="$infodir"
-orig_mandir="$mandir"
-orig_localedir="$localedir"
-
# check if a config.site exists and load it
if [ -n "$CONFIG_SITE" ]; then
# CONFIG_SITE may contain space separated file names
@@ -324,22 +288,6 @@
# generate vars.mk
cat > "$TEMP_DIR/vars.mk" << __EOF__
-prefix=$prefix
-exec_prefix=$exec_prefix
-bindir=$bindir
-sbindir=$sbindir
-libdir=$libdir
-libexecdir=$libexecdir
-datarootdir=$datarootdir
-datadir=$datadir
-sysconfdir=$sysconfdir
-sharedstatedir=$sharedstatedir
-localstatedir=$localstatedir
-runstatedir=$runstatedir
-includedir=$includedir
-infodir=$infodir
-mandir=$mandir
-localedir=$localedir
#foreach( $var in $vars )
${var.varName}=${D}${var.varName}
#end
@@ -744,7 +692,7 @@
echo "configure finished"
echo
-echo "Toolchain"
+echo "Toolchain:"
echo " name: $TOOLCHAIN_NAME"
if [ -n "$TOOLCHAIN_CC" ]; then
echo " cc: $TOOLCHAIN_CC"
@@ -759,51 +707,13 @@
echo " default C std: $TOOLCHAIN_CSTD"
fi
echo
-echo "Build Config:"
-echo " prefix: $prefix"
-echo " exec_prefix: $exec_prefix"
-if [ "$orig_bindir" != "$bindir" ]; then
- echo " bindir: $bindir"
-fi
-if [ "$orig_sbindir" != "$sbindir" ]; then
- echo " sbindir: $sbindir"
-fi
-if [ "$orig_libdir" != "$libdir" ]; then
- echo " libdir: $libdir"
-fi
-if [ "$orig_libexecdir" != "$libexecdir" ]; then
- echo " libexecdir: $libexecdir"
-fi
-if [ "$orig_datarootdir" != "$datarootdir" ]; then
- echo " datarootdir: $datarootdir"
-fi
-if [ "$orig_datadir" != "$datadir" ]; then
- echo " datadir: $datadir"
-fi
-if [ "$orig_sysconfdir" != "$sysconfdir" ]; then
- echo " sysconfdir: $sysconfdir"
-fi
-if [ "$orig_sharedstatedir" != "$sharedstatedir" ]; then
- echo " sharedstatedir: $sharedstatedir"
-fi
-if [ "$orig_localstatedir" != "$localstatedir" ]; then
- echo " localstatedir: $localstatedir"
-fi
-if [ "$orig_runstatedir" != "$runstatedir" ]; then
- echo " runstatedir: $runstatedir"
-fi
-if [ "$orig_includedir" != "$includedir" ]; then
- echo " includedir: $includedir"
-fi
-if [ "$orig_infodir" != "$infodir" ]; then
- echo " infodir: $infodir"
-fi
-if [ "$orig_mandir" != "$mandir" ]; then
- echo " mandir: $mandir"
-fi
-if [ "$orig_localedir" != "$localedir" ]; then
- echo " localedir: $localedir"
-fi
+echo "Config:"
+#foreach( $var in $vars )
+#if ($var.overridable)
+ printf ' %-16s' '${var.arg}:'
+ echo "${D}${var.varName}"
+#end
+#end
#if ( $options.size() > 0 )
echo
echo "Options:"
@@ -813,10 +723,11 @@
echo
echo "Features:"
#foreach( $feature in $features )
+printf ' %-16s' '$feature.name:'
if [ -n "${D}${feature.varName}" ]; then
-echo " $feature.name: on"
+ echo 'on'
else
-echo " $feature.name: off"
+ echo 'off'
fi
#end
#end
diff -r 099448bcc943 -r f4f11f755ee7 src/main/resources/make/uwproj.xsd
--- a/src/main/resources/make/uwproj.xsd Sat Nov 29 13:50:15 2025 +0100
+++ b/src/main/resources/make/uwproj.xsd Sat Nov 29 17:31:03 2025 +0100
@@ -29,23 +29,61 @@
The configuration section.
- Consists of an arbitrary number of var elements.
+ Consists of an arbitrary number of var elements and pre-defined elements for
+ standard installation directories. If you want to use standard installation directories, you
+ must list the wanted variables here.
The optional platform attribute may specify a single platform identifier and
the optional not attribute may specify a comma-separated list of platform identifiers.
The configure script shall skip this config declaration if the detected platform is not matching
the filter specification of these attributes.
+ When multiple config sections have a matching filter, and declare the same variables, the settings
+ of the first matching config section will be used for the affected variables.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The definition of a standard configuration variable.
+
+ You may customize the value and the help text,
+ but the variable name and the option name are pre-defined.
+
+
+
+
+
+
+
+
+
+
+
@@ -55,14 +93,23 @@
written to the resulting config file (in contrast to make variables, which are only
written to the config file).
The name attribute is mandatory, the value is defined by the text body of the element.
- The optional Boolean exec attribute (false by default) controls, whether the entire
- definition is automatically executed under command substitution.
+ The optional Boolean exec attribute (false by default) controls, whether value denotes
+ a command which shall be executed at configuration time to produce the value.
+ With option and option-help you can control how the variable can be
+ overridden on the command line. When you don't specify either of those attributes, no command
+ line option will be generated. When you provide a option-help, but do not specify the
+ option name, a name is generated.
+ You can use the string %default in your help text when you want to show the default
+ value in the text. When exec is used, the default will not be resolved in the help
+ text and instead the command is shown (to avoid breaking the formatting).
+
+
diff -r 099448bcc943 -r f4f11f755ee7 test/configure
--- a/test/configure Sat Nov 29 13:50:15 2025 +0100
+++ b/test/configure Sat Nov 29 17:31:03 2025 +0100
@@ -85,27 +85,40 @@
printhelp()
{
echo "Usage: $0 [OPTIONS]..."
- cat << __EOF__
-Installation directories:
- --prefix=PREFIX path prefix for architecture-independent files
- [$prefix]
- --exec-prefix=EPREFIX path prefix for architecture-dependent files
- [PREFIX]
-
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR system configuration files [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --runstatedir=DIR run-time variable data [LOCALSTATEDIR/run]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ echo 'Configuration:'
+if true \
+ ; then
+ :
+ if test -z "$prefix__described__"; then
+ prefix__described__=1
+ cat << '__EOF__'
+ --prefix path prefix for architecture-independent files [/usr]
+__EOF__
+ fi
+ if test -z "$exec_prefix__described__"; then
+ exec_prefix__described__=1
+ cat << '__EOF__'
+ --exec-prefix path prefix for architecture-dependent files [PREFIX]
+__EOF__
+ fi
+ if test -z "$libdir__described__"; then
+ libdir__described__=1
+ cat << '__EOF__'
+ --libdir object code libraries [EPREFIX/lib]
+__EOF__
+ fi
+fi
+if true \
+ && notisplatform "mingw" \
+ ; then
+ :
+fi
+if true \
+ && isplatform "mingw" \
+ ; then
+ :
+fi
+ cat << '__EOF__'
Build Types:
--debug add extra compile flags for debug builds
@@ -115,6 +128,7 @@
--disable-pg
__EOF__
+ abort_configure
}
# create temporary directory
@@ -130,39 +144,32 @@
touch "$TEMP_DIR/options"
touch "$TEMP_DIR/features"
-# define standard variables
-# also define standard prefix (this is where we will search for config.site)
-prefix=/usr
-exec_prefix=
-bindir=
-sbindir=
-libdir=
-libexecdir=
-datarootdir=
-datadir=
-sysconfdir=
-sharedstatedir=
-localstatedir=
-runstatedir=
-includedir=
-infodir=
-localedir=
-mandir=
-
-# custom variables
+# config variables
+if true \
+ ; then
+ :
+ if test -z "$prefix__initialized__"; then
+ prefix__initialized__=1
+ prefix="/usr"
+ fi
+ if test -z "$exec_prefix__initialized__"; then
+ exec_prefix__initialized__=1
+ exec_prefix=""
+ fi
+ if test -z "$libdir__initialized__"; then
+ libdir__initialized__=1
+ libdir=""
+ fi
+fi
if true \
&& notisplatform "mingw" \
; then
- PWD="pwd"
+ :
fi
if true \
&& isplatform "mingw" \
; then
- PWD="pwd -W"
-fi
-if true \
- ; then
- HOST=`uname -n`
+ :
fi
# features
@@ -175,25 +182,12 @@
for ARG in "$@"
do
case "$ARG" in
- "--prefix="*) prefix=${ARG#--prefix=} ;;
- "--exec-prefix="*) exec_prefix=${ARG#--exec-prefix=} ;;
- "--bindir="*) bindir=${ARG#----bindir=} ;;
- "--sbindir="*) sbindir=${ARG#--sbindir=} ;;
- "--libdir="*) libdir=${ARG#--libdir=} ;;
- "--libexecdir="*) libexecdir=${ARG#--libexecdir=} ;;
- "--datarootdir="*) datarootdir=${ARG#--datarootdir=} ;;
- "--datadir="*) datadir=${ARG#--datadir=} ;;
- "--sysconfdir="*) sysconfdir=${ARG#--sysconfdir=} ;;
- "--sharedstatedir="*) sharedstatedir=${ARG#--sharedstatedir=} ;;
- "--localstatedir="*) localstatedir=${ARG#--localstatedir=} ;;
- "--runstatedir="*) runstatedir=${ARG#--runstatedir=} ;;
- "--includedir="*) includedir=${ARG#--includedir=} ;;
- "--infodir="*) infodir=${ARG#--infodir=} ;;
- "--mandir"*) mandir=${ARG#--mandir} ;;
- "--localedir"*) localedir=${ARG#--localedir} ;;
- "--help"*) printhelp; abort_configure ;;
- "--debug") BUILD_TYPE="debug" ;;
- "--release") BUILD_TYPE="release" ;;
+ "--prefix="*) prefix=${ARG#--prefix=} ;;
+ "--exec-prefix="*) exec_prefix=${ARG#--exec-prefix=} ;;
+ "--libdir="*) libdir=${ARG#--libdir=} ;;
+ "--help"*) printhelp ;;
+ "--debug") BUILD_TYPE="debug" ;;
+ "--release") BUILD_TYPE="release" ;;
"--enable-pg") FEATURE_PG=on ;;
"--disable-pg") unset FEATURE_PG ;;
"-"*) echo "unknown option: $ARG"; abort_configure ;;
@@ -237,22 +231,6 @@
: ${mandir:='${datarootdir}/man'}
: ${localedir:='${datarootdir}/locale'}
-# remember the above values and compare them later
-orig_bindir="$bindir"
-orig_sbindir="$sbindir"
-orig_libdir="$libdir"
-orig_libexecdir="$libexecdir"
-orig_datarootdir="$datarootdir"
-orig_datadir="$datadir"
-orig_sysconfdir="$sysconfdir"
-orig_sharedstatedir="$sharedstatedir"
-orig_localstatedir="$localstatedir"
-orig_runstatedir="$runstatedir"
-orig_includedir="$includedir"
-orig_infodir="$infodir"
-orig_mandir="$mandir"
-orig_localedir="$localedir"
-
# check if a config.site exists and load it
if [ -n "$CONFIG_SITE" ]; then
# CONFIG_SITE may contain space separated file names
@@ -298,20 +276,8 @@
cat > "$TEMP_DIR/vars.mk" << __EOF__
prefix=$prefix
exec_prefix=$exec_prefix
-bindir=$bindir
-sbindir=$sbindir
libdir=$libdir
-libexecdir=$libexecdir
-datarootdir=$datarootdir
-datadir=$datadir
-sysconfdir=$sysconfdir
-sharedstatedir=$sharedstatedir
-localstatedir=$localstatedir
-runstatedir=$runstatedir
-includedir=$includedir
-infodir=$infodir
-mandir=$mandir
-localedir=$localedir
+HOST=$HOST
__EOF__
# toolchain detection utilities
@@ -681,7 +647,7 @@
echo "configure finished"
echo
-echo "Toolchain"
+echo "Toolchain:"
echo " name: $TOOLCHAIN_NAME"
if [ -n "$TOOLCHAIN_CC" ]; then
echo " cc: $TOOLCHAIN_CC"
@@ -696,57 +662,20 @@
echo " default C std: $TOOLCHAIN_CSTD"
fi
echo
-echo "Build Config:"
-echo " prefix: $prefix"
-echo " exec_prefix: $exec_prefix"
-if [ "$orig_bindir" != "$bindir" ]; then
- echo " bindir: $bindir"
-fi
-if [ "$orig_sbindir" != "$sbindir" ]; then
- echo " sbindir: $sbindir"
-fi
-if [ "$orig_libdir" != "$libdir" ]; then
- echo " libdir: $libdir"
-fi
-if [ "$orig_libexecdir" != "$libexecdir" ]; then
- echo " libexecdir: $libexecdir"
-fi
-if [ "$orig_datarootdir" != "$datarootdir" ]; then
- echo " datarootdir: $datarootdir"
-fi
-if [ "$orig_datadir" != "$datadir" ]; then
- echo " datadir: $datadir"
-fi
-if [ "$orig_sysconfdir" != "$sysconfdir" ]; then
- echo " sysconfdir: $sysconfdir"
-fi
-if [ "$orig_sharedstatedir" != "$sharedstatedir" ]; then
- echo " sharedstatedir: $sharedstatedir"
-fi
-if [ "$orig_localstatedir" != "$localstatedir" ]; then
- echo " localstatedir: $localstatedir"
-fi
-if [ "$orig_runstatedir" != "$runstatedir" ]; then
- echo " runstatedir: $runstatedir"
-fi
-if [ "$orig_includedir" != "$includedir" ]; then
- echo " includedir: $includedir"
-fi
-if [ "$orig_infodir" != "$infodir" ]; then
- echo " infodir: $infodir"
-fi
-if [ "$orig_mandir" != "$mandir" ]; then
- echo " mandir: $mandir"
-fi
-if [ "$orig_localedir" != "$localedir" ]; then
- echo " localedir: $localedir"
-fi
+echo "Config:"
+ printf ' %-16s' 'prefix:'
+ echo "$prefix"
+ printf ' %-16s' 'exec-prefix:'
+ echo "$exec_prefix"
+ printf ' %-16s' 'libdir:'
+ echo "$libdir"
echo
echo "Features:"
+printf ' %-16s' 'pg:'
if [ -n "$FEATURE_PG" ]; then
-echo " pg: on"
+ echo 'on'
else
-echo " pg: off"
+ echo 'off'
fi
echo
diff -r 099448bcc943 -r f4f11f755ee7 test/configure2
--- a/test/configure2 Sat Nov 29 13:50:15 2025 +0100
+++ b/test/configure2 Sat Nov 29 17:31:03 2025 +0100
@@ -85,27 +85,56 @@
printhelp()
{
echo "Usage: $0 [OPTIONS]..."
- cat << __EOF__
-Installation directories:
- --prefix=PREFIX path prefix for architecture-independent files
- [$prefix]
- --exec-prefix=EPREFIX path prefix for architecture-dependent files
- [PREFIX]
-
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR system configuration files [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --runstatedir=DIR run-time variable data [LOCALSTATEDIR/run]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ echo 'Configuration:'
+if true \
+ ; then
+ :
+ if test -z "$prefix__described__"; then
+ prefix__described__=1
+ cat << '__EOF__'
+ --prefix path prefix for architecture-independent files
+ [`pwd`/work]
+__EOF__
+ fi
+ if test -z "$exec_prefix__described__"; then
+ exec_prefix__described__=1
+ cat << '__EOF__'
+ --exec-prefix path prefix for architecture-dependent files [PREFIX]
+__EOF__
+ fi
+ if test -z "$libdir__described__"; then
+ libdir__described__=1
+ cat << '__EOF__'
+ --libdir object code libraries [EPREFIX/lib]
+__EOF__
+ fi
+ if test -z "$datarootdir__described__"; then
+ datarootdir__described__=1
+ cat << '__EOF__'
+ --datarootdir read-only architecture-independent data root
+ [PREFIX/share]
+__EOF__
+ fi
+ if test -z "$localstatedir__described__"; then
+ localstatedir__described__=1
+ cat << '__EOF__'
+ --localstatedir modifiable single-machine data [PREFIX/var]
+__EOF__
+ fi
+ if test -z "$libdatadir__described__"; then
+ libdatadir__described__=1
+ cat << '__EOF__'
+ --libdatadir miscellaneous files for libraries [PREFIX/libdata]
+__EOF__
+ fi
+ if test -z "$TOOLKIT_HOME__described__"; then
+ TOOLKIT_HOME__described__=1
+ cat << '__EOF__'
+ --toolkit-home the location of the toolkit installation [/usr]
+__EOF__
+ fi
+fi
+ cat << '__EOF__'
Build Types:
--debug add extra compile flags for debug builds
@@ -124,6 +153,7 @@
--enable-gui
__EOF__
+ abort_configure
}
# create temporary directory
@@ -139,26 +169,39 @@
touch "$TEMP_DIR/options"
touch "$TEMP_DIR/features"
-# define standard variables
-# also define standard prefix (this is where we will search for config.site)
-prefix=/usr
-exec_prefix=
-bindir=
-sbindir=
-libdir=
-libexecdir=
-datarootdir=
-datadir=
-sysconfdir=
-sharedstatedir=
-localstatedir=
-runstatedir=
-includedir=
-infodir=
-localedir=
-mandir=
-
-# custom variables
+# config variables
+if true \
+ ; then
+ :
+ if test -z "$prefix__initialized__"; then
+ prefix__initialized__=1
+ prefix="`pwd`/work"
+ fi
+ if test -z "$exec_prefix__initialized__"; then
+ exec_prefix__initialized__=1
+ exec_prefix=""
+ fi
+ if test -z "$libdir__initialized__"; then
+ libdir__initialized__=1
+ libdir=""
+ fi
+ if test -z "$datarootdir__initialized__"; then
+ datarootdir__initialized__=1
+ datarootdir=""
+ fi
+ if test -z "$localstatedir__initialized__"; then
+ localstatedir__initialized__=1
+ localstatedir="/var"
+ fi
+ if test -z "$libdatadir__initialized__"; then
+ libdatadir__initialized__=1
+ libdatadir="$prefix/libdata"
+ fi
+ if test -z "$TOOLKIT_HOME__initialized__"; then
+ TOOLKIT_HOME__initialized__=1
+ TOOLKIT_HOME="/usr"
+ fi
+fi
# features
FEATURE_DB=auto
@@ -170,27 +213,18 @@
for ARG in "$@"
do
case "$ARG" in
- "--prefix="*) prefix=${ARG#--prefix=} ;;
- "--exec-prefix="*) exec_prefix=${ARG#--exec-prefix=} ;;
- "--bindir="*) bindir=${ARG#----bindir=} ;;
- "--sbindir="*) sbindir=${ARG#--sbindir=} ;;
- "--libdir="*) libdir=${ARG#--libdir=} ;;
- "--libexecdir="*) libexecdir=${ARG#--libexecdir=} ;;
- "--datarootdir="*) datarootdir=${ARG#--datarootdir=} ;;
- "--datadir="*) datadir=${ARG#--datadir=} ;;
- "--sysconfdir="*) sysconfdir=${ARG#--sysconfdir=} ;;
- "--sharedstatedir="*) sharedstatedir=${ARG#--sharedstatedir=} ;;
- "--localstatedir="*) localstatedir=${ARG#--localstatedir=} ;;
- "--runstatedir="*) runstatedir=${ARG#--runstatedir=} ;;
- "--includedir="*) includedir=${ARG#--includedir=} ;;
- "--infodir="*) infodir=${ARG#--infodir=} ;;
- "--mandir"*) mandir=${ARG#--mandir} ;;
- "--localedir"*) localedir=${ARG#--localedir} ;;
- "--help"*) printhelp; abort_configure ;;
- "--debug") BUILD_TYPE="debug" ;;
- "--release") BUILD_TYPE="release" ;;
+ "--prefix="*) prefix=${ARG#--prefix=} ;;
+ "--exec-prefix="*) exec_prefix=${ARG#--exec-prefix=} ;;
+ "--libdir="*) libdir=${ARG#--libdir=} ;;
+ "--datarootdir="*) datarootdir=${ARG#--datarootdir=} ;;
+ "--localstatedir="*) localstatedir=${ARG#--localstatedir=} ;;
+ "--libdatadir="*) libdatadir=${ARG#--libdatadir=} ;;
+ "--toolkit-home="*) TOOLKIT_HOME=${ARG#--toolkit-home=} ;;
+ "--help"*) printhelp ;;
+ "--debug") BUILD_TYPE="debug" ;;
+ "--release") BUILD_TYPE="release" ;;
"--toolkit="*) OPT_TOOLKIT=${ARG#--toolkit=} ;;
- "--toolkit") echo "option '$ARG' needs a value:"; echo " $ARG=(gtk3|cli|gtk2|wpf)"; abort_configure ;;
+ "--toolkit") echo "option '$ARG' needs a value:"; echo " $ARG=(gtk3|cli|gtk2|wpf)"; abort_configure ;;
"--enable-db") FEATURE_DB=on ;;
"--disable-db") unset FEATURE_DB ;;
"--enable-gui") FEATURE_GUI=on ;;
@@ -236,22 +270,6 @@
: ${mandir:='${datarootdir}/man'}
: ${localedir:='${datarootdir}/locale'}
-# remember the above values and compare them later
-orig_bindir="$bindir"
-orig_sbindir="$sbindir"
-orig_libdir="$libdir"
-orig_libexecdir="$libexecdir"
-orig_datarootdir="$datarootdir"
-orig_datadir="$datadir"
-orig_sysconfdir="$sysconfdir"
-orig_sharedstatedir="$sharedstatedir"
-orig_localstatedir="$localstatedir"
-orig_runstatedir="$runstatedir"
-orig_includedir="$includedir"
-orig_infodir="$infodir"
-orig_mandir="$mandir"
-orig_localedir="$localedir"
-
# check if a config.site exists and load it
if [ -n "$CONFIG_SITE" ]; then
# CONFIG_SITE may contain space separated file names
@@ -297,20 +315,12 @@
cat > "$TEMP_DIR/vars.mk" << __EOF__
prefix=$prefix
exec_prefix=$exec_prefix
-bindir=$bindir
-sbindir=$sbindir
libdir=$libdir
-libexecdir=$libexecdir
datarootdir=$datarootdir
-datadir=$datadir
-sysconfdir=$sysconfdir
-sharedstatedir=$sharedstatedir
localstatedir=$localstatedir
-runstatedir=$runstatedir
-includedir=$includedir
-infodir=$infodir
-mandir=$mandir
-localedir=$localedir
+libdatadir=$libdatadir
+SRCDIR=$SRCDIR
+TOOLKIT_HOME=$TOOLKIT_HOME
__EOF__
# toolchain detection utilities
@@ -877,7 +887,7 @@
echo "configure finished"
echo
-echo "Toolchain"
+echo "Toolchain:"
echo " name: $TOOLCHAIN_NAME"
if [ -n "$TOOLCHAIN_CC" ]; then
echo " cc: $TOOLCHAIN_CC"
@@ -892,65 +902,37 @@
echo " default C std: $TOOLCHAIN_CSTD"
fi
echo
-echo "Build Config:"
-echo " prefix: $prefix"
-echo " exec_prefix: $exec_prefix"
-if [ "$orig_bindir" != "$bindir" ]; then
- echo " bindir: $bindir"
-fi
-if [ "$orig_sbindir" != "$sbindir" ]; then
- echo " sbindir: $sbindir"
-fi
-if [ "$orig_libdir" != "$libdir" ]; then
- echo " libdir: $libdir"
-fi
-if [ "$orig_libexecdir" != "$libexecdir" ]; then
- echo " libexecdir: $libexecdir"
-fi
-if [ "$orig_datarootdir" != "$datarootdir" ]; then
- echo " datarootdir: $datarootdir"
-fi
-if [ "$orig_datadir" != "$datadir" ]; then
- echo " datadir: $datadir"
-fi
-if [ "$orig_sysconfdir" != "$sysconfdir" ]; then
- echo " sysconfdir: $sysconfdir"
-fi
-if [ "$orig_sharedstatedir" != "$sharedstatedir" ]; then
- echo " sharedstatedir: $sharedstatedir"
-fi
-if [ "$orig_localstatedir" != "$localstatedir" ]; then
- echo " localstatedir: $localstatedir"
-fi
-if [ "$orig_runstatedir" != "$runstatedir" ]; then
- echo " runstatedir: $runstatedir"
-fi
-if [ "$orig_includedir" != "$includedir" ]; then
- echo " includedir: $includedir"
-fi
-if [ "$orig_infodir" != "$infodir" ]; then
- echo " infodir: $infodir"
-fi
-if [ "$orig_mandir" != "$mandir" ]; then
- echo " mandir: $mandir"
-fi
-if [ "$orig_localedir" != "$localedir" ]; then
- echo " localedir: $localedir"
-fi
+echo "Config:"
+ printf ' %-16s' 'prefix:'
+ echo "$prefix"
+ printf ' %-16s' 'exec-prefix:'
+ echo "$exec_prefix"
+ printf ' %-16s' 'libdir:'
+ echo "$libdir"
+ printf ' %-16s' 'datarootdir:'
+ echo "$datarootdir"
+ printf ' %-16s' 'localstatedir:'
+ echo "$localstatedir"
+ printf ' %-16s' 'libdatadir:'
+ echo "$libdatadir"
+ printf ' %-16s' 'toolkit-home:'
+ echo "$TOOLKIT_HOME"
echo
echo "Options:"
cat "$TEMP_DIR/options"
echo
echo "Features:"
+printf ' %-16s' 'db:'
if [ -n "$FEATURE_DB" ]; then
-echo " db: on"
+ echo 'on'
else
-echo " db: off"
+ echo 'off'
fi
+printf ' %-16s' 'gui:'
if [ -n "$FEATURE_GUI" ]; then
-echo " gui: on"
+ echo 'on'
else
-echo " gui: off"
+ echo 'off'
fi
echo
diff -r 099448bcc943 -r f4f11f755ee7 test/make/configure.vm
--- a/test/make/configure.vm Sat Nov 29 13:50:15 2025 +0100
+++ b/test/make/configure.vm Sat Nov 29 17:31:03 2025 +0100
@@ -86,27 +86,30 @@
printhelp()
{
echo "Usage: $0 [OPTIONS]..."
- cat << __EOF__
-Installation directories:
- --prefix=PREFIX path prefix for architecture-independent files
- [${D}prefix]
- --exec-prefix=EPREFIX path prefix for architecture-dependent files
- [PREFIX]
-
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR system configuration files [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --runstatedir=DIR run-time variable data [LOCALSTATEDIR/run]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ echo 'Configuration:'
+#foreach( $cfg in $config )
+if true \
+#if( $cfg.platform )
+ && isplatform "${cfg.platform}" \
+#end
+#foreach( $np in $cfg.notList )
+ && notisplatform "${np}" \
+#end
+ ; then
+ :
+ #foreach( $var in $cfg.vars )
+ #if( $var.overridable )
+ if test -z "${D}${var.varName}__described__"; then
+ ${var.varName}__described__=1
+ cat << '__EOF__'
+${var.helpText}
+__EOF__
+ fi
+ #end
+ #end
+fi
+#end
+ cat << '__EOF__'
Build Types:
--debug add extra compile flags for debug builds
@@ -127,6 +130,7 @@
#end
__EOF__
+ abort_configure
}
# create temporary directory
@@ -142,26 +146,7 @@
touch "$TEMP_DIR/options"
touch "$TEMP_DIR/features"
-# define standard variables
-# also define standard prefix (this is where we will search for config.site)
-prefix=/usr
-exec_prefix=
-bindir=
-sbindir=
-libdir=
-libexecdir=
-datarootdir=
-datadir=
-sysconfdir=
-sharedstatedir=
-localstatedir=
-runstatedir=
-includedir=
-infodir=
-localedir=
-mandir=
-
-# custom variables
+# config variables
#foreach( $cfg in $config )
if true \
#if( $cfg.platform )
@@ -171,11 +156,17 @@
&& notisplatform "${np}" \
#end
; then
+ :
#foreach( $var in $cfg.vars )
- #if( $var.exec )
- ${var.varName}=`${var.value}`
- #else
- ${var.varName}="${var.value}"
+ #if( $var.overridable )
+ if test -z "${D}${var.varName}__initialized__"; then
+ ${var.varName}__initialized__=1
+ #if( $var.exec )
+ ${var.varName}=`${var.value}`
+ #else
+ ${var.varName}="${var.value}"
+ #end
+ fi
#end
#end
fi
@@ -195,28 +186,17 @@
for ARG in "$@"
do
case "$ARG" in
- "--prefix="*) prefix=${D}{ARG#--prefix=} ;;
- "--exec-prefix="*) exec_prefix=${D}{ARG#--exec-prefix=} ;;
- "--bindir="*) bindir=${D}{ARG#----bindir=} ;;
- "--sbindir="*) sbindir=${D}{ARG#--sbindir=} ;;
- "--libdir="*) libdir=${D}{ARG#--libdir=} ;;
- "--libexecdir="*) libexecdir=${D}{ARG#--libexecdir=} ;;
- "--datarootdir="*) datarootdir=${D}{ARG#--datarootdir=} ;;
- "--datadir="*) datadir=${D}{ARG#--datadir=} ;;
- "--sysconfdir="*) sysconfdir=${D}{ARG#--sysconfdir=} ;;
- "--sharedstatedir="*) sharedstatedir=${D}{ARG#--sharedstatedir=} ;;
- "--localstatedir="*) localstatedir=${D}{ARG#--localstatedir=} ;;
- "--runstatedir="*) runstatedir=${D}{ARG#--runstatedir=} ;;
- "--includedir="*) includedir=${D}{ARG#--includedir=} ;;
- "--infodir="*) infodir=${D}{ARG#--infodir=} ;;
- "--mandir"*) mandir=${D}{ARG#--mandir} ;;
- "--localedir"*) localedir=${D}{ARG#--localedir} ;;
- "--help"*) printhelp; abort_configure ;;
- "--debug") BUILD_TYPE="debug" ;;
- "--release") BUILD_TYPE="release" ;;
+ #foreach( $var in $vars )
+ #if ($var.overridable)
+ "--${var.arg}="*) ${var.varName}=${D}{ARG#--${var.arg}=} ;;
+ #end
+ #end
+ "--help"*) printhelp ;;
+ "--debug") BUILD_TYPE="debug" ;;
+ "--release") BUILD_TYPE="release" ;;
#foreach( $opt in $options )
"--${opt.arg}="*) ${opt.varName}=${D}{ARG#--${opt.arg}=} ;;
- "--${opt.arg}") echo "option '$ARG' needs a value:"; echo " $ARG=${opt.valuesString}"; abort_configure ;;
+ "--${opt.arg}") echo "option '$ARG' needs a value:"; echo " $ARG=${opt.valuesString}"; abort_configure ;;
#end
#foreach( $feature in $features )
"--enable-${feature.arg}") ${feature.varName}=on ;;
@@ -264,22 +244,6 @@
: ${mandir:='${datarootdir}/man'}
: ${localedir:='${datarootdir}/locale'}
-# remember the above values and compare them later
-orig_bindir="$bindir"
-orig_sbindir="$sbindir"
-orig_libdir="$libdir"
-orig_libexecdir="$libexecdir"
-orig_datarootdir="$datarootdir"
-orig_datadir="$datadir"
-orig_sysconfdir="$sysconfdir"
-orig_sharedstatedir="$sharedstatedir"
-orig_localstatedir="$localstatedir"
-orig_runstatedir="$runstatedir"
-orig_includedir="$includedir"
-orig_infodir="$infodir"
-orig_mandir="$mandir"
-orig_localedir="$localedir"
-
# check if a config.site exists and load it
if [ -n "$CONFIG_SITE" ]; then
# CONFIG_SITE may contain space separated file names
@@ -324,22 +288,6 @@
# generate vars.mk
cat > "$TEMP_DIR/vars.mk" << __EOF__
-prefix=$prefix
-exec_prefix=$exec_prefix
-bindir=$bindir
-sbindir=$sbindir
-libdir=$libdir
-libexecdir=$libexecdir
-datarootdir=$datarootdir
-datadir=$datadir
-sysconfdir=$sysconfdir
-sharedstatedir=$sharedstatedir
-localstatedir=$localstatedir
-runstatedir=$runstatedir
-includedir=$includedir
-infodir=$infodir
-mandir=$mandir
-localedir=$localedir
#foreach( $var in $vars )
${var.varName}=${D}${var.varName}
#end
@@ -744,7 +692,7 @@
echo "configure finished"
echo
-echo "Toolchain"
+echo "Toolchain:"
echo " name: $TOOLCHAIN_NAME"
if [ -n "$TOOLCHAIN_CC" ]; then
echo " cc: $TOOLCHAIN_CC"
@@ -759,51 +707,13 @@
echo " default C std: $TOOLCHAIN_CSTD"
fi
echo
-echo "Build Config:"
-echo " prefix: $prefix"
-echo " exec_prefix: $exec_prefix"
-if [ "$orig_bindir" != "$bindir" ]; then
- echo " bindir: $bindir"
-fi
-if [ "$orig_sbindir" != "$sbindir" ]; then
- echo " sbindir: $sbindir"
-fi
-if [ "$orig_libdir" != "$libdir" ]; then
- echo " libdir: $libdir"
-fi
-if [ "$orig_libexecdir" != "$libexecdir" ]; then
- echo " libexecdir: $libexecdir"
-fi
-if [ "$orig_datarootdir" != "$datarootdir" ]; then
- echo " datarootdir: $datarootdir"
-fi
-if [ "$orig_datadir" != "$datadir" ]; then
- echo " datadir: $datadir"
-fi
-if [ "$orig_sysconfdir" != "$sysconfdir" ]; then
- echo " sysconfdir: $sysconfdir"
-fi
-if [ "$orig_sharedstatedir" != "$sharedstatedir" ]; then
- echo " sharedstatedir: $sharedstatedir"
-fi
-if [ "$orig_localstatedir" != "$localstatedir" ]; then
- echo " localstatedir: $localstatedir"
-fi
-if [ "$orig_runstatedir" != "$runstatedir" ]; then
- echo " runstatedir: $runstatedir"
-fi
-if [ "$orig_includedir" != "$includedir" ]; then
- echo " includedir: $includedir"
-fi
-if [ "$orig_infodir" != "$infodir" ]; then
- echo " infodir: $infodir"
-fi
-if [ "$orig_mandir" != "$mandir" ]; then
- echo " mandir: $mandir"
-fi
-if [ "$orig_localedir" != "$localedir" ]; then
- echo " localedir: $localedir"
-fi
+echo "Config:"
+#foreach( $var in $vars )
+#if ($var.overridable)
+ printf ' %-16s' '${var.arg}:'
+ echo "${D}${var.varName}"
+#end
+#end
#if ( $options.size() > 0 )
echo
echo "Options:"
@@ -813,10 +723,11 @@
echo
echo "Features:"
#foreach( $feature in $features )
+printf ' %-16s' '$feature.name:'
if [ -n "${D}${feature.varName}" ]; then
-echo " $feature.name: on"
+ echo 'on'
else
-echo " $feature.name: off"
+ echo 'off'
fi
#end
#end
diff -r 099448bcc943 -r f4f11f755ee7 test/make/project.xml
--- a/test/make/project.xml Sat Nov 29 13:50:15 2025 +0100
+++ b/test/make/project.xml Sat Nov 29 17:31:03 2025 +0100
@@ -1,15 +1,17 @@
+
+
+
+ uname -n
+
pwd
pwd -W
-
- uname -n
-
c
diff -r 099448bcc943 -r f4f11f755ee7 test/make/project2.xml
--- a/test/make/project2.xml Sat Nov 29 13:50:15 2025 +0100
+++ b/test/make/project2.xml Sat Nov 29 17:31:03 2025 +0100
@@ -1,6 +1,16 @@
-
+
+ `pwd`/work
+
+
+ /var
+ $prefix/libdata
+ pwd
+ /usr
+
+
+
-I/mingw/include
-lcurl
diff -r 099448bcc943 -r f4f11f755ee7 test/make/uwproj.xsd
--- a/test/make/uwproj.xsd Sat Nov 29 13:50:15 2025 +0100
+++ b/test/make/uwproj.xsd Sat Nov 29 17:31:03 2025 +0100
@@ -29,23 +29,61 @@
The configuration section.
- Consists of an arbitrary number of var elements.
+ Consists of an arbitrary number of var elements and pre-defined elements for
+ standard installation directories. If you want to use standard installation directories, you
+ must list the wanted variables here.
The optional platform attribute may specify a single platform identifier and
the optional not attribute may specify a comma-separated list of platform identifiers.
The configure script shall skip this config declaration if the detected platform is not matching
the filter specification of these attributes.
+ When multiple config sections have a matching filter, and declare the same variables, the settings
+ of the first matching config section will be used for the affected variables.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The definition of a standard configuration variable.
+
+ You may customize the value and the help text,
+ but the variable name and the option name are pre-defined.
+
+
+
+
+
+
+
+
+
+
+
@@ -55,14 +93,23 @@
written to the resulting config file (in contrast to make variables, which are only
written to the config file).
The name attribute is mandatory, the value is defined by the text body of the element.
- The optional Boolean exec attribute (false by default) controls, whether the entire
- definition is automatically executed under command substitution.
+ The optional Boolean exec attribute (false by default) controls, whether value denotes
+ a command which shall be executed at configuration time to produce the value.
+ With option and option-help you can control how the variable can be
+ overridden on the command line. When you don't specify either of those attributes, no command
+ line option will be generated. When you provide a option-help, but do not specify the
+ option name, a name is generated.
+ You can use the string %default in your help text when you want to show the default
+ value in the text. When exec is used, the default will not be resolved in the help
+ text and instead the command is shown (to avoid breaking the formatting).
+
+