config: Pass diverse flags to Configure via the environment
Passing flags "discovered" by 'config' on the command line to 'Configure' mixes them up with flags given by the user. That is contrary to their intention, so they need to be passed in a different manner. Enter the environment variables __CNF_CPPDEFINES, __CNF_CPPINCLUDES, __CNF_CPPFLAGS, __CNF_CFLAGS, __CNF_CXXFLAGS, __CNF_LDFLAGS, and __CNF_LDLIBS, initialised by 'config', and then used by Configure to initialise these %config values: defines, includes, cppflags, cflags, cxxflags, lflags, and ex_libs. Reviewed-by: Andy Polyakov <appro@openssl.org> (Merged from https://github.com/openssl/openssl/pull/5534)
This commit is contained in:
parent
72d7f221ee
commit
2ab92ae9dc
2 changed files with 87 additions and 25 deletions
|
@ -584,6 +584,15 @@ my %target_attr_translate =(
|
|||
rm => 'RM',
|
||||
);
|
||||
|
||||
# Initialisers coming from 'config' scripts
|
||||
$config{defines} = [ split(/$list_separator_re/, env('__CNF_CPPDEFINES')) ],
|
||||
$config{includes} = [ split(/$list_separator_re/, env('__CNF_CPPINCLUDES')) ],
|
||||
$config{cppflags} = [ env('__CNF_CPPFLAGS') || () ],
|
||||
$config{cflags} = [ env('__CNF_CFLAGS') || () ],
|
||||
$config{cxxflags} = [ env('__CNF_CXXFLAGS') || () ],
|
||||
$config{lflags} = [ env('__CNF_LDFLAGS') || () ],
|
||||
$config{ex_libs} = [ env('__CNF_LDLIBS') || () ],
|
||||
|
||||
$config{openssl_api_defines}=[];
|
||||
$config{openssl_algorithm_defines}=[];
|
||||
$config{openssl_thread_defines}=[];
|
||||
|
|
103
config
103
config
|
@ -40,6 +40,15 @@ EOF
|
|||
esac
|
||||
done
|
||||
|
||||
# Environment that's being passed to Configure
|
||||
__CNF_CPPDEFINES=
|
||||
__CNF_CPPINCLUDES=
|
||||
__CNF_CPPFLAGS=
|
||||
__CNF_CFLAGS=
|
||||
__CNF_CXXFLAGS=
|
||||
__CNF_LDFLAGS=
|
||||
__CNF_LDLIBS=
|
||||
|
||||
# First get uname entries that we use below
|
||||
|
||||
[ "$MACHINE" ] || MACHINE=`(uname -m) 2>/dev/null` || MACHINE="unknown"
|
||||
|
@ -504,10 +513,12 @@ case "$GUESSOS" in
|
|||
OUT="darwin64-x86_64-cc"
|
||||
fi ;;
|
||||
armv6+7-*-iphoneos)
|
||||
options="$options -arch%20armv6 -arch%20armv7"
|
||||
__CNF_CFLAGS="$__CNF_CFLAGS -arch%20armv6 -arch%20armv7"
|
||||
__CNF_CXXFLAGS="$__CNF_CXXFLAGS -arch%20armv6 -arch%20armv7"
|
||||
OUT="iphoneos-cross" ;;
|
||||
*-*-iphoneos)
|
||||
options="$options -arch%20${MACHINE}"
|
||||
__CNF_CFLAGS="$__CNF_CFLAGS -arch%20${MACHINE}"
|
||||
__CNF_CXXFLAGS="$__CNF_CXXFLAGS -arch%20${MACHINE}"
|
||||
OUT="iphoneos-cross" ;;
|
||||
arm64-*-iphoneos|*-*-ios64)
|
||||
OUT="ios64-cross" ;;
|
||||
|
@ -519,9 +530,12 @@ case "$GUESSOS" in
|
|||
esac
|
||||
if [ "$CC" = "gcc" ]; then
|
||||
case ${ISA:-generic} in
|
||||
EV5|EV45) options="$options -mcpu=ev5";;
|
||||
EV56|PCA56) options="$options -mcpu=ev56";;
|
||||
*) options="$options -mcpu=ev6";;
|
||||
EV5|EV45) __CNF_CFLAGS="$__CNF_CFLAGS -mcpu=ev5"
|
||||
__CNF_CXXFLAGS="$__CNF_CFLAGS -mcpu=ev5";;
|
||||
EV56|PCA56) __CNF_CFLAGS="$__CNF_CFLAGS -mcpu=ev56"
|
||||
__CNF_CXXFLAGS="$__CNF_CXXFLAGS -mcpu=ev56";;
|
||||
*) __CNF_CFLAGS="$__CNF_CFLAGS -mcpu=ev6"
|
||||
__CNF_CXXFLAGS="$__CNF_CXXFLAGS -mcpu=ev6";;
|
||||
esac
|
||||
fi
|
||||
;;
|
||||
|
@ -538,7 +552,12 @@ case "$GUESSOS" in
|
|||
OUT="linux-ppc64"
|
||||
else
|
||||
OUT="linux-ppc"
|
||||
(echo "__LP64__" | gcc -E -x c - 2>/dev/null | grep "^__LP64__" 2>&1 > /dev/null) || options="$options -m32"
|
||||
if (echo "__LP64__" | gcc -E -x c - 2>/dev/null | grep "^__LP64__" 2>&1 > /dev/null); then
|
||||
:;
|
||||
else
|
||||
__CNF_CFLAGS="$__CNF_CFLAGS -m32"
|
||||
__CNF_CXXFLAGS="$__CNF_CXXFLAGS -m32"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
ppc64le-*-linux2) OUT="linux-ppc64le" ;;
|
||||
|
@ -574,7 +593,8 @@ case "$GUESSOS" in
|
|||
sun4u*) OUT="linux-sparcv9" ;;
|
||||
sun4m) OUT="linux-sparcv8" ;;
|
||||
sun4d) OUT="linux-sparcv8" ;;
|
||||
*) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
|
||||
*) OUT="linux-generic32";
|
||||
__CNF_CPPFLAGS="$__CNF_CPPFLAGS -DB_ENDIAN" ;;
|
||||
esac ;;
|
||||
parisc*-*-linux2)
|
||||
# 64-bit builds under parisc64 linux are not supported and
|
||||
|
@ -596,16 +616,25 @@ case "$GUESSOS" in
|
|||
CPUSCHEDULE=`echo $CPUSCHEDULE|sed -e 's/7300LC/7100LC/' -e 's/8.00/8000/'`
|
||||
# Finish Model transformations
|
||||
|
||||
options="$options -DB_ENDIAN -mschedule=$CPUSCHEDULE -march=$CPUARCH"
|
||||
__CNF_CPPFLAGS="$__CNF_CPPFLAGS -DB_ENDIAN"
|
||||
__CNF_CFLAGS="$__CNF_CFLAGS -mschedule=$CPUSCHEDULE -march=$CPUARCH"
|
||||
__CNF_CXXFLAGS="$__CNF_CXXFLAGS -mschedule=$CPUSCHEDULE -march=$CPUARCH"
|
||||
OUT="linux-generic32" ;;
|
||||
armv[1-3]*-*-linux2) OUT="linux-generic32" ;;
|
||||
armv[7-9]*-*-linux2) OUT="linux-armv4"; options="$options -march=armv7-a" ;;
|
||||
armv[7-9]*-*-linux2) OUT="linux-armv4"
|
||||
__CNF_CFLAGS="$__CNF_CFLAGS -march=armv7-a"
|
||||
__CNF_CXXFLAGS="$__CNF_CXXFLAGS -march=armv7-a"
|
||||
;;
|
||||
arm*-*-linux2) OUT="linux-armv4" ;;
|
||||
aarch64-*-linux2) OUT="linux-aarch64" ;;
|
||||
sh*b-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
|
||||
sh*-*-linux2) OUT="linux-generic32"; options="$options -DL_ENDIAN" ;;
|
||||
m68k*-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
|
||||
s390-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
|
||||
sh*b-*-linux2) OUT="linux-generic32";
|
||||
__CNF_CPPFLAGS="$__CNF_CPPFLAGS -DB_ENDIAN" ;;
|
||||
sh*-*-linux2) OUT="linux-generic32";
|
||||
__CNF_CPPFLAGS="$__CNF_CPPFLAGS -DL_ENDIAN" ;;
|
||||
m68k*-*-linux2) OUT="linux-generic32";
|
||||
__CNF_CPPFLAGS="$__CNF_CPPFLAGS -DB_ENDIAN" ;;
|
||||
s390-*-linux2) OUT="linux-generic32";
|
||||
__CNF_CPPFLAGS="$__CNF_CPPFLAGS -DB_ENDIAN" ;;
|
||||
s390x-*-linux2)
|
||||
# To be uncommented when glibc bug is fixed, see Configure...
|
||||
#if egrep -e '^features.* highgprs' /proc/cpuinfo >/dev/null ; then
|
||||
|
@ -687,9 +716,12 @@ case "$GUESSOS" in
|
|||
;;
|
||||
*-*-sunos4) OUT="sunos-$CC" ;;
|
||||
|
||||
*86*-*-bsdi4) OUT="BSD-x86-elf"; options="$options no-sse2 -ldl" ;;
|
||||
alpha*-*-*bsd*) OUT="BSD-generic64"; options="$options -DL_ENDIAN" ;;
|
||||
powerpc64-*-*bsd*) OUT="BSD-generic64"; options="$options -DB_ENDIAN" ;;
|
||||
*86*-*-bsdi4) OUT="BSD-x86-elf"; options="$options no-sse2";
|
||||
__CNF_LDFLAGS="$__CNF_LDFLAGS -ldl" ;;
|
||||
alpha*-*-*bsd*) OUT="BSD-generic64";
|
||||
__CNF_CPPFLAGS="$__CNF_CPPFLAGS -DL_ENDIAN" ;;
|
||||
powerpc64-*-*bsd*) OUT="BSD-generic64";
|
||||
__CNF_CPPFLAGS="$__CNF_CPPFLAGS -DB_ENDIAN" ;;
|
||||
sparc64-*-*bsd*) OUT="BSD-sparc64" ;;
|
||||
ia64-*-*bsd*) OUT="BSD-ia64" ;;
|
||||
x86_64-*-dragonfly*) OUT="BSD-x86_64" ;;
|
||||
|
@ -716,7 +748,8 @@ case "$GUESSOS" in
|
|||
if [ "$CC" = "gcc" ]; then
|
||||
OUT="unixware-7-gcc" ; options="$options no-sse2"
|
||||
else
|
||||
OUT="unixware-7" ; options="$options no-sse2 -D__i386__"
|
||||
OUT="unixware-7" ; options="$options no-sse2"
|
||||
__CNF_CPPFLAGS="$__CNF_CPPFLAGS -D__i386__"
|
||||
fi
|
||||
;;
|
||||
*-*-[Uu]nix[Ww]are20*) OUT="unixware-2.0"; options="$options no-sse2 no-sha512" ;;
|
||||
|
@ -763,7 +796,7 @@ case "$GUESSOS" in
|
|||
else # Motorola(?) CPU
|
||||
OUT="hpux-$CC"
|
||||
fi
|
||||
options="$options -D_REENTRANT" ;;
|
||||
__CNF_CPPFLAGS="$__CNF_CPPFLAGS -D_REENTRANT" ;;
|
||||
*-hpux) OUT="hpux-parisc-$CC" ;;
|
||||
*-aix)
|
||||
[ "$KERNEL_BITS" ] || KERNEL_BITS=`(getconf KERNEL_BITMODE) 2>/dev/null`
|
||||
|
@ -802,7 +835,9 @@ case "$GUESSOS" in
|
|||
*-*-qnx6) OUT="QNX6" ;;
|
||||
x86-*-android|i?86-*-android) OUT="android-x86" ;;
|
||||
armv[7-9]*-*-android)
|
||||
OUT="android-armeabi"; options="$options -march=armv7-a" ;;
|
||||
OUT="android-armeabi"
|
||||
__CNF_CFLAGS="$__CNF_CFLAGS -march=armv7-a"
|
||||
__CNF_CXXFLAGS="$__CNF_CXXFLAGS -march=armv7-a";;
|
||||
arm*-*-android) OUT="android-armeabi" ;;
|
||||
*) OUT=`echo $GUESSOS | awk -F- '{print $3}'`;;
|
||||
esac
|
||||
|
@ -816,7 +851,7 @@ esac
|
|||
# See whether we can compile Atalla support
|
||||
#if [ -f /usr/include/atasi.h ]
|
||||
#then
|
||||
# options="$options -DATALLA"
|
||||
# __CNF_CPPFLAGS="$__CNF_CPPFLAGS -DATALLA"
|
||||
#fi
|
||||
|
||||
if [ -n "$CONFIG_OPTIONS" ]; then
|
||||
|
@ -824,9 +859,11 @@ if [ -n "$CONFIG_OPTIONS" ]; then
|
|||
fi
|
||||
|
||||
if expr "$options" : '.*no\-asm' > /dev/null; then :; else
|
||||
sh -c "$CROSS_COMPILE${CC:-gcc} -Wa,--help -c -o /tmp/null.$$.o -x assembler /dev/null && rm /tmp/null.$$.o" 2>&1 | \
|
||||
grep \\--noexecstack >/dev/null && \
|
||||
options="$options -Wa,--noexecstack"
|
||||
if sh -c "$CROSS_COMPILE${CC:-gcc} -Wa,--help -c -o /tmp/null.$$.o -x assembler /dev/null && rm /tmp/null.$$.o" 2>&1 | \
|
||||
grep \\--noexecstack >/dev/null; then
|
||||
__CNF_CFLAGS="$__CNF_CFLAGS -Wa,--noexecstack"
|
||||
__CNF_CXXFLAGS="$__CNF_CXXFLAGS -Wa,--noexecstack"
|
||||
fi
|
||||
fi
|
||||
|
||||
# gcc < 2.8 does not support -march=ultrasparc
|
||||
|
@ -900,12 +937,28 @@ OUT="$OUT"
|
|||
$PERL $THERE/Configure LIST | grep "$OUT" > /dev/null
|
||||
if [ $? = "0" ]; then
|
||||
if [ "$VERBOSE" = "true" ]; then
|
||||
echo $PERL $THERE/Configure $OUT $options
|
||||
echo /usr/bin/env \
|
||||
__CNF_CPPDEFINES="'$__CNF_CPPDEFINES'" \
|
||||
__CNF_CPPINCLUDES="'$__CNF_CPPINCLUDES'" \
|
||||
__CNF_CPPFLAGS="'$__CNF_CPPFLAGS'" \
|
||||
__CNF_CFLAGS="'$__CNF_CFLAGS'" \
|
||||
__CNF_CXXFLAGS="'$__CNF_CXXFLAGS'" \
|
||||
__CNF_LDFLAGS="'$__CNF_LDFLAGS'" \
|
||||
__CNF_LDLIBS="'$__CNF_LDLIBS'" \
|
||||
$PERL $THERE/Configure $OUT $options
|
||||
fi
|
||||
if [ "$DRYRUN" = "false" ]; then
|
||||
# eval to make sure quoted options, possibly with spaces inside,
|
||||
# are treated right
|
||||
eval $PERL $THERE/Configure $OUT $options
|
||||
eval /usr/bin/env \
|
||||
__CNF_CPPDEFINES="'$__CNF_CPPDEFINES'" \
|
||||
__CNF_CPPINCLUDES="'$__CNF_CPPINCLUDES'" \
|
||||
__CNF_CPPFLAGS="'$__CNF_CPPFLAGS'" \
|
||||
__CNF_CFLAGS="'$__CNF_CFLAGS'" \
|
||||
__CNF_CXXFLAGS="'$__CNF_CXXFLAGS'" \
|
||||
__CNF_LDFLAGS="'$__CNF_LDFLAGS'" \
|
||||
__CNF_LDLIBS="'$__CNF_LDLIBS'" \
|
||||
$PERL $THERE/Configure $OUT $options
|
||||
fi
|
||||
else
|
||||
echo "This system ($OUT) is not supported. See file INSTALL for details."
|
||||
|
|
Loading…
Reference in a new issue