use alienfile;
use Path::Tiny 'path';
use Alien::Build::Util qw( _destdir_prefix );

my $minimal_header= path(__FILE__)->parent->child('include/fluent-bit-minimal.h');

probe sub {
   if (-f '/lib/fluent-bit/libfluent-bit.so'
      && -x '/opt/fluent-bit/bin/fluent-bit'
      && `/opt/fluent-bit/bin/fluent-bit --version` =~ /v([0-9.]+)/
   ) {
      return 'system';
   }
};

sys {
   gather sub {
      my $build= shift;
      my $prefix= $build->runtime_prop->{prefix};
      my $bin_dir= $build->runtime_prop->{bin_dir}= '/opt/fluent-bit/bin';
      `"$bin_dir/fluent-bit" --version` =~ /v([0-9.]+)/ or die; # tested above
      $build->runtime_prop->{version}= $1;
      # Headers installed by fluent-bit cmake are broken, missing many referenced
      # sub-projects, but also all of it it is unnecessary because the public API
      # is only 10 functions.
      # See https://github.com/fluent/fluent-bit/issues/7165
      my $custom_inc_dir= path("$prefix/include");
      $custom_inc_dir->mkpath;
      $minimal_header->copy("$custom_inc_dir/fluent-bit-minimal.h");
      $minimal_header->copy("$custom_inc_dir/fluent-bit.h");
      $build->runtime_prop->{cflags}= "-I$custom_inc_dir";
      $build->runtime_prop->{libs}= "-L/lib/fluent-bit -Wl,-rpath,/lib/fluent-bit -lfluent-bit";
   };
};

share {
   requires 'Alien::cmake3';
   requires 'Alien::flex';
   requires 'Alien::bison';
   start_url 'https://github.com/fluent/fluent-bit/archive/refs/tags/v2.1.0.tar.gz';
   plugin Download => ();
   plugin Extract => 'tar.gz';
   plugin 'Build::CMake';
   build [
      [ '%{cmake}',
         @{ meta->prop->{plugin_build_cmake}->{args} },
         # ... put extra cmake args here ...
         '%{.install.extract}'
      ],
      '%{make} -j 10',
      '%{make} install',
   ];
   plugin 'Gather::IsolateDynamic';
   after gather => sub {
      my $build   = shift;
      my $prefix  = path($build->install_prop->{prefix})->absolute;
      $build->runtime_prop->{cflags}= "-I$prefix/include";
      $build->runtime_prop->{libs}  = "-L$prefix/lib/fluent-bit -Wl,-rpath,$prefix/lib/fluent-bit -lfluent-bit";
      # Use a minimal fluent-bit.h because the headers installed by cmake
      # are broken, missing many deps.
      # See https://github.com/fluent/fluent-bit/issues/7165
      my $install_root;
      if ($build->meta_prop->{destdir}) {
         my $destdir = $ENV{DESTDIR};
         $install_root = path(_destdir_prefix($ENV{DESTDIR}, $build->install_prop->{prefix}));
      } else {
         $install_root = path($build->install_prop->{stage});
      }
      my $inc_dir= path($install_root."/include");
      -f $inc_dir->child('fluent-bit.h') or die "No fluent-bit.h yet";
      $inc_dir->child('fluent-bit.h')->move('fluent-bit-full.h');
      $minimal_header->copy("$inc_dir/fluent-bit-minimal.h");
      $minimal_header->copy("$inc_dir/fluent-bit.h");
   };
};

