From 5c8a82ded139e2490daa83298d3e1f29c6e7b422 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Tue, 22 Oct 2019 11:21:34 +0100 Subject: [PATCH] [Minor] Fix clang plugin functions on OSX --- clang-plugin/CMakeLists.txt | 16 ++++++++++------ clang-plugin/printf_check.cc | 21 ++++++++++++++++----- src/CMakeLists.txt | 2 +- src/libserver/task.c | 4 ++-- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/clang-plugin/CMakeLists.txt b/clang-plugin/CMakeLists.txt index 3a0b8ab8b..dc5de4717 100644 --- a/clang-plugin/CMakeLists.txt +++ b/clang-plugin/CMakeLists.txt @@ -1,6 +1,5 @@ IF (ENABLE_CLANG_PLUGIN MATCHES "ON") - cmake_minimum_required(VERSION 3.9) # Clang plugin for static analysis PROJECT(RspamdClangPlugin) if (NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") @@ -14,6 +13,13 @@ IF (ENABLE_CLANG_PLUGIN MATCHES "ON") ADD_DEFINITIONS(${LLVM_DEFINITIONS}) find_package(Clang REQUIRED) + + set(clang_libs + clangAST + clangBasic + clangFrontend) + + message(STATUS "Found LibClang in: ${CLANG_INSTALL_PREFIX}") include_directories(${CLANG_INCLUDE_DIRS}) SET(CLANGPLUGINSRC plugin.cc printf_check.cc) @@ -22,7 +28,9 @@ IF (ENABLE_CLANG_PLUGIN MATCHES "ON") SET_TARGET_PROPERTIES(rspamd-clang PROPERTIES COMPILE_FLAGS "-O2 -Wall -Wextra -Wno-unused-parameter -Werror" LINKER_LANGUAGE CXX) - set_property(TARGET rspamd-clang APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--no-undefined -Wl,--as-needed") + IF(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set_property(TARGET rspamd-clang APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--no-undefined -Wl,--as-needed") + ENDIF() find_library(found_LLVM LLVM HINTS ${LLVM_LIBRARY_DIRS}) if(found_LLVM) @@ -33,9 +41,5 @@ IF (ENABLE_CLANG_PLUGIN MATCHES "ON") target_link_libraries(rspamd-clang PRIVATE ${llvm_libs}) endif() - set(clang_libs - clangAST - clangBasic - clangFrontend) target_link_libraries(rspamd-clang PRIVATE ${clang_libs}) ENDIF() diff --git a/clang-plugin/printf_check.cc b/clang-plugin/printf_check.cc index 35df5952d..37042d47a 100644 --- a/clang-plugin/printf_check.cc +++ b/clang-plugin/printf_check.cc @@ -590,11 +590,22 @@ namespace rspamd { size_arg_handler (const Expr *arg, struct PrintfArgChecker *ctx) { if (sizeof (size_t) == sizeof (long)) { - return check_builtin_type (arg, - ctx, - {BuiltinType::Kind::ULong, - BuiltinType::Kind::Long}, - "%z"); + if (sizeof (long long) == sizeof (long)) { + return check_builtin_type (arg, + ctx, + {BuiltinType::Kind::ULong, + BuiltinType::Kind::Long, + BuiltinType::Kind::LongLong, + BuiltinType::Kind::ULongLong}, + "%z"); + } + else { + return check_builtin_type (arg, + ctx, + {BuiltinType::Kind::ULong, + BuiltinType::Kind::Long}, + "%z"); + } } else if (sizeof (size_t) == sizeof (int)) { return check_builtin_type (arg, diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 797ae2074..1c03b1239 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -63,7 +63,7 @@ ENDMACRO(AddModules MLIST WLIST) # Rspamd core components IF (ENABLE_CLANG_PLUGIN MATCHES "ON") SET(CMAKE_C_FLAGS - "${CMAKE_C_FLAGS} -Xclang -load -Xclang ${CMAKE_CURRENT_BINARY_DIR}/../clang-plugin/librspamd-clang.so -Xclang -add-plugin -Xclang rspamd-ast") + "${CMAKE_C_FLAGS} -Xclang -load -Xclang ${CMAKE_CURRENT_BINARY_DIR}/../clang-plugin/librspamd-clang${CMAKE_SHARED_LIBRARY_SUFFIX} -Xclang -add-plugin -Xclang rspamd-ast") IF(CLANG_EXTRA_PLUGINS_LIBS) FOREACH(_lib ${CLANG_EXTRA_PLUGINS_LIBS}) SET(CMAKE_C_FLAGS diff --git a/src/libserver/task.c b/src/libserver/task.c index 884489821..9e87088a2 100644 --- a/src/libserver/task.c +++ b/src/libserver/task.c @@ -395,7 +395,7 @@ rspamd_task_load_message (struct rspamd_task *task, if (offset > (gulong)st.st_size) { msg_err_task ("invalid offset %ul (%ul available) for shm " - "segment %s", offset, st.st_size, fp); + "segment %s", offset, (gulong)st.st_size, fp); munmap (map, st.st_size); close (fd); @@ -412,7 +412,7 @@ rspamd_task_load_message (struct rspamd_task *task, if (shmem_size > (gulong)st.st_size) { msg_err_task ("invalid length %ul (%ul available) for %s " - "segment %s", shmem_size, st.st_size, ft, fp); + "segment %s", shmem_size, (gulong)st.st_size, ft, fp); munmap (map, st.st_size); close (fd); -- 2.39.5