50 auto prefix = Glib::path_get_dirname(program_dir);
53 if (g_str_has_suffix(program_dir,
"Contents/MacOS")) {
55 prefix +=
"/Resources";
57#elif defined(__linux__)
58 if (g_str_has_suffix(program_dir,
"/lib64")) {
62 prefix = Glib::build_filename(prefix,
"usr");
81 static char const *inkscape_datadir =
nullptr;
82 if (!inkscape_datadir) {
83 static std::string datadir = Glib::getenv(
"INKSCAPE_DATADIR");
85 if (datadir.empty()) {
88 if (!Glib::file_test(Glib::build_filename(datadir,
"inkscape"), Glib::FileTest::IS_DIR)) {
89 datadir = INKSCAPE_DATADIR;
93 inkscape_datadir = datadir.c_str();
95#if GLIB_CHECK_VERSION(2,58,0)
96 inkscape_datadir = g_canonicalize_filename(inkscape_datadir,
nullptr);
100 return inkscape_datadir;
114 static bool ready =
false;
121 auto app_support_dir = Glib::getenv(
"HOME") +
"/Library/Application Support/org.inkscape.Inkscape";
124 auto bundle_resources_etc_dir = bundle_resources_dir +
"/etc";
125 auto bundle_resources_bin_dir = bundle_resources_dir +
"/bin";
126 auto bundle_resources_lib_dir = bundle_resources_dir +
"/lib";
127 auto bundle_resources_share_dir = bundle_resources_dir +
"/share";
136 if (!Glib::file_test(bundle_resources_lib_dir +
"/gio/modules", Glib::FileTest::EXISTS)) {
143 Glib::setenv(
"XDG_DATA_HOME", app_support_dir +
"/share");
144 Glib::setenv(
"XDG_DATA_DIRS", bundle_resources_share_dir);
145 Glib::setenv(
"XDG_CONFIG_HOME", app_support_dir +
"/config");
146 Glib::setenv(
"XDG_CONFIG_DIRS", bundle_resources_etc_dir +
"/xdg");
147 Glib::setenv(
"XDG_CACHE_HOME", app_support_dir +
"/cache");
151 Glib::setenv(
"GDK_PIXBUF_MODULE_FILE", bundle_resources_lib_dir +
"/gdk-pixbuf-2.0/2.10.0/loaders.cache");
154 Glib::setenv(
"FONTCONFIG_PATH", bundle_resources_etc_dir +
"/fonts");
157 Glib::setenv(
"GIO_MODULE_DIR", bundle_resources_lib_dir +
"/gio/modules");
160 Glib::setenv(
"GI_TYPELIB_PATH", bundle_resources_lib_dir +
"/girepository-1.0");
164 Glib::setenv(
"ENCHANT_PREFIX", bundle_resources_dir);
167 Glib::setenv(
"PATH", bundle_resources_bin_dir +
":" + Glib::getenv(
"PATH"));
172 Glib::setenv(
"DYLD_LIBRARY_PATH", bundle_resources_lib_dir +
":"
173 + bundle_resources_lib_dir +
"/gdk-pixbuf-2.0/2.10.0/loaders");
204 wchar_t module_file_name[MAX_PATH];
205 if (GetModuleFileNameW(NULL, module_file_name, MAX_PATH)) {
206 program_name = g_utf16_to_utf8((gunichar2 *)module_file_name, -1, NULL, NULL, NULL);
208 g_warning(
"get_program_name() - GetModuleFileNameW failed");
210#elif defined(__APPLE__)
211 char pathbuf[PATH_MAX + 1];
212 uint32_t
bufsize =
sizeof(pathbuf);
213 if (_NSGetExecutablePath(pathbuf, &
bufsize) == 0) {
216 g_warning(
"get_program_name() - _NSGetExecutablePath failed");
218#elif defined(__linux__) || defined(__CYGWIN__)
219 program_name = g_file_read_link(
"/proc/self/exe", NULL);
221 g_warning(
"get_program_name() - g_file_read_link failed");
223#elif defined(__NetBSD__)
224 static const int name[] = {CTL_KERN, KERN_PROC_ARGS, -1, KERN_PROC_PATHNAME};
225 char path[MAXPATHLEN];
226 size_t len =
sizeof(path);
227 if (sysctl(
name, __arraycount(
name), path, &
len, NULL, 0) == 0) {
230 g_warning(
"get_program_name() - sysctl failed");
232#elif defined(__FreeBSD__)
233 int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 };
234 char buf[MAXPATHLEN];
235 size_t cb =
sizeof(
buf);
236 if (sysctl(mib, 4,
buf, &cb, NULL, 0) == 0) {
239 g_warning(
"get_program_name() - sysctl failed");
242#warning get_program_name() - no known way to obtain executable name on this platform
243 g_info(
"get_program_name() - no known way to obtain executable name on this platform");