Преглед изворни кода

Merge pull request #14363 from dcamper/hpcc-24998-librdkafka-7.12.x

HPCC-24998 Ensure librdkafka is rebuilt if underlying code changes

Reviewed-By: Attila Vamos <attila.vamos@lexisnexis.com>
Reviewed-By: Michael Gardner <michael.gardner@lexisnexis.com>
Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman пре 4 година
родитељ
комит
c6aabd7101
1 измењених фајлова са 28 додато и 24 уклоњено
  1. 28 24
      plugins/kafka/CMakeLists.txt

+ 28 - 24
plugins/kafka/CMakeLists.txt

@@ -38,16 +38,18 @@ if(KAFKA)
    Please run git submodule update --init --recursive")
         endif()
 
+        set(LIBRDKAFKA_BUILD_DIR "${PROJECT_BINARY_DIR}/../../build")
+
         if(APPLE)
-            set(LIBRDKAFKA_LIB ${PROJECT_BINARY_DIR}/lib/librdkafka.dylib)
-            set(LIBRDKAFKA_LIB_REAL ${PROJECT_BINARY_DIR}/lib/librdkafka.1.dylib)
-            set(LIBRDKAFKACPP_LIB ${PROJECT_BINARY_DIR}/lib/librdkafka++.dylib)
-            set(LIBRDKAFKACPP_LIB_REAL ${PROJECT_BINARY_DIR}/lib/librdkafka++.1.dylib)
+            set(LIBRDKAFKA_LIB ${LIBRDKAFKA_BUILD_DIR}/lib/librdkafka.dylib)
+            set(LIBRDKAFKA_LIB_REAL ${LIBRDKAFKA_BUILD_DIR}/lib/librdkafka.1.dylib)
+            set(LIBRDKAFKACPP_LIB ${LIBRDKAFKA_BUILD_DIR}/lib/librdkafka++.dylib)
+            set(LIBRDKAFKACPP_LIB_REAL ${LIBRDKAFKA_BUILD_DIR}/lib/librdkafka++.1.dylib)
         else()
-            set(LIBRDKAFKA_LIB ${PROJECT_BINARY_DIR}/lib/librdkafka.so)
-            set(LIBRDKAFKA_LIB_REAL ${PROJECT_BINARY_DIR}/lib/librdkafka.so.1)
-            set(LIBRDKAFKACPP_LIB ${PROJECT_BINARY_DIR}/lib/librdkafka++.so)
-            set(LIBRDKAFKACPP_LIB_REAL ${PROJECT_BINARY_DIR}/lib/librdkafka++.so.1)
+            set(LIBRDKAFKA_LIB ${LIBRDKAFKA_BUILD_DIR}/lib/librdkafka.so)
+            set(LIBRDKAFKA_LIB_REAL ${LIBRDKAFKA_BUILD_DIR}/lib/librdkafka.so.1)
+            set(LIBRDKAFKACPP_LIB ${LIBRDKAFKA_BUILD_DIR}/lib/librdkafka++.so)
+            set(LIBRDKAFKACPP_LIB_REAL ${LIBRDKAFKA_BUILD_DIR}/lib/librdkafka++.so.1)
         endif()
 
         # librdkafka does not support out-of-source builds, so let's copy all
@@ -55,24 +57,26 @@ if(KAFKA)
         # we need to pull some working directory shenanigans for each command
         # in order to make the built scripts function correctly
 
-        add_custom_command(
-		OUTPUT ${LIBRDKAFKA_LIB}
-		COMMAND cp -r ${PROJECT_SOURCE_DIR}/librdkafka ${PROJECT_BINARY_DIR}/src
-		COMMAND cd ${PROJECT_BINARY_DIR}/src && ./configure --prefix=${PROJECT_BINARY_DIR}
-		COMMAND cd ${PROJECT_BINARY_DIR}/src && make && make install
-		COMMENT Copying and building librdkafka)
+        add_custom_target(librdkafka-build ALL
+            COMMAND mkdir -p ${LIBRDKAFKA_BUILD_DIR}
+            # If we've copied the source files before, compute checksums
+            COMMAND if [ -d ${LIBRDKAFKA_BUILD_DIR}/src ]\; then md5sum ${LIBRDKAFKA_BUILD_DIR}/src/*/*.c ${LIBRDKAFKA_BUILD_DIR}/src/*/*.cpp ${LIBRDKAFKA_BUILD_DIR}/src/*/*.h > ${LIBRDKAFKA_BUILD_DIR}/src/_md5.txt\; fi
+            COMMAND echo "Copying librdkafka source files" && cp -rp ${PROJECT_SOURCE_DIR}/librdkafka ${LIBRDKAFKA_BUILD_DIR}/src
+            # Run configure if it hasn't been run before
+            COMMAND if [ ! -f ${LIBRDKAFKA_BUILD_DIR}/src/Makefile.config ]\; then echo "Configuring librdkafka" && cd ${LIBRDKAFKA_BUILD_DIR}/src && ./configure --prefix=${LIBRDKAFKA_BUILD_DIR}\; fi
+            # If either there is no checksum file or if the checksums are different, re-make librdkafka
+            COMMAND if [ ! -f ${LIBRDKAFKA_BUILD_DIR}/src/_md5.txt ] || ! md5sum --quiet --status -c ${LIBRDKAFKA_BUILD_DIR}/src/_md5.txt\; then echo "Building librdkafka" && cd ${LIBRDKAFKA_BUILD_DIR}/src && make libs && make install\; fi
+            COMMENT Copying and building librdkafka)
 
-	add_custom_target(librdkafka-build ALL DEPENDS ${LIBRDKAFKA_LIB})
+        install(CODE "set(ENV{LD_LIBRARY_PATH} \"\$ENV{LD_LIBRARY_PATH}:${LIBRDKAFKA_BUILD_DIR}/lib\")")
 
-        install(CODE "set(ENV{LD_LIBRARY_PATH} \"\$ENV{LD_LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib\")")
-	
         add_library(librdkafka SHARED IMPORTED)
-	set_property(TARGET librdkafka PROPERTY IMPORTED_LOCATION ${LIBRDKAFKA_LIB})
-	add_dependencies(librdkafka librdkafka-build)
+        set_property(TARGET librdkafka PROPERTY IMPORTED_LOCATION ${LIBRDKAFKA_LIB})
+        add_dependencies(librdkafka librdkafka-build)
 
-	add_library(librdkafkacpp SHARED IMPORTED)
-	set_property(TARGET librdkafkacpp PROPERTY IMPORTED_LOCATION ${LIBRDKAFKACPP_LIB})
-	add_dependencies(librdkafkacpp librdkafka-build)
+        add_library(librdkafkacpp SHARED IMPORTED)
+        set_property(TARGET librdkafkacpp PROPERTY IMPORTED_LOCATION ${LIBRDKAFKACPP_LIB})
+        add_dependencies(librdkafkacpp librdkafka-build)
 
         set(
             SRCS
@@ -85,7 +89,7 @@ if(KAFKA)
             ./../../rtl/include
             ./../../common/deftype
             ./../../system/jlib
-            ${PROJECT_BINARY_DIR}/include
+            ${LIBRDKAFKA_BUILD_DIR}/include
             ${CMAKE_BINARY_DIR}
             ${CMAKE_BINARY_DIR}/oss)
 
@@ -119,7 +123,7 @@ if(KAFKA)
             librdkafkacpp
             eclrtl
             jlib
-            ${ZLIB_LIBRARIES}) 
+            ${ZLIB_LIBRARIES})
     endif()
 endif()