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 | */ |
32 | ConfigData * |
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 | |