/
pg_config.c
154 lines (135 loc) · 4.25 KB
/
pg_config.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/*-------------------------------------------------------------------------
*
* 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
* accomodate 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-2005, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/bin/pg_config/pg_config.c,v 1.10 2004/12/31 22:03:03 pgsql Exp $
*
*-------------------------------------------------------------------------
*/
#include "postgres.h"
#include "port.h"
#include <stdio.h>
#define _(x) gettext((x))
static const char *progname;
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(_(" --includedir show location of C header files of the client\n"
" interfaces\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(_(" --pgxs show location of extension makefile\n"));
printf(_(" --configure show options given to \"configure\" script when\n"
" PostgreSQL was built\n"));
printf(_(" --version show the PostgreSQL version, then exit\n"));
printf(_(" --help show this help, then exit\n\n"));
printf(_("Report bugs to <pgsql-bugs@postgresql.org>.\n"));
}
static void
advice(void)
{
fprintf(stderr, _("\nTry \"%s --help\" for more information\n"), progname);
}
int
main(int argc, char **argv)
{
int i;
int ret;
char mypath[MAXPGPATH];
char otherpath[MAXPGPATH];
set_pglocale_pgservice(argv[0], "pg_config");
progname = get_progname(argv[0]);
if (argc < 2)
{
fprintf(stderr, _("%s: argument required\n"), progname);
advice();
exit(1);
}
for (i = 1; i < argc; i++)
{
if (strcmp(argv[i], "--bindir") == 0 ||
strcmp(argv[i], "--includedir") == 0 ||
strcmp(argv[i], "--includedir-server") == 0 ||
strcmp(argv[i], "--libdir") == 0 ||
strcmp(argv[i], "--pkglibdir") == 0 ||
strcmp(argv[i], "--pgxs") == 0 ||
strcmp(argv[i], "--configure") == 0)
{
/* come back to these later */
continue;
}
if (strcmp(argv[i], "--version") == 0)
{
printf("PostgreSQL " PG_VERSION "\n");
exit(0);
}
if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-?") == 0)
{
help();
exit(0);
}
fprintf(stderr, _("%s: invalid argument: %s\n"), progname, argv[i]);
advice();
exit(1);
}
ret = find_my_exec(argv[0], mypath);
if (ret)
{
fprintf(stderr, _("%s: could not find own executable\n"), progname);
exit(1);
}
for (i = 1; i < argc; i++)
{
if (strcmp(argv[i], "--configure") == 0)
{
/* the VAL_CONFIGURE macro must be defined by the Makefile */
printf("%s\n", VAL_CONFIGURE);
continue;
}
if (strcmp(argv[i], "--bindir") == 0)
{
/* assume we are located in the bindir */
char *lastsep;
strcpy(otherpath, mypath);
lastsep = strrchr(otherpath, '/');
if (lastsep)
*lastsep = '\0';
}
else if (strcmp(argv[i], "--includedir") == 0)
get_include_path(mypath, otherpath);
else if (strcmp(argv[i], "--includedir-server") == 0)
get_includeserver_path(mypath, otherpath);
else if (strcmp(argv[i], "--libdir") == 0)
get_lib_path(mypath, otherpath);
else if (strcmp(argv[i], "--pkglibdir") == 0)
get_pkglib_path(mypath, otherpath);
else if (strcmp(argv[i], "--pgxs") == 0)
{
get_pkglib_path(mypath, otherpath);
strncat(otherpath, "/pgxs/src/makefiles/pgxs.mk", MAXPGPATH - 1);
}
printf("%s\n", otherpath);
}
return 0;
}