1717# under the License.
1818#
1919
20- INCLUDE_DIRECTORIES ("${Boost_INCLUDE_DIRS} " "${PYTHON_INCLUDE_DIRS} " )
20+ project (pulsar-client-python)
21+ cmake_minimum_required (VERSION 3.12)
22+ set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR} /cmake_modules" )
23+
24+ MESSAGE (STATUS "CMAKE_BUILD_TYPE: " ${CMAKE_BUILD_TYPE} )
25+ set (THREADS_PREFER_PTHREAD_FLAG TRUE )
26+ find_package (Threads REQUIRED)
27+ MESSAGE (STATUS "Threads library: " ${CMAKE_THREAD_LIBS_INIT} )
28+
29+
30+ find_library (PULSAR_LIBRARY NAMES libpulsar.a)
31+ message (STATUS "PULSAR_LIBRARY: ${PULSAR_LIBRARY} " )
32+
33+ find_path (PULSAR_INCLUDE pulsar/Client.h)
34+ message (STATUS "PULSAR_INCLUDE: ${PULSAR_INCLUDE} " )
35+
36+ SET (Boost_NO_BOOST_CMAKE ON )
37+ SET (Boost_USE_STATIC_LIBS ON )
38+
39+ SET (CMAKE_CXX_STANDARD 11)
40+
41+ find_package (Boost)
42+
43+ find_package (Python3 COMPONENTS Development)
44+ MESSAGE (STATUS "PYTHON: " ${Python3_VERSION} " - " ${Python3_INCLUDE_DIRS} )
45+
46+ string (REPLACE "." ";" PYTHONLIBS_VERSION_NO_LIST ${Python3_VERSION} )
47+
48+ set (BOOST_PYTHON_NAME_POSTFIX ${Python3_VERSION_MAJOR}${Python3_VERSION_MINOR} )
49+ # For python3 the lib name is boost_python3
50+ set (BOOST_PYTHON_NAME_LIST python${BOOST_PYTHON_NAME_POSTFIX} ;python37;python38;python39;python310;python3;python3-mt;python-py${BOOST_PYTHON_NAME_POSTFIX} ;python${BOOST_PYTHON_NAME_POSTFIX} -mt)
51+
52+ foreach (BOOST_PYTHON_NAME IN LISTS BOOST_PYTHON_NAME_LIST)
53+ find_package (Boost QUIET COMPONENTS ${BOOST_PYTHON_NAME} )
54+ if (${Boost_FOUND} )
55+ set (BOOST_PYTHON_NAME_FOUND ${BOOST_PYTHON_NAME} )
56+ break ()
57+ endif ()
58+ endforeach ()
59+
60+ if (NOT ${Boost_FOUND} )
61+ MESSAGE (FATAL_ERROR "Could not find Boost Python library" )
62+ endif ()
63+
64+ MESSAGE (STATUS "BOOST_PYTHON_NAME_FOUND: " ${BOOST_PYTHON_NAME_FOUND} )
65+
66+ set (OPENSSL_ROOT_DIR ${OPENSSL_ROOT_DIR} /usr/lib64/)
67+
68+ ### This part is to find and keep SSL dynamic libs in RECORD_OPENSSL_SSL_LIBRARY and RECORD_OPENSSL_CRYPTO_LIBRARY
69+ ### After find the libs, will unset related cache, and will not affect another same call to find_package.
70+ if (APPLE )
71+ set (OPENSSL_INCLUDE_DIR /usr/local/opt/openssl/include / /opt/homebrew/opt/openssl/include )
72+ set (OPENSSL_ROOT_DIR ${OPENSSL_ROOT_DIR} /usr/local/opt/openssl/ /opt/homebrew/opt/openssl)
73+ endif ()
74+
75+ set (OPENSSL_USE_STATIC_LIBS TRUE )
76+ find_package (OpenSSL REQUIRED)
77+
78+ find_library (ZLIB_LIBRARIES REQUIRED NAMES libz.a z zlib)
79+ message (STATUS "ZLIB_LIBRARIES: ${ZLIB_LIBRARIES} " )
80+
81+ find_library (CURL_LIBRARIES NAMES libcurl.a curl curl_a libcurl_a)
82+ message (STATUS "CURL_LIBRARIES: ${CURL_LIBRARIES} " )
83+ find_library (Protobuf_LIBRARIES NAMES libprotobuf.a libprotobuf)
84+ message (STATUS "Protobuf: ${Protobuf_LIBRARIES} " )
85+ find_library (CURL_LIBRARIES NAMES libcurl.a curl curl_a libcurl_a)
86+ message (STATUS "CURL_LIBRARIES: ${CURL_LIBRARIES} " )
87+ find_library (LIB_ZSTD NAMES libzstd.a)
88+ message (STATUS "ZStd: ${LIB_ZSTD} " )
89+ find_library (LIB_SNAPPY NAMES libsnappy.a)
90+ message (STATUS "LIB_SNAPPY: ${LIB_SNAPPY} " )
91+
92+ ########################################################################################################################
93+
94+ INCLUDE_DIRECTORIES (${PULSAR_INCLUDE} "${Boost_INCLUDE_DIRS} " "${Python3_INCLUDE_DIRS} " )
2195
2296ADD_LIBRARY (_pulsar SHARED src/pulsar.cc
2397 src/producer.cc
@@ -63,7 +137,14 @@ if (NOT DEFINED ${Boost_PYTHON310-MT_LIBRARY})
63137endif ()
64138
65139# Try all possible boost-python variable namings
66- set (PYTHON_WRAPPER_LIBS ${Boost_PYTHON_LIBRARY}
140+ set (PYTHON_WRAPPER_LIBS ${PULSAR_LIBRARY}
141+ ${OPENSSL_LIBRARIES}
142+ ${ZLIB_LIBRARIES}
143+ ${CURL_LIBRARIES}
144+ ${Protobuf_LIBRARIES}
145+ ${LIB_ZSTD}
146+ ${LIB_SNAPPY}
147+ ${Boost_PYTHON_LIBRARY}
67148 ${Boost_PYTHON3_LIBRARY}
68149 ${Boost_PYTHON37-MT_LIBRARY}
69150 ${Boost_PYTHON38_LIBRARY}
@@ -86,18 +167,33 @@ if (APPLE)
86167 endif ()
87168endif ()
88169
89- message (STATUS "Using Boost Python libs: ${PYTHON_WRAPPER_LIBS} " )
90-
91170if (NOT PYTHON_WRAPPER_LIBS)
92171 MESSAGE (FATAL_ERROR "Could not find Boost Python library" )
93172endif ()
94173
174+ message (STATUS "All libraries: ${PYTHON_WRAPPER_LIBS} " )
175+
95176if (APPLE )
96177 set (CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS} -undefined dynamic_lookup" )
97- target_link_libraries (_pulsar -Wl,-all_load pulsarStatic ${PYTHON_WRAPPER_LIBS} ${COMMON_LIBS} ${ICU_LIBS } )
178+ target_link_libraries (_pulsar -Wl,-all_load ${PYTHON_WRAPPER_LIBS} )
98179else ()
99180 if (NOT MSVC )
100181 set (CMAKE_SHARED_LINKER_FLAGS " -static-libgcc -static-libstdc++" )
101182 endif ()
102- target_link_libraries (_pulsar pulsarStatic ${PYTHON_WRAPPER_LIBS} ${COMMON_LIBS } )
183+ target_link_libraries (_pulsar ${PYTHON_WRAPPER_LIBS} )
103184endif ()
185+
186+ find_package (ClangTools)
187+ set (BUILD_SUPPORT_DIR "${CMAKE_SOURCE_DIR} /build-support" )
188+ add_custom_target (format ${BUILD_SUPPORT_DIR} /run_clang_format.py
189+ ${CLANG_FORMAT_BIN}
190+ 0
191+ ${BUILD_SUPPORT_DIR} /clang_format_exclusions.txt
192+ ${CMAKE_SOURCE_DIR} /src)
193+
194+ # `make check-format` option (for CI test)
195+ add_custom_target (check-format ${BUILD_SUPPORT_DIR} /run_clang_format.py
196+ ${CLANG_FORMAT_BIN}
197+ 1
198+ ${BUILD_SUPPORT_DIR} /clang_format_exclusions.txt
199+ ${CMAKE_SOURCE_DIR} /src)
0 commit comments