Commit 2ab92ae9 authored by Richard Levitte's avatar Richard Levitte
Browse files

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: default avatarAndy Polyakov <appro@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5534)
parent 72d7f221
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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}=[];
+78 −25
Original line number Diff line number Diff line
@@ -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."