From 0d218c64526d4684dc975785317cff77e6e21f73 Mon Sep 17 00:00:00 2001
From: Roman Tsisyk <roman@tsisyk.com>
Date: Thu, 28 Jan 2016 13:52:02 +0300
Subject: [PATCH] CMake: use cache properly and don't print useless messages

* Don't print information if nothing has changed
* Remove -DENABLE_BUNDLED_XXX options which doesn't work
* Use common names for _DIRS and _LIBRARIES variables
---
 CMakeLists.txt                  | 108 ++++++++++++++------------------
 cmake/BuildLibCORO.cmake        |   9 ++-
 cmake/BuildLibEIO.cmake         |   5 --
 cmake/BuildLibEV.cmake          |   5 --
 cmake/BuildLibGOPT.cmake        |   4 --
 cmake/BuildLibYAML.cmake        |  15 +++--
 cmake/BuildSophia.cmake         |  51 ++++++++-------
 cmake/FindOptionalPackage.cmake |   2 +-
 cmake/FindReadline.cmake        |  35 +++++------
 cmake/FindTermcap.cmake         |  16 ++---
 cmake/compiler.cmake            |   2 +
 cmake/luajit.cmake              |  17 ++---
 cmake/os.cmake                  |  11 ++--
 cmake/simd.cmake                |   6 +-
 src/CMakeLists.txt              |   6 +-
 src/box/CMakeLists.txt          |   4 +-
 src/lib/bit/CMakeLists.txt      |  10 ---
 test/CMakeLists.txt             |   3 +
 test/unit/CMakeLists.txt        |   1 -
 19 files changed, 143 insertions(+), 167 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2f45acf269..995f398175 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -16,6 +16,7 @@ include(CheckCXXSourceCompiles)
 include(TestBigEndian)
 include(CheckFunctionExists)
 include(FindOptionalPackage)
+include(FindPackageMessage)
 
 find_program(ECHO echo)
 find_program(XSLTPROC xsltproc)
@@ -52,15 +53,10 @@ include(cmake/compiler.cmake)
 include(cmake/simd.cmake)
 include(cmake/atomic.cmake)
 include(cmake/profile.cmake)
-include(cmake/FindReadline.cmake)
 include(cmake/FindSphinx.cmake)
 include(cmake/module.cmake)
 include(cmake/thread.cmake)
 
-if (NOT READLINE_FOUND)
-    message(FATAL_ERROR "readline library not found.")
-endif()
-
 option(ENABLE_VALGRIND "Enable integration with valgrind, a memory analyzing tool" OFF)
 
 check_symbol_exists(MAP_ANON sys/mman.h HAVE_MAP_ANON)
@@ -176,7 +172,9 @@ set(PACKAGE_VERSION "${PACKAGE_VERSION}.${CPACK_PACKAGE_VERSION_MINOR}")
 set(PACKAGE_VERSION "${PACKAGE_VERSION}.${CPACK_PACKAGE_VERSION_PATCH}")
 set(PACKAGE_VERSION "${PACKAGE_VERSION}.${CPACK_PACKAGE_VERSION_COMMIT}")
 
-message(STATUS "Tarantool version is ${TARANTOOL_VERSION} (${PACKAGE_VERSION})")
+find_package_message(TARANTOOL_VERSION
+    "Tarantool version is ${TARANTOOL_VERSION} (${PACKAGE_VERSION})"
+    "${PACKAGE_VERSION}")
 
 #
 # Specify where to look for include files.
@@ -208,16 +206,14 @@ foreach(dir
     endif()
 endforeach()
 
-message(STATUS "Module sources:   ${MODULE_FULL_LUADIR}")
-message(STATUS "Module libraries: ${MODULE_FULL_LIBDIR}")
-message(STATUS "Module includes:  ${MODULE_FULL_INCLUDEDIR}")
-
 list(APPEND MODULE_LUAPATH "${MODULE_FULL_LUADIR}/?.lua")
 list(APPEND MODULE_LUAPATH "${MODULE_FULL_LUADIR}/?/init.lua")
 list(APPEND MODULE_LIBPATH "${MODULE_FULL_LIBDIR}/?${CMAKE_SHARED_MODULE_SUFFIX}")
 
-message(STATUS "Module package.path: ${MODULE_LUAPATH}")
-message(STATUS "Module package.cpath: ${MODULE_LIBPATH}")
+find_package_message(MODULE_LUAPATH "Lua package.path: ${MODULE_LUAPATH}"
+    "${MODULE_LUAPATH}")
+find_package_message(MODULE_LIBPATH "Lua package.cpath: ${MODULE_LIBPATH}"
+    "${MODULE_LIBPATH}")
 
 #
 # Now handle all configuration options.
@@ -265,21 +261,25 @@ endif()
 add_custom_target(build_bundled_libs)
 
 #
-# LibLUAJIT
+# ReadLine
 #
-include(luajit)
 
+set(Readline_FIND_REQUIRED ON)
+find_package(Readline)
 
 #
-# LibEV
+# LuaJIT
+#
+# Patched.
 #
+set(ENABLE_BUNDLED_LUAJIT ON)
+include(luajit)
 
 #
-# Currently our code uses libev with #define EV_MULTIPLICITY 0.
-# This option means that libev has a global variable with
-# struct ev_loop data.
-# Such design is not compatible with the dynamic version of libev
-# provided by distros.
+# LibEV
+#
+# Patched.
+#
 set(ENABLE_BUNDLED_LIBEV ON)
 include(BuildLibEV)
 libev_build()
@@ -288,8 +288,10 @@ add_dependencies(build_bundled_libs ev)
 #
 # LibEIO
 #
-option(ENABLE_BUNDLED_LIBEIO "Enable building of the bundled libeio" ON)
-
+# Patched.
+#
+#option(ENABLE_BUNDLED_LIBEIO "Enable building of the bundled libeio" ON)
+set(ENABLE_BUNDLED_LIBEIO ON)
 if (ENABLE_BUNDLED_LIBEIO)
     include(BuildLibEIO)
     libeio_build()
@@ -299,7 +301,6 @@ else()
     find_package(LibEIO)
 endif()
 
-
 #
 # LibCORO
 #
@@ -316,15 +317,6 @@ include(BuildLibCORO)
 libcoro_build()
 add_dependencies(build_bundled_libs coro)
 
-if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "86" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "amd64")
-    add_definitions("-DCORO_ASM")
-elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64")
-    add_definitions("-DCORO_ASM")
-else()
-    add_definitions("-DCORO_SJLJ")
-endif()
-
-
 #
 # LibGOPT
 #
@@ -372,6 +364,10 @@ include(BuildMisc)
 libmisc_build()
 add_dependencies(build_bundled_libs misc)
 
+#
+# Sophia
+#
+
 include(BuildSophia)
 sophia_build()
 
@@ -411,35 +407,23 @@ configure_file(
     "${PROJECT_BINARY_DIR}/src/trivia/config.h"
     )
 message (STATUS "")
-message (STATUS "Tarantool configuration is complete:")
-message (STATUS "")
-message (STATUS "VERSION: ${TARANTOOL_VERSION}")
-message (STATUS "BUILD: ${TARANTOOL_BUILD}")
-message (STATUS "C_COMPILER: ${TARANTOOL_C_COMPILER}")
-message (STATUS "CXX_COMPILER: ${TARANTOOL_CXX_COMPILER}")
-message (STATUS "C_FLAGS:${TARANTOOL_C_FLAGS}")
-message (STATUS "CXX_FLAGS:${TARANTOOL_CXX_FLAGS}")
-message (STATUS "PREFIX: ${CMAKE_INSTALL_PREFIX}")
-message (STATUS "MODULE_DIR: ${MODULE_DIR}")
-message (STATUS "ENABLE_SSE2: ${ENABLE_SSE2}")
-message (STATUS "ENABLE_AVX: ${ENABLE_AVX}")
-message (STATUS "ENABLE_GCOV: ${ENABLE_GCOV}")
-message (STATUS "ENABLE_GPROF: ${ENABLE_GPROF}")
-message (STATUS "ENABLE_VALGRIND: ${ENABLE_VALGRIND}")
-message (STATUS "ENABLE_TRACE: ${ENABLE_TRACE}")
-message (STATUS "ENABLE_BACKTRACE: ${ENABLE_BACKTRACE} (symbol resolve: ${HAVE_BFD})")
-message (STATUS "ENABLE_BUNDLED_LUAJIT: ${ENABLE_BUNDLED_LUAJIT}")
-message (STATUS "ENABLE_BUNDLED_LIBEV: ${ENABLE_BUNDLED_LIBEV}")
-message (STATUS "ENABLE_BUNDLED_LIBEIO: ${ENABLE_BUNDLED_LIBEIO}")
-message (STATUS "ENABLE_BUNDLED_LIBCORO: ${ENABLE_BUNDLED_LIBCORO}")
-message (STATUS "ENABLE_BUNDLED_LIBYAML: ${ENABLE_BUNDLED_LIBYAML}")
-message (STATUS "ENABLE_BUNDLED_MSGPUCK: ${ENABLE_BUNDLED_MSGPUCK}")
-message (STATUS "ENABLE_DOC: ${ENABLE_DOC}")
-message (STATUS "ENABLE_DIST: ${ENABLE_DIST}")
+
+set(PREFIX ${CMAKE_INSTALL_PREFIX})
+set(options VERSION BUILD C_COMPILER CXX_COMPILER C_FLAGS CXX_FLAGS PREFIX
+    ENABLE_SSE2 ENABLE_AVX
+    ENABLE_GCOV ENABLE_GPROF ENABLE_VALGRIND ENABLE_TRACE
+    ENABLE_BACKTRACE
+    ENABLE_DOC
+    ENABLE_DIST
+    ENABLE_BUNDLED_LIBYAML
+    ENABLE_BUNDLED_MSGPUCK)
+foreach(option IN LISTS options)
+    if (NOT DEFINED ${option})
+        set(value "${TARANTOOL_${option}}")
+    else ()
+        set(value "${${option}}")
+    endif ()
+    find_package_message(${option} "${option}: ${value}" ${value})
+endforeach(option)
 list_optional_packages()
-if (TARGET_OS_DARWIN)
-    message (STATUS "DARWIN_BUILD_TYPE: ${DARWIN_BUILD_TYPE}")
-endif()
-message (STATUS "")
-message (STATUS "To view or modify configuration results, check out CMakeCache.txt.")
 message (STATUS "")
diff --git a/cmake/BuildLibCORO.cmake b/cmake/BuildLibCORO.cmake
index 11cc2ae6ee..3a9c95426a 100644
--- a/cmake/BuildLibCORO.cmake
+++ b/cmake/BuildLibCORO.cmake
@@ -10,8 +10,13 @@ macro(libcoro_build)
     set(LIBCORO_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/third_party/coro)
     set(LIBCORO_LIBRARIES coro)
 
-    message(STATUS "Use bundled libcoro includes: ${LIBCORO_INCLUDE_DIR}/coro.h")
-    message(STATUS "Use bundled libcoro library: ${LIBCORO_LIBRARIES}")
+    if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "86" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "amd64")
+        add_definitions("-DCORO_ASM")
+    elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64")
+        add_definitions("-DCORO_ASM")
+    else()
+        add_definitions("-DCORO_SJLJ")
+    endif()
 
     unset(coro_src)
 endmacro(libcoro_build)
diff --git a/cmake/BuildLibEIO.cmake b/cmake/BuildLibEIO.cmake
index 64d401b29c..dea3e5635e 100644
--- a/cmake/BuildLibEIO.cmake
+++ b/cmake/BuildLibEIO.cmake
@@ -37,11 +37,6 @@ macro(libeio_build)
     set(LIBEIO_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/third_party)
     set(LIBEIO_LIBRARIES eio)
 
-    message(STATUS "Use bundled libeio includes: "
-        "${LIBEIO_INCLUDE_DIR}/tarantool_eio.h")
-    message(STATUS "Use bundled libeio library: "
-        "${LIBEIO_LIBRARIES}")
-
     unset(eio_src)
     unset(eio_compile_flags)
 endmacro(libeio_build)
diff --git a/cmake/BuildLibEV.cmake b/cmake/BuildLibEV.cmake
index f8216991c0..a5a85fc9a0 100644
--- a/cmake/BuildLibEV.cmake
+++ b/cmake/BuildLibEV.cmake
@@ -57,11 +57,6 @@ macro(libev_build)
     set(LIBEV_INCLUDE_DIR ${PROJECT_BINARY_DIR}/third_party)
     set(LIBEV_LIBRARIES ev)
 
-    message(STATUS "Use bundled libev includes: "
-        "${LIBEV_INCLUDE_DIR}/tarantool_ev.h")
-    message(STATUS "Use bundled libev library: "
-        "${LIBEV_LIBRARIES}")
-
     unset(ev_src)
     unset(ev_compile_flags)
     unset(ev_link_libraries)
diff --git a/cmake/BuildLibGOPT.cmake b/cmake/BuildLibGOPT.cmake
index 539d0e92e2..ef2c13d855 100644
--- a/cmake/BuildLibGOPT.cmake
+++ b/cmake/BuildLibGOPT.cmake
@@ -9,9 +9,5 @@ macro(libgopt_build)
     set(LIBGOPT_INCLUDE_DIR ${PROJECT_BINARY_DIR}/third_party/gopt)
     set(LIBGOPT_LIBRARIES gopt)
 
-    message(STATUS "Use bundled libgopt includes: ${LIBGOPT_INCLUDE_DIR}/gopt.h")
-    message(STATUS "Use bundled libgopt library: ${LIBGOPT_LIBRARIES}")
-
     unset(gopt_src)
 endmacro(libgopt_build)
-
diff --git a/cmake/BuildLibYAML.cmake b/cmake/BuildLibYAML.cmake
index 74ecc4c77c..77c717071a 100644
--- a/cmake/BuildLibYAML.cmake
+++ b/cmake/BuildLibYAML.cmake
@@ -10,21 +10,24 @@ macro(libyaml_build)
         ${PROJECT_SOURCE_DIR}/third_party/libyaml/scanner.c
         ${PROJECT_SOURCE_DIR}/third_party/libyaml/writer.c)
 
+    set(LIBYAML_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/third_party/libyaml)
+    set(LIBYAML_LIBRARIES yaml)
+
     add_library(yaml STATIC ${yaml_src})
     set(yaml_compile_flags -Wno-unused)
     if (CC_HAS_WNO_PARENTHESES_EQUALITY)
         set(yaml_compile_flags "${yaml_compile_flags} -Wno-parentheses-equality")
     endif()
+    set(yaml_compile_flags "${yaml_compile_flags} -I${LIBYAML_INCLUDE_DIRS}")
     set_target_properties(yaml PROPERTIES COMPILE_FLAGS "${yaml_compile_flags}")
 
-    set(LIBYAML_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/third_party/libyaml)
-    set(LIBYAML_LIBRARIES yaml)
-
     # A workaround for config.h
-    set_target_properties(yaml PROPERTIES  COMPILE_DEFINITIONS "HAVE_CONFIG_H")
-    include_directories(${LIBYAML_INCLUDE_DIR})
+    set_target_properties(yaml PROPERTIES COMPILE_DEFINITIONS "HAVE_CONFIG_H")
+
+    find_package_message(LIBYAML
+        "Using bundled libyaml"
+        "${LIBYAML_LIBRARIES}:${LIBYAML_INCLUDE_DIRS}")
 
-    message(STATUS "Use bundled libyaml library")
     unset(yaml_src)
 endmacro(libyaml_build)
 
diff --git a/cmake/BuildSophia.cmake b/cmake/BuildSophia.cmake
index 80ee5f0d63..96a1c39206 100644
--- a/cmake/BuildSophia.cmake
+++ b/cmake/BuildSophia.cmake
@@ -2,33 +2,36 @@
 #
 macro(sophia_build)
     set(SOPHIA_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/third_party/sophia/sophia/sophia)
-	set(SOPHIA_OPTS
-	    CFLAGS="${CMAKE_C_FLAGS}"
-	    LDFLAGS="${CMAKE_SHARED_LINKER_FLAGS}")
-	separate_arguments(SOPHIA_OPTS)
+    set(SOPHIA_OPTS
+        CFLAGS="${CMAKE_C_FLAGS}"
+        LDFLAGS="${CMAKE_SHARED_LINKER_FLAGS}")
+    separate_arguments(SOPHIA_OPTS)
+    set(SOPHIA_DIR "${PROJECT_BINARY_DIR}/third_party/sophia")
     if (${PROJECT_BINARY_DIR} STREQUAL ${PROJECT_SOURCE_DIR})
-		add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/third_party/sophia/libsophia.a
-			WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/third_party/sophia
-			COMMAND $(MAKE) ${SOPHIA_OPTS} clean
-			COMMAND $(MAKE) ${SOPHIA_OPTS} static
-			DEPENDS ${CMAKE_SOURCE_DIR}/CMakeCache.txt
-		)
+        add_custom_command(OUTPUT ${SOPHIA_DIR}/libsophia.a
+            WORKING_DIRECTORY ${SOPHIA_DIR}
+            COMMAND $(MAKE) ${SOPHIA_OPTS} clean
+            COMMAND $(MAKE) ${SOPHIA_OPTS} static
+            DEPENDS ${CMAKE_SOURCE_DIR}/CMakeCache.txt
+            )
     else()
-        add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/third_party/sophia
-            COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/third_party/sophia
+        add_custom_command(OUTPUT ${SOPHIA_DIR}
+            COMMAND ${CMAKE_COMMAND} -E make_directory ${SOPHIA_DIR}
+        )
+        add_custom_command(OUTPUT ${SOPHIA_DIR}/libsophia.a
+            WORKING_DIRECTORY ${SOPHIA_DIR}
+            COMMAND ${CMAKE_COMMAND} -E copy_directory
+                ${PROJECT_SOURCE_DIR}/third_party/sophia
+                ${SOPHIA_DIR}
+            COMMAND $(MAKE) ${SOPHIA_OPTS} clean
+            COMMAND $(MAKE) ${SOPHIA_OPTS} static
+            DEPENDS ${PROJECT_BINARY_DIR}/CMakeCache.txt ${SOPHIA_DIR}
         )
-		add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/third_party/sophia/libsophia.a
-			WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/third_party/sophia
-            COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/third_party/sophia ${PROJECT_BINARY_DIR}/third_party/sophia
-			COMMAND $(MAKE) ${SOPHIA_OPTS} clean
-			COMMAND $(MAKE) ${SOPHIA_OPTS} static
-            DEPENDS ${PROJECT_BINARY_DIR}/CMakeCache.txt ${PROJECT_BINARY_DIR}/third_party/sophia
-		)
     endif()
-	add_custom_target(libsophia ALL
-		DEPENDS ${PROJECT_BINARY_DIR}/third_party/sophia/libsophia.a
-	)
-    message(STATUS "Use bundled Sophia: ${PROJECT_SOURCE_DIR}/third_party/sophia/")
-    set (sophia_lib "${PROJECT_BINARY_DIR}/third_party/sophia/libsophia.a")
+
+    add_custom_target(libsophia ALL DEPENDS ${SOPHIA_DIR}/libsophia.a)
     add_dependencies(build_bundled_libs libsophia)
+
+    set(SOPHIA_LIBRARIES ${SOPHIA_DIR}/libsophia.a)
+    set(SOPHIA_INCLUDE_DIRS ${SOPHIA_INCLUDE_DIR})
 endmacro(sophia_build)
diff --git a/cmake/FindOptionalPackage.cmake b/cmake/FindOptionalPackage.cmake
index 06267c770a..899460fef9 100644
--- a/cmake/FindOptionalPackage.cmake
+++ b/cmake/FindOptionalPackage.cmake
@@ -33,5 +33,5 @@ endmacro (find_optional_package)
 
 macro(list_optional_packages)
     file(READ ${_OptionalPackagesFile} _message)
-    message(STATUS "\n${_message}")
+    find_package_message(OPTIONAL_PACKAGES "${_message}" "${_message}")
 endmacro()
diff --git a/cmake/FindReadline.cmake b/cmake/FindReadline.cmake
index bde282b9d1..d328df0fd7 100644
--- a/cmake/FindReadline.cmake
+++ b/cmake/FindReadline.cmake
@@ -5,11 +5,12 @@
 # READLINE_INCLUDE_DIR
 # READLINE_LIBRARIES
 #
-include(FindTermcap)
+
+find_package(Termcap)
 
 if (DEFINED READLINE_ROOT)
   set(_FIND_OPTS NO_CMAKE NO_CMAKE_SYSTEM_PATH)
-  FIND_LIBRARY(READLINE_READLINE_LIBRARY
+  FIND_LIBRARY(READLINE_LIBRARY
     NAMES readline
     HINTS ${READLINE_ROOT}/lib
     ${_FIND_OPTS})
@@ -18,30 +19,24 @@ if (DEFINED READLINE_ROOT)
     HINTS ${READLINE_ROOT}/include
     ${_FIND_OPTS})
 else()
-  FIND_LIBRARY(READLINE_READLINE_LIBRARY NAMES readline)
+  FIND_LIBRARY(READLINE_LIBRARY NAMES readline)
   FIND_PATH(READLINE_INCLUDE_DIR readline/readline.h)
 endif()
 
-SET(READLINE_FOUND FALSE)
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Readline
+    REQUIRED_VARS READLINE_INCLUDE_DIR READLINE_LIBRARY)
+set(READLINE_INCLUDE_DIRS ${READLINE_INCLUDE_DIR})
+set(READLINE_LIBRARIES ${READLINE_LIBRARY})
 
-IF (READLINE_READLINE_LIBRARY AND READLINE_INCLUDE_DIR)
-  SET (READLINE_FOUND TRUE)
-  SET (READLINE_INCLUDE_DIR ${READLINE_INCLUDE_DIR})
-  SET (READLINE_LIBRARIES ${READLINE_READLINE_LIBRARY})
+IF (READLINE_FOUND)
   IF (EXISTS ${READLINE_INCLUDE_DIR}/readline/rlconf.h)
     set(HAVE_GNU_READLINE 1)
-    set(libname "GNU readline")
-  ELSE()
-    set(libname "readline")
   ENDIF ()
-  MESSAGE(STATUS "Found ${libname}: ${READLINE_READLINE_LIBRARY}, include dir ${READLINE_INCLUDE_DIR}")
   IF (TERMCAP_FOUND)
-    SET (READLINE_LIBRARIES ${READLINE_LIBRARIES} ${TERMCAP_LIBRARY})
-  ENDIF (TERMCAP_FOUND)
-ENDIF (READLINE_READLINE_LIBRARY AND READLINE_INCLUDE_DIR)
+    SET (READLINE_LIBRARIES ${READLINE_LIBRARIES} ${TERMCAP_LIBRARIES})
+    SET (READLINE_INCLUDE_DIRS ${READLINE_INCLUDE_DIRS} ${TERMCAP_INCLUDE_DIRS})
+  ENDIF()
+ENDIF (READLINE_FOUND)
 
-MARK_AS_ADVANCED(
-  READLINE_FOUND
-  READLINE_INCLUDE_DIR
-  READLINE_LIBRARIES
-  )
+MARK_AS_ADVANCED(READLINE_INCLUDE_DIRS READLINE_LIBRARIES)
diff --git a/cmake/FindTermcap.cmake b/cmake/FindTermcap.cmake
index 85871f5a0f..efe0c48cfb 100644
--- a/cmake/FindTermcap.cmake
+++ b/cmake/FindTermcap.cmake
@@ -6,15 +6,11 @@
 
 FIND_LIBRARY(TERMCAP_LIBRARY NAMES termcap)
 FIND_PATH(TERMCAP_INCLUDE_DIR NAMES termcap.h)
-SET (TERMCAP_FOUND FALSE)
 
-IF (TERMCAP_LIBRARY)
-	SET (TERMCAP_FOUND TRUE)
-	MESSAGE(STATUS "Found Termcap: ${TERMCAP_LIBRARY}")
-ENDIF ()
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Termcap
+    REQUIRED_VARS TERMCAP_INCLUDE_DIR TERMCAP_LIBRARY)
+set(TERMCAP_INCLUDE_DIRS ${TERMCAP_INCLUDE_DIR})
+set(TERMCAP_LIBRARIES ${TERMCAP_LIBRARY})
 
-MARK_AS_ADVANCED(
-	TERMCAP_FOUND
-	TERMCAP_LIBRARY
-	TERMCAP_INCLUDE_DIR
-	)
+mark_as_advanced(TERMCAP_LIBRARIES TERMCAP_INCLUDE_DIRS)
diff --git a/cmake/compiler.cmake b/cmake/compiler.cmake
index 487fe3e1ac..d4950505f3 100644
--- a/cmake/compiler.cmake
+++ b/cmake/compiler.cmake
@@ -228,6 +228,8 @@ else()
     set(HAVE_BUILTIN_POPCOUNTLL 0)
     set(HAVE_BUILTIN_BSWAP32 0)
     set(HAVE_BUILTIN_BSWAP64 0)
+    find_package_message(CC_BIT "Using slow implementation of bit operations"
+        "${CMAKE_COMPILER_IS_CLANG}:${CMAKE_COMPILER_IS_GNUCC}")
 endif()
 
 if (NOT HAVE_BUILTIN_CTZ OR NOT HAVE_BUILTIN_CTZLL)
diff --git a/cmake/luajit.cmake b/cmake/luajit.cmake
index 857e27641c..3bd1e2abee 100644
--- a/cmake/luajit.cmake
+++ b/cmake/luajit.cmake
@@ -23,9 +23,9 @@
 # and, in case it is not present or can not be used,
 # falls back to the bundled one.
 #
-# Adds CMake options: ENABLED_BUNDLED_LUAJIT, LUAJIT_PREFIX
-# Exports CMake defines: LUAJIT_PREFIX, LUAJIT_INCLUDE, LUAJIT_LIB
-# Modifies CMAKE_CFLAGS with -I${LUAJIT_INCLUDE}
+# LUAJIT_FOUND
+# LUAJIT_LIBRARIES
+# LUAJIT_INCLUDE_DIRS
 #
 
 #
@@ -123,10 +123,7 @@ else()
 endif()
 
 unset (LUAJIT_RUNS)
-include_directories("${LUAJIT_INCLUDE}")
-
-message (STATUS "Use LuaJIT includes: ${LUAJIT_INCLUDE}")
-message (STATUS "Use LuaJIT library: ${LUAJIT_LIB}")
+#include_directories("${LUAJIT_INCLUDE}")
 
 macro(luajit_build)
     set (luajit_cc ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1})
@@ -214,3 +211,9 @@ endmacro()
 if (ENABLE_BUNDLED_LUAJIT)
     luajit_build()
 endif()
+
+set(LuaJIT_FIND_REQUIRED TRUE)
+find_package_handle_standard_args(LuaJIT
+    REQUIRED_VARS LUAJIT_INCLUDE LUAJIT_LIB)
+set(LUAJIT_INCLUDE_DIRS ${LUAJIT_INCLUDE})
+set(LUAJIT_LIBRARIES ${LUAJIT_LIB})
diff --git a/cmake/os.cmake b/cmake/os.cmake
index 35a1df12c4..e33847da76 100644
--- a/cmake/os.cmake
+++ b/cmake/os.cmake
@@ -10,17 +10,18 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
 # On 32-bit systems, support files larger than 2GB
 # (see man page for feature_test_macros).
     add_definitions("-D_FILE_OFFSET_BITS=64")
-    message(STATUS "Building for Linux")
+    find_package_message(PLATFORM "Building for Linux" "${CMAKE_SYSTEM_NAME}")
 elseif (${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD")
     set(TARGET_OS_FREEBSD 1)
     set(TARGET_OS_DEBIAN_FREEBSD 1)
 # Debian/kFreeBSD uses GNU glibc.
     add_definitions("-D_GNU_SOURCE")
     add_definitions("-D_FILE_OFFSET_BITS=64")
-    message(STATUS "Building for Debian/kFreeBSD")
+    find_package_message(PLATFORM "Building for Debian/kFreeBSD"
+        "${CMAKE_SYSTEM_NAME}")
 elseif (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
     set(TARGET_OS_FREEBSD 1)
-    message(STATUS "Building for FreeBSD")
+    find_package_message(PLATFORM "Building for FreeBSD" "${CMAKE_SYSTEM_NAME}")
 elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
     set(TARGET_OS_DARWIN 1)
 
@@ -40,7 +41,9 @@ elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
        set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/opt/local/lib")
     endif()
 
-    message(STATUS "Building for Mac OS X")
+    find_package_message(PLATFORM "Building for OS X" "${CMAKE_SYSTEM_NAME}")
+    find_package_message(DARWIN_BUILD_TYPE
+        "DARWIN_BUILD_TYPE: ${DARWIN_BUILD_TYPE}" "${DARWIN_BUILD_TYPE}")
 else()
     message (FATAL_ERROR "Unsupported platform -- ${CMAKE_SYSTEM_NAME}")
 endif()
diff --git a/cmake/simd.cmake b/cmake/simd.cmake
index 346857b6f5..df1840022e 100644
--- a/cmake/simd.cmake
+++ b/cmake/simd.cmake
@@ -49,7 +49,8 @@ if (ENABLE_SSE2)
         message( SEND_ERROR "SSE2 is enabled, but is not supported by compiler.")
     else()
         add_compile_flags("C;CXX" "-msse2")
-        message(STATUS "SSE2 is enabled - target CPU must support it")
+        find_package_message(SSE2 "SSE2 is enabled - target CPU must supppot it"
+            "${CC_HAS_SSE2_INTRINSICS}")
     endif()
 endif()
 
@@ -58,6 +59,7 @@ if (ENABLE_AVX)
         message(SEND_ERROR "AVX is enabled")
     else()
         add_compile_flags("C;CXX" "-mavx")
-        message(STATUS "AVX is enabled - target CPU must support it")
+        find_package_message(SSE2 "AVX is enabled - target CPU must support it"
+            "${CC_HAS_AVX_INTRINSICS}")
     endif()
 endif()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 749488b6ca..21a7d7cddf 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -7,7 +7,9 @@ include_directories(${LIBEV_INCLUDE_DIR})
 include_directories(${LIBEIO_INCLUDE_DIR})
 include_directories(${LIBCORO_INCLUDE_DIR})
 include_directories(${LIBGOPT_INCLUDE_DIR})
-include_directories(${READLINE_INCLUDE_DIR})
+include_directories(${LUAJIT_INCLUDE_DIRS})
+include_directories(${READLINE_INCLUDE_DIRS})
+include_directories(${LIBYAML_INCLUDE_DIRS})
 include_directories(${MSGPUCK_INCLUDE_DIRS})
 
 set(LIBUTIL_FREEBSD_SRC ${CMAKE_SOURCE_DIR}/third_party/libutil_freebsd)
@@ -161,7 +163,7 @@ list(APPEND common_libraries
     ${LIBGOPT_LIBRARIES}
     ${LIBYAML_LIBRARIES}
     ${READLINE_LIBRARIES}
-    ${LUAJIT_LIB}
+    ${LUAJIT_LIBRARIES}
 )
 
 if (TARGET_OS_LINUX OR TARGET_OS_DEBIAN_FREEBSD)
diff --git a/src/box/CMakeLists.txt b/src/box/CMakeLists.txt
index 7a1acb9a51..880f80c6d7 100644
--- a/src/box/CMakeLists.txt
+++ b/src/box/CMakeLists.txt
@@ -1,6 +1,6 @@
 file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/src/box/lua)
 
-include_directories(${SOPHIA_INCLUDE_DIR})
+include_directories(${SOPHIA_INCLUDE_DIRS})
 
 set(lua_sources)
 lua_source(lua_sources lua/load_cfg.lua)
@@ -78,4 +78,4 @@ add_library(box STATIC
     ${bin_sources})
 
 add_dependencies(box build_bundled_libs)
-target_link_libraries(box ${sophia_lib})
+target_link_libraries(box ${SOPHIA_LIBRARIES})
diff --git a/src/lib/bit/CMakeLists.txt b/src/lib/bit/CMakeLists.txt
index d30afe2216..49df397d33 100644
--- a/src/lib/bit/CMakeLists.txt
+++ b/src/lib/bit/CMakeLists.txt
@@ -1,13 +1,3 @@
-if ((HAVE_BUILTIN_CTZ OR HAVE_FFSL) AND
-    (HAVE_BUILTIN_CTZLL OR HAVE_FFSLL) AND
-    HAVE_BUILTIN_CLZ AND HAVE_BUILTIN_CLZLL AND
-    HAVE_BUILTIN_POPCOUNT AND HAVE_BUILTIN_POPCOUNTLL AND
-    HAVE_BUILTIN_BSWAP32 AND HAVE_BUILTIN_BSWAP64)
-    message(STATUS "Using compiler version of bit operations")
-else()
-    message(WARNING "Using slow implementation of bit operations")
-endif()
-
 set(lib_sources
     bit.c
 )
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 7427df196f..24985f2337 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,5 +1,8 @@
 enable_tnt_compile_flags()
 
+include_directories(${LUAJIT_INCLUDE_DIRS})
+include_directories(${MSGPUCK_INCLUDE_DIRS})
+
 function(build_module module files)
     add_library(${module} SHARED ${files})
     set_target_properties(${module} PROPERTIES PREFIX "")
diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt
index ee86303788..24d268e9fb 100644
--- a/test/unit/CMakeLists.txt
+++ b/test/unit/CMakeLists.txt
@@ -4,7 +4,6 @@ set_source_files_compile_flags(${all_sources})
 
 include_directories(${PROJECT_SOURCE_DIR}/src)
 include_directories(${PROJECT_BINARY_DIR}/src)
-include_directories(${MSGPUCK_INCLUDE_DIRS})
 include_directories(${CMAKE_SOURCE_DIR}/third_party)
 add_executable(rlist.test rlist.c unit.c)
 add_executable(stailq.test stailq.c unit.c)
-- 
GitLab