1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
/*
* path-prefix.cpp - Inkscape specific prefix handling
*
* Authors:
* Eduard Braun <eduard.braun2@gmx.de>
*
* Copyright (C) 2017 Authors
*
* This file is part of Inkscape.
*
* Inkscape is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* See the file COPYING for details.
*
*/
#ifdef HAVE_CONFIG_H
# include "config.h" // only include where actually required!
#endif
#include "io/resource.h"
#include "path-prefix.h"
#include <glib.h>
/**
* Determine the location of the Inkscape data directory (typically the share/ folder
* from where Inkscape should be loading resources) and append a relative path
*
* - by default use the compile time value of INKSCAPE_DATADIR
* - on Windows inkscape_datadir will be relative to the called executable by default
* (typically inkscape/share but also handles the case where the executable is in a /bin subfolder)
* - if the environment variable INKSCAPE_DATADIR is set it will override all of the above
*/
char *append_inkscape_datadir(const char *relative_path)
{
static gchar const *inkscape_datadir;
if (!inkscape_datadir) {
gchar const *datadir_env = g_getenv("INKSCAPE_DATADIR");
if (datadir_env) {
#if GLIB_CHECK_VERSION(2,58,0)
inkscape_datadir = g_canonicalize_filename(datadir_env, NULL);
#else
inkscape_datadir = g_strdup(datadir_env);
#endif
} else {
#ifdef _WIN32
gchar *module_path = g_win32_get_package_installation_directory_of_module(NULL);
inkscape_datadir = g_build_filename(module_path, "share", NULL);
g_free(module_path);
#else
inkscape_datadir = INKSCAPE_DATADIR;
#endif
}
}
if (!relative_path) {
relative_path = "";
}
return g_build_filename(inkscape_datadir, relative_path, NULL);
}
gchar *get_extensions_path()
{
using namespace Inkscape::IO::Resource;
gchar const *pythonpath = g_getenv("PYTHONPATH");
gchar *extdir;
gchar *new_pythonpath;
#ifdef _WIN32
extdir = g_win32_locale_filename_from_utf8(INKSCAPE_EXTENSIONDIR);
#else
extdir = g_strdup(INKSCAPE_EXTENSIONDIR);
#endif
// On some platforms, INKSCAPE_EXTENSIONDIR is not absolute,
// but relative to the directory that contains the Inkscape executable.
// Since we spawn Python chdir'ed into the script's directory,
// we need to obtain the absolute path here.
if (!g_path_is_absolute(extdir)) {
gchar *curdir = g_get_current_dir();
gchar *extdir_new = g_build_filename(curdir, extdir, NULL);
g_free(extdir);
g_free(curdir);
extdir = extdir_new;
}
if (pythonpath) {
new_pythonpath = g_strdup_printf("%s" G_SEARCHPATH_SEPARATOR_S "%s", extdir, pythonpath);
g_free(extdir);
}
else {
new_pythonpath = extdir;
}
return new_pythonpath;
}
gchar *get_datadir_path()
{
using namespace Inkscape::IO::Resource;
gchar *datadir;
#ifdef _WIN32
datadir = g_win32_locale_filename_from_utf8(profile_path(""));
#else
datadir = profile_path("");
#endif
// On some platforms, INKSCAPE_EXTENSIONDIR is not absolute,
// but relative to the directory that contains the Inkscape executable.
// Since we spawn Python chdir'ed into the script's directory,
// we need to obtain the absolute path here.
if (!g_path_is_absolute(datadir)) {
gchar *curdir = g_get_current_dir();
gchar *datadir_new = g_build_filename(curdir, datadir, NULL);
g_free(datadir);
g_free(curdir);
datadir = datadir_new;
}
return datadir;
}
/*
Local Variables:
mode:c++
c-file-style:"stroustrup"
c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
indent-tabs-mode:nil
fill-column:99
End:
*/
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
|