use alienfile;
use Config;
use File::Spec::Functions qw(catfile);

plugin 'PkgConfig' => 'libmaxminddb';

share {
  start_url 'https://github.com/maxmind/libmaxminddb/releases/download/1.12.2/libmaxminddb-1.12.2.tar.gz';
  plugin 'Download';
  plugin 'Extract' => 'tar.gz';
  plugin 'Build::MSYS';
  patch \&patch_build;
  build [
    'sh ./configure --prefix=%{.runtime.prefix} --disable-dependency-tracking '
    . '--with-pic --disable-binaries --disable-tests --disable-shared',
    '%{make} man1_MANS= man3_MANS=',
    '%{make} install prefix=%{.install.prefix} man1_MANS= man3_MANS=',
  ];
};

sub edit {
  my ($filename, $cb) = @_;

  if (open my $in, '<', $filename) {
    local $_ = do { local $/; <$in> };
    close $in;
    $cb->();
    if (open my $out, '>', $filename) {
      print {$out} $_;
      close $out;
    }
  }
}

sub patch_build {
  my $build = shift;

  my $extract = $build->install_prop->{extract};
  my $configure = catfile($extract, 'configure');
  my $pkgconfig = catfile($extract, 'src', 'libmaxminddb.pc.in');

  if ($^O eq 'MSWin32') {
    eval {
      edit($pkgconfig, sub {
        s{-lmaxminddb\b}{-lmaxminddb -lws2_32}g;
      });
    };
  }
  elsif ($^O eq 'openbsd') {
    eval {
      edit($configure, sub {
        s{(-fms-extensions.*?)^(EOF)}
        {$1#ifdef __clang__\n#error unsupported\n#endif\n$2}ms;
      });
      chmod 0755, $configure;
    };
  }

  return;
}
