#!/usr/bin/env perl
# ABSTRACT: Script to test a ZMQ::* package on each system

use strict;
use warnings;

use Env qw(@PATH $PERL_CPANM_OPT $ARCHFLAGS $PERL_ALT_INSTALL);

sub cpanm {
	my (@args) = @_;

	my @default = qw(--build-args 'OTHERLDFLAGS=' --verbose);
	if( grep { 'Alt::Alien::ZMQ::Alien::ZMQ::latest' } @args ) {
		$PERL_ALT_INSTALL = 'OVERWRITE';
	}

	my @non_alien_zmq_dep_args = grep { $_ !~ /^(ZMQ::(LibZMQ[34]|FFI)|Net::Async::ZMQ)$/ } @args;

	if( grep { $_ !~ /^--?/ } @non_alien_zmq_dep_args ) {
		# if what remains is not an option
		my $exit_non_azmq = system(qw(cpanm), @default, @non_alien_zmq_dep_args);
		die "cpanm @non_alien_zmq_dep_args failed" if $exit_non_azmq;
	}

	if( $^O eq 'MSWin32' ) {
		# set PATH to libzmq.dll before installing ZMQ::LibZMQ3
		eval {
			require Alien::ZMQ::latest;
			push @PATH, Alien::ZMQ::latest->bin_dir;
		} or die "Could not load Alien::ZMQ::latest: $@";
	}

	my $exit = system(qw(cpanm), @default, @args);

	die "cpanm @default @args failed" if $exit;
}

sub install_windows {
	my (@args) = @_;
	delete $ENV{PERL_CPANM_OPT};
	cpanm(@args);
}
sub install_macos {
	my (@args) = @_;
	$ARCHFLAGS = '-arch x86_64';
	cpanm(@args);
}

sub install_linux {
	my (@args) = @_;
	cpanm(@args);
}

sub main {
	my (@args) = @ARGV;
	if( $^O eq 'MSWin32' ) {
		install_windows(@args);
	} elsif( $^O eq 'darwin' ) {
		install_macos(@args);
	} elsif( $^O eq 'linux' ) {
		install_linux(@args);
	} else {
		die "unknown OS";
	}
}

main;