PostgreSQL Source Code  git master
config_info.c
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * config_info.c
4  * Common code for pg_config output
5  *
6  *
7  * Portions Copyright (c) 1996-2024, 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 = palloc_array(ConfigData, *configdata_len);
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");
55  cleanup_path(path);
56  configdata[i].setting = pstrdup(path);
57  i++;
58 
59  configdata[i].name = pstrdup("HTMLDIR");
61  cleanup_path(path);
62  configdata[i].setting = pstrdup(path);
63  i++;
64 
65  configdata[i].name = pstrdup("INCLUDEDIR");
67  cleanup_path(path);
68  configdata[i].setting = pstrdup(path);
69  i++;
70 
71  configdata[i].name = pstrdup("PKGINCLUDEDIR");
73  cleanup_path(path);
74  configdata[i].setting = pstrdup(path);
75  i++;
76 
77  configdata[i].name = pstrdup("INCLUDEDIR-SERVER");
79  cleanup_path(path);
80  configdata[i].setting = pstrdup(path);
81  i++;
82 
83  configdata[i].name = pstrdup("LIBDIR");
85  cleanup_path(path);
86  configdata[i].setting = pstrdup(path);
87  i++;
88 
89  configdata[i].name = pstrdup("PKGLIBDIR");
91  cleanup_path(path);
92  configdata[i].setting = pstrdup(path);
93  i++;
94 
95  configdata[i].name = pstrdup("LOCALEDIR");
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");
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");
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  configdata[i].setting = pstrdup(CONFIGURE_ARGS);
128  i++;
129 
130  configdata[i].name = pstrdup("CC");
131 #ifdef VAL_CC
132  configdata[i].setting = pstrdup(VAL_CC);
133 #else
134  configdata[i].setting = pstrdup(_("not recorded"));
135 #endif
136  i++;
137 
138  configdata[i].name = pstrdup("CPPFLAGS");
139 #ifdef VAL_CPPFLAGS
140  configdata[i].setting = pstrdup(VAL_CPPFLAGS);
141 #else
142  configdata[i].setting = pstrdup(_("not recorded"));
143 #endif
144  i++;
145 
146  configdata[i].name = pstrdup("CFLAGS");
147 #ifdef VAL_CFLAGS
148  configdata[i].setting = pstrdup(VAL_CFLAGS);
149 #else
150  configdata[i].setting = pstrdup(_("not recorded"));
151 #endif
152  i++;
153 
154  configdata[i].name = pstrdup("CFLAGS_SL");
155 #ifdef VAL_CFLAGS_SL
156  configdata[i].setting = pstrdup(VAL_CFLAGS_SL);
157 #else
158  configdata[i].setting = pstrdup(_("not recorded"));
159 #endif
160  i++;
161 
162  configdata[i].name = pstrdup("LDFLAGS");
163 #ifdef VAL_LDFLAGS
164  configdata[i].setting = pstrdup(VAL_LDFLAGS);
165 #else
166  configdata[i].setting = pstrdup(_("not recorded"));
167 #endif
168  i++;
169 
170  configdata[i].name = pstrdup("LDFLAGS_EX");
171 #ifdef VAL_LDFLAGS_EX
172  configdata[i].setting = pstrdup(VAL_LDFLAGS_EX);
173 #else
174  configdata[i].setting = pstrdup(_("not recorded"));
175 #endif
176  i++;
177 
178  configdata[i].name = pstrdup("LDFLAGS_SL");
179 #ifdef VAL_LDFLAGS_SL
180  configdata[i].setting = pstrdup(VAL_LDFLAGS_SL);
181 #else
182  configdata[i].setting = pstrdup(_("not recorded"));
183 #endif
184  i++;
185 
186  configdata[i].name = pstrdup("LIBS");
187 #ifdef VAL_LIBS
188  configdata[i].setting = pstrdup(VAL_LIBS);
189 #else
190  configdata[i].setting = pstrdup(_("not recorded"));
191 #endif
192  i++;
193 
194  configdata[i].name = pstrdup("VERSION");
195  configdata[i].setting = pstrdup("PostgreSQL " PG_VERSION);
196  i++;
197 
198  Assert(i == *configdata_len);
199 
200  return configdata;
201 }
#define Assert(condition)
Definition: c.h:812
ConfigData * get_configdata(const char *my_exec_path, size_t *configdata_len)
Definition: config_info.c:33
#define _(x)
Definition: elog.c:90
#define palloc_array(type, count)
Definition: fe_memutils.h:76
char my_exec_path[MAXPGPATH]
Definition: globals.c:80
int i
Definition: isn.c:72
char * pstrdup(const char *in)
Definition: mcxt.c:1696
#define MAXPGPATH
void cleanup_path(char *path)
Definition: path.c:187
void get_share_path(const char *my_exec_path, char *ret_path)
Definition: path.c:825
void get_pkglib_path(const char *my_exec_path, char *ret_path)
Definition: path.c:879
void get_locale_path(const char *my_exec_path, char *ret_path)
Definition: path.c:888
void get_man_path(const char *my_exec_path, char *ret_path)
Definition: path.c:915
void get_include_path(const char *my_exec_path, char *ret_path)
Definition: path.c:843
void get_lib_path(const char *my_exec_path, char *ret_path)
Definition: path.c:870
void get_etc_path(const char *my_exec_path, char *ret_path)
Definition: path.c:834
void get_doc_path(const char *my_exec_path, char *ret_path)
Definition: path.c:897
void get_html_path(const char *my_exec_path, char *ret_path)
Definition: path.c:906
void get_pkginclude_path(const char *my_exec_path, char *ret_path)
Definition: path.c:852
size_t strlcat(char *dst, const char *src, size_t siz)
Definition: strlcat.c:33
size_t strlcpy(char *dst, const char *src, size_t siz)
Definition: strlcpy.c:45
void get_includeserver_path(const char *my_exec_path, char *ret_path)
Definition: path.c:861
char * name
Definition: config_info.h:14
char * setting
Definition: config_info.h:15