Age Owner 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-2023, 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 : #include "port.h"
29 :
30 : static const char *progname;
31 :
32 : /*
33 : * Table of known information items
34 : *
35 : * Be careful to keep this in sync with the help() display.
36 : */
37 : typedef struct
38 : {
39 : const char *switchname;
40 : const char *configname;
41 : } InfoItem;
42 :
43 : static const InfoItem info_items[] = {
44 : {"--bindir", "BINDIR"},
45 : {"--docdir", "DOCDIR"},
46 : {"--htmldir", "HTMLDIR"},
47 : {"--includedir", "INCLUDEDIR"},
48 : {"--pkgincludedir", "PKGINCLUDEDIR"},
49 : {"--includedir-server", "INCLUDEDIR-SERVER"},
50 : {"--libdir", "LIBDIR"},
51 : {"--pkglibdir", "PKGLIBDIR"},
52 : {"--localedir", "LOCALEDIR"},
53 : {"--mandir", "MANDIR"},
54 : {"--sharedir", "SHAREDIR"},
55 : {"--sysconfdir", "SYSCONFDIR"},
56 : {"--pgxs", "PGXS"},
57 : {"--configure", "CONFIGURE"},
58 : {"--cc", "CC"},
59 : {"--cppflags", "CPPFLAGS"},
60 : {"--cflags", "CFLAGS"},
61 : {"--cflags_sl", "CFLAGS_SL"},
62 : {"--ldflags", "LDFLAGS"},
63 : {"--ldflags_ex", "LDFLAGS_EX"},
64 : {"--ldflags_sl", "LDFLAGS_SL"},
65 : {"--libs", "LIBS"},
66 : {"--version", "VERSION"},
67 : {NULL, NULL}
68 : };
69 :
70 :
71 : static void
6755 neilc 72 CBC 1 : help(void)
73 : {
6797 bruce 74 1 : printf(_("\n%s provides information about the installed version of PostgreSQL.\n\n"), progname);
6825 75 1 : printf(_("Usage:\n"));
5156 peter_e 76 1 : printf(_(" %s [OPTION]...\n\n"), progname);
6825 bruce 77 1 : printf(_("Options:\n"));
78 1 : printf(_(" --bindir show location of user executables\n"));
6403 tgl 79 1 : printf(_(" --docdir show location of documentation files\n"));
5529 peter_e 80 1 : printf(_(" --htmldir show location of HTML documentation files\n"));
6759 bruce 81 1 : printf(_(" --includedir show location of C header files of the client\n"
82 : " interfaces\n"));
6403 tgl 83 1 : printf(_(" --pkgincludedir show location of other C header files\n"));
6825 bruce 84 1 : printf(_(" --includedir-server show location of C header files for the server\n"));
85 1 : printf(_(" --libdir show location of object code libraries\n"));
86 1 : printf(_(" --pkglibdir show location of dynamically loadable modules\n"));
6403 tgl 87 1 : printf(_(" --localedir show location of locale support files\n"));
88 1 : printf(_(" --mandir show location of manual pages\n"));
89 1 : printf(_(" --sharedir show location of architecture-independent support files\n"));
90 1 : printf(_(" --sysconfdir show location of system-wide configuration files\n"));
6824 bruce 91 1 : printf(_(" --pgxs show location of extension makefile\n"));
6747 peter_e 92 1 : printf(_(" --configure show options given to \"configure\" script when\n"
93 : " PostgreSQL was built\n"));
6452 tgl 94 1 : printf(_(" --cc show CC value used when PostgreSQL was built\n"));
95 1 : printf(_(" --cppflags show CPPFLAGS value used when PostgreSQL was built\n"));
96 1 : printf(_(" --cflags show CFLAGS value used when PostgreSQL was built\n"));
97 1 : printf(_(" --cflags_sl show CFLAGS_SL value used when PostgreSQL was built\n"));
98 1 : printf(_(" --ldflags show LDFLAGS value used when PostgreSQL was built\n"));
4661 99 1 : printf(_(" --ldflags_ex show LDFLAGS_EX value used when PostgreSQL was built\n"));
6452 100 1 : printf(_(" --ldflags_sl show LDFLAGS_SL value used when PostgreSQL was built\n"));
101 1 : printf(_(" --libs show LIBS value used when PostgreSQL was built\n"));
102 1 : printf(_(" --version show the PostgreSQL version\n"));
3947 peter_e 103 1 : printf(_(" -?, --help show this help, then exit\n"));
6394 104 1 : printf(_("\nWith no arguments, all known items are shown.\n\n"));
1136 peter 105 1 : printf(_("Report bugs to <%s>.\n"), PACKAGE_BUGREPORT);
106 1 : printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
6825 bruce 107 1 : }
108 :
109 : static void
6755 neilc 110 1 : advice(void)
111 : {
6394 peter_e 112 1 : fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
6825 bruce 113 1 : }
114 :
115 : static void
2608 mail 116 329 : show_item(const char *configname,
117 : ConfigData *configdata,
118 : size_t configdata_len)
119 : {
120 : int i;
121 :
122 7896 : for (i = 0; i < configdata_len; i++)
123 : {
124 7567 : if (strcmp(configname, configdata[i].name) == 0)
125 329 : printf("%s\n", configdata[i].setting);
126 : }
6452 tgl 127 329 : }
128 :
129 : int
6797 bruce 130 330 : main(int argc, char **argv)
131 : {
132 : ConfigData *configdata;
133 : size_t configdata_len;
134 : char my_exec_path[MAXPGPATH];
135 : int i;
136 : int j;
137 :
5232 peter_e 138 330 : set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_config"));
139 :
6747 140 330 : progname = get_progname(argv[0]);
141 :
142 : /* check for --help */
6797 bruce 143 660 : for (i = 1; i < argc; i++)
144 : {
145 331 : if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-?") == 0)
146 : {
6825 147 1 : help();
148 1 : exit(0);
149 : }
150 : }
151 :
2608 mail 152 329 : if (find_my_exec(argv[0], my_exec_path) < 0)
153 : {
5792 peter_e 154 UBC 0 : fprintf(stderr, _("%s: could not find own program executable\n"), progname);
6825 bruce 155 0 : exit(1);
156 : }
157 :
2608 mail 158 CBC 329 : configdata = get_configdata(my_exec_path, &configdata_len);
159 : /* no arguments -> print everything */
6452 tgl 160 329 : if (argc < 2)
161 : {
2608 mail 162 24 : for (i = 0; i < configdata_len; i++)
163 23 : printf("%s = %s\n", configdata[i].name, configdata[i].setting);
6452 tgl 164 1 : exit(0);
165 : }
166 :
167 : /* otherwise print requested items */
168 657 : for (i = 1; i < argc; i++)
169 : {
170 6886 : for (j = 0; info_items[j].switchname != NULL; j++)
171 : {
172 6885 : if (strcmp(argv[i], info_items[j].switchname) == 0)
173 : {
2608 mail 174 329 : show_item(info_items[j].configname,
175 : configdata, configdata_len);
6452 tgl 176 329 : break;
177 : }
178 : }
179 330 : if (info_items[j].switchname == NULL)
180 : {
181 1 : fprintf(stderr, _("%s: invalid argument: %s\n"),
182 1 : progname, argv[i]);
183 1 : advice();
184 1 : exit(1);
185 : }
186 : }
187 :
6825 bruce 188 327 : return 0;
189 : }
|