config: Pass diverse flags to Configure via the environment
authorRichard Levitte <levitte@openssl.org>
Wed, 7 Mar 2018 21:44:59 +0000 (22:44 +0100)
committerRichard Levitte <levitte@openssl.org>
Thu, 8 Mar 2018 16:24:02 +0000 (17:24 +0100)
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)

Configure
config

index 368b8991ccd4f0c2a28fc0dea213d2c2369dd6de..f0a88f8468344f6bc96b9a6f1d80be835db816a8 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -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}=[];
diff --git a/config b/config
index 00f90876118383224f0bd0e1b1f38246da700092..92dfa4af7f1d0280792c9cedf62683f1686bcfac 100755 (executable)
--- a/config
+++ b/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."