This source file includes following definitions.
- opal_install_dirs_expand_internal
- opal_install_dirs_expand
- opal_install_dirs_expand_setup
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include "opal_config.h"
17
18 #include <string.h>
19
20 #include "opal/util/os_path.h"
21 #include "opal/util/printf.h"
22 #include "opal/mca/installdirs/base/base.h"
23 #include "opal/mca/installdirs/installdirs.h"
24
25
26
27
28
29 #define EXPAND_STRING(name) EXPAND_STRING2(name, name)
30
31 #define EXPAND_STRING2(ompiname, fieldname) \
32 do { \
33 if (NULL != (start_pos = strstr(retval, "${" #fieldname "}"))) { \
34 tmp = retval; \
35 *start_pos = '\0'; \
36 end_pos = start_pos + strlen("${" #fieldname "}"); \
37 opal_asprintf(&retval, "%s%s%s", tmp, \
38 opal_install_dirs.ompiname + destdir_offset, \
39 end_pos); \
40 free(tmp); \
41 changed = true; \
42 } else if (NULL != (start_pos = strstr(retval, "@{" #fieldname "}"))) { \
43 tmp = retval; \
44 *start_pos = '\0'; \
45 end_pos = start_pos + strlen("@{" #fieldname "}"); \
46 opal_asprintf(&retval, "%s%s%s", tmp, \
47 opal_install_dirs.ompiname + destdir_offset, \
48 end_pos); \
49 free(tmp); \
50 changed = true; \
51 } \
52 } while (0)
53
54
55
56
57
58
59 static char *
60 opal_install_dirs_expand_internal(const char* input, bool is_setup)
61 {
62 size_t len, i;
63 bool needs_expand = false;
64 char *retval = NULL;
65 char *destdir = NULL;
66 size_t destdir_offset = 0;
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 if (is_setup) {
109 destdir = getenv("OPAL_DESTDIR");
110 if (NULL != destdir && strlen(destdir) > 0) {
111 destdir_offset = strlen(destdir);
112 }
113 }
114
115 len = strlen(input);
116 for (i = 0 ; i < len ; ++i) {
117 if ('$' == input[i] || '@' == input[i]) {
118 needs_expand = true;
119 break;
120 }
121 }
122
123 retval = strdup(input);
124 if (NULL == retval) return NULL;
125
126 if (needs_expand) {
127 bool changed = false;
128 char *start_pos, *end_pos, *tmp;
129
130 do {
131 changed = false;
132 EXPAND_STRING(prefix);
133 EXPAND_STRING(exec_prefix);
134 EXPAND_STRING(bindir);
135 EXPAND_STRING(sbindir);
136 EXPAND_STRING(libexecdir);
137 EXPAND_STRING(datarootdir);
138 EXPAND_STRING(datadir);
139 EXPAND_STRING(sysconfdir);
140 EXPAND_STRING(sharedstatedir);
141 EXPAND_STRING(localstatedir);
142 EXPAND_STRING(libdir);
143 EXPAND_STRING(includedir);
144 EXPAND_STRING(infodir);
145 EXPAND_STRING(mandir);
146 EXPAND_STRING2(opaldatadir, pkgdatadir);
147 EXPAND_STRING2(opallibdir, pkglibdir);
148 EXPAND_STRING2(opalincludedir, pkgincludedir);
149 } while (changed);
150 }
151
152 if (NULL != destdir) {
153 char *tmp = retval;
154 retval = opal_os_path(false, destdir, tmp, NULL);
155 free(tmp);
156 }
157
158 return retval;
159 }
160
161
162 char *
163 opal_install_dirs_expand(const char* input)
164 {
165
166 return opal_install_dirs_expand_internal(input, false);
167 }
168
169
170 char *
171 opal_install_dirs_expand_setup(const char* input)
172 {
173
174 return opal_install_dirs_expand_internal(input, true);
175 }