diff --git a/.gitignore b/.gitignore index dad1ec51f6..f215e02e96 100644 --- a/.gitignore +++ b/.gitignore @@ -218,6 +218,7 @@ valgrind-*.log /data/server.conf /cli/src/nmcli +/cli/src/settings-docs.c /tui/newt/libnmt-newt.a /tui/nmtui diff --git a/cli/src/Makefile.am b/cli/src/Makefile.am index e61c036898..d30725c5c7 100644 --- a/cli/src/Makefile.am +++ b/cli/src/Makefile.am @@ -3,6 +3,7 @@ bin_PROGRAMS = \ AM_CPPFLAGS = \ -I${top_srcdir} \ + -I${top_builddir} \ -I${top_srcdir}/include \ -I${top_builddir}/include \ -I${top_srcdir}/libnm-util \ @@ -37,4 +38,13 @@ nmcli_LDADD = \ $(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 diff --git a/cli/src/settings-docs.xsl b/cli/src/settings-docs.xsl new file mode 100644 index 0000000000..996644bd9e --- /dev/null +++ b/cli/src/settings-docs.xsl @@ -0,0 +1,86 @@ + + + + + + /* Generated file. Do not edit. */ + +typedef struct { + const char *name; + const char *docs; +} NmcPropertyDesc; + + +typedef struct { + const char *name; + NmcPropertyDesc *properties; + int n_properties; +} NmcSettingDesc; + +NmcSettingDesc all_settings[] = { + +}; + +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; +} + + + +NmcPropertyDesc setting_[] = { +}; + + + + + + + + + { "", "" }, + + + { "", setting_, }, + + + + + + \" + + + + + + + + diff --git a/cli/src/settings.c b/cli/src/settings.c index 0fc708b352..379ffc185d 100644 --- a/cli/src/settings.c +++ b/cli/src/settings.c @@ -21,6 +21,7 @@ #include #include +#include #include #include @@ -6367,10 +6368,16 @@ nmc_setting_get_property_allowed_values (NMSetting *setting, const char *prop) 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. @@ -6378,9 +6385,8 @@ nmc_setting_get_property_allowed_values (NMSetting *setting, const char *prop) 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 = ""; @@ -6388,11 +6394,9 @@ nmc_setting_get_property_desc (NMSetting *setting, const char *prop) 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) { @@ -6402,7 +6406,8 @@ nmc_setting_get_property_desc (NMSetting *setting, const char *prop) } 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 : ""); } diff --git a/configure.ac b/configure.ac index 6d1885ea1b..c1f583ebf7 100644 --- a/configure.ac +++ b/configure.ac @@ -267,6 +267,9 @@ AC_SUBST(GUDEV_CFLAGS) AC_SUBST(GUDEV_LIBS) GOBJECT_INTROSPECTION_CHECK([0.9.6]) +if test -z "$INTROSPECTION_MAKEFILE"; then + AC_DEFINE(HAVE_INTROSPECTION, [1], [Define if you have gobject-introspection]) +fi # Qt4 PKG_CHECK_MODULES(QT, [QtCore >= 4 QtDBus QtNetwork], [have_qt=yes],[have_qt=no])