1 /*------------------------------------------------------------------------- 2 * 3 * config_info.c 4 * Common code for pg_config output 5 * 6 * 7 * Portions Copyright (c) 1996-2020, 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 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 } 202