Project

General

Profile

Actions

Bug #8762

closed

CFLAGS and LDFLAGS are not set properly in Makefile when they are already set as environment variables

Added by Anonymous over 10 years ago. Updated over 10 years ago.

Status:
Rejected
Target version:
ruby -v:
trunk
[ruby-core:56478]

Description

When the environment variable CFLAGS does not exist, running the ./configure script outputs this to the Makefile:

# ./configure && grep ^CFLAGS Makefile
...configure output...
CFLAGS = ${cflags} $(ARCH_FLAG)

However, setting the environment variable CFLAGS to anything (even the empty string) causes ${cflags} to not be included in the CFLAGS written to the Makefile:

# CFLAGS= ./configure && grep ^CFLAGS Makefile
...configure output...
CFLAGS =  $(ARCH_FLAG)

The same happens with LDFLAGS. I believe this is what is breaking trunk compilation for both myself and spastorino in #8759.

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

  • Status changed from Open to Rejected
  • Priority changed from 5 to 3

No, it's not the culprit.

Updated by tmm1 (Aman Karmani) over 10 years ago

  • Status changed from Rejected to Open
  • Assignee set to nobu (Nobuyoshi Nakada)
  • Priority changed from 3 to Normal
  • Target version set to 2.1.0

I believe this is still a bug.

If I compile ruby with a custom CFLAGS, the build will lose all optimization and warning flags:

$ CFLAGS="-I/opt/include " ./configure >/dev/null && make -n gc.o
gcc -I/opt/include -D_FORTIFY_SOURCE=2 -fstack-protector -fno-strict-overflow -fvisibility=hidden -DRUBY_EXPORT -fPIE -I. -I.ext/include/x86_64-linux -I./include -I. -o gc.o -c gc.c

$ ./configure >/dev/null && make -n gc.o
gcc -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Werror=pointer-arith -Werror=write-strings -Werror=declaration-after-statement -Werror=implicit-function-declaration -ansi -std=iso9899:199409 -D_FORTIFY_SOURCE=2 -fstack-protector -fno-strict-overflow -fvisibility=hidden -DRUBY_EXPORT -fPIE -I. -I.ext/include/x86_64-linux -I./include -I. -o gc.o -c gc.c

This issue is resolved in my environment with the following patch:

diff --git a/Makefile.in b/Makefile.in
index 98749de..e6b82df 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -57,7 +57,7 @@ CC_VERSION = @CC_VERSION@
OUTFLAG = @OUTFLAG@$(empty)
COUTFLAG = @COUTFLAG@$(empty)
ARCH_FLAG = @ARCH_FLAG@
-CFLAGS = @CFLAGS@ $(ARCH_FLAG)
+CFLAGS = $(cflags) @CFLAGS@ $(ARCH_FLAG)
cflags = @cflags@
optflags = @optflags@
debugflags = @debugflags@
diff --git a/configure.in b/configure.in
index 88d24ee..99d78e4 100644
--- a/configure.in
+++ b/configure.in
@@ -852,7 +852,7 @@ if test "$GCC" = yes; then
done
fi

-test -z "${ac_env_CFLAGS_set}" -a -n "${cflags+set}" && eval CFLAGS=""$cflags $ARCH_FLAG""
+test -z "${ac_env_CFLAGS_set}" -a -n "${ARCH_FLAG+set}" && eval CFLAGS=""$ARCH_FLAG""
test -z "${ac_env_CXXFLAGS_set}" -a -n "${cxxflags+set}" && eval CXXFLAGS=""$cxxflags $ARCH_FLAG""

}

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

  • Status changed from Open to Rejected

If you set CFLAGS, that is you say it must be used.

Updated by tmm1 (Aman Karmani) over 10 years ago

With my patch, provided CFLAGS are appended to the built-in flags. This follows the behavior most projects use with ./configure.

On trunk now, what is the correct way to add a CFLAG for build? (i.e. -Iextra/include/dir)?

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0