use strict;
use warnings;
use alienfile;
use Path::Tiny qw(path);

### let's probe by compiling the code. on FreeBSD force the download and build
### the latest code since the pkg version is old
if ($^O !~ /freebsd|openbsd|netbsd/i) {
plugin 'Probe::CBuilder' => (
    lang => 'C',
    cflags => $ENV{TALIB_INCLUDES} ? "-I$ENV{TALIB_INCLUDES} -I$ENV{TALIB_INCLUDES}/ta-lib": "",
    libs => $ENV{TALIB_LIBDIRS} ? "-L$ENV{TALIB_LIBDIRS} -lta-lib -lm" : "-lta-lib -lm",
    program => <<'EOF');
#include <ta_libc.h>
int main(int argc, char **argv)
{
  TA_Initialize();
  TA_Shutdown();
  return 0;
}
EOF
}

share {
    plugin 'Download::GitHub' => (
        github_user => 'TA-Lib',
        github_repo => 'ta-lib',
    );
    plugin 'Extract' => 'tar.gz';
    plugin 'Build::CMake';
    patch [ '%{perl} -p -i -e "s/CMAKE_MINIMUM_REQUIRED.*/cmake_minimum_required(VERSION 3.18)/gi" %{.install.extract}/CMakeLists.txt'],
    build [
        # this is the default build step, if you do not specify one.
        [ '%{cmake}',
            @{ meta->prop->{plugin_build_cmake}->{args} },
            # ... put extra cmake args here ...
            '-DCMAKE_MINIMUM_REQUIRED_VERSION=3.1',
            '%{.install.extract}/'
        ],
        '%{make}',
        '%{make} install',
    ];
    plugin 'Gather::IsolateDynamic';
    ## lifted from alien-libdeflate
    after gather => sub {
        my $build = shift;
        my $prefix = path($build->install_prop->{prefix})->absolute;

        # for MSWin32 which creates a 'libta_lib_a.a' by default
        my $static_libta_lib_a = $prefix->child( 'lib', 'libta-lib-static.a' );
        my $static_libta_lib   = $prefix->child( 'lib', 'libta-lib.a'   );
        if( -f $static_libta_lib_a && ! -f $static_libta_lib ) {
            $build->log("move " . join(" => ", map $_->relative($prefix),
                $static_libta_lib_a,
                $static_libta_lib
            ));
            $static_libta_lib_a->move( $static_libta_lib );
        }

        my $lib = $prefix->child('lib')->stringify;
        my $include = $prefix->child('include');
        ## handle pre-installed TA-lib 0.4 and self built TA-lib 0.6
        my $include2 = $prefix->child('include', 'ta-lib');
        my $dynamic = $prefix->child('dynamic');
        $build->runtime_prop->{cflags} = "-I$include -I$include2";
        $build->runtime_prop->{libs} = "-L$dynamic -lta-lib -lm";
        $build->runtime_prop->{libs_static} = "-L$lib -lta-lib -lm";
        $build->runtime_prop->{inline_auto_include} = [ 'ta_libc.h' ];
    };
};
