AM_CPPFLAGS = \
-I${top_srcdir} \
+ -I${top_builddir} \
-I${top_srcdir}/include \
-I${top_builddir}/include \
-I${top_srcdir}/libnm-util \
$(top_builddir)/libnm-util/libnm-util.la \
$(top_builddir)/libnm-glib/libnm-glib.la
+if HAVE_INTROSPECTION
+settings-docs.c: settings-docs.xsl $(top_builddir)/libnm-util/nm-setting-docs.xml
+ $(AM_V_GEN) xsltproc --output $@ $^
+BUILT_SOURCES = settings-docs.c
+endif
+
+DISTCLEANFILES = settings-docs.c
+
+EXTRA_DIST = settings-docs.c settings-docs.xsl
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+ <xsl:output
+ method="text"
+ doctype-public="-//OASIS//DTD DocBook XML V4.3//EN"
+ doctype-system="http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+ />
+
+ <xsl:template match="nm-setting-docs">/* Generated file. Do not edit. */
+
+typedef struct {
+ const char *name;
+ const char *docs;
+} NmcPropertyDesc;
+<xsl:apply-templates select="setting" mode="properties"><xsl:sort select="@name"/></xsl:apply-templates>
+
+typedef struct {
+ const char *name;
+ NmcPropertyDesc *properties;
+ int n_properties;
+} NmcSettingDesc;
+
+NmcSettingDesc all_settings[] = {
+<xsl:apply-templates select="setting" mode="settings"><xsl:sort select="@name"/></xsl:apply-templates>
+};
+
+static int
+find_by_name (gconstpointer keyv, gconstpointer cmpv)
+{
+ const char *key = keyv;
+ struct { const char *name; gpointer data; } *cmp = (gpointer)cmpv;
+
+ return strcmp (key, cmp->name);
+}
+
+static const char *
+nmc_setting_get_property_doc (NMSetting *setting, const char *prop)
+{
+ NmcSettingDesc *setting_desc;
+ NmcPropertyDesc *property_desc;
+
+ setting_desc = bsearch (nm_setting_get_name (setting),
+ all_settings, G_N_ELEMENTS (all_settings),
+ sizeof (NmcSettingDesc), find_by_name);
+ if (!setting_desc)
+ return NULL;
+ property_desc = bsearch (prop,
+ setting_desc->properties, setting_desc->n_properties,
+ sizeof (NmcPropertyDesc), find_by_name);
+ if (!property_desc)
+ return NULL;
+ return property_desc->docs;
+}
+ </xsl:template>
+
+ <xsl:template match="setting" mode="properties">
+NmcPropertyDesc setting_<xsl:value-of select="translate(@name,'-','_')"/>[] = {<xsl:apply-templates select="property"><xsl:sort select="@name"/></xsl:apply-templates>
+};
+ </xsl:template>
+
+ <xsl:template match="property">
+ <xsl:variable name="docs">
+ <xsl:call-template name="escape_quotes">
+ <xsl:with-param name="string" select="@description"/>
+ </xsl:call-template>
+ </xsl:variable>
+ { "<xsl:value-of select="@name"/>", "<xsl:value-of select="$docs"/>" },</xsl:template>
+
+ <xsl:template match="setting" mode="settings">
+ { "<xsl:value-of select="@name"/>", setting_<xsl:value-of select="translate(@name,'-','_')"/>, <xsl:value-of select="count(./property)"/> },</xsl:template>
+
+ <xsl:template name="escape_quotes">
+ <xsl:param name="string" />
+ <xsl:choose>
+ <xsl:when test="contains($string, '"')">
+ <xsl:value-of select="substring-before($string, '"')" />\"<xsl:call-template name="escape_quotes"><xsl:with-param name="string" select="substring-after($string, '"')" /></xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$string" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+</xsl:stylesheet>
#include <net/if_arp.h>
#include <stdio.h>
+#include <stdlib.h>
#include <glib.h>
#include <glib/gi18n.h>
return NULL;
}
+#ifdef HAVE_INTROSPECTION
+#include "settings-docs.c"
+#else
+#define nmc_setting_get_property_doc(setting, prop) "(not available)"
+#endif
+
/*
* Create a description string for a property.
*
- * It returns a description got from properties blurb, concatenated with
+ * It returns a description got from property documentation, concatenated with
* nmcli specific description (if it exists).
*
* Returns: property description or NULL on failure. The caller must free the string.
char *
nmc_setting_get_property_desc (NMSetting *setting, const char *prop)
{
- GParamSpec *spec;
const NmcPropertyFuncs *item;
- const char *setting_desc = "";
+ const char *setting_desc = NULL;
const char *setting_desc_title = "";
const char *nmcli_desc = NULL;
const char *nmcli_desc_title = "";
g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
- spec = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (setting)), prop);
- if (spec) {
- setting_desc = g_param_spec_get_blurb (spec);
+ setting_desc = nmc_setting_get_property_doc (setting, prop);
+ if (setting_desc)
setting_desc_title = _("[NM property description]");
- }
item = nmc_properties_find (nm_setting_get_name (setting), prop);
if (item && item->describe_func) {
}
return g_strdup_printf ("%s\n%s\n%s%s%s%s",
- setting_desc_title, setting_desc,
+ setting_desc_title,
+ setting_desc ? setting_desc : "",
nmcli_nl, nmcli_desc_title, nmcli_nl,
nmcli_desc ? nmcli_desc : "");
}