distributable:
  url: https://github.com/protocolbuffers/protobuf/archive/refs/tags/v{{version.raw}}.tar.gz
  strip-components: 1

versions:
  github: protocolbuffers/protobuf

dependencies:
  zlib.net: ^1
  abseil.io: '>=20230800<20230900'  # FIXME: how? it links to e.g. libabsl_bad_any_cast_impl.so.2308.0.0

build:
  dependencies:
    cmake.org: ^3
  working-directory: build
  script: |
    cmake .. $ARGS
    make --jobs {{ hw.concurrency }} install
  env:
    linux:
      # likely needs bumping to an unreleased abseil.io version
      # ld.lld: error: undefined reference due to --no-allow-shlib-undefined: absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<<<int, 0>(int const&)
      LDFLAGS: $LDFLAGS -Wl,--allow-shlib-undefined
    ARGS:
      - -Dprotobuf_BUILD_LIBPROTOC=ON
      - -Dprotobuf_BUILD_SHARED_LIBS=ON
      - -Dprotobuf_INSTALL_EXAMPLES=OFF
      - -Dprotobuf_BUILD_TESTS=OFF
      - -DCMAKE_INSTALL_PREFIX={{prefix}}
      - -DCMAKE_BUILD_TYPE=Release
      - -Dprotobuf_ABSL_PROVIDER=package
      - -DCMAKE_PREFIX_PATH={{deps.abseil.io.prefix}}

provides:
  - bin/protoc

test:
  script: |
    mv $FIXTURE test.proto
    protoc test.proto --cpp_out=.
  fixture: |
    syntax = "proto3";
    package test;
    message TestCase {
      string name = 4;
    }
    message Test {
      repeated TestCase case = 1;
    }
