Commit 3daecf16 authored by Andy Polyakov's avatar Andy Polyakov
Browse files

Configure: base compiler-specific decisions on pre-defines.



The commit subject is a bit misleading in sense that decisions affect
only gcc and gcc-alikes, like clang, recent icc...

This is back-port of 54cf3b98, GH#4281.

Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
parent d020a65a
Loading
Loading
Loading
Loading
+23 −23
Original line number Diff line number Diff line
@@ -1223,30 +1223,30 @@ unless ($disabled{asm}) {
    }
}

my $ecc = $target{cc};
if ($^O ne "VMS" && !$disabled{makedepend}) {
    # Is the compiler gcc or clang?  $ecc is used below to see if
    # error-checking can be turned on.
    my $ccpcc = "$config{cross_compile_prefix}$target{cc}";
    open(PIPE, "$ccpcc --version 2>&1 |");
    my $lines = 2;
my %predefined;

if ($^O ne "VMS") {
    my $cc = "$config{cross_compile_prefix}$target{cc}";

    # collect compiler pre-defines from gcc or gcc-alike...
    open(PIPE, "$cc -dM -E -x c /dev/null 2>&1 |");
    while (<PIPE>) {
        # Find the version number and save the major.
        m|(?:.*)\b(\d+)\.\d+\.\d+\b(?:.*)|;
        my $compiler_major = $1;
        # We know that GNU C version 3 and up as well as all clang
        # versions support dependency generation
        $config{makedepprog} = $ccpcc
            if (/clang/ || (/gcc/ && $compiler_major >= 3));
        $ecc = "clang" if /clang/;
        $ecc = "gcc" if /gcc/;
        last if ($config{makedepprog} || !$lines--);
	m/^#define\s+(\w+(?:\(\w+\))?)(?:\s+(.+))?/ or last;
	$predefined{$1} = $2 // "";
    }
    close(PIPE);

    $config{makedepprog} = which('makedepend') unless $config{makedepprog};
    if (!$disabled{makedepend}) {
	# We know that GNU C version 3 and up as well as all clang
	# versions support dependency generation
	if ($predefined{__GNUC__} >= 3) {
	    $config{makedepprog} = $cc;
	} else {
	    $config{makedepprog} = which('makedepend');
	    $disabled{makedepend} = "unavailable" unless $config{makedepprog};
	}
    }
}



@@ -1290,13 +1290,13 @@ if (defined($config{api})) {
if ($strict_warnings)
	{
	my $wopt;
	die "ERROR --strict-warnings requires gcc or clang"
            unless $ecc eq 'gcc' || $ecc eq 'clang';
	die "ERROR --strict-warnings requires gcc or gcc-alike"
            unless defined($predefined{__GNUC__});
	foreach $wopt (split /\s+/, $gcc_devteam_warn)
		{
		$config{cflags} .= " $wopt" unless ($config{cflags} =~ /(?:^|\s)$wopt(?:\s|$)/)
		}
	if ($ecc eq "clang")
	if (defined($predefined{__clang__}))
		{
		foreach $wopt (split /\s+/, $clang_devteam_warn)
			{