%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(../../grpc/include)
    PHP_ADD_INCLUDE(../../grpc/src/php/ext/grpc)
    PHP_ADD_INCLUDE(../../grpc/third_party/boringssl/include)

    LIBS="-lpthread $LIBS"

    GRPC_SHARED_LIBADD="-lpthread $GRPC_SHARED_LIBADD"
    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', []):
      % for source in lib.src:
      ${source} ${"\\"}
      % endfor
      % endif
      % endfor
      , $ext_shared, , -Wall -Werror ${"\\"}
      -Wno-parentheses-equality -Wno-unused-value -std=c11 ${"\\"}
      -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN ${"\\"}
      -D_HAS_EXCEPTIONS=0 -DNOMINMAX)

    PHP_ADD_BUILD_DIR($ext_builddir/src/php/ext/grpc)
  <%
    dirs = {}
    for lib in libs:
      if lib.name in php_config_m4.get('deps', []):
        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
