Files
Ryan Schmidt 651684e926 exact-image: Use better flags when configuring
Use CPPFLAGS and CFLAGS/CXXFLAGS for most configure tests that involve
the compiler.

Use only CPPFLAGS when checking headers. Using CFLAGS/CXXFLAGS as well
would cause a configure failure when using the universal variant.

Closes: https://trac.macports.org/ticket/57607

Instead of checking $1 for an exact string match of "cc" or "c++", check
only the first word of $1, because in some use cases $1 also contains
some flags.
2019-01-15 15:30:57 -06:00

91 lines
2.8 KiB
Diff

Use the right compiler and flags for configure tests, but don't use
CFLAGS/CXXFLAGS when checking headers because if building universal
the multiple -arch flags would cause this error:
clang: error: cannot use 'c++-cpp-output' output with multiple -arch options
This patch replaces "cc" or "c++" at the beginning of $1 with the right
compiler and flags from the environment variables. This is done (instead
of just checking if $1 is exactly equal to "cc" or "c++") to accommodate
the use case where $1 also contains some flags, which currently occurs
when configure invokes headercheck to find evas.
--- config/functions.bak 2015-02-23 08:26:30.000000000 -0600
+++ config/functions 2019-01-10 14:25:50.000000000 -0600
@@ -1,3 +1,8 @@
+: "${CC:=cc}"
+: "${CFLAGS:=}"
+: "${CPPFLAGS:=}"
+: "${CXX:=c++}"
+: "${CXXFLAGS:=}"
# Initalization
#
@@ -41,6 +46,25 @@
eval $1'="${'$1'#$b$a}"'
}
+# Remove at the beginning of a variable.
+# var_remove_prefix var separator prefix
+#
+var_remove_prefix() {
+ local a=${2//\/\\/}
+ local b=${3//\/\\/}
+ eval '[ "$'$1'" = "$3" ] && '$1'="" || true'
+ eval $1'="${'$1'#$b$a}"'
+}
+
+# Replace at the beginning of a variable.
+# var_replace_prefix var separator prefix content
+#
+var_replace_prefix() {
+ eval 'case "$'$1'$2" in "$3$2"*) true;; *) false;; esac;' || return 0
+ var_remove_prefix "$1" "$2" "$3"
+ var_insert "$1" "$2" "$4"
+}
+
# Test for a key in a give "array".
# in_list key values
#
@@ -358,6 +381,9 @@
compile () {
local errors=0
local PROG="$1" ; shift
+ local COMPILER="$PROG"
+ var_replace_prefix COMPILER " " cc "$CC $CPPFLAGS $CFLAGS"
+ var_replace_prefix COMPILER " " c++ "$CXX $CPPFLAGS $CXXFLAGS"
while [ "$1" ] ; do
local file="config/$PROG-$1"
@@ -369,7 +395,7 @@
cflags="`grep -a CFLAGS= $file | sed 's/.* CFLAGS="\(.*\)".*/\1/'`"
libs="`grep -a LIBS= $file | sed 's/.* LIBS="\(.*\)".*/\1/'`"
status "$desc ... "
- if $PROG -c $cflags $libs $file -o config.tmp \
+ if $COMPILER -c $cflags $libs $file -o config.tmp \
>/dev/null 2>> config.log ; then
status_result "yes"
else
@@ -388,10 +414,13 @@
headercheck () {
local errors=0
local PROG="$1" ; shift
+ local COMPILER="$PROG"
+ var_replace_prefix COMPILER " " cc "$CC $CPPFLAGS"
+ var_replace_prefix COMPILER " " c++ "$CXX $CPPFLAGS"
while [ "$1" ] ; do
echo "#include <$1>" > conftest.c
status "checking for header "$1" ... "
- if $PROG -E conftest.c >/dev/null 2>> config.log ; then
+ if $COMPILER -E conftest.c >/dev/null 2>> config.log ; then
status_result "found"
else
status_result "not found"
@@ -413,6 +442,8 @@
if [ $mode = lib -o $mode = header ]; then
local prg="$1"; shift
+ var_replace_prefix prg " " cc "$CC $CPPFLAGS $CFLAGS"
+ var_replace_prefix prg " " c++ "$CXX $CPPFLAGS $CXXFLAGS"
local args="$*"; shift $#
elif [ $mode = shell ]; then
local script="$1"; shift