void gnc_environment_setup (void) { gchar *config_path; gchar *env_path; gchar *env_parm; /* Export default parameters to the environment */ env_parm = gnc_path_get_prefix(); if (!g_setenv("GNC_HOME", env_parm, FALSE)) g_warning ("Couldn't set/override environment variable GNC_HOME."); g_free (env_parm); env_parm = gnc_path_get_bindir(); if (!g_setenv("GNC_BIN", env_parm, FALSE)) g_warning ("Couldn't set/override environment variable GNC_BIN."); g_free (env_parm); env_parm = gnc_path_get_pkglibdir(); if (!g_setenv("GNC_LIB", env_parm, FALSE)) g_warning ("Couldn't set/override environment variable GNC_LIB."); g_free (env_parm); env_parm = gnc_path_get_pkgdatadir(); if (!g_setenv("GNC_DATA", env_parm, FALSE)) g_warning ("Couldn't set/override environment variable GNC_DATA."); g_free (env_parm); env_parm = gnc_path_get_pkgsysconfdir(); if (!g_setenv("GNC_CONF", env_parm, FALSE)) g_warning ("Couldn't set/override environment variable GNC_CONF."); g_free (env_parm); env_parm = gnc_path_get_libdir(); if (!g_setenv("SYS_LIB", env_parm, FALSE)) g_warning ("Couldn't set/override environment variable SYS_LIB."); g_free (env_parm); config_path = gnc_path_get_pkgsysconfdir(); #ifdef G_OS_WIN32 { /* unhide files without extension */ gchar *pathext = g_build_path(";", ".", g_getenv("PATHEXT"), (gchar*) NULL); g_setenv("PATHEXT", pathext, TRUE); g_free(pathext); } #endif /* Parse the environment file that got installed with gnucash */ env_path = g_build_filename (config_path, "environment", NULL); gnc_environment_parse_one(env_path); g_free (env_path); /* Parse local overrides for this file */ env_path = g_build_filename (config_path, "environment.local", NULL); gnc_environment_parse_one(env_path); g_free (env_path); g_free (config_path); }
/** Returns the pkglibdir path, usually * "$prefix/lib/gnucash". * * @returns A newly allocated string. */ gchar *gnc_path_get_pkglibdir() { gchar *libdir = gnc_path_get_libdir (); #ifdef G_OS_WIN32 /* Workaround for Bug 618646, {pkglibdir} will be bin/ on Windows */ gchar *result = gnc_gbr_find_bin_dir(libdir); #else gchar *result = g_build_filename (libdir, "gnucash", (char*)NULL); #endif g_free (libdir); //printf("Returning pkglibdir %s\n", result); return result; }
void gnc_module_init_backend_dbi (void) { const char* driver_dir; int num_drivers; gboolean have_sqlite3_driver = FALSE; gboolean have_mysql_driver = FALSE; gboolean have_pgsql_driver = FALSE; /* Initialize libdbi and see which drivers are available. Only register qof backends which have drivers available. */ driver_dir = g_getenv ("GNC_DBD_DIR"); if (driver_dir == nullptr) { PINFO ("GNC_DBD_DIR not set: using libdbi built-in default\n"); } /* dbi_initialize returns -1 in case of errors */ #if HAVE_LIBDBI_R if (dbi_instance) return; num_drivers = dbi_initialize_r (driver_dir, &dbi_instance); #else num_drivers = dbi_initialize (driver_dir); #endif if (num_drivers <= 0) { gchar* dir = g_build_filename (gnc_path_get_libdir (), "dbd", nullptr); #if HAVE_LIBDBI_R if (dbi_instance) return; num_drivers = dbi_initialize_r (dir, &dbi_instance); #else num_drivers = dbi_initialize (dir); #endif g_free (dir); } if (num_drivers <= 0) { PWARN ("No DBD drivers found\n"); } else { dbi_driver driver = nullptr; PINFO ("%d DBD drivers found\n", num_drivers); do { #if HAVE_LIBDBI_R driver = dbi_driver_list_r (driver, dbi_instance); #else driver = dbi_driver_list (driver); #endif if (driver != nullptr) { const gchar* name = dbi_driver_get_name (driver); PINFO ("Driver: %s\n", name); if (strcmp (name, "sqlite3") == 0) { have_sqlite3_driver = TRUE; } else if (strcmp (name, "mysql") == 0) { have_mysql_driver = TRUE; } else if (strcmp (name, "pgsql") == 0) { have_pgsql_driver = TRUE; } } } while (driver != nullptr); } if (have_sqlite3_driver) { const char* name = "GnuCash Libdbi (SQLITE3) Backend"; auto prov = QofBackendProvider_ptr(new QofDbiBackendProvider<DbType::DBI_SQLITE>{name, FILE_URI_TYPE}); qof_backend_register_provider(std::move(prov)); prov = QofBackendProvider_ptr(new QofDbiBackendProvider<DbType::DBI_SQLITE>{name, SQLITE3_URI_TYPE}); qof_backend_register_provider(std::move(prov)); } if (have_mysql_driver) { const char *name = "GnuCash Libdbi (MYSQL) Backend"; auto prov = QofBackendProvider_ptr(new QofDbiBackendProvider<DbType::DBI_MYSQL>{name, "mysql"}); qof_backend_register_provider(std::move(prov)); } if (have_pgsql_driver) { const char* name = "GnuCash Libdbi (POSTGRESQL) Backend"; auto prov = QofBackendProvider_ptr(new QofDbiBackendProvider<DbType::DBI_PGSQL>{name, "postgres"}); qof_backend_register_provider(std::move(prov)); } /* If needed, set log level to DEBUG so that SQl statements will be put into the gnucash.trace file. */ /* qof_log_set_level( log_module, QOF_LOG_DEBUG ); */ }