Subject: [postgresql-interfaces/psqlodbc] issue #110: Build error on Fedora 42

From: "devrimgunduz (@devrimgunduz)" <[email-masked]>
Date: Wed, 16 Apr 2025 15:11:40 +0000

Hi,

ODBC driver fails to build against Fedora 42. Can you please take a look? Thanks! Devrim

```
ilbtool: compile:  gcc -DHAVE_CONFIG_H -I. -I/usr/include -I/usr/pgsql-17/include -I/usr/pgsql-17/include/postgresql/internal -I/usr/pgsql-17/include -I/usr/pgsql-17/include/internal -DUNICODE_SUPPORT -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wall -c environ.c  -fPIC -DPIC -o .libs/psqlodbcw_la-environ.o
In file included from misc.c:15:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from lobj.h:13,
                 from lobj.c:15:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
make[2]: *** [Makefile:770: psqlodbcw_la-lobj.lo] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from drvconn.c:15:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
make[2]: *** [Makefile:777: psqlodbcw_la-misc.lo] Error 1
In file included from options.c:16:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
make[2]: *** [Makefile:749: psqlodbcw_la-drvconn.lo] Error 1
In file included from pgtypes.h:12,
                 from pgtypes.c:19:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
make[2]: *** [Makefile:784: psqlodbcw_la-options.lo] Error 1
make[2]: *** [Makefile:791: psqlodbcw_la-pgtypes.lo] Error 1
In file included from pgtypes.h:12,
                 from columninfo.c:15:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
make[2]: *** [Makefile:728: psqlodbcw_la-columninfo.lo] Error 1
In file included from bind.h:12,
                 from bind.c:19:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from environ.h:16,
                 from environ.c:16:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
make[2]: *** [Makefile:721: psqlodbcw_la-bind.lo] Error 1
make[2]: *** [Makefile:756: psqlodbcw_la-environ.lo] Error 1
In file included from execute.c:16:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
make[2]: *** [Makefile:763: psqlodbcw_la-execute.lo] Error 1
In file included from connection.h:12,
                 from connection.c:22:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
make[2]: *** [Makefile:735: psqlodbcw_la-connection.lo] Error 1
In file included from info.c:19:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
make[2]: *** [Makefile:714: psqlodbcw_la-info.lo] Error 1
In file included from convert.h:12,
                 from convert.c:20:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
make[2]: *** [Makefile:742: psqlodbcw_la-convert.lo] Error 1
```,

---

From: "davecramer (@davecramer)" <[email-masked]>
Date: Fri, 18 Apr 2025 21:17:41 +0000

Hi Devrim,
Thanks for the report.
I'll have a look after the holidays.

---

From: "davecramer (@davecramer)" <[email-masked]>
Date: Sat, 19 Apr 2025 12:14:11 +0000

So configure is supposed to set PG_USE_STDBOOL if stdbool.h is on the system.
I'm curious if this is working correctly ?