1 /*-------------------------------------------------------------------------
2 *
3 * config_info.c
4 * Common code for pg_config output
5 *
6 *
7 * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
9 *
10 *
11 * IDENTIFICATION
12 * src/common/config_info.c
13 *
14 *-------------------------------------------------------------------------
15 */
16
17 #ifndef FRONTEND
18 #include "postgres.h"
19 #else
20 #include "postgres_fe.h"
21 #endif
22
23 #include "common/config_info.h"
24
25
26 /*
27 * get_configdata(const char *my_exec_path, size_t *configdata_len)
28 *
29 * Get configure-time constants. The caller is responsible
30 * for pfreeing the result.
31 */
32 ConfigData *
get_configdata(const char * my_exec_path,size_t * configdata_len)33 get_configdata(const char *my_exec_path, size_t *configdata_len)
34 {
35 ConfigData *configdata;
36 char path[MAXPGPATH];
37 char *lastsep;
38 int i = 0;
39
40 /* Adjust this to match the number of items filled below */
41 *configdata_len = 23;
42 configdata = (ConfigData *) palloc(*configdata_len * sizeof(ConfigData));
43
44 configdata[i].name = pstrdup("BINDIR");
45 strlcpy(path, my_exec_path, sizeof(path));
46 lastsep = strrchr(path, '/');
47 if (lastsep)
48 *lastsep = '\0';
49 cleanup_path(path);
50 configdata[i].setting = pstrdup(path);
51 i++;
52
53 configdata[i].name = pstrdup("DOCDIR");
54 get_doc_path(my_exec_path, path);
55 cleanup_path(path);
56 configdata[i].setting = pstrdup(path);
57 i++;
58
59 configdata[i].name = pstrdup("HTMLDIR");
60 get_html_path(my_exec_path, path);
61 cleanup_path(path);
62 configdata[i].setting = pstrdup(path);
63 i++;
64
65 configdata[i].name = pstrdup("INCLUDEDIR");
66 get_include_path(my_exec_path, path);
67 cleanup_path(path);
68 configdata[i].setting = pstrdup(path);
69 i++;
70
71 configdata[i].name = pstrdup("PKGINCLUDEDIR");
72 get_pkginclude_path(my_exec_path, path);
73 cleanup_path(path);
74 configdata[i].setting = pstrdup(path);
75 i++;
76
77 configdata[i].name = pstrdup("INCLUDEDIR-SERVER");
78 get_includeserver_path(my_exec_path, path);
79 cleanup_path(path);
80 configdata[i].setting = pstrdup(path);
81 i++;
82
83 configdata[i].name = pstrdup("LIBDIR");
84 get_lib_path(my_exec_path, path);
85 cleanup_path(path);
86 configdata[i].setting = pstrdup(path);
87 i++;
88
89 configdata[i].name = pstrdup("PKGLIBDIR");
90 get_pkglib_path(my_exec_path, path);
91 cleanup_path(path);
92 configdata[i].setting = pstrdup(path);
93 i++;
94
95 configdata[i].name = pstrdup("LOCALEDIR");
96 get_locale_path(my_exec_path, path);
97 cleanup_path(path);
98 configdata[i].setting = pstrdup(path);
99 i++;
100
101 configdata[i].name = pstrdup("MANDIR");
102 get_man_path(my_exec_path, path);
103 cleanup_path(path);
104 configdata[i].setting = pstrdup(path);
105 i++;
106
107 configdata[i].name = pstrdup("SHAREDIR");
108 get_share_path(my_exec_path, path);
109 cleanup_path(path);
110 configdata[i].setting = pstrdup(path);
111 i++;
112
113 configdata[i].name = pstrdup("SYSCONFDIR");
114 get_etc_path(my_exec_path, path);
115 cleanup_path(path);
116 configdata[i].setting = pstrdup(path);
117 i++;
118
119 configdata[i].name = pstrdup("PGXS");
120 get_pkglib_path(my_exec_path, path);
121 strlcat(path, "/pgxs/src/makefiles/pgxs.mk", sizeof(path));
122 cleanup_path(path);
123 configdata[i].setting = pstrdup(path);
124 i++;
125
126 configdata[i].name = pstrdup("CONFIGURE");
127 #ifdef VAL_CONFIGURE
128 configdata[i].setting = pstrdup(VAL_CONFIGURE);
129 #else
130 configdata[i].setting = pstrdup(_("not recorded"));
131 #endif
132 i++;
133
134 configdata[i].name = pstrdup("CC");
135 #ifdef VAL_CC
136 configdata[i].setting = pstrdup(VAL_CC);
137 #else
138 configdata[i].setting = pstrdup(_("not recorded"));
139 #endif
140 i++;
141
142 configdata[i].name = pstrdup("CPPFLAGS");
143 #ifdef VAL_CPPFLAGS
144 configdata[i].setting = pstrdup(VAL_CPPFLAGS);
145 #else
146 configdata[i].setting = pstrdup(_("not recorded"));
147 #endif
148 i++;
149
150 configdata[i].name = pstrdup("CFLAGS");
151 #ifdef VAL_CFLAGS
152 configdata[i].setting = pstrdup(VAL_CFLAGS);
153 #else
154 configdata[i].setting = pstrdup(_("not recorded"));
155 #endif
156 i++;
157
158 configdata[i].name = pstrdup("CFLAGS_SL");
159 #ifdef VAL_CFLAGS_SL
160 configdata[i].setting = pstrdup(VAL_CFLAGS_SL);
161 #else
162 configdata[i].setting = pstrdup(_("not recorded"));
163 #endif
164 i++;
165
166 configdata[i].name = pstrdup("LDFLAGS");
167 #ifdef VAL_LDFLAGS
168 configdata[i].setting = pstrdup(VAL_LDFLAGS);
169 #else
170 configdata[i].setting = pstrdup(_("not recorded"));
171 #endif
172 i++;
173
174 configdata[i].name = pstrdup("LDFLAGS_EX");
175 #ifdef VAL_LDFLAGS_EX
176 configdata[i].setting = pstrdup(VAL_LDFLAGS_EX);
177 #else
178 configdata[i].setting = pstrdup(_("not recorded"));
179 #endif
180 i++;
181
182 configdata[i].name = pstrdup("LDFLAGS_SL");
183 #ifdef VAL_LDFLAGS_SL
184 configdata[i].setting = pstrdup(VAL_LDFLAGS_SL);
185 #else
186 configdata[i].setting = pstrdup(_("not recorded"));
187 #endif
188 i++;
189
190 configdata[i].name = pstrdup("LIBS");
191 #ifdef VAL_LIBS
192 configdata[i].setting = pstrdup(VAL_LIBS);
193 #else
194 configdata[i].setting = pstrdup(_("not recorded"));
195 #endif
196 i++;
197
198 configdata[i].name = pstrdup("VERSION");
199 configdata[i].setting = pstrdup("PostgreSQL " PG_VERSION);
200 i++;
201
202 Assert(i == *configdata_len);
203
204 return configdata;
205 }
206