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

	cflags		=> "",
	cppflags	=> "",
	lflags		=> "",
	defines		=> [],
	includes	=> [],
	lib_cflags	=> "",
	lib_cppflags	=> "",
	lib_defines	=> [ 'OPENSSL_BUILDING_OPENSSL' ],
	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		=> "ar",
	ARFLAGS		=> "r",
	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 = ();
                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         => "r",
        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 ();
            },

        LD              => "link",
        LDFLAGS         => "/nologo",
        ldoutflag       => "/out:",
        AR              => "lib",
        ARFLAGS         => "/nologo",
        aroutflag       => "/out:",
        RC               => "rc",
        rcoutflag        => "/fo",
        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',
    },
);
