Thread: BUG #17466: Is it possible to supplement the default compilation options of CFLAGS in configure file?

The following bug has been logged on the website:

Bug reference:      17466
Logged by:          xavier
Email address:      wysunxavier@gmail.com
PostgreSQL version: 14.2
Operating system:   CentOS 7.9
Description:

Hello,
When I try to specify some compilation options in CFLAGS, such as compiling
with macros, when I execute “./configure CFLAGS='-DUSE_TOOLS'”,it will use
'-O0' to compile by default, which is easy to miscompile into a debug
version. I wonder if it is possible to supplement the judgment conditions in
the postgresql source code: If the compilation option is not specified in
CFLAGS, '-O2' is used by default to avoid compiling the wrong debug
version.
I tried making modifications to the configure.ac of master branch.
diff --git a/configure.ac b/configure.ac
index 44d35e1..36e3fc5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -427,6 +427,10 @@ else
   fi
 fi
 
+if [[[ ! $CFLAGS[@] =~ "-O" ]]]; then
+  CFLAGS="$CFLAGS -O2"
+fi
+
 if test "$ac_env_CXXFLAGS_set" = set; then
   CXXFLAGS=$ac_env_CXXFLAGS_value
 elif test "${CXXFLAGS+set}" = set; then


On 19.04.22 05:36, PG Bug reporting form wrote:
> When I try to specify some compilation options in CFLAGS, such as compiling
> with macros, when I execute “./configure CFLAGS='-DUSE_TOOLS'”,it will use
> '-O0' to compile by default, which is easy to miscompile into a debug
> version. I wonder if it is possible to supplement the judgment conditions in
> the postgresql source code: If the compilation option is not specified in
> CFLAGS, '-O2' is used by default to avoid compiling the wrong debug
> version.

The use case you are describing is not without merit.  But ultimately, 
the handling of these compiler option variables has decades of history 
behind it, and just poking at that for one specific case is going to 
break someone else's use case somehow.

We generally avoid the need to add CFLAGS to the configure command line 
except in cases where you actually want to override the defaults.  Other 
cases should have a command-line option or perhaps a spot in 
pg_config_manual.h.

In your specific case you could also pass CPPFLAGS instead, which is 
more correct anyway, and it doesn't have a default that you can 
accidentally override.