X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Flibmemcached%2FCMakeLists.txt;h=81d84638d13767d71a2f46466d6c376d4ac0ae71;hb=9f88736f8219b494025465089655609f636bf1d7;hp=e39c2f696fbb7226146ad6112229c44278caeec5;hpb=5e760300d15ef4c5b7eed3fb9f37920ebca2f6ec;p=awesomized%2Flibmemcached diff --git a/src/libmemcached/CMakeLists.txt b/src/libmemcached/CMakeLists.txt index e39c2f69..81d84638 100644 --- a/src/libmemcached/CMakeLists.txt +++ b/src/libmemcached/CMakeLists.txt @@ -1,28 +1,41 @@ - find_package(FLEX) -find_package(BISON) +find_package(BISON 2.3) + +if("${BISON_VERSION}" VERSION_GREATER_EQUAL 3.0) + set(BISON_WARNINGS -Wno-deprecated) +endif() file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/csl) bison_target(CSL_PARSER csl/parser.yy ${CMAKE_CURRENT_BINARY_DIR}/csl/parser.cc DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/csl/parser.h + COMPILE_FLAGS ${BISON_WARNINGS} ) +set_source_files_properties(${BISON_CSL_PARSER_OUTPUTS} PROPERTIES + SKIP_UNITY_BUILD_INCLUSION ON) +if(NOT HAVE_UNISTD_H) + set(FLEX_FLAGS --nounistd) +endif() flex_target(CSL_SCANNER csl/scanner.l ${CMAKE_CURRENT_BINARY_DIR}/csl/scanner.cc DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/csl/scanner.h + COMPILE_FLAGS "${FLEX_FLAGS}" ) +set_source_files_properties(${FLEX_CSL_SCANNER_OUTPUTS} PROPERTIES + SKIP_UNITY_BUILD_INCLUSION ON) add_flex_bison_dependency(CSL_SCANNER CSL_PARSER) -set(LIBMEMCACHED_SOURCES +set(libmemcached_sources csl/context.cc - ${BISON_CSL_PARSER_OUTPUTS} ${FLEX_CSL_SCANNER_OUTPUTS} + ${BISON_CSL_PARSER_OUTPUTS} allocators.cc analyze.cc - array.c + array.cc auto.cc backtrace.cc behavior.cc byteorder.cc callback.cc + common.h connect.cc delete.cc do.cc @@ -45,7 +58,6 @@ set(LIBMEMCACHED_SOURCES namespace.cc options.cc parse.cc - poll.cc purge.cc quit.cc response.cc @@ -61,36 +73,108 @@ set(LIBMEMCACHED_SOURCES udp.cc verbosity.cc version.cc - virtual_bucket.c) + virtual_bucket.cc) -add_library(libmemcached SHARED - ${LIBMEMCACHED_SOURCES}) +check_cxx_compiler_flag(-Wno-deprecated-register W_NO_DEPRECATED_REGISTER) + +if(W_NO_DEPRECATED_REGISTER) + set_source_files_properties( + ${FLEX_CSL_SCANNER_OUTPUTS} + ${BISON_CSL_PARSER_OUTPUTS} + PROPERTIES COMPILE_OPTIONS -Wno-deprecated-register + ) +endif() + +add_library(libmemcached SHARED) add_library(memcached ALIAS libmemcached) -set_target_properties(libmemcached PROPERTIES LIBRARY_OUTPUT_NAME memcached) -target_link_libraries(libmemcached libhashkit Threads::Threads ${LIBSASL_LIBRARIES} ${CMAKE_DL_LIBS}) -target_include_directories(libmemcached PRIVATE ${LIBSASL_INCLUDEDIR}) +set_target_properties(libmemcached PROPERTIES + CXX_STANDARD ${CXX_STANDARD} + LIBRARY_OUTPUT_NAME memcached + LIBRARY_OUTPUT_NAME_DEBUG memcached-dbg + SOVERSION ${LIBMEMCACHED_SO_SOVERSION} + VERSION ${LIBMEMCACHED_SO_VERSION}) target_compile_definitions(libmemcached PRIVATE -DBUILDING_LIBMEMCACHED) +target_link_libraries(libmemcached PUBLIC libhashkit Threads::Threads ${CMAKE_DL_LIBS}) +target_link_libraries(libmemcached PRIVATE p9y) +if(MSVC) + target_link_libraries(libmemcached PUBLIC wsock32 ws2_32) +endif() +if(HAVE_BACKTRACE) + target_link_libraries(libmemcached PUBLIC ${BACKTRACE}) +endif() +if(HAVE_LIBSASL) + target_link_libraries(libmemcached PUBLIC ${LIBSASL}) +endif() +if(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") + # see https://docs.oracle.com/cd/E77782_01/html/E77789/bkamq.html#OSSCPgrxeu + target_link_libraries(libmemcached INTERFACE stdc++ gcc_s CrunG3 c) +endif() +target_include_directories(libmemcached PRIVATE + ${CMAKE_SOURCE_DIR}/src + ${CMAKE_BINARY_DIR}/src + ${CMAKE_BINARY_DIR}) +target_include_directories(libmemcached PUBLIC + $ + $ + $) + +enable_dtrace_for(libmemcached libmemcached_probes.d dtrace_probes.h) -set_target_properties(libmemcached PROPERTIES SOVERSION ${LIBMEMCACHED_SO_VERSION}) -install(TARGETS libmemcached EXPORT libmemcached - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) -export(EXPORT libmemcached) -install(EXPORT libmemcached DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/cmake) - -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - FILES_MATCHING REGEX "(memcached|util)\\.h(pp)?" - PATTERN csl EXCLUDE - PATTERN memcached EXCLUDE - PATTERN util EXCLUDE +install(TARGETS libmemcached EXPORT libmemcached-targets + RUNTIME COMPONENT bin DESTINATION ${CMAKE_INSTALL_BINDIR} + ARCHIVE COMPONENT lib DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY COMPONENT lib DESTINATION ${CMAKE_INSTALL_LIBDIR} + ${TARGET_NAMELINK_COMPONENT} ) +export(EXPORT libmemcached-targets NAMESPACE libmemcached::) +install(EXPORT libmemcached-targets NAMESPACE libmemcached:: + COMPONENT dev + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) -# FIXME: dtrace +install_public_headers( + libmemcached -add_library(libmemcachedinternal STATIC - ${LIBMEMCACHED_SOURCES}) + memcached.h + memcached.hpp + util.h + ) + +target_sources(libmemcached PRIVATE + ${libmemcached_sources} + ${libmemcached_includes}) + +# TODO: do we really need this? + +add_library(libmemcachedinternal STATIC) add_library(memcachedinternal ALIAS libmemcachedinternal) -set_target_properties(libmemcachedinternal PROPERTIES LIBRARY_OUTPUT_NAME memcachedinternal) -target_link_libraries(libmemcachedinternal libhashkit Threads::Threads ${LIBSASL_LIBRARIES} ${CMAKE_DL_LIBS}) -target_include_directories(libmemcachedinternal PRIVATE ${LIBSASL_INCLUDEDIR}) +set_target_properties(libmemcachedinternal PROPERTIES CXX_STANDARD ${CXX_STANDARD} LIBRARY_OUTPUT_NAME memcachedinternal) target_compile_definitions(libmemcachedinternal PRIVATE -DBUILDING_LIBMEMCACHEDINTERNAL) +target_link_libraries(libmemcachedinternal PUBLIC libhashkit Threads::Threads ${CMAKE_DL_LIBS}) +target_link_libraries(libmemcachedinternal PRIVATE p9y) +if(MSVC OR MINGW) + target_link_libraries(libmemcached PUBLIC wsock32 ws2_32) +endif() +if(HAVE_LIBSASL) + target_link_libraries(libmemcachedinternal PUBLIC ${LIBSASL}) +endif() +if(HAVE_BACKTRACE) + target_link_libraries(libmemcachedinternal PUBLIC ${BACKTRACE}) +endif() +target_include_directories(libmemcachedinternal PRIVATE + ${CMAKE_SOURCE_DIR}/src + ${CMAKE_BINARY_DIR}/src + ${CMAKE_BINARY_DIR}) +target_include_directories(libmemcachedinternal PUBLIC + $ + $ + $) + +enable_dtrace_for(libmemcachedinternal libmemcached_probes.d dtrace_probes.h) + +# let libmemcached depend on libmemcachedinternal to ensure that they do not +# compete for the same generated dependencies +add_dependencies(libmemcached libmemcachedinternal) + +target_sources(libmemcachedinternal PRIVATE + ${libmemcached_sources} + ${libmemcached_includes})