#!/usr/bin/env perl
use v5.16;
use strict;
use warnings;
use ExtUtils::MakeMaker;
use lib qw(inc);
use Devel::CheckLib;

check_lib_or_exit(
    cflags => '-Wall -Wno-unused-result -fno-rtti -O4 -I/usr/local/include',
    header => ['unistd.h', 'stdio.h', 'stdlib.h', 'string.h', 'collocatordb.h'],
    function => 'char *min_v = "1.3.2"; char *v = get_version(); if(strcmp(min_v, v) <= 0) { return 0; } else { fprintf(stderr, "Installed collocatordb version %s is too low. Minimally %s is required.\n", v, min_v); return(1); }',
    libpath => ['/usr/lib', '/usr/local/lib64', '/usr/local/lib'],
    incpath => ['/usr/include', '/usr/local/include'],
    # debug => 1,
    lib => 'collocatordb');

WriteMakefile(
    NAME           => 'derekovecs::server',
    AUTHOR         => 'Marc Kupietz',
    ABSTRACT       => 'Visualization of paradigmatic and syntagmatic word relations.',
    VERSION_FROM   => 'script/derekovecs-server',
    LICENSE        => 'apache',
    BUILD_REQUIRES => {
     'Test::More' => 0,
     'Test::TempFile' => 0,
     "REST::Client" => 0,
     "Data::Dump" => 0,
    },
    PREREQ_PM      => {
        'Inline::C'                               => '0.82',
        'LWP::Simple'                             => 0,
        'Getopt::Std'                             => 0,
        'Getopt::Long'                            => 0,
        'Log::Any'                                => '1.701',
        'Encode'                                  => "3.17",
        'Mojolicious'                             => '9.23',
        'Mojolicious::Plugin::Util::RandomString' => '0.09',
        'Mojolicious::Plugin::CHI'                => '0.20',
        'Mojolicious::Plugin::ClientIP'           => '0.02',
        'Mojolicious::Plugin::AutoSecrets'        => '0.006',
        'Mojolicious::Plugin::RequestBase'        => '0.3',
        'Mojolicious::Plugin::RemoteAddr'         => 0,
        'Mojolicious::Plugin::Log::Access'        => '0.041',
        'Mojolicious::Plugin::Piwik'              => '1.00',
        'Mojo::JSON'                              => 0,
        "Devel::CheckLib"                         => '1.16',

        # Required for older perl bundles
        'List::Util' => 1.45,

        # Currently on GitHub only (github.com/akron)
        'Mojolicious::Plugin::Localize' => '0.21'

    },
    MIN_PERL_VERSION => '5.016',
    EXE_FILES        => ['./script/derekovecs-server']
);
