1 /*-------------------------------------------------------------------------
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.
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.
14 * author of C translation: Andrew Dunstan mailto:andrew@dunslane.net
16 * This code is released under the terms of the PostgreSQL License.
18 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
20 * src/bin/pg_config/pg_config.c
22 *-------------------------------------------------------------------------
25 #include "postgres_fe.h"
27 #include "common/config_info.h"
29 static const char *progname
;
32 * Table of known information items
34 * Be careful to keep this in sync with the help() display.
38 const char *switchname
;
39 const char *configname
;
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"},
56 {"--configure", "CONFIGURE"},
58 {"--cppflags", "CPPFLAGS"},
59 {"--cflags", "CFLAGS"},
60 {"--cflags_sl", "CFLAGS_SL"},
61 {"--ldflags", "LDFLAGS"},
62 {"--ldflags_ex", "LDFLAGS_EX"},
63 {"--ldflags_sl", "LDFLAGS_SL"},
65 {"--version", "VERSION"},
73 printf(_("\n%s provides information about the installed version of PostgreSQL.\n\n"), progname
);
74 printf(_("Usage:\n"));
75 printf(_(" %s [OPTION]...\n\n"), progname
);
76 printf(_("Options:\n"));
77 printf(_(" --bindir show location of user executables\n"));
78 printf(_(" --docdir show location of documentation files\n"));
79 printf(_(" --htmldir show location of HTML documentation files\n"));
80 printf(_(" --includedir show location of C header files of the client\n"
82 printf(_(" --pkgincludedir show location of other C header files\n"));
83 printf(_(" --includedir-server show location of C header files for the server\n"));
84 printf(_(" --libdir show location of object code libraries\n"));
85 printf(_(" --pkglibdir show location of dynamically loadable modules\n"));
86 printf(_(" --localedir show location of locale support files\n"));
87 printf(_(" --mandir show location of manual pages\n"));
88 printf(_(" --sharedir show location of architecture-independent support files\n"));
89 printf(_(" --sysconfdir show location of system-wide configuration files\n"));
90 printf(_(" --pgxs show location of extension makefile\n"));
91 printf(_(" --configure show options given to \"configure\" script when\n"
92 " PostgreSQL was built\n"));
93 printf(_(" --cc show CC value used when PostgreSQL was built\n"));
94 printf(_(" --cppflags show CPPFLAGS value used when PostgreSQL was built\n"));
95 printf(_(" --cflags show CFLAGS value used when PostgreSQL was built\n"));
96 printf(_(" --cflags_sl show CFLAGS_SL value used when PostgreSQL was built\n"));
97 printf(_(" --ldflags show LDFLAGS value used when PostgreSQL was built\n"));
98 printf(_(" --ldflags_ex show LDFLAGS_EX value used when PostgreSQL was built\n"));
99 printf(_(" --ldflags_sl show LDFLAGS_SL value used when PostgreSQL was built\n"));
100 printf(_(" --libs show LIBS value used when PostgreSQL was built\n"));
101 printf(_(" --version show the PostgreSQL version\n"));
102 printf(_(" -?, --help show this help, then exit\n"));
103 printf(_("\nWith no arguments, all known items are shown.\n\n"));
104 printf(_("Report bugs to <%s>.\n"), PACKAGE_BUGREPORT
);
105 printf(_("%s home page: <%s>\n"), PACKAGE_NAME
, PACKAGE_URL
);
111 fprintf(stderr
, _("Try \"%s --help\" for more information.\n"), progname
);
115 show_item(const char *configname
,
116 ConfigData
*configdata
,
117 size_t configdata_len
)
121 for (i
= 0; i
< configdata_len
; i
++)
123 if (strcmp(configname
, configdata
[i
].name
) == 0)
124 printf("%s\n", configdata
[i
].setting
);
129 main(int argc
, char **argv
)
131 ConfigData
*configdata
;
132 size_t configdata_len
;
133 char my_exec_path
[MAXPGPATH
];
137 set_pglocale_pgservice(argv
[0], PG_TEXTDOMAIN("pg_config"));
139 progname
= get_progname(argv
[0]);
141 /* check for --help */
142 for (i
= 1; i
< argc
; i
++)
144 if (strcmp(argv
[i
], "--help") == 0 || strcmp(argv
[i
], "-?") == 0)
151 if (find_my_exec(argv
[0], my_exec_path
) < 0)
153 fprintf(stderr
, _("%s: could not find own program executable\n"), progname
);
157 configdata
= get_configdata(my_exec_path
, &configdata_len
);
158 /* no arguments -> print everything */
161 for (i
= 0; i
< configdata_len
; i
++)
162 printf("%s = %s\n", configdata
[i
].name
, configdata
[i
].setting
);
166 /* otherwise print requested items */
167 for (i
= 1; i
< argc
; i
++)
169 for (j
= 0; info_items
[j
].switchname
!= NULL
; j
++)
171 if (strcmp(argv
[i
], info_items
[j
].switchname
) == 0)
173 show_item(info_items
[j
].configname
,
174 configdata
, configdata_len
);
178 if (info_items
[j
].switchname
== NULL
)
180 fprintf(stderr
, _("%s: invalid argument: %s\n"),