LCOV - code coverage report
Current view: top level - src/common - config_info.c (source / functions) Hit Total Coverage
Test: PostgreSQL 19devel Lines: 104 104 100.0 %
Date: 2026-01-13 20:17:49 Functions: 1 1 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*-------------------------------------------------------------------------
       2             :  *
       3             :  * config_info.c
       4             :  *      Common code for pg_config output
       5             :  *
       6             :  *
       7             :  * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
       8             :  * Portions Copyright (c) 1994, Regents of the University of California
       9             :  *
      10             :  *
      11             :  * IDENTIFICATION
      12             :  *    src/common/config_info.c
      13             :  *
      14             :  *-------------------------------------------------------------------------
      15             :  */
      16             : 
      17             : #ifndef FRONTEND
      18             : #include "postgres.h"
      19             : #else
      20             : #include "postgres_fe.h"
      21             : #endif
      22             : 
      23             : #include "common/config_info.h"
      24             : 
      25             : 
      26             : /*
      27             :  * get_configdata(const char *my_exec_path, size_t *configdata_len)
      28             :  *
      29             :  * Get configure-time constants. The caller is responsible
      30             :  * for pfreeing the result.
      31             :  */
      32             : ConfigData *
      33        1000 : get_configdata(const char *my_exec_path, size_t *configdata_len)
      34             : {
      35             :     ConfigData *configdata;
      36             :     char        path[MAXPGPATH];
      37             :     char       *lastsep;
      38        1000 :     int         i = 0;
      39             : 
      40             :     /* Adjust this to match the number of items filled below */
      41        1000 :     *configdata_len = 23;
      42        1000 :     configdata = palloc_array(ConfigData, *configdata_len);
      43             : 
      44        1000 :     configdata[i].name = pstrdup("BINDIR");
      45        1000 :     strlcpy(path, my_exec_path, sizeof(path));
      46        1000 :     lastsep = strrchr(path, '/');
      47        1000 :     if (lastsep)
      48        1000 :         *lastsep = '\0';
      49        1000 :     cleanup_path(path);
      50        1000 :     configdata[i].setting = pstrdup(path);
      51        1000 :     i++;
      52             : 
      53        1000 :     configdata[i].name = pstrdup("DOCDIR");
      54        1000 :     get_doc_path(my_exec_path, path);
      55        1000 :     cleanup_path(path);
      56        1000 :     configdata[i].setting = pstrdup(path);
      57        1000 :     i++;
      58             : 
      59        1000 :     configdata[i].name = pstrdup("HTMLDIR");
      60        1000 :     get_html_path(my_exec_path, path);
      61        1000 :     cleanup_path(path);
      62        1000 :     configdata[i].setting = pstrdup(path);
      63        1000 :     i++;
      64             : 
      65        1000 :     configdata[i].name = pstrdup("INCLUDEDIR");
      66        1000 :     get_include_path(my_exec_path, path);
      67        1000 :     cleanup_path(path);
      68        1000 :     configdata[i].setting = pstrdup(path);
      69        1000 :     i++;
      70             : 
      71        1000 :     configdata[i].name = pstrdup("PKGINCLUDEDIR");
      72        1000 :     get_pkginclude_path(my_exec_path, path);
      73        1000 :     cleanup_path(path);
      74        1000 :     configdata[i].setting = pstrdup(path);
      75        1000 :     i++;
      76             : 
      77        1000 :     configdata[i].name = pstrdup("INCLUDEDIR-SERVER");
      78        1000 :     get_includeserver_path(my_exec_path, path);
      79        1000 :     cleanup_path(path);
      80        1000 :     configdata[i].setting = pstrdup(path);
      81        1000 :     i++;
      82             : 
      83        1000 :     configdata[i].name = pstrdup("LIBDIR");
      84        1000 :     get_lib_path(my_exec_path, path);
      85        1000 :     cleanup_path(path);
      86        1000 :     configdata[i].setting = pstrdup(path);
      87        1000 :     i++;
      88             : 
      89        1000 :     configdata[i].name = pstrdup("PKGLIBDIR");
      90        1000 :     get_pkglib_path(my_exec_path, path);
      91        1000 :     cleanup_path(path);
      92        1000 :     configdata[i].setting = pstrdup(path);
      93        1000 :     i++;
      94             : 
      95        1000 :     configdata[i].name = pstrdup("LOCALEDIR");
      96        1000 :     get_locale_path(my_exec_path, path);
      97        1000 :     cleanup_path(path);
      98        1000 :     configdata[i].setting = pstrdup(path);
      99        1000 :     i++;
     100             : 
     101        1000 :     configdata[i].name = pstrdup("MANDIR");
     102        1000 :     get_man_path(my_exec_path, path);
     103        1000 :     cleanup_path(path);
     104        1000 :     configdata[i].setting = pstrdup(path);
     105        1000 :     i++;
     106             : 
     107        1000 :     configdata[i].name = pstrdup("SHAREDIR");
     108        1000 :     get_share_path(my_exec_path, path);
     109        1000 :     cleanup_path(path);
     110        1000 :     configdata[i].setting = pstrdup(path);
     111        1000 :     i++;
     112             : 
     113        1000 :     configdata[i].name = pstrdup("SYSCONFDIR");
     114        1000 :     get_etc_path(my_exec_path, path);
     115        1000 :     cleanup_path(path);
     116        1000 :     configdata[i].setting = pstrdup(path);
     117        1000 :     i++;
     118             : 
     119        1000 :     configdata[i].name = pstrdup("PGXS");
     120        1000 :     get_pkglib_path(my_exec_path, path);
     121        1000 :     strlcat(path, "/pgxs/src/makefiles/pgxs.mk", sizeof(path));
     122        1000 :     cleanup_path(path);
     123        1000 :     configdata[i].setting = pstrdup(path);
     124        1000 :     i++;
     125             : 
     126        1000 :     configdata[i].name = pstrdup("CONFIGURE");
     127        1000 :     configdata[i].setting = pstrdup(CONFIGURE_ARGS);
     128        1000 :     i++;
     129             : 
     130        1000 :     configdata[i].name = pstrdup("CC");
     131             : #ifdef VAL_CC
     132        1000 :     configdata[i].setting = pstrdup(VAL_CC);
     133             : #else
     134             :     configdata[i].setting = pstrdup(_("not recorded"));
     135             : #endif
     136        1000 :     i++;
     137             : 
     138        1000 :     configdata[i].name = pstrdup("CPPFLAGS");
     139             : #ifdef VAL_CPPFLAGS
     140        1000 :     configdata[i].setting = pstrdup(VAL_CPPFLAGS);
     141             : #else
     142             :     configdata[i].setting = pstrdup(_("not recorded"));
     143             : #endif
     144        1000 :     i++;
     145             : 
     146        1000 :     configdata[i].name = pstrdup("CFLAGS");
     147             : #ifdef VAL_CFLAGS
     148        1000 :     configdata[i].setting = pstrdup(VAL_CFLAGS);
     149             : #else
     150             :     configdata[i].setting = pstrdup(_("not recorded"));
     151             : #endif
     152        1000 :     i++;
     153             : 
     154        1000 :     configdata[i].name = pstrdup("CFLAGS_SL");
     155             : #ifdef VAL_CFLAGS_SL
     156        1000 :     configdata[i].setting = pstrdup(VAL_CFLAGS_SL);
     157             : #else
     158             :     configdata[i].setting = pstrdup(_("not recorded"));
     159             : #endif
     160        1000 :     i++;
     161             : 
     162        1000 :     configdata[i].name = pstrdup("LDFLAGS");
     163             : #ifdef VAL_LDFLAGS
     164        1000 :     configdata[i].setting = pstrdup(VAL_LDFLAGS);
     165             : #else
     166             :     configdata[i].setting = pstrdup(_("not recorded"));
     167             : #endif
     168        1000 :     i++;
     169             : 
     170        1000 :     configdata[i].name = pstrdup("LDFLAGS_EX");
     171             : #ifdef VAL_LDFLAGS_EX
     172        1000 :     configdata[i].setting = pstrdup(VAL_LDFLAGS_EX);
     173             : #else
     174             :     configdata[i].setting = pstrdup(_("not recorded"));
     175             : #endif
     176        1000 :     i++;
     177             : 
     178        1000 :     configdata[i].name = pstrdup("LDFLAGS_SL");
     179             : #ifdef VAL_LDFLAGS_SL
     180        1000 :     configdata[i].setting = pstrdup(VAL_LDFLAGS_SL);
     181             : #else
     182             :     configdata[i].setting = pstrdup(_("not recorded"));
     183             : #endif
     184        1000 :     i++;
     185             : 
     186        1000 :     configdata[i].name = pstrdup("LIBS");
     187             : #ifdef VAL_LIBS
     188        1000 :     configdata[i].setting = pstrdup(VAL_LIBS);
     189             : #else
     190             :     configdata[i].setting = pstrdup(_("not recorded"));
     191             : #endif
     192        1000 :     i++;
     193             : 
     194        1000 :     configdata[i].name = pstrdup("VERSION");
     195        1000 :     configdata[i].setting = pstrdup("PostgreSQL " PG_VERSION);
     196        1000 :     i++;
     197             : 
     198             :     Assert(i == *configdata_len);
     199             : 
     200        1000 :     return configdata;
     201             : }

Generated by: LCOV version 1.16