summaryrefslogtreecommitdiffstats
path: root/src/bin/pg_config/pg_config.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/pg_config/pg_config.c')
-rw-r--r--src/bin/pg_config/pg_config.c189
1 files changed, 189 insertions, 0 deletions
diff --git a/src/bin/pg_config/pg_config.c b/src/bin/pg_config/pg_config.c
new file mode 100644
index 0000000..62b97af
--- /dev/null
+++ b/src/bin/pg_config/pg_config.c
@@ -0,0 +1,189 @@
+/*-------------------------------------------------------------------------
+ *
+ * pg_config.c
+ *
+ * This program reports various pieces of information about the
+ * installed version of PostgreSQL. Packages that interface to
+ * PostgreSQL can use it to configure their build.
+ *
+ * This is a C implementation of the previous shell script written by
+ * Peter Eisentraut <peter_e@gmx.net>, with adjustments made to
+ * accommodate the possibility that the installation has been relocated from
+ * the place originally configured.
+ *
+ * author of C translation: Andrew Dunstan mailto:andrew@dunslane.net
+ *
+ * This code is released under the terms of the PostgreSQL License.
+ *
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
+ *
+ * src/bin/pg_config/pg_config.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres_fe.h"
+
+#include "common/config_info.h"
+#include "port.h"
+
+static const char *progname;
+
+/*
+ * Table of known information items
+ *
+ * Be careful to keep this in sync with the help() display.
+ */
+typedef struct
+{
+ const char *switchname;
+ const char *configname;
+} InfoItem;
+
+static const InfoItem info_items[] = {
+ {"--bindir", "BINDIR"},
+ {"--docdir", "DOCDIR"},
+ {"--htmldir", "HTMLDIR"},
+ {"--includedir", "INCLUDEDIR"},
+ {"--pkgincludedir", "PKGINCLUDEDIR"},
+ {"--includedir-server", "INCLUDEDIR-SERVER"},
+ {"--libdir", "LIBDIR"},
+ {"--pkglibdir", "PKGLIBDIR"},
+ {"--localedir", "LOCALEDIR"},
+ {"--mandir", "MANDIR"},
+ {"--sharedir", "SHAREDIR"},
+ {"--sysconfdir", "SYSCONFDIR"},
+ {"--pgxs", "PGXS"},
+ {"--configure", "CONFIGURE"},
+ {"--cc", "CC"},
+ {"--cppflags", "CPPFLAGS"},
+ {"--cflags", "CFLAGS"},
+ {"--cflags_sl", "CFLAGS_SL"},
+ {"--ldflags", "LDFLAGS"},
+ {"--ldflags_ex", "LDFLAGS_EX"},
+ {"--ldflags_sl", "LDFLAGS_SL"},
+ {"--libs", "LIBS"},
+ {"--version", "VERSION"},
+ {NULL, NULL}
+};
+
+
+static void
+help(void)
+{
+ printf(_("\n%s provides information about the installed version of PostgreSQL.\n\n"), progname);
+ printf(_("Usage:\n"));
+ printf(_(" %s [OPTION]...\n\n"), progname);
+ printf(_("Options:\n"));
+ printf(_(" --bindir show location of user executables\n"));
+ printf(_(" --docdir show location of documentation files\n"));
+ printf(_(" --htmldir show location of HTML documentation files\n"));
+ printf(_(" --includedir show location of C header files of the client\n"
+ " interfaces\n"));
+ printf(_(" --pkgincludedir show location of other C header files\n"));
+ printf(_(" --includedir-server show location of C header files for the server\n"));
+ printf(_(" --libdir show location of object code libraries\n"));
+ printf(_(" --pkglibdir show location of dynamically loadable modules\n"));
+ printf(_(" --localedir show location of locale support files\n"));
+ printf(_(" --mandir show location of manual pages\n"));
+ printf(_(" --sharedir show location of architecture-independent support files\n"));
+ printf(_(" --sysconfdir show location of system-wide configuration files\n"));
+ printf(_(" --pgxs show location of extension makefile\n"));
+ printf(_(" --configure show options given to \"configure\" script when\n"
+ " PostgreSQL was built\n"));
+ printf(_(" --cc show CC value used when PostgreSQL was built\n"));
+ printf(_(" --cppflags show CPPFLAGS value used when PostgreSQL was built\n"));
+ printf(_(" --cflags show CFLAGS value used when PostgreSQL was built\n"));
+ printf(_(" --cflags_sl show CFLAGS_SL value used when PostgreSQL was built\n"));
+ printf(_(" --ldflags show LDFLAGS value used when PostgreSQL was built\n"));
+ printf(_(" --ldflags_ex show LDFLAGS_EX value used when PostgreSQL was built\n"));
+ printf(_(" --ldflags_sl show LDFLAGS_SL value used when PostgreSQL was built\n"));
+ printf(_(" --libs show LIBS value used when PostgreSQL was built\n"));
+ printf(_(" --version show the PostgreSQL version\n"));
+ printf(_(" -?, --help show this help, then exit\n"));
+ printf(_("\nWith no arguments, all known items are shown.\n\n"));
+ printf(_("Report bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
+}
+
+static void
+advice(void)
+{
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+}
+
+static void
+show_item(const char *configname,
+ ConfigData *configdata,
+ size_t configdata_len)
+{
+ int i;
+
+ for (i = 0; i < configdata_len; i++)
+ {
+ if (strcmp(configname, configdata[i].name) == 0)
+ printf("%s\n", configdata[i].setting);
+ }
+}
+
+int
+main(int argc, char **argv)
+{
+ ConfigData *configdata;
+ size_t configdata_len;
+ char my_exec_path[MAXPGPATH];
+ int i;
+ int j;
+
+ set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_config"));
+
+ progname = get_progname(argv[0]);
+
+ /* check for --help */
+ for (i = 1; i < argc; i++)
+ {
+ if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-?") == 0)
+ {
+ help();
+ exit(0);
+ }
+ }
+
+ if (find_my_exec(argv[0], my_exec_path) < 0)
+ {
+ fprintf(stderr, _("%s: could not find own program executable\n"), progname);
+ exit(1);
+ }
+
+ configdata = get_configdata(my_exec_path, &configdata_len);
+ /* no arguments -> print everything */
+ if (argc < 2)
+ {
+ for (i = 0; i < configdata_len; i++)
+ printf("%s = %s\n", configdata[i].name, configdata[i].setting);
+ exit(0);
+ }
+
+ /* otherwise print requested items */
+ for (i = 1; i < argc; i++)
+ {
+ for (j = 0; info_items[j].switchname != NULL; j++)
+ {
+ if (strcmp(argv[i], info_items[j].switchname) == 0)
+ {
+ show_item(info_items[j].configname,
+ configdata, configdata_len);
+ break;
+ }
+ }
+ if (info_items[j].switchname == NULL)
+ {
+ fprintf(stderr, _("%s: invalid argument: %s\n"),
+ progname, argv[i]);
+ advice();
+ exit(1);
+ }
+ }
+
+ return 0;
+}