use alienfile;

plugin PkgConfig => 'opencv4';

share {
  requires 'Path::Tiny';

  plugin 'Download::GitHub' => (
    github_user => 'opencv',
    github_repo => 'opencv',
    version => qr/([0-9\.]+)/,
    prefer  => sub {
      my ($self, $data) = @_;

      # only want version 4.x
      @{ $data->{list} } = grep
        $_->{version} =~ /^4\./,
        @{ $data->{list} };

      return $data;
    }
  );
  plugin 'Build::CMake';

  patch sub {
    Path::Tiny->new("cmake/OpenCVGenPkgconfig.cmake")->edit_utf8(sub {
      s<
        \Qif((UNIX AND NOT ANDROID) OR MINGW)\E
        (
          \s* [^\n]* \$\{OPENCV_PC_FILE_NAME\} [^\n]*
        )
      ><
      # Always generate the C<.pc> file.
      'if(OPENCV_GENERATE_PKGCONFIG OR (UNIX AND NOT ANDROID) OR MINGW)'
      . $1
      . "\n"
      # Install the C<pkg-config> C<.pc> file to location that isn't specific to
      # that of C<< cmake/OpenCVInstallLayout.cmake >>.
      . 'install(FILES ${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME} DESTINATION share/pkgconfig COMPONENT dev)'
      >exs
        or die 'Could not patch OpenCVGenPkgconfig.cmake: pkg-config install rule not found'
      ;
    });
  };

  my @cmake_opencv_opts = qw(
    -DBUILD_TESTS=OFF
    -DOPENCV_GENERATE_PKGCONFIG=ON

    -DBUILD_opencv_java=OFF
    -DBUILD_opencv_js=OFF
    -DBUILD_opencv_python2=OFF
    -DBUILD_opencv_python3=OFF
    -DBUILD_opencv_python=OFF
  );
  build [
    ['%{cmake}',
      @{ meta->prop->{plugin_build_cmake}->{args} },
      @cmake_opencv_opts,
      # macOS currently has problems during build with zlib
      ( $^O eq 'darwin' ?  qw(-DBUILD_ZLIB=OFF) : () ),
      qw(-S), '%{.install.extract}',
      qw(-B build),
    ],
    [ '%{make}', qw( -C build ) ],
    [ '%{make}', qw( -C build ), 'install' ],
  ];
}
