Age Owner Branch data TLA Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * pg_config.c
4 : : *
5 : : * This program reports various pieces of information about the
6 : : * installed version of PostgreSQL. Packages that interface to
7 : : * PostgreSQL can use it to configure their build.
8 : : *
9 : : * This is a C implementation of the previous shell script written by
10 : : * Peter Eisentraut <peter_e@gmx.net>, with adjustments made to
11 : : * accommodate the possibility that the installation has been relocated from
12 : : * the place originally configured.
13 : : *
14 : : * author of C translation: Andrew Dunstan mailto:andrew@dunslane.net
15 : : *
16 : : * This code is released under the terms of the PostgreSQL License.
17 : : *
18 : : * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
19 : : *
20 : : * src/bin/pg_config/pg_config.c
21 : : *
22 : : *-------------------------------------------------------------------------
23 : : */
24 : :
25 : : #include "postgres_fe.h"
26 : :
27 : : #include "common/config_info.h"
28 : :
29 : : static const char *progname;
30 : :
31 : : /*
32 : : * Table of known information items
33 : : *
34 : : * Be careful to keep this in sync with the help() display.
35 : : */
36 : : typedef struct
37 : : {
38 : : const char *switchname;
39 : : const char *configname;
40 : : } InfoItem;
41 : :
42 : : static const InfoItem info_items[] = {
43 : : {"--bindir", "BINDIR"},
44 : : {"--docdir", "DOCDIR"},
45 : : {"--htmldir", "HTMLDIR"},
46 : : {"--includedir", "INCLUDEDIR"},
47 : : {"--pkgincludedir", "PKGINCLUDEDIR"},
48 : : {"--includedir-server", "INCLUDEDIR-SERVER"},
49 : : {"--libdir", "LIBDIR"},
50 : : {"--pkglibdir", "PKGLIBDIR"},
51 : : {"--localedir", "LOCALEDIR"},
52 : : {"--mandir", "MANDIR"},
53 : : {"--sharedir", "SHAREDIR"},
54 : : {"--sysconfdir", "SYSCONFDIR"},
55 : : {"--pgxs", "PGXS"},
56 : : {"--configure", "CONFIGURE"},
57 : : {"--cc", "CC"},
58 : : {"--cppflags", "CPPFLAGS"},
59 : : {"--cflags", "CFLAGS"},
60 : : {"--cflags_sl", "CFLAGS_SL"},
61 : : {"--ldflags", "LDFLAGS"},
62 : : {"--ldflags_ex", "LDFLAGS_EX"},
63 : : {"--ldflags_sl", "LDFLAGS_SL"},
64 : : {"--libs", "LIBS"},
65 : : {"--version", "VERSION"},
66 : : {NULL, NULL}
67 : : };
68 : :
69 : :
70 : : static void
7958 neilc@samurai.com 71 :CBC 1 : help(void)
72 : : {
8000 bruce@momjian.us 73 : 1 : printf(_("\n%s provides information about the installed version of PostgreSQL.\n\n"), progname);
8028 74 : 1 : printf(_("Usage:\n"));
6359 peter_e@gmx.net 75 : 1 : printf(_(" %s [OPTION]...\n\n"), progname);
8028 bruce@momjian.us 76 : 1 : printf(_("Options:\n"));
77 : 1 : printf(_(" --bindir show location of user executables\n"));
7606 tgl@sss.pgh.pa.us 78 : 1 : printf(_(" --docdir show location of documentation files\n"));
6732 peter_e@gmx.net 79 : 1 : printf(_(" --htmldir show location of HTML documentation files\n"));
7962 bruce@momjian.us 80 : 1 : printf(_(" --includedir show location of C header files of the client\n"
81 : : " interfaces\n"));
7606 tgl@sss.pgh.pa.us 82 : 1 : printf(_(" --pkgincludedir show location of other C header files\n"));
8028 bruce@momjian.us 83 : 1 : printf(_(" --includedir-server show location of C header files for the server\n"));
84 : 1 : printf(_(" --libdir show location of object code libraries\n"));
85 : 1 : printf(_(" --pkglibdir show location of dynamically loadable modules\n"));
7606 tgl@sss.pgh.pa.us 86 : 1 : printf(_(" --localedir show location of locale support files\n"));
87 : 1 : printf(_(" --mandir show location of manual pages\n"));
88 : 1 : printf(_(" --sharedir show location of architecture-independent support files\n"));
89 : 1 : printf(_(" --sysconfdir show location of system-wide configuration files\n"));
8027 bruce@momjian.us 90 : 1 : printf(_(" --pgxs show location of extension makefile\n"));
7950 peter_e@gmx.net 91 : 1 : printf(_(" --configure show options given to \"configure\" script when\n"
92 : : " PostgreSQL was built\n"));
7655 tgl@sss.pgh.pa.us 93 : 1 : printf(_(" --cc show CC value used when PostgreSQL was built\n"));
94 : 1 : printf(_(" --cppflags show CPPFLAGS value used when PostgreSQL was built\n"));
95 : 1 : printf(_(" --cflags show CFLAGS value used when PostgreSQL was built\n"));
96 : 1 : printf(_(" --cflags_sl show CFLAGS_SL value used when PostgreSQL was built\n"));
97 : 1 : printf(_(" --ldflags show LDFLAGS value used when PostgreSQL was built\n"));
5864 98 : 1 : printf(_(" --ldflags_ex show LDFLAGS_EX value used when PostgreSQL was built\n"));
7655 99 : 1 : printf(_(" --ldflags_sl show LDFLAGS_SL value used when PostgreSQL was built\n"));
100 : 1 : printf(_(" --libs show LIBS value used when PostgreSQL was built\n"));
101 : 1 : printf(_(" --version show the PostgreSQL version\n"));
5150 peter_e@gmx.net 102 : 1 : printf(_(" -?, --help show this help, then exit\n"));
7597 103 : 1 : printf(_("\nWith no arguments, all known items are shown.\n\n"));
2339 peter@eisentraut.org 104 : 1 : printf(_("Report bugs to <%s>.\n"), PACKAGE_BUGREPORT);
105 : 1 : printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
8028 bruce@momjian.us 106 : 1 : }
107 : :
108 : : static void
7958 neilc@samurai.com 109 : 1 : advice(void)
110 : : {
7597 peter_e@gmx.net 111 : 1 : fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
8028 bruce@momjian.us 112 : 1 : }
113 : :
114 : : static void
3811 mail@joeconway.com 115 : 550 : show_item(const char *configname,
116 : : ConfigData *configdata,
117 : : size_t configdata_len)
118 : : {
14 peter@eisentraut.org 119 [ + + ]:GNC 13200 : for (size_t i = 0; i < configdata_len; i++)
120 : : {
3811 mail@joeconway.com 121 [ + + ]:CBC 12650 : if (strcmp(configname, configdata[i].name) == 0)
122 : 550 : printf("%s\n", configdata[i].setting);
123 : : }
7655 tgl@sss.pgh.pa.us 124 : 550 : }
125 : :
126 : : int
8000 bruce@momjian.us 127 : 551 : main(int argc, char **argv)
128 : : {
129 : : ConfigData *configdata;
130 : : size_t configdata_len;
131 : : char my_exec_path[MAXPGPATH];
132 : :
6435 peter_e@gmx.net 133 : 551 : set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_config"));
134 : :
7950 135 : 551 : progname = get_progname(argv[0]);
136 : :
137 : : /* check for --help */
14 peter@eisentraut.org 138 [ + + ]:GNC 1102 : for (int i = 1; i < argc; i++)
139 : : {
8000 bruce@momjian.us 140 [ + + - + ]:CBC 552 : if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-?") == 0)
141 : : {
8028 142 : 1 : help();
143 : 1 : exit(0);
144 : : }
145 : : }
146 : :
3811 mail@joeconway.com 147 [ - + ]: 550 : if (find_my_exec(argv[0], my_exec_path) < 0)
148 : : {
6995 peter_e@gmx.net 149 :UBC 0 : fprintf(stderr, _("%s: could not find own program executable\n"), progname);
8028 bruce@momjian.us 150 : 0 : exit(1);
151 : : }
152 : :
3811 mail@joeconway.com 153 :CBC 550 : configdata = get_configdata(my_exec_path, &configdata_len);
154 : : /* no arguments -> print everything */
7655 tgl@sss.pgh.pa.us 155 [ + + ]: 550 : if (argc < 2)
156 : : {
14 peter@eisentraut.org 157 [ + + ]:GNC 24 : for (size_t i = 0; i < configdata_len; i++)
3811 mail@joeconway.com 158 :CBC 23 : printf("%s = %s\n", configdata[i].name, configdata[i].setting);
7655 tgl@sss.pgh.pa.us 159 : 1 : exit(0);
160 : : }
161 : :
162 : : /* otherwise print requested items */
14 peter@eisentraut.org 163 [ + + ]:GNC 1099 : for (int i = 1; i < argc; i++)
164 : : {
165 : : int j;
166 : :
7655 tgl@sss.pgh.pa.us 167 [ + + ]:CBC 11280 : for (j = 0; info_items[j].switchname != NULL; j++)
168 : : {
169 [ + + ]: 11279 : if (strcmp(argv[i], info_items[j].switchname) == 0)
170 : : {
3811 mail@joeconway.com 171 : 550 : show_item(info_items[j].configname,
172 : : configdata, configdata_len);
7655 tgl@sss.pgh.pa.us 173 : 550 : break;
174 : : }
175 : : }
176 [ + + ]: 551 : if (info_items[j].switchname == NULL)
177 : : {
178 : 1 : fprintf(stderr, _("%s: invalid argument: %s\n"),
179 : 1 : progname, argv[i]);
180 : 1 : advice();
181 : 1 : exit(1);
182 : : }
183 : : }
184 : :
8028 bruce@momjian.us 185 : 548 : return 0;
186 : : }
|