On Tue, Jun 28, 2016 at 5:52 PM, Daniel P. Berrange <berrange@xxxxxxxxxx> wrote: > Applications or system administrators accessing the osinfo > database directly (instead of via the libosinfo API) will > need a well defined means of getting the standard database > locations. The osinfo-db-tool is a trivial command that > can serve this purpose. eg > > $ osinfo-db-path --system > /usr/local/share/libosinfo/db > > $ osinfo-db-path --user > /home/berrange/.config/libosinfo/db > > Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> > --- > .gitignore | 3 + > mingw-osinfo-db-tools.spec.in | 2 + > osinfo-db-tools.spec.in | 2 + > po/POTFILES.in | 1 + > tools/Makefile.am | 9 +- > tools/osinfo-db-export.c | 2 +- > tools/osinfo-db-import.c | 2 +- > tools/osinfo-db-path.c | 223 ++++++++++++++++++++++++++++++++++++++++++ > 8 files changed, 240 insertions(+), 4 deletions(-) > create mode 100644 tools/osinfo-db-path.c > > diff --git a/.gitignore b/.gitignore > index bda3aea..437d9bb 100644 > --- a/.gitignore > +++ b/.gitignore > @@ -43,6 +43,9 @@ tools/osinfo-db-import.1 > tools/osinfo-db-export > tools/osinfo-db-export.exe > tools/osinfo-db-export.1 > +tools/osinfo-db-path > +tools/osinfo-db-path.exe > +tools/osinfo-db-path.1 > po/.intltool-merge-cache > po/Makefile.in.in > po/POTFILES > diff --git a/mingw-osinfo-db-tools.spec.in b/mingw-osinfo-db-tools.spec.in > index 870b2e4..0fe1890 100644 > --- a/mingw-osinfo-db-tools.spec.in > +++ b/mingw-osinfo-db-tools.spec.in > @@ -76,6 +76,7 @@ rm -rf $RPM_BUILD_ROOT%{mingw64_datadir}/man > %doc AUTHORS ChangeLog COPYING.LIB NEWS README > %{mingw32_bindir}/osinfo-db-export.exe > %{mingw32_bindir}/osinfo-db-import.exe > +%{mingw32_bindir}/osinfo-db-path.exe > %{mingw32_bindir}/osinfo-db-validate.exe > %{mingw32_datadir}/locale/*/LC_MESSAGES/osinfo-db-tools.mo > > @@ -83,6 +84,7 @@ rm -rf $RPM_BUILD_ROOT%{mingw64_datadir}/man > %doc AUTHORS ChangeLog COPYING.LIB NEWS README > %{mingw64_bindir}/osinfo-db-export.exe > %{mingw64_bindir}/osinfo-db-import.exe > +%{mingw64_bindir}/osinfo-db-path.exe > %{mingw64_bindir}/osinfo-db-validate.exe > %{mingw64_datadir}/locale/*/LC_MESSAGES/osinfo-db-tools.mo > > diff --git a/osinfo-db-tools.spec.in b/osinfo-db-tools.spec.in > index d125751..155ede9 100644 > --- a/osinfo-db-tools.spec.in > +++ b/osinfo-db-tools.spec.in > @@ -36,9 +36,11 @@ information about operating systems for use with virtualization > %doc AUTHORS ChangeLog COPYING.LIB NEWS README > %{_bindir}/osinfo-db-export > %{_bindir}/osinfo-db-import > +%{_bindir}/osinfo-db-path > %{_bindir}/osinfo-db-validate > %{_mandir}/man1/osinfo-db-export.1* > %{_mandir}/man1/osinfo-db-import.1* > +%{_mandir}/man1/osinfo-db-path.1* > %{_mandir}/man1/osinfo-db-validate.1* > > %changelog > diff --git a/po/POTFILES.in b/po/POTFILES.in > index 6688a2d..279b26f 100644 > --- a/po/POTFILES.in > +++ b/po/POTFILES.in > @@ -1,3 +1,4 @@ > tools/osinfo-db-export.c > tools/osinfo-db-import.c > +tools/osinfo-db-path.c > tools/osinfo-db-validate.c > diff --git a/tools/Makefile.am b/tools/Makefile.am > index 37f9abb..af069a5 100644 > --- a/tools/Makefile.am > +++ b/tools/Makefile.am > @@ -10,9 +10,9 @@ AM_CFLAGS = $(GOBJECT_CFLAGS) \ > -I$(top_srcdir) \ > $(NULL) > > -bin_PROGRAMS = osinfo-db-validate osinfo-db-import osinfo-db-export > +bin_PROGRAMS = osinfo-db-validate osinfo-db-import osinfo-db-export osinfo-db-path > > -man1_MANS = osinfo-db-validate.1 osinfo-db-import.1 osinfo-db-export.1 > +man1_MANS = osinfo-db-validate.1 osinfo-db-import.1 osinfo-db-export.1 osinfo-db-path.1 > > CLEANFILES = $(man1_MANS) > > @@ -43,3 +43,8 @@ osinfo_db_export_LDADD = $(GOBJECT_LIBS) \ > $(GIO_LIBS) \ > $(GLIB_LIBS) \ > $(LIBARCHIVE_LIBS) > + > +osinfo_db_path_SOURCES = osinfo-db-path.c $(COMMON_SOURCES) > +osinfo_db_path_LDADD = $(GOBJECT_LIBS) \ > + $(GIO_LIBS) \ > + $(GLIB_LIBS) > diff --git a/tools/osinfo-db-export.c b/tools/osinfo-db-export.c > index 553b797..1973a33 100644 > --- a/tools/osinfo-db-export.c > +++ b/tools/osinfo-db-export.c > @@ -518,7 +518,7 @@ packed into the archive. > > =head1 SEE ALSO > > -C<osinfo-db-import(1)> > +C<osinfo-db-import(1)>, C<osinfo-db-path(1)> > > =head1 AUTHORS > > diff --git a/tools/osinfo-db-import.c b/tools/osinfo-db-import.c > index 17d9e23..a75745b 100644 > --- a/tools/osinfo-db-import.c > +++ b/tools/osinfo-db-import.c > @@ -365,7 +365,7 @@ installed. > > =head1 SEE ALSO > > -C<osinfo-db-export(1)> > +C<osinfo-db-export(1)>, C<osinfo-db-path(1)> > > =head1 AUTHORS > > diff --git a/tools/osinfo-db-path.c b/tools/osinfo-db-path.c > new file mode 100644 > index 0000000..08cefa4 > --- /dev/null > +++ b/tools/osinfo-db-path.c > @@ -0,0 +1,223 @@ > +/* > + * Copyright (C) 2016 Red Hat, Inc > + * > + * osinfo-db-path: report the path to the osinfo database > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License along > + * with this program; if not, write to the Free Software Foundation, > + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. > + * > + * Authors: > + * Daniel P. Berrange <berrange@xxxxxxxxxx> > + */ > + > +#include <config.h> > + > +#include <locale.h> > +#include <glib/gi18n.h> > +#include <stdlib.h> > + > +#include "osinfo-db-util.h" > + > +const char *argv0; > + > +gint main(gint argc, gchar **argv) > +{ > + GOptionContext *context; > + GError *error = NULL; > + gint ret = EXIT_FAILURE; > + gboolean user = FALSE; > + gboolean local = FALSE; > + gboolean system = FALSE; > + const gchar *root = ""; > + const gchar *custom = NULL; > + int locs = 0; > + char *path; > + GFile *dir = NULL; > + const GOptionEntry entries[] = { > + { "user", 0, 0, G_OPTION_ARG_NONE, (void *)&user, > + N_("Report the user directory"), NULL, }, > + { "local", 0, 0, G_OPTION_ARG_NONE, (void *)&local, > + N_("Report the local directory"), NULL, }, > + { "system", 0, 0, G_OPTION_ARG_NONE, (void *)&system, > + N_("Report the system directory"), NULL, }, > + { "dir", 0, 0, G_OPTION_ARG_STRING, (void *)&custom, > + N_("Report the custom directory"), NULL, }, > + { "root", 0, 0, G_OPTION_ARG_STRING, &root, > + N_("Report against root directory"), NULL, }, > + { NULL, 0, 0, 0, NULL, NULL, NULL }, > + }; > + argv0 = argv[0]; > + > + setlocale(LC_ALL, ""); > + textdomain(GETTEXT_PACKAGE); > + bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR); > + bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); > + > + context = g_option_context_new(_("- Report database locations ")); > + > + g_option_context_add_main_entries(context, entries, GETTEXT_PACKAGE); > + > + if (!g_option_context_parse(context, &argc, &argv, &error)) { > + g_printerr(_("%s: error while parsing commandline options: %s\n\n"), > + argv0, error->message); > + g_printerr("%s\n", g_option_context_get_help(context, FALSE, NULL)); > + goto error; > + } > + > + if (argc > 1) { > + g_printerr(_("%s: unexpected extra arguments\n"), > + argv0); > + goto error; > + } > + > + if (local) > + locs++; > + if (system) > + locs++; > + if (user) > + locs++; > + if (custom) > + locs++; > + if (locs > 1) { > + g_printerr(_("Only one of --user, --local, --system & --dir can be used")); > + goto error; > + } > + > + dir = osinfo_db_get_path(root, user, local, system, custom); > + > + path = g_file_get_path(dir); > + g_print("%s\n", path); > + g_free(path); > + > + ret = EXIT_SUCCESS; > + > + error: > + if (dir) { > + g_object_unref(dir); > + } > + g_clear_error(&error); > + g_option_context_free(context); > + > + return ret; > +} > + > + > +/* > +=pod > + > +=head1 NAME > + > +osinfo-db-path - Report database locations > + > +=head1 SYNOPSIS > + > +osinfo-db-path [OPTIONS...] > + > +=head1 DESCRIPTION > + > +The B<osinfo-db-path> tool will report the paths associated > +with the standard osinfo database locations: > + > +=over 1 > + > +=item B<system> > + > +This is the primary system-wide database location, intended > +for use by operating system vendors distributing database > +files in the native package format. > + > +=item B<local> > + > +This is the secondary system-wide database location, intended > +for use by system administrators wishing to provide an updated > +database for all users. > + > +=item B<user> > + > +This is the user private database location, intended for use > +by unprivileged local users wishing to provide applications > +they use with an updated database. > + > +=back > + > +If run by a privileged account (ie root), the B<local> database > +location will be reported by default, otherwise the B<user> location > +will be reported. > + > +=head1 OPTIONS > + > +=over 8 > + > +=item B<--user> > + > +Override the default behaviour to force reporting of the > +B<user> database location. > + > +=item B<--local> > + > +Override the default behaviour to force reporting of the > +B<local> database location. > + > +=item B<--system> > + > +Override the default behaviour to force reporting of the > +B<system> database location. > + > +=item B<--dir=PATH> > + > +Override the default behaviour to force reporting of the > +custom directory B<PATH>. > + > +=item B<--root=PATH> > + > +Prefix the database location with the root directory given > +by C<PATH>. This is useful when wishing to report paths > +relative to a chroot environment or equivalent. > + > +=back > + > +=head1 EXIT STATUS > + > +The exit status will be 0 if the requested path was reported, > +or 1 if the arguments were invalid. > + > +=head1 SEE ALSO > + > +C<osinfo-db-export(1)>, C<osinfo-db-import(1)> > + > +=head1 AUTHORS > + > +Daniel P. Berrange <berrange@xxxxxxxxxx> > + > +=head1 COPYRIGHT > + > +Copyright (C) 2016 Red Hat, Inc. > + > +=head1 LICENSE > + > +C<osinfo-db-import> is distributed under the termsof the GNU LGPL v2+ "terms of" instead of termsof I've seen this typo in a few other places as well: https://paste.fedoraproject.org/388289/67804393/ > +license. This is free software; see the source for copying conditions. > +There is NO warranty; not even for MERCHANTABILITY or FITNESS > +FOR A PARTICULAR PURPOSE > + > +=cut > +*/ > + > +/* > + * Local variables: > + * indent-tabs-mode: nil > + * c-indent-level: 4 > + * c-basic-offset: 4 > + * End: > + */ > -- > 2.7.4 > > _______________________________________________ > Libosinfo mailing list > Libosinfo@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libosinfo _______________________________________________ Libosinfo mailing list Libosinfo@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libosinfo