aboutsummaryrefslogtreecommitdiff
path: root/src/common/config_info.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/config_info.c')
-rw-r--r--src/common/config_info.c206
1 files changed, 206 insertions, 0 deletions
diff --git a/src/common/config_info.c b/src/common/config_info.c
new file mode 100644
index 00000000000..9053a8cbe48
--- /dev/null
+++ b/src/common/config_info.c
@@ -0,0 +1,206 @@
+/*-------------------------------------------------------------------------
+ *
+ * config_info.c
+ * Common code for pg_config output
+ *
+ *
+ * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ *
+ * IDENTIFICATION
+ * src/common/config_info.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifndef FRONTEND
+#include "postgres.h"
+#else
+#include "postgres_fe.h"
+#endif
+
+#include "miscadmin.h"
+#include "common/config_info.h"
+
+static size_t configdata_names_len(void);
+
+static const char *const configdata_names[] =
+{
+ "BINDIR",
+ "DOCDIR",
+ "HTMLDIR",
+ "INCLUDEDIR",
+ "PKGINCLUDEDIR",
+ "INCLUDEDIR-SERVER",
+ "LIBDIR",
+ "PKGLIBDIR",
+ "LOCALEDIR",
+ "MANDIR",
+ "SHAREDIR",
+ "SYSCONFDIR",
+ "PGXS",
+ "CONFIGURE",
+ "CC",
+ "CPPFLAGS",
+ "CFLAGS",
+ "CFLAGS_SL",
+ "LDFLAGS",
+ "LDFLAGS_EX",
+ "LDFLAGS_SL",
+ "LIBS",
+ "VERSION",
+ NULL
+};
+
+static size_t
+configdata_names_len(void)
+{
+ size_t i = 0;
+
+ while (configdata_names[i])
+ i++;
+
+ return i;
+}
+
+/*
+ * get_configdata(char *my_exec_path, size_t *configdata_len)
+ *
+ * Get configure-time constants. The caller is responsible
+ * for pfreeing the result.
+ */
+ConfigData *
+get_configdata(char *my_exec_path, size_t *configdata_len)
+{
+ ConfigData *configdata;
+ char path[MAXPGPATH];
+ char *lastsep;
+ int i;
+
+ *configdata_len = configdata_names_len();
+ configdata = palloc(*configdata_len * sizeof(ConfigData));
+
+ /*
+ * initialize configdata names
+ *
+ * These better be in sync with the settings manually
+ * defined below.
+ */
+ for (i = 0; i < *configdata_len; i++)
+ configdata[i].name = pstrdup(configdata_names[i]);
+
+ strcpy(path, my_exec_path);
+ lastsep = strrchr(path, '/');
+ if (lastsep)
+ *lastsep = '\0';
+ cleanup_path(path);
+ configdata[0].setting = pstrdup(path);
+
+ get_doc_path(my_exec_path, path);
+ cleanup_path(path);
+ configdata[1].setting = pstrdup(path);
+
+ get_html_path(my_exec_path, path);
+ cleanup_path(path);
+ configdata[2].setting = pstrdup(path);
+
+ get_include_path(my_exec_path, path);
+ cleanup_path(path);
+ configdata[3].setting = pstrdup(path);
+
+ get_pkginclude_path(my_exec_path, path);
+ cleanup_path(path);
+ configdata[4].setting = pstrdup(path);
+
+ get_includeserver_path(my_exec_path, path);
+ cleanup_path(path);
+ configdata[5].setting = pstrdup(path);
+
+ get_lib_path(my_exec_path, path);
+ cleanup_path(path);
+ configdata[6].setting = pstrdup(path);
+
+ get_pkglib_path(my_exec_path, path);
+ cleanup_path(path);
+ configdata[7].setting = pstrdup(path);
+
+ get_locale_path(my_exec_path, path);
+ cleanup_path(path);
+ configdata[8].setting = pstrdup(path);
+
+ get_man_path(my_exec_path, path);
+ cleanup_path(path);
+ configdata[9].setting = pstrdup(path);
+
+ get_share_path(my_exec_path, path);
+ cleanup_path(path);
+ configdata[10].setting = pstrdup(path);
+
+ get_etc_path(my_exec_path, path);
+ cleanup_path(path);
+ configdata[11].setting = pstrdup(path);
+
+ get_pkglib_path(my_exec_path, path);
+ strlcat(path, "/pgxs/src/makefiles/pgxs.mk", sizeof(path));
+ cleanup_path(path);
+ configdata[12].setting = pstrdup(path);
+
+#ifdef VAL_CONFIGURE
+ configdata[13].setting = pstrdup(VAL_CONFIGURE);
+#else
+ configdata[13].setting = pstrdup(_("not recorded"));
+#endif
+
+#ifdef VAL_CC
+ configdata[14].setting = pstrdup(VAL_CC);
+#else
+ configdata[14].setting = pstrdup(_("not recorded"));
+#endif
+
+#ifdef VAL_CPPFLAGS
+ configdata[15].setting = pstrdup(VAL_CPPFLAGS);
+#else
+ configdata[15].setting = pstrdup(_("not recorded"));
+#endif
+
+#ifdef VAL_CFLAGS
+ configdata[16].setting = pstrdup(VAL_CFLAGS);
+#else
+ configdata[16].setting = pstrdup(_("not recorded"));
+#endif
+
+#ifdef VAL_CFLAGS_SL
+ configdata[17].setting = pstrdup(VAL_CFLAGS_SL);
+#else
+ configdata[17].setting = pstrdup(_("not recorded"));
+#endif
+
+#ifdef VAL_LDFLAGS
+ configdata[18].setting = pstrdup(VAL_LDFLAGS);
+#else
+ configdata[18].setting = pstrdup(_("not recorded"));
+#endif
+
+#ifdef VAL_LDFLAGS_EX
+ configdata[19].setting = pstrdup(VAL_LDFLAGS_EX);
+#else
+ configdata[19].setting = pstrdup(_("not recorded"));
+#endif
+
+#ifdef VAL_LDFLAGS_SL
+ configdata[20].setting = pstrdup(VAL_LDFLAGS_SL);
+#else
+ configdata[20].setting = pstrdup(_("not recorded"));
+#endif
+
+#ifdef VAL_LIBS
+ configdata[21].setting = pstrdup(VAL_LIBS);
+#else
+ configdata[21].setting = pstrdup(_("not recorded"));
+#endif
+
+ configdata[22].setting = pstrdup("PostgreSQL " PG_VERSION);
+
+ return configdata;
+}