kmod_module: parse dependencies on demand
diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c
index a5c7ca3..74e8d22 100644
--- a/libkmod/libkmod-module.c
+++ b/libkmod/libkmod-module.c
@@ -82,7 +82,7 @@
 	return modname;
 }
 
-int kmod_module_parse_dep(struct kmod_module *mod, char *line)
+int kmod_module_parse_depline(struct kmod_module *mod, char *line)
 {
 	struct kmod_ctx *ctx = mod->ctx;
 	struct kmod_list *list = NULL;
@@ -96,6 +96,10 @@
 	if (p == NULL)
 		return 0;
 
+	*p = '\0';
+	if (mod->path == NULL)
+		mod->path = strdup(line);
+
 	p++;
 
 	for (p = strtok_r(p, " \t", &saveptr); p != NULL;
@@ -276,14 +280,24 @@
 
 KMOD_EXPORT struct kmod_list *kmod_module_get_dependencies(const struct kmod_module *mod)
 {
-	/* TODO: populate dependencies on demand */
 	struct kmod_list *l, *l_new, *list_new = NULL;
 
 	if (mod == NULL)
 		return NULL;
 
-	if (!mod->init.dep)
-		return NULL;
+	if (!mod->init.dep) {
+		/* lazy init */
+		char *line = kmod_search_moddep(mod->ctx, mod->name);
+
+		if (line == NULL)
+			return NULL;
+
+		kmod_module_parse_depline((struct kmod_module *)mod, line);
+		free(line);
+
+		if (!mod->init.dep)
+			return NULL;
+	}
 
 	kmod_list_foreach(l, mod->dep) {
 		l_new = kmod_list_append(list_new, kmod_module_ref(l->data));