dbd30d6
diff --git a/rapid/plugin/group_replication/libmysqlgcs/CMakeLists.txt b/rapid/plugin/group_replication/libmysqlgcs/CMakeLists.txt
dbd30d6
index e9f51ca8fc9..42a9575e008 100644
dbd30d6
--- a/rapid/plugin/group_replication/libmysqlgcs/CMakeLists.txt
dbd30d6
+++ b/rapid/plugin/group_replication/libmysqlgcs/CMakeLists.txt
dbd30d6
@@ -139,8 +139,13 @@ IF(MSVC)
dbd30d6
 
dbd30d6
   # This disables signed/unsigned mismatch warnings
dbd30d6
   # Compiler warning C4018.
dbd30d6
-  ADD_COMPILE_FLAGS(${XCOM_SUN_RPCS} ${XCOM_RPCGEN_SOURCES}
dbd30d6
-                    COMPILE_FLAGS "/wd4018")
dbd30d6
+  IF(WIN32_CLANG)
dbd30d6
+    ADD_COMPILE_FLAGS(${XCOM_SUN_RPCS} ${XCOM_RPCGEN_SOURCES}
dbd30d6
+      COMPILE_FLAGS "-Wno-sign-compare")
dbd30d6
+  ELSE()
dbd30d6
+    ADD_COMPILE_FLAGS(${XCOM_SUN_RPCS} ${XCOM_RPCGEN_SOURCES}
dbd30d6
+      COMPILE_FLAGS "/wd4018")
dbd30d6
+  ENDIF()
dbd30d6
 ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR
dbd30d6
        CMAKE_CXX_COMPILER_ID MATCHES "Clang")
dbd30d6
   ADD_COMPILE_FLAGS(${XCOM_SOURCES} ${XCOM_SUN_RPCS} ${XCOM_RPCGEN_SOURCES}
dbd30d6
@@ -153,5 +158,9 @@ ADD_COMPILE_FLAGS(${GCS_SOURCES} COMPILE_FLAGS "-DMYSQL_DYNAMIC_PLUGIN")
dbd30d6
 
dbd30d6
 ADD_CONVENIENCE_LIBRARY(${GCS_LIBRARY} ${XCOM_SOURCES} ${GCS_SOURCES})
dbd30d6
 
dbd30d6
+IF(TIRPC_LIBRARY)
dbd30d6
+  TARGET_LINK_LIBRARIES(${GCS_LIBRARY} ${TIRPC_LIBRARY})
dbd30d6
+ENDIF()
dbd30d6
+
dbd30d6
 # convenience target
dbd30d6
 ADD_CUSTOM_TARGET(lib${GCS_LIBRARY} DEPENDS ${GCS_LIBRARY})
dbd30d6
diff --git a/rapid/plugin/group_replication/libmysqlgcs/configure.cmake b/rapid/plugin/group_replication/libmysqlgcs/configure.cmake
dbd30d6
index b4519371579..5653d9a3d16 100644
dbd30d6
--- a/rapid/plugin/group_replication/libmysqlgcs/configure.cmake
dbd30d6
+++ b/rapid/plugin/group_replication/libmysqlgcs/configure.cmake
dbd30d6
@@ -54,8 +54,17 @@ IF (WIN32)
dbd30d6
 ENDIF()
dbd30d6
 
dbd30d6
 IF (NOT WIN32)
dbd30d6
+  # First look for tirpc, then the old Sun RPC
dbd30d6
+  FIND_PATH(RPC_INCLUDE_DIR
dbd30d6
+    NAMES rpc/rpc.h
dbd30d6
+    HINTS /usr/include/tirpc
dbd30d6
+    NO_DEFAULT_PATH
dbd30d6
+    )
dbd30d6
+  FIND_PATH(RPC_INCLUDE_DIR NAMES rpc/rpc.h)
dbd30d6
+
dbd30d6
   SET (CMAKE_REQUIRED_FLAGS_BACKUP ${CMAKE_REQUIRED_FLAGS})
dbd30d6
   SET (CMAKE_REQUIRED_FLAGS "-Wno-error")
dbd30d6
+  SET (CMAKE_REQUIRED_INCLUDES ${RPC_INCLUDE_DIR})
dbd30d6
 ENDIF()
dbd30d6
 
dbd30d6
 #
dbd30d6
diff --git a/rapid/plugin/group_replication/libmysqlgcs/rpcgen.cmake b/rapid/plugin/group_replication/libmysqlgcs/rpcgen.cmake
dbd30d6
index e26ae09ecb9..9b14b2e77e4 100644
dbd30d6
--- a/rapid/plugin/group_replication/libmysqlgcs/rpcgen.cmake
dbd30d6
+++ b/rapid/plugin/group_replication/libmysqlgcs/rpcgen.cmake
dbd30d6
@@ -94,6 +94,23 @@ FOREACH(X xcom_vp)
dbd30d6
         ${XCOM_BASEDIR}/xcom_proto_enum.h
dbd30d6
         ${XCOM_BASEDIR}/xcom_limits.h)
dbd30d6
   ELSE()
dbd30d6
+    FIND_PROGRAM(RPCGEN_EXECUTABLE rpcgen DOC "path to the rpcgen executable")
dbd30d6
+    MARK_AS_ADVANCED(RPCGEN_EXECUTABLE)
dbd30d6
+    IF(NOT RPCGEN_EXECUTABLE)
dbd30d6
+      MESSAGE(FATAL_ERROR "Could not find rpcgen")
dbd30d6
+    ENDIF()
dbd30d6
+
dbd30d6
+    IF(NOT RPC_INCLUDE_DIR)
dbd30d6
+      MESSAGE(FATAL_ERROR
dbd30d6
+        "Could not find rpc/rpc.h in /usr/include or /usr/include/tirpc")
dbd30d6
+    ENDIF()
dbd30d6
+    MESSAGE(STATUS "RPC_INCLUDE_DIR ${RPC_INCLUDE_DIR}")
dbd30d6
+    IF(RPC_INCLUDE_DIR STREQUAL "/usr/include/tirpc")
dbd30d6
+      INCLUDE_DIRECTORIES(SYSTEM /usr/include/tirpc)
dbd30d6
+      ADD_DEFINITIONS(-DHAVE_TIRPC)
dbd30d6
+      SET(TIRPC_LIBRARY tirpc)
dbd30d6
+    ENDIF()
dbd30d6
+
dbd30d6
     # on unix systems try to generate them if needed
dbd30d6
     ADD_CUSTOM_COMMAND(OUTPUT ${x_gen_h} ${x_gen_c} ${x_tmp_plat_h}
dbd30d6
       COMMAND ${CMAKE_COMMAND} -E copy_if_different
dbd30d6
@@ -110,10 +127,10 @@ FOREACH(X xcom_vp)
dbd30d6
 
dbd30d6
        # generate the sources
dbd30d6
        COMMAND ${CMAKE_COMMAND} -E remove -f ${x_gen_h}
dbd30d6
-       COMMAND rpcgen  -C -h -o
dbd30d6
+       COMMAND ${RPCGEN_EXECUTABLE}  -C -h -o
dbd30d6
                     ${x_gen_h} ${x_tmp_x_canonical_name}
dbd30d6
        COMMAND ${CMAKE_COMMAND} -E remove -f ${x_gen_c}
dbd30d6
-                COMMAND rpcgen  -C -c -o
dbd30d6
+                COMMAND ${RPCGEN_EXECUTABLE}  -C -c -o
dbd30d6
                 ${x_gen_c} ${x_tmp_x_canonical_name}
dbd30d6
        WORKING_DIRECTORY ${gen_xdr_dir}
dbd30d6
        DEPENDS
dbd30d6
diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c
dbd30d6
index ad892aa56ae..bc04b597d49 100644
dbd30d6
--- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c
dbd30d6
+++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c
dbd30d6
@@ -342,13 +345,9 @@ static void dump_header(char *buf) {
dbd30d6
 
dbd30d6
 void dbg_app_data(app_data_ptr a);
dbd30d6
 
dbd30d6
-#ifdef HAVE___CONST
dbd30d6
-#define const __const
dbd30d6
-#else
dbd30d6
 #ifdef OLD_XDR
dbd30d6
 #define const
dbd30d6
 #endif
dbd30d6
-#endif
dbd30d6
 
dbd30d6
 /* ARGSUSED */
dbd30d6
 static bool_t x_putlong(XDR *xdrs,
dbd30d6
@@ -380,9 +379,8 @@ static bool_t x_putbytes(XDR *xdrs, const char *bp MY_ATTRIBUTE((unused)),
dbd30d6
 #endif
dbd30d6
 
dbd30d6
 static u_int
dbd30d6
-#if defined(__APPLE__) || defined(__FreeBSD__) || \
dbd30d6
-    defined(X_GETPOSTN_NOT_USE_CONST)
dbd30d6
-x_getpostn(__const XDR *xdrs)
dbd30d6
+#if defined(__APPLE__) || defined(__FreeBSD__) || defined(HAVE_TIRPC)
dbd30d6
+x_getpostn(XDR *xdrs)
dbd30d6
 #else
dbd30d6
 x_getpostn(const XDR *xdrs)
dbd30d6
 #endif