1/*-------------------------------------------------------------------------
2 *
3 * config_info.c
4 * Common code for pg_config output
5 *
6 *
7 * Portions Copyright (c) 1996-2019, 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 */
32ConfigData *
33get_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