use alienfile;

plugin 'PkgConfig' => (
    pkg_name        => 'libwebsockets',
    minimum_version => '4.3',
);

share {
    # Use the GitHub API, not /tags HTML scraping (GitHub serves anonymous
    # scrapers a login page). Set ALIEN_BUILD_GITHUB_TOKEN to lift the API rate
    # limit. prefer => 1 sorts by version, otherwise GitHub's own ordering wins
    # and picks the repo's non-release "valgrind-clean" tag; the version regex
    # only extracts, so it is anchored to real releases.
    plugin 'Download::GitHub' => (
        github_user => 'warmcat',
        github_repo => 'libwebsockets',
        tags_only   => 1,
        version     => qr/^v([0-9]+\.[0-9]+\.[0-9]+)$/,
        prefer      => 1,
    );

    plugin 'Extract' => 'tar.gz';

    plugin 'Build::CMake';

    my $has_libev = !system($^O eq 'darwin'
        ? 'test -f "$(brew --prefix libev 2>/dev/null)/include/ev.h" 2>/dev/null'
        : 'echo "#include <ev.h>" | cc -E -x c - >/dev/null 2>&1');

    build [
        ['%{cmake}',
            @{ meta->prop->{plugin_build_cmake}->{args} },
            '-DCMAKE_INSTALL_PREFIX:PATH=%{.install.prefix}',
            '-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON',
            '-DCMAKE_BUILD_TYPE=Release',
            '-DCMAKE_POLICY_VERSION_MINIMUM=3.5',
            '-DBUILD_SHARED_LIBS:BOOL=ON',
            '-DLWS_WITH_LIBEV:BOOL='  . ($has_libev ? 'ON' : 'OFF'),
            '-DLWS_WITH_EVLIB_PLUGINS:BOOL=' . ($has_libev ? 'ON' : 'OFF'),
            '-DLWS_WITHOUT_TESTAPPS:BOOL=ON',
            '-DLWS_WITH_LIBCAP:BOOL=OFF',
            '-DLWS_WITH_SSL:BOOL=ON',
            '-DLWS_WITHOUT_EXTENSIONS:BOOL=OFF',
            '-DLWS_WITH_EXTERNAL_POLL:BOOL=ON',
            '-DLWS_WITH_LIBUV:BOOL=OFF',
            '-DLWS_WITH_LIBEVENT:BOOL=OFF',
            '-DLWS_WITH_ZLIB:BOOL=ON',
            '.'
        ],
        ['%{make}'],
        ['%{make}', 'install'],
    ];
};
