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