[Libosinfo] [libosinfo] Allow to use system pci.ids/usb.ids files

Christophe Fergeau cfergeau at redhat.com
Thu Feb 28 11:33:13 UTC 2013


Most distros already ship copies of pci.ids/usb.ids. This commit
allows to make use of these rather than the ones shipped with
libosinfo. This is achieved through the use of
--with-usb-ids-path and --with-pci-ids-path configure flags.
---
 configure.ac           | 24 ++++++++++++++++++++++++
 data/Makefile.am       | 25 ++++++++++++++-----------
 libosinfo.spec.in      |  2 +-
 osinfo/osinfo_loader.c | 45 +++++++++++++++++++++++++++++++++++++++++----
 4 files changed, 80 insertions(+), 16 deletions(-)

diff --git a/configure.ac b/configure.ac
index cf46f4d..5a54192 100644
--- a/configure.ac
+++ b/configure.ac
@@ -171,6 +171,30 @@ fi
 AC_SUBST(COVERAGE_CFLAGS)
 AC_SUBST(COVERAGE_LDFLAGS)
 
+# Path to the usb.ids file -- to know if we use one shipped with another
+# package, or an internal file
+AC_ARG_WITH(usb-ids-path,
+              [AC_HELP_STRING([--with-usb-ids-path],
+                              [Specify the path to usb.ids @<:@default=(internal)@:>@])],,
+                              [with_usb_ids_path="\${usb_databasedir}/usb.ids"])
+
+AM_CONDITIONAL(USE_INTERNAL_USB_IDS, test "x$with_usb_ids_path" = "x\${usb_databasedir}/usb.ids")
+if test "x$with_usb_ids_path" != "x\${usb_databasedir}/usb.ids"; then
+  AC_DEFINE_UNQUOTED([USB_IDS], ["$with_usb_ids_path"], [Path to the usb.ids file])
+fi
+
+# Path to the pci.ids file -- to know if we use one shipped with another
+# package, or an internal file
+AC_ARG_WITH(pci-ids-path,
+              [AC_HELP_STRING([--with-pci-ids-path],
+                              [Specify the path to pci.ids @<:@default=(internal)@:>@])],,
+                              [with_pci_ids_path="\${pci_databasedir}/pci.ids"])
+
+AM_CONDITIONAL(USE_INTERNAL_PCI_IDS, test "x$with_pci_ids_path" = "x\${pci_databasedir}/pci.ids")
+if test "x$with_pci_ids_path" != "x\${pci_databasedir}/pci.ids"; then
+  AC_DEFINE_UNQUOTED([PCI_IDS], ["$with_pci_ids_path"], [Path to the pci.ids file])
+fi
+
 # Setup GLIB_MKENUMS to use glib-mkenums even if GLib is uninstalled.
 GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
 AC_SUBST(GLIB_MKENUMS)
diff --git a/data/Makefile.am b/data/Makefile.am
index 747f0e9..e88afa6 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -1,10 +1,21 @@
 
 SUBDIRS = datamaps devices oses hypervisors install-scripts schemas
-
 EXTRA_DIST = usb.ids pci.ids 95-osinfo.rules.in
+CLEANFILES = usb.ids pci.ids
 
-databasedir = $(pkgdatadir)/db/
-database_DATA = usb.ids pci.ids
+if USE_INTERNAL_USB_IDS
+usb_database_DATA = usb.ids
+usb_databasedir = $(pkgdatadir)/db/
+usb.ids:
+	-wget -q -O $@ http://www.linux-usb.org/usb.ids
+endif
+
+if USE_INTERNAL_PCI_IDS
+pci_database_DATA = pci.ids
+pci_databasedir = $(pkgdatadir)/db/
+pci.ids:
+	-wget -q -O $@ http://pciids.sourceforge.net/v2.2/pci.ids
+endif
 
 if WITH_UDEV
 BUILT_SOURCES = 95-osinfo.rules
@@ -17,11 +28,3 @@ install-data-hook: 95-osinfo.rules
 	$(INSTALL) -m 0644 95-osinfo.rules $(DESTDIR)$(UDEV_RULESDIR)
 
 endif
-
-CLEANFILES = usb.ids pci.ids
-
-usb.ids:
-	-wget -q -O $@ http://www.linux-usb.org/usb.ids
-
-pci.ids:
-	-wget -q -O $@ http://pciids.sourceforge.net/v2.2/pci.ids
diff --git a/libosinfo.spec.in b/libosinfo.spec.in
index 4e59504..0d5a3d5 100644
--- a/libosinfo.spec.in
+++ b/libosinfo.spec.in
@@ -84,7 +84,7 @@ This package provides the Vala bindings for libosinfo library.
 %define udev_arg --enable-udev=no
 %endif
 
-%configure %{gir_arg} %{udev_arg} --enable-vala=yes
+%configure %{gir_arg} %{udev_arg} --enable-vala=yes --with-usb-ids-path=/usr/share/hwdata/usb.ids --with-pci-ids-path=/usr/share/hwdata/pci.ids
 %__make %{?_smp_mflags} V=1
 
 chmod a-x examples/*.js examples/*.py
diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
index 76e9bc2..ec8c94c 100644
--- a/osinfo/osinfo_loader.c
+++ b/osinfo/osinfo_loader.c
@@ -1653,10 +1653,26 @@ osinfo_loader_process_file(OsinfoLoader *loader,
     case G_FILE_TYPE_REGULAR:
         if (g_str_has_suffix(name, ".xml"))
             osinfo_loader_process_file_reg_xml(loader, file, info, &error);
-        else if (strcmp(name, "usb.ids") == 0)
-            osinfo_loader_process_file_reg_usb(loader, file, info, &error);
-        else if (strcmp(name, "pci.ids") == 0)
-            osinfo_loader_process_file_reg_pci(loader, file, info, &error);
+        else {
+            gchar *pci_ids_filename;
+            gchar *usb_ids_filename;
+#if defined(PCI_IDS)
+            pci_ids_filename = g_path_get_basename(PCI_IDS);
+#else
+            pci_ids_filename = g_strdup("pci.ids");
+#endif
+#if defined(USB_IDS)
+            usb_ids_filename = g_path_get_basename(USB_IDS);
+#else
+            usb_ids_filename = g_strdup("usb.ids");
+#endif
+            if (strcmp(name, pci_ids_filename) == 0)
+                osinfo_loader_process_file_reg_pci(loader, file, info, &error);
+            else if (strcmp(name, usb_ids_filename) == 0)
+                osinfo_loader_process_file_reg_usb(loader, file, info, &error);
+            g_free(pci_ids_filename);
+            g_free(usb_ids_filename);
+        }
         break;
 
     case G_FILE_TYPE_DIRECTORY:
@@ -1782,6 +1798,27 @@ void osinfo_loader_process_system_path(OsinfoLoader *loader,
                                FALSE,
                                err);
     g_object_unref(file);
+    if (error_is_set(err))
+        return;
+
+#ifdef PCI_IDS
+    /* Load external pci.ids file */
+    file = g_file_new_for_path(PCI_IDS);
+    osinfo_loader_process_file(loader, file, FALSE, err);
+    g_object_unref(file);
+    if (error_is_set(err))
+        return;
+#endif
+
+#ifdef USB_IDS
+    /* Load external usb.ids file */
+    file = g_file_new_for_path(USB_IDS);
+    osinfo_loader_process_file(loader, file, FALSE, err);
+    g_object_unref(file);
+    if (error_is_set(err))
+        return;
+#endif
+
 }
 
 void osinfo_loader_process_local_path(OsinfoLoader *loader, GError **err)
-- 
1.8.1.2




More information about the Libosinfo mailing list