Configure et al: treat C defines separately
authorRichard Levitte <levitte@openssl.org>
Sat, 30 Jan 2016 01:17:05 +0000 (02:17 +0100)
committerRichard Levitte <levitte@openssl.org>
Wed, 10 Feb 2016 13:34:06 +0000 (14:34 +0100)
With some compilers, C macros are defined differently on the command
line than on Unix.  It could be that the flad to define them isn't -D,
it could also be that they need to be grouped together and not be mixed
in with the other compiler flags (that's how it's done on VMS, for
example).

On Unix family platform configurations, we can continue to have macro
definitions mixed in with the rest of the flags, so the changes in
Configurations/*.conf are kept to an absolute minimum.

Reviewed-by: Rich Salz <rsalz@openssl.org>
Configurations/00-base-templates.conf
Configurations/99-personal-levitte.conf
Configurations/README
Configure
Makefile.in

index 3cc078f8e6695d656f8ddd3f856392bfb889db88..713e374f72842f2e0213762b899569a1bee721db 100644 (file)
@@ -1,6 +1,17 @@
+# -*- Mode: perl -*-
 %targets=(
     BASE => {
        template        => 1,
 %targets=(
     BASE => {
        template        => 1,
+
+       cflags          => "",
+       defines         => [],
+       debug_cflags    => "",
+       debug_defines   => [],
+       release_cflags  => "",
+       release_defines => [],
+       thread_cflags   => "",
+       thread_defines  => [],
+
        cpuid_asm_src   => "mem_clr.c",
        bn_asm_src      => "bn_asm.c",
        ec_asm_src      => "",
        cpuid_asm_src   => "mem_clr.c",
        bn_asm_src      => "bn_asm.c",
        ec_asm_src      => "",
index d28cc6e934003d82548eb4c90e8fa6be64d83628..fbfd3da37ecd13d45d09ab185dde74ec15e06897 100644 (file)
@@ -8,13 +8,15 @@
 %targets = (
     "levitte-linux-elf" => {
         inherit_from     => [ "linux-elf" ],
 %targets = (
     "levitte-linux-elf" => {
         inherit_from     => [ "linux-elf" ],
-        debug_cflags     => add("-DLEVITTE_DEBUG -ggdb -g3"),
+        debug_cflags     => add("-ggdb -g3"),
+        debug_defines    => add(undef, "LEVITTE_DEBUG"),
         build_scheme     => [ "unified", "unix" ],
         build_file       => "Makefile",
     },
     "levitte-linux-x86_64" => {
         inherit_from     => [ "linux-x86_64" ],
         build_scheme     => [ "unified", "unix" ],
         build_file       => "Makefile",
     },
     "levitte-linux-x86_64" => {
         inherit_from     => [ "linux-x86_64" ],
-        debug_cflags     => add("-DLEVITTE_DEBUG -ggdb -g3"),
+        debug_cflags     => add("-ggdb -g3"),
+        debug_defines    => add(undef, "LEVITTE_DEBUG"),
         build_scheme     => [ "unified", "unix" ],
         build_file       => "Makefile",
     },
         build_scheme     => [ "unified", "unix" ],
         build_file       => "Makefile",
     },
index 75907a6d5c4ecccdfa64063db6827ba1360fd407..9f6071e8b9f811d7bcab17c623a86df3fc745705 100644 (file)
@@ -23,18 +23,35 @@ In each table entry, the following keys are significant:
                            libraries into the final program.
         cflags          => Flags that are used at all times when
                            compiling.
                            libraries into the final program.
         cflags          => Flags that are used at all times when
                            compiling.
+        defines         => As an alternative, macro definitions may be
+                           present here instead of in `cflags'.  If
+                           given here, they MUST be as an array of the
+                           string such as "MACRO=value", or just
+                           "MACRO" for definitions without value.
         debug_cflags    => Extra compilation flags used when making a
                            debug build (when Configure receives the
                            --debug option).  Typically something like
                            "-g -O0".
         debug_cflags    => Extra compilation flags used when making a
                            debug build (when Configure receives the
                            --debug option).  Typically something like
                            "-g -O0".
+        debug_defines   => Similarly to `debug_cflags', this gets
+                           combined with `defines' during a debug
+                           build.  The value here MUST also be an
+                           array of the same form as for `defines'.
         release_cflags  => Extra compilation flags used when making a
                            release build (when Configure receives the
                            --release option, or doesn't receive the
                            --debug option).  Typically something like
                            "-O" or "-O3".
         release_cflags  => Extra compilation flags used when making a
                            release build (when Configure receives the
                            --release option, or doesn't receive the
                            --debug option).  Typically something like
                            "-O" or "-O3".
+        release_defines => Similarly to `release_cflags', this gets
+                           combined with `defines' during a release
+                           build.  The value here MUST also be an
+                           array of the same form as for `defines'.
         thread_cflags   => Extra compilation flags used when
                            compiling with threading enabled.
                            Explained further below.  [2]
         thread_cflags   => Extra compilation flags used when
                            compiling with threading enabled.
                            Explained further below.  [2]
+        thread_defines  => Similarly to `thread_cflags', this gets
+                           combined with `defines' when threading is
+                           enabled.  The value here MUST also be an
+                           array of the same form as for `defines'.
         shared_cflag    => Extra compilation flags used when
                            compiling for shared libraries, typically
                            something like "-fPIC".
         shared_cflag    => Extra compilation flags used when
                            compiling for shared libraries, typically
                            something like "-fPIC".
index 560497ff082f422ef4a3771a81ea114c76663ac8..a6310366ce971a6af825dda56f098d07925b1115 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -320,7 +320,6 @@ my %disabled = ( # "what"         => "comment" [or special keyword "experimental
                 "ssl-trace"      => "default",
                 "unit-test"      => "default",
                 "zlib"           => "default",
                 "ssl-trace"      => "default",
                 "unit-test"      => "default",
                 "zlib"           => "default",
-                "zlib-dynamic"   => "default",
                 "crypto-mdebug"  => "default",
               );
 my @experimental = ();
                 "crypto-mdebug"  => "default",
               );
 my @experimental = ();
@@ -383,13 +382,13 @@ while ((my $first, my $second) = (shift @list, shift @list)) {
     unshift @list, $second;
 }
 
     unshift @list, $second;
 }
 
-# Construct the string of what $config{depflags} should look like with the defaults
-# from %disabled above.  (we need this to see if we should advise the user
-# to run "make depend"):
-my $default_depflags = join(" ",
-    map { my $x = $_; $x =~ tr{[a-z]-}{[A-Z]_}; "-DOPENSSL_NO_$x"; }
-    grep { $disabled{$_} !~ /\(no-depflags\)$/ }
-    sort keys %disabled);
+# Construct the string of what $config{depdefines} should look like with
+# the defaults from %disabled above.  (we need this to see if we should
+# advise the user to run "make depend"):
+my @default_depdefines =
+    map { my $x = $_; $x =~ tr{[a-z]-}{[A-Z]_}; "OPENSSL_NO_$x"; }
+    grep { $disabled{$_} !~ /\(no-depdefines\)$/ }
+    sort keys %disabled;
 
 # Explicit "no-..." options will be collected in %disabled along with the defaults.
 # To remove something from %disabled, use "enable-foo" (unless it's experimental).
 
 # Explicit "no-..." options will be collected in %disabled along with the defaults.
 # To remove something from %disabled, use "enable-foo" (unless it's experimental).
@@ -404,8 +403,9 @@ my $no_sse2=0;
 
 &usage if ($#ARGV < 0);
 
 
 &usage if ($#ARGV < 0);
 
-my $flags="";
-$config{depflags}="";
+my $user_cflags="";
+my @user_defines=();
+$config{depdefines}=[];
 $config{openssl_experimental_defines}=[];
 $config{openssl_api_defines}=[];
 $config{openssl_algorithm_defines}=[];
 $config{openssl_experimental_defines}=[];
 $config{openssl_api_defines}=[];
 $config{openssl_algorithm_defines}=[];
@@ -623,10 +623,14 @@ foreach (@argvcopy)
                        {
                        $libs.=$_." ";
                        }
                        {
                        $libs.=$_." ";
                        }
+               elsif (/^-D(.*)$/)
+                       {
+                       push @user_defines, $1;
+                       }
                else    # common if (/^[-+]/), just pass down...
                        {
                        $_ =~ s/%([0-9a-f]{1,2})/chr(hex($1))/gei;
                else    # common if (/^[-+]/), just pass down...
                        {
                        $_ =~ s/%([0-9a-f]{1,2})/chr(hex($1))/gei;
-                       $flags.=$_." ";
+                       $user_cflags.=$_." ";
                        }
                }
        elsif ($_ =~ /^([^:]+):(.+)$/)
                        }
                }
        elsif ($_ =~ /^([^:]+):(.+)$/)
@@ -747,7 +751,7 @@ foreach (sort (keys %disabled))
                        push @{$config{openssl_other_defines}}, "OPENSSL_NO_$ALGO";
                        print " OPENSSL_NO_$ALGO";
 
                        push @{$config{openssl_other_defines}}, "OPENSSL_NO_$ALGO";
                        print " OPENSSL_NO_$ALGO";
 
-                       if (/^err$/)    { $flags .= "-DOPENSSL_NO_ERR "; }
+                       if (/^err$/)    { push @user_defines, "OPENSSL_NO_ERR"; }
                        elsif (/^asm$/) { $no_asm = 1; }
                        }
                else
                        elsif (/^asm$/) { $no_asm = 1; }
                        }
                else
@@ -755,7 +759,7 @@ foreach (sort (keys %disabled))
                        ($ALGO,$algo) = ("RMD160","rmd160") if ($algo eq "ripemd");
 
                        push @{$config{openssl_algorithm_defines}}, "OPENSSL_NO_$ALGO";
                        ($ALGO,$algo) = ("RMD160","rmd160") if ($algo eq "ripemd");
 
                        push @{$config{openssl_algorithm_defines}}, "OPENSSL_NO_$ALGO";
-                       $config{depflags} .= " -DOPENSSL_NO_$ALGO";
+                       push @{$config{depdefines}}, "OPENSSL_NO_$ALGO";
                        print " OPENSSL_NO_$ALGO";
 
                        # fix-up crypto/directory name(s)
                        print " OPENSSL_NO_$ALGO";
 
                        # fix-up crypto/directory name(s)
@@ -770,8 +774,6 @@ foreach (sort (keys %disabled))
        print "\n";
        }
 
        print "\n";
        }
 
-my $exp_cflags = "";
-
 foreach (sort @experimental)
        {
        my $ALGO;
 foreach (sort @experimental)
        {
        my $ALGO;
@@ -779,7 +781,6 @@ foreach (sort @experimental)
 
        # opensslconf.h will set OPENSSL_NO_... unless OPENSSL_EXPERIMENTAL_... is defined
        push @{$config{openssl_experimental_defines}}, "OPENSSL_NO_$ALGO";
 
        # opensslconf.h will set OPENSSL_NO_... unless OPENSSL_EXPERIMENTAL_... is defined
        push @{$config{openssl_experimental_defines}}, "OPENSSL_NO_$ALGO";
-       $exp_cflags .= " -DOPENSSL_EXPERIMENTAL_$ALGO";
        }
 
 print "Configuring for $target\n";
        }
 
 print "Configuring for $target\n";
@@ -820,9 +821,11 @@ $config{openssldir} = catdir($config{prefix}, $config{openssldir})
 # Allow environment CC to override compiler...
 $target{cc} = $ENV{CC} || $target{cc};
 
 # Allow environment CC to override compiler...
 $target{cc} = $ENV{CC} || $target{cc};
 
-# For cflags, lflags, plib_lflags and ex_libs, add the debug_ or release_
-# attributes.
+# For cflags, lflags, plib_lflags, ex_libs and defines, add the debug_
+# or release_ attributes.
 # Do it in such a way that no spurious space is appended (hence the grep).
 # Do it in such a way that no spurious space is appended (hence the grep).
+$config{defines} = [ @{$target{defines}},
+                     @{$target{$build_prefix."defines"}} ];
 $config{cflags} = join(" ",
                       grep { $_ ne "" } ($target{cflags},
                                          $target{$build_prefix."cflags"}));
 $config{cflags} = join(" ",
                       grep { $_ ne "" } ($target{cflags},
                                          $target{$build_prefix."cflags"}));
@@ -856,7 +859,9 @@ $target{multilib}="" if !-d "$config{prefix}/lib$target{multilib}";
 $config{libdir}="lib$target{multilib}" if $config{libdir} eq "";
 $config{enginesdir}=$config{prefix} . "/" . $config{libdir}  . "/engines";
 
 $config{libdir}="lib$target{multilib}" if $config{libdir} eq "";
 $config{enginesdir}=$config{prefix} . "/" . $config{libdir}  . "/engines";
 
-$config{cflags} .= "$exp_cflags";
+push @{$config{defines}},
+    map { (my $x = $_) =~ s/^OPENSSL_NO_/OPENSSL_EXPERIMENTAL_/; $x }
+        @{$config{openssl_experimental_defines}};
 
 if ($target =~ /^mingw/ && `$target{cc} --target-help 2>&1` !~ m/-mno-cygwin/m)
        {
 
 if ($target =~ /^mingw/ && `$target{cc} --target-help 2>&1` !~ m/-mno-cygwin/m)
        {
@@ -864,7 +869,7 @@ if ($target =~ /^mingw/ && `$target{cc} --target-help 2>&1` !~ m/-mno-cygwin/m)
        $target{shared_ldflag} =~ s/-mno-cygwin\s*//;
        }
 
        $target{shared_ldflag} =~ s/-mno-cygwin\s*//;
        }
 
-if ($target =~ /linux.*-mips/ && !$no_asm && $flags !~ /-m(ips|arch=)/) {
+if ($target =~ /linux.*-mips/ && !$no_asm && $user_cflags !~ /-m(ips|arch=)/) {
        # minimally required architecture flags for assembly modules
        $config{cflags}="-mips2 $config{cflags}" if ($target =~ /mips32/);
        $config{cflags}="-mips3 $config{cflags}" if ($target =~ /mips64/);
        # minimally required architecture flags for assembly modules
        $config{cflags}="-mips2 $config{cflags}" if ($target =~ /mips32/);
        $config{cflags}="-mips3 $config{cflags}" if ($target =~ /mips64/);
@@ -872,9 +877,12 @@ if ($target =~ /linux.*-mips/ && !$no_asm && $flags !~ /-m(ips|arch=)/) {
 
 my $no_shared_warn=0;
 my $no_user_cflags=0;
 
 my $no_shared_warn=0;
 my $no_user_cflags=0;
+my $no_user_defines=0;
 
 
-if ($flags ne "")      { $config{cflags}="$flags$config{cflags}"; }
+if ($user_cflags ne "")        { $config{cflags}="$user_cflags$config{cflags}"; }
 else                   { $no_user_cflags=1;       }
 else                   { $no_user_cflags=1;       }
+if (@user_defines)     { $config{defines}=[ @user_defines, @{$config{defines}} ]; }
+else                   { $no_user_defines=1;       }
 
 # The DSO code currently always implements all functions so that no
 # applications will have to worry about that from a compilation point
 
 # The DSO code currently always implements all functions so that no
 # applications will have to worry about that from a compilation point
@@ -882,23 +890,23 @@ else                      { $no_user_cflags=1;       }
 # has support compiled in for them. Currently each method is enabled
 # by a define "DSO_<name>" ... we translate the "dso_scheme" config
 # string entry into using the following logic;
 # has support compiled in for them. Currently each method is enabled
 # by a define "DSO_<name>" ... we translate the "dso_scheme" config
 # string entry into using the following logic;
-my $dso_cflags;
 if (!$no_dso && $target{dso_scheme} ne "")
        {
        $target{dso_scheme} =~ tr/[a-z]/[A-Z]/;
        if ($target{dso_scheme} eq "DLFCN")
                {
 if (!$no_dso && $target{dso_scheme} ne "")
        {
        $target{dso_scheme} =~ tr/[a-z]/[A-Z]/;
        if ($target{dso_scheme} eq "DLFCN")
                {
-               $dso_cflags = "-DDSO_DLFCN -DHAVE_DLFCN_H";
+               $config{defines} = [ "DSO_DLFCN", "HAVE_DLFCN_H",
+                                    @{$config{defines}} ]
                }
        elsif ($target{dso_scheme} eq "DLFCN_NO_H")
                {
                }
        elsif ($target{dso_scheme} eq "DLFCN_NO_H")
                {
-               $dso_cflags = "-DDSO_DLFCN";
+               $config{defines} = [ "DSO_DLFCN", @{$config{defines}} ]
                }
        else
                {
                }
        else
                {
-               $dso_cflags = "-DDSO_$target{dso_scheme}";
+               $config{defines} = [ "DSO_$target{dso_scheme}",
+                                    @{$config{defines}} ]
                }
                }
-       $config{cflags} = "$dso_cflags $config{cflags}";
        }
 
 my $thread_cflags = "";
        }
 
 my $thread_cflags = "";
@@ -913,37 +921,38 @@ if ($target{thread_cflag} eq "(unknown)" && $threads)
        # If the user asked for "threads", [s]he is also expected to
        # provide any system-dependent compiler options that are
        # necessary.
        # If the user asked for "threads", [s]he is also expected to
        # provide any system-dependent compiler options that are
        # necessary.
-       if ($no_user_cflags)
+       if ($no_user_cflags && $no_user_defines)
                {
                print "You asked for multi-threading support, but didn't\n";
                print "provide any system-specific compiler options\n";
                exit(1);
                }
                {
                print "You asked for multi-threading support, but didn't\n";
                print "provide any system-specific compiler options\n";
                exit(1);
                }
-       $thread_cflags="-DOPENSSL_THREADS" ;
        push @thread_defines, "OPENSSL_THREADS";
        }
 else
        {
        push @thread_defines, "OPENSSL_THREADS";
        }
 else
        {
-       $thread_cflags="-DOPENSSL_THREADS $target{thread_cflag}";
-       push @thread_defines, "OPENSSL_THREADS";
+       $thread_cflags=" $target{thread_cflag}";
+       push @thread_defines, @{$target{thread_defines}}, "OPENSSL_THREADS";
        }
 
 $config{ex_libs}="$libs$config{ex_libs}" if ($libs ne "");
 
 if ($no_asm)
        {
        }
 
 $config{ex_libs}="$libs$config{ex_libs}" if ($libs ne "");
 
 if ($no_asm)
        {
-       $config{cflags}=~s/-D[BL]_ENDIAN//              if ($config{fips});
+       @{$config{defines}} = grep !/^[BL]_ENDIAN$/, @{$config{defines}}
+           if ($config{fips});
        }
 
 if ($threads)
        {
        $config{cflags} = "$thread_cflags $config{cflags}" if $thread_cflags;
        }
 
 if ($threads)
        {
        $config{cflags} = "$thread_cflags $config{cflags}" if $thread_cflags;
+       push @{$config{defines}}, @thread_defines;
        push @{$config{openssl_thread_defines}}, @thread_defines;
        }
 
 if ($zlib)
        {
        push @{$config{openssl_thread_defines}}, @thread_defines;
        }
 
 if ($zlib)
        {
-       $config{cflags} = "-DZLIB $config{cflags}";
+       push @{$config{defines}}, "ZLIB";
        if (defined($disabled{"zlib-dynamic"}))
                {
                if (defined($withargs{zlib_lib}))
        if (defined($disabled{"zlib-dynamic"}))
                {
                if (defined($withargs{zlib_lib}))
@@ -957,7 +966,7 @@ if ($zlib)
                }
        else
                {
                }
        else
                {
-               $config{cflags} = "-DZLIB_SHARED $config{cflags}";
+               push @{$config{defines}}, "ZLIB_SHARED";
                }
        }
 
                }
        }
 
@@ -975,7 +984,8 @@ if (!$config{no_shared})
        {
        if ($target{shared_cflag} ne "")
                {
        {
        if ($target{shared_cflag} ne "")
                {
-               $config{cflags} = "$target{shared_cflag} -DOPENSSL_PIC $config{cflags}";
+               push @{$config{defines}}, "OPENSSL_PIC";
+               $config{cflags} = "$target{shared_cflag} $config{cflags}";
                }
        }
 
                }
        }
 
@@ -1012,7 +1022,6 @@ if ($target =~ /^BSD-/)
 
 if ($target{sys_id} ne "")
        {
 
 if ($target{sys_id} ne "")
        {
-       #$config{cflags}="-DOPENSSL_SYS_$target{sys_id} $config{cflags}";
        push @{$config{openssl_sys_defines}}, "OPENSSL_SYS_$target{sys_id}";
        }
 
        push @{$config{openssl_sys_defines}}, "OPENSSL_SYS_$target{sys_id}";
        }
 
@@ -1023,44 +1032,44 @@ if ($target{ranlib} eq "")
 
 if (!$no_asm) {
     $target{cpuid_asm_src}=$table{BASE}->{cpuid_asm_src} if ($config{processor} eq "386");
 
 if (!$no_asm) {
     $target{cpuid_asm_src}=$table{BASE}->{cpuid_asm_src} if ($config{processor} eq "386");
-    $target{cpuid_asm_src}.=" uplink.c uplink-x86.s" if ($config{cflags} =~ /-DOPENSSL_USE_APPLINK/);
+    $target{cpuid_asm_src}.=" uplink.c uplink-x86.s" if (grep { $_ eq "OPENSSL_USE_APPLINK"} @{$config{defines}});
 
     $target{bn_asm_src} =~ s/\w+-gf2m.c// if (defined($disabled{ec2m}));
 
     # bn-586 is the only one implementing bn_*_part_words
 
     $target{bn_asm_src} =~ s/\w+-gf2m.c// if (defined($disabled{ec2m}));
 
     # bn-586 is the only one implementing bn_*_part_words
-    $config{cflags}.=" -DOPENSSL_BN_ASM_PART_WORDS" if ($target{bn_asm_src} =~ /bn-586/);
-    $config{cflags}.=" -DOPENSSL_IA32_SSE2" if (!$no_sse2 && $target{bn_asm_src} =~ /86/);
+    push @{$config{defines}}, "OPENSSL_BN_ASM_PART_WORDS" if ($target{bn_asm_src} =~ /bn-586/);
+    push @{$config{defines}}, "OPENSSL_IA32_SSE2" if (!$no_sse2 && $target{bn_asm_src} =~ /86/);
 
 
-    $config{cflags}.=" -DOPENSSL_BN_ASM_MONT" if ($target{bn_asm_src} =~ /-mont/);
-    $config{cflags}.=" -DOPENSSL_BN_ASM_MONT5" if ($target{bn_asm_src} =~ /-mont5/);
-    $config{cflags}.=" -DOPENSSL_BN_ASM_GF2m" if ($target{bn_asm_src} =~ /-gf2m/);
+    push @{$config{defines}}, "OPENSSL_BN_ASM_MONT" if ($target{bn_asm_src} =~ /-mont/);
+    push @{$config{defines}}, "OPENSSL_BN_ASM_MONT5" if ($target{bn_asm_src} =~ /-mont5/);
+    push @{$config{defines}}, "OPENSSL_BN_ASM_GF2m" if ($target{bn_asm_src} =~ /-gf2m/);
 
     if ($config{fips}) {
        push @{$config{openssl_other_defines}}, "OPENSSL_FIPS";
     }
 
     if ($target{sha1_asm_src}) {
 
     if ($config{fips}) {
        push @{$config{openssl_other_defines}}, "OPENSSL_FIPS";
     }
 
     if ($target{sha1_asm_src}) {
-       $config{cflags}.=" -DSHA1_ASM"   if ($target{sha1_asm_src} =~ /sx86/ || $target{sha1_asm_src} =~ /sha1/);
-       $config{cflags}.=" -DSHA256_ASM" if ($target{sha1_asm_src} =~ /sha256/);
-       $config{cflags}.=" -DSHA512_ASM" if ($target{sha1_asm_src} =~ /sha512/);
+       push @{$config{defines}}, "SHA1_ASM"   if ($target{sha1_asm_src} =~ /sx86/ || $target{sha1_asm_src} =~ /sha1/);
+       push @{$config{defines}}, "SHA256_ASM" if ($target{sha1_asm_src} =~ /sha256/);
+       push @{$config{defines}}, "SHA512_ASM" if ($target{sha1_asm_src} =~ /sha512/);
     }
     if ($target{md5_asm_src}) {
     }
     if ($target{md5_asm_src}) {
-       $config{cflags}.=" -DMD5_ASM";
+       push @{$config{defines}}, "MD5_ASM";
     }
     $target{cast_asm_src}=$table{BASE}->{cast_asm_src} if (!$config{no_shared}); # CAST assembler is not PIC
     if ($target{rmd160_asm_src}) {
     }
     $target{cast_asm_src}=$table{BASE}->{cast_asm_src} if (!$config{no_shared}); # CAST assembler is not PIC
     if ($target{rmd160_asm_src}) {
-       $config{cflags}.=" -DRMD160_ASM";
+       push @{$config{defines}}, "RMD160_ASM";
     }
     if ($target{aes_asm_src}) {
     }
     if ($target{aes_asm_src}) {
-       $config{cflags}.=" -DAES_ASM" if ($target{aes_asm_src} =~ m/\baes-/);;
+       push @{$config{defines}}, "AES_ASM" if ($target{aes_asm_src} =~ m/\baes-/);;
        # aes-ctr.fake is not a real file, only indication that assembler
        # module implements AES_ctr32_encrypt...
        # aes-ctr.fake is not a real file, only indication that assembler
        # module implements AES_ctr32_encrypt...
-       $config{cflags}.=" -DAES_CTR_ASM" if ($target{aes_asm_src} =~ s/\s*aes-ctr\.fake//);
+       push @{$config{defines}}, "AES_CTR_ASM" if ($target{aes_asm_src} =~ s/\s*aes-ctr\.fake//);
        # aes-xts.fake indicates presence of AES_xts_[en|de]crypt...
        # aes-xts.fake indicates presence of AES_xts_[en|de]crypt...
-       $config{cflags}.=" -DAES_XTS_ASM" if ($target{aes_asm_src} =~ s/\s*aes-xts\.fake//);
+       push @{$config{defines}}, "AES_XTS_ASM" if ($target{aes_asm_src} =~ s/\s*aes-xts\.fake//);
        $target{aes_asm_src} =~ s/\s*(vpaes|aesni)-x86\.s//g if ($no_sse2);
        $target{aes_asm_src} =~ s/\s*(vpaes|aesni)-x86\.s//g if ($no_sse2);
-       $config{cflags}.=" -DVPAES_ASM" if ($target{aes_asm_src} =~ m/vpaes/);
-       $config{cflags}.=" -DBSAES_ASM" if ($target{aes_asm_src} =~ m/bsaes/);
+       push @{$config{defines}}, "VPAES_ASM" if ($target{aes_asm_src} =~ m/vpaes/);
+       push @{$config{defines}}, "BSAES_ASM" if ($target{aes_asm_src} =~ m/bsaes/);
     }
     if ($target{wp_asm_src} =~ /mmx/) {
         if ($config{processor} eq "386") {
     }
     if ($target{wp_asm_src} =~ /mmx/) {
         if ($config{processor} eq "386") {
@@ -1070,13 +1079,13 @@ if (!$no_asm) {
        }
     }
     if ($target{modes_asm_src} =~ /ghash-/) {
        }
     }
     if ($target{modes_asm_src} =~ /ghash-/) {
-       $config{cflags}.=" -DGHASH_ASM";
+       push @{$config{defines}}, "GHASH_ASM";
     }
     if ($target{ec_asm_src} =~ /ecp_nistz256/) {
     }
     if ($target{ec_asm_src} =~ /ecp_nistz256/) {
-       $config{cflags}.=" -DECP_NISTZ256_ASM";
+       push @{$config{defines}}, "ECP_NISTZ256_ASM";
     }
     if ($target{poly1305_asm_src} ne "") {
     }
     if ($target{poly1305_asm_src} ne "") {
-       $config{cflags}.=" -DPOLY1305_ASM";
+       push @{$config{defines}}, "POLY1305_ASM";
     }
 }
 
     }
 }
 
@@ -1129,9 +1138,9 @@ $config{cflags} =~ s/([\\\"])/\\\1/g;
 
 if (defined($config{api})) {
     $config{openssl_api_defines} = [ "OPENSSL_MIN_API=".$apitable->{$config{api}} ];
 
 if (defined($config{api})) {
     $config{openssl_api_defines} = [ "OPENSSL_MIN_API=".$apitable->{$config{api}} ];
-    my $apiflag = sprintf("-DOPENSSL_API_COMPAT=%s", $apitable->{$config{api}});
-    $default_depflags .= " $apiflag";
-    $config{cflags} .= " $apiflag";
+    my $apiflag = sprintf("OPENSSL_API_COMPAT=%s", $apitable->{$config{api}});
+    push @default_depdefines, $apiflag;
+    push @{$config{defines}}, $apiflag;
 }
 
 if ($strict_warnings)
 }
 
 if ($strict_warnings)
@@ -1671,6 +1680,7 @@ EOF
 print "IsMK1MF       =", ($builder eq "mk1mf" ? "yes" : "no"), "\n";
 print "CC            =$target{cc}\n";
 print "CFLAG         =$config{cflags}\n";
 print "IsMK1MF       =", ($builder eq "mk1mf" ? "yes" : "no"), "\n";
 print "CC            =$target{cc}\n";
 print "CFLAG         =$config{cflags}\n";
+print "DEFINES       =",join(" ", @{$config{defines}}),"\n";
 print "LFLAG         =$config{lflags}\n";
 print "PLIB_LFLAG    =$config{plib_lflags}\n";
 print "EX_LIBS       =$config{ex_libs}\n";
 print "LFLAG         =$config{lflags}\n";
 print "PLIB_LFLAG    =$config{plib_lflags}\n";
 print "EX_LIBS       =$config{ex_libs}\n";
@@ -1755,12 +1765,16 @@ my %builders = (
 
         my $make_command = "$make PERL=\'$config{perl}\'";
         my $make_targets = "";
 
         my $make_command = "$make PERL=\'$config{perl}\'";
         my $make_targets = "";
+        my $need_make_depend =
+            join(" ", @{$config{depdefines}}) ne join(" ", @default_depdefines);
         $make_targets .= " depend"
         $make_targets .= " depend"
-            if $config{depflags} ne $default_depflags && $make_depend;
+            if $need_make_depend && $make_depend;
+
         (system $make_command.$make_targets) == 0
             or die "make $make_targets failed"
             if $make_targets ne "";
         (system $make_command.$make_targets) == 0
             or die "make $make_targets failed"
             if $make_targets ne "";
-        if ($config{depflags} ne $default_depflags && !$make_depend) {
+
+        if ($need_make_depend && !$make_depend) {
             $warn_make_depend++;
         }
     },
             $warn_make_depend++;
         }
     },
@@ -1770,15 +1784,18 @@ my %builders = (
         run_dofile("util/domd", "util/domd.in");
         chmod 0755, "util/domd";
 
         run_dofile("util/domd", "util/domd.in");
         chmod 0755, "util/domd";
 
-       my $make_command = "$make PERL=\'$config{perl}\'";
-       my $make_targets = "";
-       $make_targets .= " depend"
-           if $config{depflags} ne $default_depflags && $make_depend;
-       (system $make_command.$make_targets) == 0
-           or die "make $make_targets failed"
-           if $make_targets ne "";
+        my $make_command = "$make PERL=\'$config{perl}\'";
+        my $make_targets = "";
+        my $need_make_depend =
+            join(" ", @{$config{depdefines}}) ne join(" ", @default_depdefines);
+        $make_targets .= " depend"
+            if $need_make_depend && $make_depend;
+
+        (system $make_command.$make_targets) == 0
+            or die "make $make_targets failed"
+            if $make_targets ne "";
 
 
-       if ($config{depflags} ne $default_depflags && !$make_depend) {
+        if ($need_make_depend && !$make_depend) {
             $warn_make_depend++;
         }
     },
             $warn_make_depend++;
         }
     },
@@ -1919,10 +1936,10 @@ sub asm {
 sub _add {
     my $separator = shift;
 
 sub _add {
     my $separator = shift;
 
-    # If there's any ARRAY in the collection of values, we will return
-    # an ARRAY of combined values, otherwise a string of joined values
-    # with $separator as the separator.
-    my $found_array = 0;
+    # If there's any ARRAY in the collection of values OR the separator
+    # is undef, we will return an ARRAY of combined values, otherwise a
+    # string of joined values with $separator as the separator.
+    my $found_array = !defined($separator);
 
     my @values =
        map {
 
     my @values =
        map {
@@ -2145,8 +2162,11 @@ sub print_table_entry
        "sys_id",
        "cc",
        "cflags",
        "sys_id",
        "cc",
        "cflags",
+       "defines",
        "debug_cflags",
        "debug_cflags",
+       "debug_defines",
        "release_cflags",
        "release_cflags",
+       "release_defines",
        "thread_cflag",
        "unistd",
        "ld",
        "thread_cflag",
        "unistd",
        "ld",
index 06413f3e33cf52a64c6c8feac04eb688fad38b12..eeea0057baefc8dce02ba2cb99feb6bdaa9d2933 100644 (file)
@@ -60,8 +60,8 @@ OPENSSLDIR={- $config{openssldir} -}
 
 CROSS_COMPILE= {- $config{cross_compile_prefix} -}
 CC= $(CROSS_COMPILE){- $target{cc} -}
 
 CROSS_COMPILE= {- $config{cross_compile_prefix} -}
 CC= $(CROSS_COMPILE){- $target{cc} -}
-CFLAG= {- $config{cflags} -}
-DEPFLAG= {- $config{depflags} -}
+CFLAG={- join(" ",map { "-D".$_} @{$config{defines}}) -} {- $config{cflags} -}
+DEPFLAG= {- join(" ",map { "-D".$_} @{$config{depdefines}}) -}
 LDFLAG= {- $config{lflags} -}
 PLIB_LDFLAG= {- $config{plib_lflags} -}
 EX_LIBS= {- $config{ex_libs} -}
 LDFLAG= {- $config{lflags} -}
 PLIB_LDFLAG= {- $config{plib_lflags} -}
 EX_LIBS= {- $config{ex_libs} -}