LCOV - code coverage report
Current view: top level - src/bin/pg_config - pg_config.c (source / functions) Hit Total Coverage
Test: PostgreSQL 17devel Lines: 65 67 97.0 %
Date: 2024-04-26 16:11:01 Functions: 4 4 100.0 %
Legend: Lines: hit not hit

          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-2024, 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
      72           2 : help(void)
      73             : {
      74           2 :     printf(_("\n%s provides information about the installed version of PostgreSQL.\n\n"), progname);
      75           2 :     printf(_("Usage:\n"));
      76           2 :     printf(_("  %s [OPTION]...\n\n"), progname);
      77           2 :     printf(_("Options:\n"));
      78           2 :     printf(_("  --bindir              show location of user executables\n"));
      79           2 :     printf(_("  --docdir              show location of documentation files\n"));
      80           2 :     printf(_("  --htmldir             show location of HTML documentation files\n"));
      81           2 :     printf(_("  --includedir          show location of C header files of the client\n"
      82             :              "                        interfaces\n"));
      83           2 :     printf(_("  --pkgincludedir       show location of other C header files\n"));
      84           2 :     printf(_("  --includedir-server   show location of C header files for the server\n"));
      85           2 :     printf(_("  --libdir              show location of object code libraries\n"));
      86           2 :     printf(_("  --pkglibdir           show location of dynamically loadable modules\n"));
      87           2 :     printf(_("  --localedir           show location of locale support files\n"));
      88           2 :     printf(_("  --mandir              show location of manual pages\n"));
      89           2 :     printf(_("  --sharedir            show location of architecture-independent support files\n"));
      90           2 :     printf(_("  --sysconfdir          show location of system-wide configuration files\n"));
      91           2 :     printf(_("  --pgxs                show location of extension makefile\n"));
      92           2 :     printf(_("  --configure           show options given to \"configure\" script when\n"
      93             :              "                        PostgreSQL was built\n"));
      94           2 :     printf(_("  --cc                  show CC value used when PostgreSQL was built\n"));
      95           2 :     printf(_("  --cppflags            show CPPFLAGS value used when PostgreSQL was built\n"));
      96           2 :     printf(_("  --cflags              show CFLAGS value used when PostgreSQL was built\n"));
      97           2 :     printf(_("  --cflags_sl           show CFLAGS_SL value used when PostgreSQL was built\n"));
      98           2 :     printf(_("  --ldflags             show LDFLAGS value used when PostgreSQL was built\n"));
      99           2 :     printf(_("  --ldflags_ex          show LDFLAGS_EX value used when PostgreSQL was built\n"));
     100           2 :     printf(_("  --ldflags_sl          show LDFLAGS_SL value used when PostgreSQL was built\n"));
     101           2 :     printf(_("  --libs                show LIBS value used when PostgreSQL was built\n"));
     102           2 :     printf(_("  --version             show the PostgreSQL version\n"));
     103           2 :     printf(_("  -?, --help            show this help, then exit\n"));
     104           2 :     printf(_("\nWith no arguments, all known items are shown.\n\n"));
     105           2 :     printf(_("Report bugs to <%s>.\n"), PACKAGE_BUGREPORT);
     106           2 :     printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
     107           2 : }
     108             : 
     109             : static void
     110           2 : advice(void)
     111             : {
     112           2 :     fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
     113           2 : }
     114             : 
     115             : static void
     116         772 : show_item(const char *configname,
     117             :           ConfigData *configdata,
     118             :           size_t configdata_len)
     119             : {
     120             :     int         i;
     121             : 
     122       18528 :     for (i = 0; i < configdata_len; i++)
     123             :     {
     124       17756 :         if (strcmp(configname, configdata[i].name) == 0)
     125         772 :             printf("%s\n", configdata[i].setting);
     126             :     }
     127         772 : }
     128             : 
     129             : int
     130         774 : 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             : 
     138         774 :     set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_config"));
     139             : 
     140         774 :     progname = get_progname(argv[0]);
     141             : 
     142             :     /* check for --help */
     143        1548 :     for (i = 1; i < argc; i++)
     144             :     {
     145         776 :         if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-?") == 0)
     146             :         {
     147           2 :             help();
     148           2 :             exit(0);
     149             :         }
     150             :     }
     151             : 
     152         772 :     if (find_my_exec(argv[0], my_exec_path) < 0)
     153             :     {
     154           0 :         fprintf(stderr, _("%s: could not find own program executable\n"), progname);
     155           0 :         exit(1);
     156             :     }
     157             : 
     158         772 :     configdata = get_configdata(my_exec_path, &configdata_len);
     159             :     /* no arguments -> print everything */
     160         772 :     if (argc < 2)
     161             :     {
     162          48 :         for (i = 0; i < configdata_len; i++)
     163          46 :             printf("%s = %s\n", configdata[i].name, configdata[i].setting);
     164           2 :         exit(0);
     165             :     }
     166             : 
     167             :     /* otherwise print requested items */
     168        1542 :     for (i = 1; i < argc; i++)
     169             :     {
     170       16150 :         for (j = 0; info_items[j].switchname != NULL; j++)
     171             :         {
     172       16148 :             if (strcmp(argv[i], info_items[j].switchname) == 0)
     173             :             {
     174         772 :                 show_item(info_items[j].configname,
     175             :                           configdata, configdata_len);
     176         772 :                 break;
     177             :             }
     178             :         }
     179         774 :         if (info_items[j].switchname == NULL)
     180             :         {
     181           2 :             fprintf(stderr, _("%s: invalid argument: %s\n"),
     182           2 :                     progname, argv[i]);
     183           2 :             advice();
     184           2 :             exit(1);
     185             :         }
     186             :     }
     187             : 
     188         768 :     return 0;
     189             : }

Generated by: LCOV version 1.14