# -*- Mode: perl -*-
my %targets=(
    DEFAULTS => {
	template	=> 1,

	cflags		=> "",
	cppflags	=> "",
	lflags		=> "",
	defines		=> [],
	includes	=> [],
	lib_cflags	=> "",
	lib_cppflags	=> "",
	lib_defines	=> [],
	thread_scheme	=> "(unknown)", # Assume we don't know
	thread_defines	=> [],

	unistd		=> "<unistd.h>",
	shared_target	=> "",
	shared_cflag	=> "",
	shared_defines	=> [],
	shared_ldflag	=> "",
	shared_rcflag	=> "",

	#### Defaults for the benefit of the config targets who don't inherit
	#### a BASE and assume Unix defaults
	#### THESE WILL DISAPPEAR IN OpenSSL 1.2
	build_scheme	=> [ "unified", "unix" ],
	build_file	=> "Makefile",

	AR		=> "(unused)",
	ARFLAGS		=> "(unused)",
	CC		=> "cc",
	HASHBANGPERL	=> "/usr/bin/env perl",
	RANLIB		=> sub { which("$config{cross_compile_prefix}ranlib")
                                     ? "ranlib" : "" },
	RC		=> "windres",

	#### THESE WILL BE ENABLED IN OpenSSL 1.2
	#HASHBANGPERL	=> "PERL", # Only Unix actually cares
    },

    BASE_common => {
	template	=> 1,

	enable		=> [],
	disable		=> [],

	defines		=>
	    sub {
                my @defs = ( 'OPENSSL_BUILDING_OPENSSL' );
                push @defs, "ZLIB" unless $disabled{zlib};
                push @defs, "ZLIB_SHARED" unless $disabled{"zlib-dynamic"};
                return [ @defs ];
            },
        includes        =>
            sub {
                my @incs = ();
                push @incs, $withargs{zlib_include}
                    if !$disabled{zlib} && $withargs{zlib_include};
                return [ @incs ];
            },
    },

    BASE_unix => {
        inherit_from    => [ "BASE_common" ],
        template        => 1,

        AR              => "ar",
        ARFLAGS         => "qc",
        CC              => "cc",
        lflags          =>
            sub { $withargs{zlib_lib} ? "-L".$withargs{zlib_lib} : () },
        ex_libs         =>
            sub { !defined($disabled{zlib})
                  && defined($disabled{"zlib-dynamic"})
                  ? "-lz" : () },
        HASHBANGPERL    => "/usr/bin/env perl", # Only Unix actually cares
        RANLIB          => sub { which("$config{cross_compile_prefix}ranlib")
                                     ? "ranlib" : "" },
        RC              => "windres",

        build_scheme    => [ "unified", "unix" ],
        build_file      => "Makefile",

        perl_platform   => 'Unix',
    },

    BASE_Windows => {
        inherit_from    => [ "BASE_common" ],
        template        => 1,

        lib_defines      =>
            sub {
                my @defs = ();
                unless ($disabled{"zlib-dynamic"}) {
                    my $zlib = $withargs{zlib_lib} // "ZLIB1";
                    push @defs, 'LIBZ=' . (quotify("perl", $zlib))[0];
                }
                return [ @defs ];
            },
        ex_libs         =>
            sub {
                unless ($disabled{zlib}) {
                    if (defined($disabled{"zlib-dynamic"})) {
                        return $withargs{zlib_lib} // "ZLIB1";
                    }
                }
                return ();
            },

        MT              => "mt",
        MTFLAGS         => "-nologo",
        mtinflag        => "-manifest ",
        mtoutflag       => "-outputresource:",

        build_file      => "makefile",
        build_scheme    => [ "unified", "windows" ],

        perl_platform   => 'Windows',
    },

    BASE_VMS => {
        inherit_from    => [ "BASE_common" ],
        template        => 1,

        includes        =>
            add(sub {
                    my @incs = ();
                    # GNV$ZLIB_INCLUDE is the standard logical name for later
                    # zlib incarnations.
                    push @incs, 'GNV$ZLIB_INCLUDE:'
                        if !$disabled{zlib} && !$withargs{zlib_include};
                    return [ @incs ];
                }),

        build_file       => "descrip.mms",
        build_scheme     => [ "unified", "VMS" ],

        perl_platform    => 'VMS',
    },
);
