%YAML 1.2
--- |
  PHP_ARG_ENABLE(grpc, whether to enable grpc support,
  [  --enable-grpc           Enable grpc support])

  if test "$PHP_GRPC" != "no"; then
    dnl Write more examples of tests here...

    dnl # --with-grpc -> add include path
    PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/include)
    PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/src/php/ext/grpc)
    PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/boringssl/include)
    PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/address_sorting/include)
    PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/nanopb)

    LIBS="-lpthread $LIBS"

    CFLAGS="-Wall -Werror -Wno-parentheses-equality -Wno-unused-value -std=c11 -g -O2 -D PB_FIELD_32BIT=1"
    CXXFLAGS="-std=c++11 -fno-exceptions -fno-rtti -g -O2 -D PB_FIELD_32BIT=1"
    GRPC_SHARED_LIBADD="-lpthread $GRPC_SHARED_LIBADD"
    PHP_REQUIRE_CXX()
    PHP_ADD_LIBRARY(pthread)
    PHP_ADD_LIBRARY(dl,,GRPC_SHARED_LIBADD)
    PHP_ADD_LIBRARY(dl)

    case $host in
      *darwin*)
        ;;
      *)
        PHP_ADD_LIBRARY(rt,,GRPC_SHARED_LIBADD)
        PHP_ADD_LIBRARY(rt)
        ;;
    esac

    PHP_NEW_EXTENSION(grpc,
      % for source in php_config_m4.src:
      ${source} ${"\\"}
      % endfor
      % for lib in libs:
      % if lib.name in php_config_m4.get('deps', []) and lib.name != 'z':
      % for source in lib.src:
      ${source} ${"\\"}
      % endfor
      % endif
      % endfor
      , $ext_shared, , -fvisibility=hidden ${"\\"}
      -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN ${"\\"}
      -D_HAS_EXCEPTIONS=0 -DNOMINMAX -DGRPC_ARES=0)

    PHP_ADD_BUILD_DIR($ext_builddir/src/php/ext/grpc)
  <%
    dirs = {}
    for lib in libs:
      if lib.name in php_config_m4.get('deps', []) and lib.name != 'z':
        for source in lib.src:
          dirs[source[:source.rfind('/')]] = 1
    dirs = dirs.keys()
    dirs.sort()
  %>
    % for dir in dirs:
    PHP_ADD_BUILD_DIR($ext_builddir/${dir})
    % endfor
  fi
