[openssl-commits] [openssl] master update

Richard Levitte levitte at openssl.org
Wed Feb 10 13:34:20 UTC 2016


The branch master has been updated
       via  5482dac9f4de7eb73d1b9c776be9495735f7e299 (commit)
       via  bcb1977b7f4186b5551d83839286bc02991c2ad3 (commit)
      from  dd27f16e9a1d267da722a5aa37dba3e6a198afdb (commit)


- Log -----------------------------------------------------------------
commit 5482dac9f4de7eb73d1b9c776be9495735f7e299
Author: Richard Levitte <levitte at openssl.org>
Date:   Sat Jan 30 02:57:19 2016 +0100

    Configure et al: move the installation directory logic to Makefiles
    
    The logic to figure out the combinations of --prefix and --openssldir
    has stayed in Configure so far, with Unix paths as defaults.
    
    However, since we're making Configure increasingly platform agnostic,
    these defaults need to change and adapt to the platform, along with
    the logic to combine them.
    
    The easiest to provide for this is to move the logic and the defaults
    away from Configure and into the build files.
    
    This also means that the definition of the macros ENGINESDIR and
    OPENSSLDIR move away from include/openssl/opensslconf.h and into the
    build files.
    
    Makefile.in is adapted accordingly.
    
    Reviewed-by: Rich Salz <rsalz at openssl.org>

commit bcb1977b7f4186b5551d83839286bc02991c2ad3
Author: Richard Levitte <levitte at openssl.org>
Date:   Sat Jan 30 02:17:05 2016 +0100

    Configure et al: treat C defines separately
    
    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 at openssl.org>

-----------------------------------------------------------------------

Summary of changes:
 Configurations/00-base-templates.conf   |  11 ++
 Configurations/99-personal-levitte.conf |   6 +-
 Configurations/README                   |  17 +++
 Configure                               | 191 ++++++++++++++++----------------
 Makefile.in                             |  55 ++++++++-
 crypto/engine/eng_list.c                |   5 -
 include/openssl/opensslconf.h.in        |   7 --
 7 files changed, 174 insertions(+), 118 deletions(-)

diff --git a/Configurations/00-base-templates.conf b/Configurations/00-base-templates.conf
index 3cc078f..713e374 100644
--- a/Configurations/00-base-templates.conf
+++ b/Configurations/00-base-templates.conf
@@ -1,6 +1,17 @@
+# -*- Mode: perl -*-
 %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	=> "",
diff --git a/Configurations/99-personal-levitte.conf b/Configurations/99-personal-levitte.conf
index d28cc6e..fbfd3da 100644
--- a/Configurations/99-personal-levitte.conf
+++ b/Configurations/99-personal-levitte.conf
@@ -8,13 +8,15 @@
 %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" ],
-        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",
     },
diff --git a/Configurations/README b/Configurations/README
index 75907a6..9f6071e 100644
--- a/Configurations/README
+++ b/Configurations/README
@@ -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.
+        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_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_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_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".
diff --git a/Configure b/Configure
index 560497f..75b8558 100755
--- a/Configure
+++ b/Configure
@@ -320,7 +320,6 @@ my %disabled = ( # "what"         => "comment" [or special keyword "experimental
 		 "ssl-trace"	  => "default",
 		 "unit-test"	  => "default",
 		 "zlib"           => "default",
-		 "zlib-dynamic"   => "default",
 		 "crypto-mdebug"  => "default",
 	       );
 my @experimental = ();
@@ -383,13 +382,13 @@ while ((my $first, my $second) = (shift @list, shift @list)) {
     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).
@@ -404,8 +403,9 @@ my $no_sse2=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}=[];
@@ -578,6 +578,8 @@ foreach (@argvcopy)
 		if (/^--prefix=(.*)$/)
 			{
 			$config{prefix}=$1;
+			die "Directory given with --prefix MUST be absolute\n"
+				unless file_name_is_absolute($config{prefix});
 			}
 		elsif (/^--api=(.*)$/)
 			{
@@ -623,10 +625,14 @@ foreach (@argvcopy)
 			{
 			$libs.=$_." ";
 			}
+		elsif (/^-D(.*)$/)
+			{
+			push @user_defines, $1;
+			}
 		else	# common if (/^[-+]/), just pass down...
 			{
 			$_ =~ s/%([0-9a-f]{1,2})/chr(hex($1))/gei;
-			$flags.=$_." ";
+			$user_cflags.=$_." ";
 			}
 		}
 	elsif ($_ =~ /^([^:]+):(.+)$/)
@@ -747,7 +753,7 @@ foreach (sort (keys %disabled))
 			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
@@ -755,7 +761,7 @@ foreach (sort (keys %disabled))
 			($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)
@@ -770,8 +776,6 @@ foreach (sort (keys %disabled))
 	print "\n";
 	}
 
-my $exp_cflags = "";
-
 foreach (sort @experimental)
 	{
 	my $ALGO;
@@ -779,7 +783,6 @@ foreach (sort @experimental)
 
 	# 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";
@@ -812,17 +815,14 @@ my $make	= $ENV{'MAKE'} || "make";
 $config{cross_compile_prefix} = $ENV{'CROSS_COMPILE'}
     if $config{cross_compile_prefix} eq "";
 
-$config{prefix} = "/usr/local" if !$config{prefix};
-$config{openssldir} = "ssl" if !$config{openssldir};
-$config{openssldir} = catdir($config{prefix}, $config{openssldir})
-    unless file_name_is_absolute($config{openssldir});
-
 # 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).
+$config{defines} = [ @{$target{defines}},
+                     @{$target{$build_prefix."defines"}} ];
 $config{cflags} = join(" ",
 		       grep { $_ ne "" } ($target{cflags},
 					  $target{$build_prefix."cflags"}));
@@ -847,16 +847,9 @@ $target{build_scheme} = [ $target{build_scheme} ]
 my ($builder, $builder_platform, @builder_opts) =
     @{$target{build_scheme}};
 
-# if $config{prefix}/lib$target{multilib} is not an existing directory, then
-# assume that it's not searched by linker automatically, in
-# which case adding $target{multilib} suffix causes more grief than
-# we're ready to tolerate, so don't...
-$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{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)
 	{
@@ -864,7 +857,7 @@ if ($target =~ /^mingw/ && `$target{cc} --target-help 2>&1` !~ m/-mno-cygwin/m)
 	$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/);
@@ -872,9 +865,12 @@ if ($target =~ /linux.*-mips/ && !$no_asm && $flags !~ /-m(ips|arch=)/) {
 
 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;       }
+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
@@ -882,23 +878,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;
-my $dso_cflags;
 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")
 		{
-		$dso_cflags = "-DDSO_DLFCN";
+		$config{defines} = [ "DSO_DLFCN", @{$config{defines}} ]
 		}
 	else
 		{
-		$dso_cflags = "-DDSO_$target{dso_scheme}";
+		$config{defines} = [ "DSO_$target{dso_scheme}",
+				     @{$config{defines}} ]
 		}
-	$config{cflags} = "$dso_cflags $config{cflags}";
 	}
 
 my $thread_cflags = "";
@@ -913,37 +909,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 ($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);
 		}
-	$thread_cflags="-DOPENSSL_THREADS" ;
 	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{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;
+	push @{$config{defines}}, @thread_defines;
 	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}))
@@ -957,7 +954,7 @@ if ($zlib)
 		}
 	else
 		{
-		$config{cflags} = "-DZLIB_SHARED $config{cflags}";
+		push @{$config{defines}}, "ZLIB_SHARED";
 		}
 	}
 
@@ -975,7 +972,8 @@ if (!$config{no_shared})
 	{
 	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}";
 		}
 	}
 
@@ -997,22 +995,8 @@ if ($builder ne "mk1mf")
 #
 # Platform fix-ups
 #
-# Unlike other OSes (like Solaris, Linux, Tru64, IRIX) BSD run-time
-# linkers (tested OpenBSD, NetBSD and FreeBSD) "demand" RPATH set on
-# .so objects. Apparently application RPATH is not global and does
-# not apply to .so linked with other .so. Problem manifests itself
-# when libssl.so fails to load libcrypto.so. One can argue that we
-# should engrave this into Makefile.shared rules or into BSD-* config
-# lines above. Meanwhile let's try to be cautious and pass -rpath to
-# linker only when --prefix is not /usr.
-if ($target =~ /^BSD-/)
-	{
-	$target{shared_ldflag}.=" -Wl,-rpath,\$\$(LIBRPATH)" if ($config{prefix} !~ m|^/usr[/]*$|);
-	}
-
 if ($target{sys_id} ne "")
 	{
-	#$config{cflags}="-DOPENSSL_SYS_$target{sys_id} $config{cflags}";
 	push @{$config{openssl_sys_defines}}, "OPENSSL_SYS_$target{sys_id}";
 	}
 
@@ -1023,44 +1007,44 @@ if ($target{ranlib} eq "")
 
 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
-    $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}) {
-	$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}) {
-	$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}) {
-	$config{cflags}.=" -DRMD160_ASM";
+	push @{$config{defines}}, "RMD160_ASM";
     }
     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...
-	$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...
-	$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);
-	$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") {
@@ -1070,13 +1054,13 @@ if (!$no_asm) {
 	}
     }
     if ($target{modes_asm_src} =~ /ghash-/) {
-	$config{cflags}.=" -DGHASH_ASM";
+	push @{$config{defines}}, "GHASH_ASM";
     }
     if ($target{ec_asm_src} =~ /ecp_nistz256/) {
-	$config{cflags}.=" -DECP_NISTZ256_ASM";
+	push @{$config{defines}}, "ECP_NISTZ256_ASM";
     }
     if ($target{poly1305_asm_src} ne "") {
-	$config{cflags}.=" -DPOLY1305_ASM";
+	push @{$config{defines}}, "POLY1305_ASM";
     }
 }
 
@@ -1129,9 +1113,9 @@ $config{cflags} =~ s/([\\\"])/\\\1/g;
 
 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)
@@ -1671,6 +1655,7 @@ EOF
 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";
@@ -1755,12 +1740,16 @@ my %builders = (
 
         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 $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 "";
-        if ($config{depflags} ne $default_depflags && !$make_depend) {
+
+        if ($need_make_depend && !$make_depend) {
             $warn_make_depend++;
         }
     },
@@ -1770,15 +1759,18 @@ my %builders = (
         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++;
         }
     },
@@ -1919,10 +1911,10 @@ sub asm {
 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 {
@@ -2145,8 +2137,11 @@ sub print_table_entry
 	"sys_id",
 	"cc",
 	"cflags",
+	"defines",
 	"debug_cflags",
+	"debug_defines",
 	"release_cflags",
+	"release_defines",
 	"thread_cflag",
 	"unistd",
 	"ld",
diff --git a/Makefile.in b/Makefile.in
index 06413f3..44362d0 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -28,8 +28,38 @@ INSTALL_PREFIX={- $config{install_prefix} -}
 
 # Do not edit these manually. Use Configure with --prefix or --openssldir
 # to change this!  Short explanation in the top comment in Configure
-INSTALLTOP={- $config{prefix} -}
-OPENSSLDIR={- $config{openssldir} -}
+INSTALLTOP={- # $prefix is used in the OPENSSLDIR perl snippet
+	      #
+	      our $prefix = $config{prefix} || "/usr/local";
+              $prefix -}
+OPENSSLDIR={- #
+	      # The logic here is that if no --openssldir was given,
+	      # OPENSSLDIR will get the value from $prefix plus "/ssl".
+	      # If --openssldir was given and the value is an absolute
+	      # path, OPENSSLDIR will get its value without change.
+	      # If the value from --openssldir is a relative path,
+	      # OPENSSLDIR will get $prefix with the --openssldir
+	      # value appended as a subdirectory.
+	      #
+              use File::Spec::Functions;
+              our $openssldir =
+                  $config{openssldir} ?
+                      (file_name_is_absolute($config{openssldir}) ?
+                           $config{openssldir}
+                           : catdir($prefix, $config{openssldir}))
+                      : catdir($prefix, "ssl");
+              $openssldir -}
+LIBDIR={- #
+          # if $prefix/lib$target{multilib} is not an existing
+          # directory, then assume that it's not searched by linker
+          # automatically, in which case adding $target{multilib} suffix
+          # causes more grief than we're ready to tolerate, so don't...
+          our $multilib =
+              -d "$prefix/lib$target{multilib}" ? $target{multilib} : "";
+          our $libdir = $config{libdir} || "lib$multilib";
+          $libdir -}
+ENGINESDIR={- use File::Spec::Functions;
+              catdir($prefix,$libdir,"engines") -}
 
 # NO_IDEA - Define to build without the IDEA algorithm
 # NO_RC4  - Define to build without the RC4 algorithm
@@ -60,8 +90,8 @@ OPENSSLDIR={- $config{openssldir} -}
 
 CROSS_COMPILE= {- $config{cross_compile_prefix} -}
 CC= $(CROSS_COMPILE){- $target{cc} -}
-CFLAG= {- $config{cflags} -}
-DEPFLAG= {- $config{depflags} -}
+CFLAG={- join(" ",(map { "-D".$_} @{$config{defines}}),"-DOPENSSLDIR=\"\\\"\$(OPENSSLDIR)\\\"\"","-DENGINESDIR=\"\\\"\$(ENGINESDIR)\\\"\"") -} {- $config{cflags} -}
+DEPFLAG= {- join(" ",map { "-D".$_} @{$config{depdefines}}) -}
 LDFLAG= {- $config{lflags} -}
 PLIB_LDFLAG= {- $config{plib_lflags} -}
 EX_LIBS= {- $config{ex_libs} -}
@@ -75,7 +105,7 @@ PERL= {- $config{perl} -}
 RM= rm -f
 TAR= tar
 TARFLAGS= --no-recursion
-LIBDIR={- $config{libdir} -}
+MAKEDEPPROG=$(CROSS_COMPILE){- $config{makedepprog} -}
 
 # We let the C compiler driver to take care of .s files. This is done in
 # order to be excused from maintaining a separate set of architecture
@@ -160,7 +190,20 @@ LIBS=   libcrypto.a libssl.a
 SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
 SHARED_SSL=libssl$(SHLIB_EXT)
 SHARED_LIBS={- '$(SHARED_CRYPTO) $(SHARED_SSL)' if (!$config{no_shared}) -}
-SHARED_LDFLAG={- $target{shared_ldflag} -}
+SHARED_LDFLAG={- $target{shared_ldflag}
+                 # Unlike other OSes (like Solaris, Linux, Tru64,
+                 # IRIX) BSD run-time linkers (tested OpenBSD, NetBSD
+                 # and FreeBSD) "demand" RPATH set on .so objects.
+                 # Apparently application RPATH is not global and
+                 # does not apply to .so linked with other .so.
+                 # Problem manifests itself when libssl.so fails to
+                 # load libcrypto.so. One can argue that we should
+                 # engrave this into Makefile.shared rules or into
+                 # BSD-* config lines above. Meanwhile let's try to
+                 # be cautious and pass -rpath to linker only when
+                 # $prefix is not /usr.
+                 . ($config{target} =~ m|^BSD-| && $prefix !~ m|^/usr/.*$|
+                    ? " -Wl,-rpath,\$\$(LIBRPATH)" : "") -}
 
 GENERAL=        Makefile
 BASENAME=       openssl
diff --git a/crypto/engine/eng_list.c b/crypto/engine/eng_list.c
index cd6757f..8ca1f80 100644
--- a/crypto/engine/eng_list.c
+++ b/crypto/engine/eng_list.c
@@ -355,13 +355,8 @@ ENGINE *ENGINE_by_id(const char *id)
      * Prevent infinite recursion if we're looking for the dynamic engine.
      */
     if (strcmp(id, "dynamic")) {
-# ifdef OPENSSL_SYS_VMS
-        if ((load_dir = getenv("OPENSSL_ENGINES")) == 0)
-            load_dir = "SSLROOT:[ENGINES]";
-# else
         if ((load_dir = getenv("OPENSSL_ENGINES")) == 0)
             load_dir = ENGINESDIR;
-# endif
         iterator = ENGINE_by_id("dynamic");
         if (!iterator || !ENGINE_ctrl_cmd_string(iterator, "ID", id, 0) ||
             !ENGINE_ctrl_cmd_string(iterator, "DIR_LOAD", "2", 0) ||
diff --git a/include/openssl/opensslconf.h.in b/include/openssl/opensslconf.h.in
index c22209b..d9f6429 100644
--- a/include/openssl/opensslconf.h.in
+++ b/include/openssl/opensslconf.h.in
@@ -123,13 +123,6 @@ EOF
 /* Generate 80386 code? */
 {- $config{processor} eq "386" ? "#define" : "#undef" -} I386_ONLY
 
-#if !defined(VMS) && !defined(__VMS) /* VMS uses logical names instead */
-# if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
-#  define ENGINESDIR {- quotify1($config{enginesdir}) -}
-#  define OPENSSLDIR {- quotify1($config{openssldir}) -}
-# endif
-#endif
-
 #undef OPENSSL_UNISTD
 #define OPENSSL_UNISTD {- $target{unistd} -}
 


More information about the openssl-commits mailing list