More advanced auto-detection of driver module directory

When running directly from GIT, libvirtd attempts to locate
the directory containing loadable modules. This currently
only works if executing libvirtd with a CWD inside the libvirt
source tree. Switch to locate based on the path to the current
binary instead
This commit is contained in:
Daniel P. Berrange 2012-07-23 16:21:13 +01:00
parent 5e62ba3428
commit e537a31637
1 changed files with 21 additions and 3 deletions

View File

@ -972,9 +972,27 @@ int main(int argc, char **argv) {
virLogSetFromEnv(); virLogSetFromEnv();
#ifdef WITH_DRIVER_MODULES #ifdef WITH_DRIVER_MODULES
if (strstr(argv[0], "lt-libvirtd") && if (strstr(argv[0], "lt-libvirtd")) {
(access("./.git", R_OK) >= 0 || access("../.git", R_OK) >= 0)) char *tmp = strrchr(argv[0], '/');
virDriverModuleInitialize("./src/.libs"); if (!tmp) {
fprintf(stderr, _("%s: cannot identify driver directory\n"), argv[0]);
exit(EXIT_FAILURE);
}
*tmp = '\0';
char *driverdir;
if (virAsprintf(&driverdir, "%s/../../src/.libs", argv[0]) < 0) {
fprintf(stderr, _("%s: initialization failed\n"), argv[0]);
exit(EXIT_FAILURE);
}
if (access(driverdir, R_OK) < 0) {
fprintf(stderr, _("%s: expected driver directory '%s' is missing\n"),
argv[0], driverdir);
exit(EXIT_FAILURE);
}
virDriverModuleInitialize(driverdir);
*tmp = '/';
/* Must not free 'driverdir' - it is still used */
}
#endif #endif
while (1) { while (1) {