#! perl

use v5.10;
use strict;
use warnings;

use alienfile;
use Path::Tiny;
use Sort::Versions;
use File::Which;

#<<<
use constant PACKAGE_VERSION =>  '8.0.2';
#>>>

our $VERSION = 'v8.0.2.1';

my %req_version = (
    defined $ENV{ALIEN_QHULL_EXACT_VERSION}
    ? ( exact_version => $ENV{ALIEN_QHULL_EXACT_VERSION} )
    : ( atleast_version => $ENV{ALIEN_QHULL_ATLEAST_VERSION} // PACKAGE_VERSION ) );

die( "This distribution only supports QHULL versions @{[ PACKAGE_VERSION]} or greater\n" )
  if versioncmp( PACKAGE_VERSION, ( values( %req_version ) )[0] ) == 1;

use constant PACKAGE_NAME_R        => 'qhull_r';
use constant PACKAGE_NAME_STATIC_R => 'qhullstatic_r';

plugin 'Gather::IsolateDynamic';
plugin PkgConfig => ( pkg_name => PACKAGE_NAME_R, %req_version );

sys {
    # find path to executables for system install, if found.
    after 'gather' => sub {
        my ( $build ) = @_;
        if ( defined( my $exe = which( 'qhull' ) ) ) {
            $build->runtime_prop->{system_bin_dir} = path( $exe )->parent->stringify;
        }
    };

};


share {
    plugin 'Build::CMake';

    # start_url 'http://www.qhull.org/download/';
    start_url( ( path( 'src' )->children( qr/qhull.*-@{[PACKAGE_VERSION]}/ ) )[0] );

    plugin Download => (
        filter  => qr/(?:\d+[.]\d+[.]\d+)[.]tgz*$/,
        version => qr/(\d+[.]\d+[.]\d+)[.]tgz*$/,
    );

    meta->around_hook(
        prefer => sub {
            my ( $orig, $build, @args ) = @_;
            my $ret  = $build->$orig( @args );
            my $list = $ret->{list};
            if ( exists $req_version{exact_version} ) {
                $ret->{list} = [ grep { $_->{version} eq $req_version{exact_version} } @$list ];
            }
            else {
                $ret->{list} = [ grep { versioncmp( $req_version{atleast_version}, $_->{version} ) < 1 } @$list ];
            }
            return $ret;
        } );


    plugin Extract => 'tar.gz';

    build [ [
            '%{cmake}', @{ meta->prop->{plugin_build_cmake}->{args} },
            '-D',       'BUILD_SHARED_LIBS=OFF',
            '%{.install.extract}',
        ],
        '%{make}',
        '%{make} install',
    ];
};

gather [
    [ "pkg-config --modversion @{[ PACKAGE_NAME_STATIC_R ]}", \'%{.runtime.version}' ],
    [ "pkg-config --cflags     @{[ PACKAGE_NAME_STATIC_R ]}", \'%{.runtime.cflags}' ],
    [ "pkg-config --libs       @{[ PACKAGE_NAME_STATIC_R ]}", \'%{.runtime.libs}' ],
];

