From 096eb54edbeea7ba4cbc443627013818c4d35179 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=AE=D1=80?=
 =?UTF-8?q?=D1=8C=D0=B5=D0=B2=D0=B8=D1=87=20=D0=9D=D0=B5=D1=81=D1=82=D0=B5?=
 =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=BA=D0=BE?= <anesterenko@hse.ru>
Date: Fri, 15 Nov 2024 19:23:23 +0300
Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?=
 =?UTF-8?q?=D0=BD=D0=B0=20=D0=BE=D0=BF=D1=86=D0=B8=D1=8F=20AK=5FBASE=20?=
 =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8=20?=
 =?UTF-8?q?=D0=B5=D0=B4=D0=B8=D0=BD=D0=BE=D0=B9=20=D0=B1=D0=B8=D0=B1=D0=BB?=
 =?UTF-8?q?=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 CMakeLists.txt                      | 141 +++++++++++++++++++---------
 Changelog.md                        |   4 +-
 aktool/aktool.1                     |   2 +-
 cmake/DetectFlags.cmake             |   2 +
 cmake/DetectLibraries.cmake         |  18 ++--
 cmake/MakeAktool.cmake              |  32 +++++--
 doc/20-install-guide.rst            |  17 ++++
 examples/tests/test-mpzn-password.c |   2 +-
 8 files changed, 151 insertions(+), 67 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 81b2a423..3aee7e98 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,6 +21,7 @@ project( libakrypt C )
 
 # -------------------------------------------------------------------------------------------------- #
 # Перечень доступных опций для сборки библиотеки
+option( AK_BASE "Build two separate libraries - libkrypt and libakrypt-base" OFF )
 option( AK_SHARED_LIB "Build the shared library" ON )
 option( AK_STATIC_LIB "Build the static library" OFF )
 option( AK_EXAMPLES "Build examples for libakrypt" OFF )
@@ -112,11 +113,11 @@ string( COMPARE EQUAL ${CMAKE_SIZEOF_VOID_P} "4" AK_SIZEOF_VOID_P_IS_4 )
 string( COMPARE EQUAL ${CMAKE_SIZEOF_VOID_P} "8" AK_SIZEOF_VOID_P_IS_8 )
 
 if( AK_SIZEOF_VOID_P_IS_4 )
-  message("-- Using 32-bit architecture")
+  message( STATUS "Using 32-bit architecture")
   set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DAK_SIZEOF_VOID_P_IS_4" )
 endif()
 if( AK_SIZEOF_VOID_P_IS_8 )
-  message("-- Using 64-bit architecture")
+  message( STATUS "Using 64-bit architecture")
   set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DAK_SIZEOF_VOID_P_IS_8" )
 endif()
 
@@ -133,7 +134,7 @@ include( GNUInstallDirs )
 # -------------------------------------------------------------------------------------------------- #
 # Вырабатываем заголовочный файл (в каталоге сборки)
 configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/source/libakrypt-base.h.in ${CMAKE_CURRENT_BINARY_DIR}/libakrypt-base.h @ONLY )
-message("-- Generation of libakrypt-base.h is done")
+message( STATUS "Generation of libakrypt-base.h is done")
 
 # -------------------------------------------------------------------------------------------------- #
 # Определяем место хранения файла с настройками библиотеки
@@ -147,7 +148,7 @@ else()
     set( AK_CONFIG_PATH "C:\\\\Program Files\\\\Akrypt" )
   endif()
 endif()
-message("-- Path for libakrypt.conf is ${AK_CONFIG_PATH}")
+message( STATUS "Path for libakrypt.conf is ${AK_CONFIG_PATH}")
 
 # -------------------------------------------------------------------------------------------------- #
 # Определяем место хранения доверенных сертификатов библиотеки
@@ -161,7 +162,7 @@ else()
     set( AK_CA_PATH "C:\\\\Program Files\\\\Akrypt\\\\ca-certificates" )
   endif()
 endif()
-message("-- Path for ca-certificates is ${AK_CA_PATH}")
+message( STATUS "Path for ca-certificates is ${AK_CA_PATH}")
 
 # -------------------------------------------------------------------------------------------------- #
 # Определем процедуры сборки библиотек - статической или динамической
@@ -172,39 +173,61 @@ add_compile_options( -DLIBAKRYPT_VERSION="${FULL_VERSION}" )
 add_compile_options( -DLIBAKRYPT_COMPILER_NAME="${CMAKE_C_COMPILER_ID}" )
 add_compile_options( -DLIBAKRYPT_COMPILER_VERSION="${CMAKE_C_COMPILER_VERSION}" )
 add_compile_options( -DLIBAKRYPT_CA_PATH="${AK_CA_PATH}" )
-message("-- Used compile flags ${CMAKE_C_FLAGS}")
+message( STATUS "Used compile flags ${CMAKE_C_FLAGS}")
 if( CMAKE_BUILD_TYPE STREQUAL Release )
-  message("-- Used release compile flags ${CMAKE_C_FLAGS_RELEASE}")
+  message( STATUS "Used release compile flags ${CMAKE_C_FLAGS_RELEASE}")
 endif()
 
 # -------------------------------------------------------------------------------------------------- #
 # формируем команды для сборки библиотеки
+if( AK_BASE )
+  message( STATUS "Options AK_BASE is ON" )
+else()
+  message( STATUS "Options AK_BASE is OFF" )
+endif()
+
 if( AK_SHARED_LIB )
-  add_library( akbase-shared SHARED ${MAIN_HEADERS} ${AKBASE_SOURCES}
-    cmake/MakeAktool.cmake )
-  set_target_properties( akbase-shared PROPERTIES VERSION ${MAJOR_VERSION} SOVERSION ${FULL_VERSION} )
-  set_target_properties( akbase-shared PROPERTIES OUTPUT_NAME akrypt-base CLEAN_DIRECT_CUSTOM 1 )
-  target_link_libraries( akbase-shared ${LIBAKRYPT_LIBS} )
-  message( "-- Building libakrypt-base: shared library" )
-
-  add_library( akrypt-shared SHARED ${MAIN_HEADERS} ${AKRYPT_SOURCES} )
-  set_target_properties( akrypt-shared PROPERTIES VERSION ${MAJOR_VERSION} SOVERSION ${FULL_VERSION} )
-  set_target_properties( akrypt-shared PROPERTIES OUTPUT_NAME akrypt CLEAN_DIRECT_CUSTOM 1 )
-  target_link_libraries( akrypt-shared akbase-shared ${LIBAKRYPT_LIBS} )
-  message( "-- Building libakrypt: shared library" )
+  if( AK_BASE )
+    add_library( akbase-shared SHARED ${MAIN_HEADERS} ${AKBASE_SOURCES} )
+    set_target_properties( akbase-shared PROPERTIES VERSION ${MAJOR_VERSION} SOVERSION ${FULL_VERSION} )
+    set_target_properties( akbase-shared PROPERTIES OUTPUT_NAME akrypt-base CLEAN_DIRECT_CUSTOM 1 )
+    target_link_libraries( akbase-shared ${LIBAKRYPT_LIBS} )
+    message( STATUS "Building libakrypt-base: shared library" )
+
+    add_library( akrypt-shared SHARED ${MAIN_HEADERS} ${AKRYPT_SOURCES} )
+    set_target_properties( akrypt-shared PROPERTIES VERSION ${MAJOR_VERSION} SOVERSION ${FULL_VERSION} )
+    set_target_properties( akrypt-shared PROPERTIES OUTPUT_NAME akrypt CLEAN_DIRECT_CUSTOM 1 )
+    target_link_libraries( akrypt-shared akbase-shared ${LIBAKRYPT_LIBS} )
+    message( STATUS "Building libakrypt: shared library" )
+  else()
+
+    add_library( akrypt-shared SHARED ${MAIN_HEADERS} ${AKBASE_SOURCES} ${AKRYPT_SOURCES} )
+    set_target_properties( akrypt-shared PROPERTIES VERSION ${MAJOR_VERSION} SOVERSION ${FULL_VERSION} )
+    set_target_properties( akrypt-shared PROPERTIES OUTPUT_NAME akrypt CLEAN_DIRECT_CUSTOM 1 )
+    target_link_libraries( akrypt-shared ${LIBAKRYPT_LIBS} )
+    message( STATUS "Building libakrypt: shared library" )
+  endif()
 endif()
 
 #
 if( AK_STATIC_LIB )
-  add_library( akbase-static STATIC ${MAIN_HEADERS} ${AKBASE_SOURCES} )
-  set_target_properties( akbase-static PROPERTIES OUTPUT_NAME akrypt-base CLEAN_DIRECT_CUSTOM 1 )
-  target_link_libraries( akbase-static ${LIBAKRYPT_LIBS} )
-  message( "-- Building libakrypt-base: static library" )
-
-  add_library( akrypt-static STATIC ${MAIN_HEADERS} ${AKRYPT_SOURCES} )
-  set_target_properties( akrypt-static PROPERTIES OUTPUT_NAME akrypt CLEAN_DIRECT_CUSTOM 1 )
-  target_link_libraries( akrypt-static akbase-static ${LIBAKRYPT_LIBS} )
-  message( "-- Building libakrypt: static library" )
+  if( AK_BASE )
+    add_library( akbase-static STATIC ${MAIN_HEADERS} ${AKBASE_SOURCES} )
+    set_target_properties( akbase-static PROPERTIES OUTPUT_NAME akrypt-base CLEAN_DIRECT_CUSTOM 1 )
+    target_link_libraries( akbase-static ${LIBAKRYPT_LIBS} )
+    message( STATUS "Building libakrypt-base: static library" )
+
+    add_library( akrypt-static STATIC ${MAIN_HEADERS} ${AKRYPT_SOURCES} )
+    set_target_properties( akrypt-static PROPERTIES OUTPUT_NAME akrypt CLEAN_DIRECT_CUSTOM 1 )
+    target_link_libraries( akrypt-static akbase-static ${LIBAKRYPT_LIBS} )
+    message( STATUS "Building libakrypt: static library" )
+  else()
+
+    add_library( akrypt-static STATIC ${MAIN_HEADERS} ${AKBASE_SOURCES} ${AKRYPT_SOURCES} )
+    set_target_properties( akrypt-static PROPERTIES OUTPUT_NAME akrypt CLEAN_DIRECT_CUSTOM 1 )
+    target_link_libraries( akrypt-static ${LIBAKRYPT_LIBS} )
+    message( STATUS "Building libakrypt: static library" )
+  endif()
 endif()
 
 # -------------------------------------------------------------------------------------------------- #
@@ -233,37 +256,53 @@ set( EXAMPLES_LIST
    )
 
 if( AK_EXAMPLES )
-  message("-- Akbase examples (now \"make test\" enabled):" )
+  message( STATUS "Akbase examples (now \"make test\" enabled):" )
   enable_testing()
   foreach( programm ${BASE_EXAMPLES_LIST} )
     if( AK_STATIC_LIB )
       add_executable( example-${programm} examples/akbase/example-${programm}.c )
-      target_link_libraries( example-${programm} akbase-static ${LIBAKRYPT_LIBS} )
-      message("      example-${programm}" )
+      if( AK_BASE )
+        target_link_libraries( example-${programm} akbase-static ${LIBAKRYPT_LIBS} )
+      else()
+        target_link_libraries( example-${programm} akrypt-static ${LIBAKRYPT_LIBS} )
+      endif()
+      message( NOTICE "      example-${programm}" )
       add_test( NAME example-${programm} COMMAND example-${programm} )
     endif()
     if( AK_SHARED_LIB )
       add_executable( example-shared-${programm} examples/akbase/example-${programm}.c )
-      target_link_libraries( example-shared-${programm} akbase-shared ${LIBAKRYPT_LIBS} )
-      message("      example-shared-${programm}" )
+      if( AK_BASE )
+        target_link_libraries( example-shared-${programm} akbase-shared ${LIBAKRYPT_LIBS} )
+      else()
+        target_link_libraries( example-shared-${programm} akrypt-shared ${LIBAKRYPT_LIBS} )
+      endif()
+      message( NOTICE "      example-shared-${programm}" )
       add_test( NAME example-shared-${programm} COMMAND example-shared-${programm} )
     endif()
   endforeach()
 
  # теперь то же самое, но из другого каталога + дополнительные зависимости
-  message("-- FAQ examples:" )
+  message( STATUS "FAQ examples:" )
   enable_testing()
   foreach( programm ${EXAMPLES_LIST} )
     if( AK_STATIC_LIB )
       add_executable( example-${programm} examples/faq/example-${programm}.c )
-      target_link_libraries( example-${programm} akbase-static akrypt-static ${LIBAKRYPT_LIBS} )
-      message("      example-${programm}" )
+      if( AK_BASE )
+        target_link_libraries( example-${programm} akbase-static akrypt-static ${LIBAKRYPT_LIBS} )
+      else()
+        target_link_libraries( example-${programm} akrypt-static ${LIBAKRYPT_LIBS} )
+      endif()
+      message( NOTICE "      example-${programm}" )
       add_test( NAME example-static-${programm} COMMAND example-${programm} )
     endif()
     if( AK_SHARED_LIB )
       add_executable( example-shared-${programm} examples/faq/example-${programm}.c )
-      target_link_libraries( example-shared-${programm} akbase-shared akrypt-shared ${LIBAKRYPT_LIBS} )
-      message("      example-shared-${programm}" )
+      if( AK_BASE )
+        target_link_libraries( example-shared-${programm} akbase-shared akrypt-shared ${LIBAKRYPT_LIBS} )
+      else()
+        target_link_libraries( example-shared-${programm} akrypt-shared ${LIBAKRYPT_LIBS} )
+      endif()
+      message( NOTICE "      example-shared-${programm}" )
       add_test( NAME example-shared-${programm} COMMAND example-shared-${programm} )
     endif()
   endforeach()
@@ -312,16 +351,24 @@ endif()
 
 if( AK_TESTS )
   enable_testing()
-  message("-- Internal tests (now \"make test\" enabled):" )
+  message( STATUS "Internal tests (now \"make test\" enabled):" )
   foreach( programm ${ARITHMETIC_TESTS_LIST} )
     add_executable( test-${programm} examples/tests/test-${programm}.c )
     if( AK_STATIC_LIB )
-      target_link_libraries( test-${programm} akrypt-static akbase-static ${LIBAKRYPT_LIBS} )
+      if( AK_BASE )
+        target_link_libraries( test-${programm} akrypt-static akbase-static ${LIBAKRYPT_LIBS} )
+      else()
+        target_link_libraries( test-${programm} akrypt-static ${LIBAKRYPT_LIBS} )
+      endif()
     else()
-      target_link_libraries( test-${programm} akrypt-shared akbase-shared ${LIBAKRYPT_LIBS} )
+      if( AK_BASE )
+        target_link_libraries( test-${programm} akrypt-shared akbase-shared ${LIBAKRYPT_LIBS} )
+      else()
+        target_link_libraries( test-${programm} akrypt-shared ${LIBAKRYPT_LIBS} )
+      endif()
     endif()
     add_test( NAME test-${programm} COMMAND test-${programm} )
-    message("      test-${programm}" )
+    message( NOTICE "      test-${programm}" )
   endforeach()
 endif()
 
@@ -347,15 +394,19 @@ set( LIBAKRYPT_DOCUMENTATION
 
 # -------------------------------------------------------------------------------------------------- #
 # инсталляция библиотеки (только для UNIX)
-message("-- Install path:" ${CMAKE_INSTALL_PREFIX} )
+message( STATUS "Install path:" ${CMAKE_INSTALL_PREFIX} )
 if( CMAKE_HOST_UNIX )
   if( AK_STATIC_LIB )
-    install( TARGETS akbase-static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib )
+    if( AK_BASE )
+      install( TARGETS akbase-static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib )
+    endif()
     install( TARGETS akrypt-static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib )
   endif()
 
   if( AK_SHARED_LIB )
-    install( TARGETS akbase-shared LIBRARY DESTINATION lib ARCHIVE DESTINATION lib )
+    if( AK_BASE )
+      install( TARGETS akbase-shared LIBRARY DESTINATION lib ARCHIVE DESTINATION lib )
+    endif()
     install( TARGETS akrypt-shared LIBRARY DESTINATION lib ARCHIVE DESTINATION lib )
   endif()
 
diff --git a/Changelog.md b/Changelog.md
index 6ba1fdf9..8eb318e1 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -3,7 +3,9 @@
 
 ## Изменения в версии 0.9.17
 
- - добавлена опция cmake AK_TOOL
+ - добавлены опции cmake
+   - AK_TOOL для включения/отключения сборки консольной утилиты
+   - AK_BASE для сборки библиотеки в виде одного или двух исполняемых модулей
  - изменения в утилите aktool icode
    - добавлена опция -n, --no-database
    - добавлены опции --offset, --size для контроля целостности фрагментов файлов
diff --git a/aktool/aktool.1 b/aktool/aktool.1
index 7f8e0f08..22d2297c 100644
--- a/aktool/aktool.1
+++ b/aktool/aktool.1
@@ -28,7 +28,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
-.TH "AKTOOL" "1" "окт. 23, 2024" "версия библиотеки 0.9.15" "libakrypt"
+.TH "AKTOOL" "1" "нояб. 15, 2024" "версия библиотеки 0.9.17" "libakrypt"
 .SH NAME
 aktool \- Правила пользования
 .sp
diff --git a/cmake/DetectFlags.cmake b/cmake/DetectFlags.cmake
index 2dda151c..ea51871a 100644
--- a/cmake/DetectFlags.cmake
+++ b/cmake/DetectFlags.cmake
@@ -35,7 +35,9 @@ if( MSVC )
 else()
   # набор Unix'овых флагов
   try_append_c_flag( "-Wall" CMAKE_C_FLAGS )
+  try_append_c_flag( "-Wextra" CMAKE_C_FLAGS )
   try_append_c_flag( "-Wparentheses" CMAKE_C_FLAGS )
+  try_append_c_flag( "-Wpedantic" CMAKE_C_FLAGS )
   try_append_c_flag( "-pedantic-errors" CMAKE_C_FLAGS )
   try_append_c_flag( "-O3" CMAKE_C_FLAGS )
   try_append_c_flag( "-pipe" CMAKE_C_FLAGS )
diff --git a/cmake/DetectLibraries.cmake b/cmake/DetectLibraries.cmake
index 3f30a9bf..1eabf358 100644
--- a/cmake/DetectLibraries.cmake
+++ b/cmake/DetectLibraries.cmake
@@ -6,7 +6,7 @@ if( WIN32 )
   set( AKRYPT_SOURCES ${AKRYPT_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/libakrypt.rc )
   set( AKBASE_SOURCES ${AKBASE_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/libakrypt-base.rc )
   set( CMAKE_BUILD_TYPE "Release" )
-  message("-- Generation of ${CMAKE_CURRENT_BINARY_DIR}/libakrypt.rc is done")
+  message(  STATUS "Generation of ${CMAKE_CURRENT_BINARY_DIR}/libakrypt.rc is done")
 endif()
 
 # -------------------------------------------------------------------------------------------------- #
@@ -23,11 +23,11 @@ if( AK_TESTS_GMP )
        set( LIBAKRYPT_LIBS ${LIBAKRYPT_LIBS} gmp )
        set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DAK_HAVE_GMP_H" )
     else()
-       message("-- gmp.h not found")
+       message( WARNING "gmp.h not found")
        return()
     endif()
   else()
-    message("-- libgmp or gmp.h not found")
+    message( WARNING "libgmp or gmp.h not found")
     set( LIBAKRYPT_GMP_TESTS OFF )
     return()
   endif()
@@ -40,10 +40,10 @@ if( WIN32 )
     # ищем реализацию сокетов
     find_library( LIBAKRYPT_WS2_32 ws2_32 )
     if( LIBAKRYPT_WS2_32 )
-      message("-- Searching ws2_32 - done ")
+      message( STATUS "Searching ws2_32 - done ")
       set( LIBAKRYPT_LIBS ws2_32 )
     else()
-      message("-- ws2_32 not found")
+      message( WARNING "ws2_32 not found")
       return()
     endif()
   endif()
@@ -55,7 +55,7 @@ if( MSVC )
   # в начале ищем библиотеки, если нет - выходим
   find_library( LIBAKRYPT_PTHREAD pthreadVC2 )
   if( LIBAKRYPT_PTHREAD )
-    message("-- Searching pthreadVC2 - done ")
+    message( STATUS "Searching pthreadVC2 - done ")
     set( LIBAKRYPT_LIBS ${LIBAKRYPT_LIBS} pthreadVC2 )
 
     # потом ищем заголовочный файл, если нет - выходим
@@ -76,11 +76,11 @@ if( MSVC )
       endif()
 
     else()
-      message("-- pthread.h not found")
+      message( WARNING "pthread.h not found")
       return()
     endif()
   else()
-    message("-- pthreadVC2 not found")
+    message( WARNING "pthreadVC2 not found")
     return()
   endif()
 else()
@@ -88,7 +88,7 @@ else()
 
     find_library( LIBAKRYPT_PTHREAD pthread )
     if( LIBAKRYPT_PTHREAD )
-      message("-- Searching pthread - done ")
+      message( STATUS "Searching pthread - done ")
       set( LIBAKRYPT_LIBS ${LIBAKRYPT_LIBS} pthread )
       set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DAK_HAVE_PTHREAD_H" )
     endif()
diff --git a/cmake/MakeAktool.cmake b/cmake/MakeAktool.cmake
index e668d5fa..5790601f 100644
--- a/cmake/MakeAktool.cmake
+++ b/cmake/MakeAktool.cmake
@@ -1,5 +1,5 @@
 # -------------------------------------------------------------------------------------------------- #
-# Copyright (c) 2014 - 2023 by Axel Kenzo, axelkenzo@mail.ru
+# Copyright (c) 2014 - 2024 by Axel Kenzo, axelkenzo@mail.ru
 #
 # MakeAktool.cmake
 # -------------------------------------------------------------------------------------------------- #
@@ -27,9 +27,9 @@ else()
 endif()
 
 # -------------------------------------------------------------------------------------------------- #
-message("-- Sources for aktool utility:" )
+message( STATUS "Sources for aktool utility:" )
 foreach( filename ${AKTOOL_SOURCES} )
-  message("      ${filename}" )
+  message( NOTICE "      ${filename}" )
 endforeach()
 
 # -------------------------------------------------------------------------------------------------- #
@@ -43,7 +43,7 @@ else()
       set( AK_LOCALE_PATH "/usr/share/locale" )
     endif()
     add_compile_options( -DLIBAKRYPT_LOCALE_PATH="${AK_LOCALE_PATH}" )
-    message("-- Locale path is ${AK_LOCALE_PATH}" )
+    message( STATUS "Locale path is ${AK_LOCALE_PATH}" )
   endif()
 endif()
 
@@ -57,13 +57,13 @@ macro( try_aktool_lib _lib _header )
      find_library( LIB${_lib}_LIB lib${_lib}.so )
    endif()
    if( LIB${_lib}_LIB )
-     message("-- lib${_lib} found (${LIB${_lib}_LIB})" )
+     message( STATUS "lib${_lib} found (${LIB${_lib}_LIB})" )
       find_file( AK_HAVE_${_header}_H ${_header}.h )
       if( AK_HAVE_${_header}_H )
-        message("-- ${_header}.h found")
+        message(  STATUS "${_header}.h found")
         set( LIBAKRYPT_LIBS ${LIBAKRYPT_LIBS} ${LIB${_lib}_LIB} )
         set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D${AKTOOL_LIB_HEADER}" )
-        message("   added compile flag -D${AKTOOL_LIB_HEADER}")
+        message( STATUS "Added compile flag -D${AKTOOL_LIB_HEADER}")
       endif()
    endif()
 endmacro( try_aktool_lib )
@@ -78,16 +78,24 @@ try_aktool_lib( intl libintl )
 try_aktool_lib( iconv iconv )
 
 if( LIBAKRYPT_LIBS )
-  message("-- Additional libraries for aktool is ${LIBAKRYPT_LIBS}")
+  message( STATUS "Additional libraries for aktool is ${LIBAKRYPT_LIBS}")
 endif()
 
 add_executable( aktool ${AKTOOL_SOURCES} )
 target_include_directories( aktool PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/aktool" )
 
 if( AK_STATIC_LIB )
-  target_link_libraries( aktool akrypt-static akbase-static ${LIBAKRYPT_LIBS} )
+  if( AK_BASE )
+    target_link_libraries( aktool akrypt-static akbase-static ${LIBAKRYPT_LIBS} )
+  else()
+    target_link_libraries( aktool akrypt-static ${LIBAKRYPT_LIBS} )
+  endif()
 else()
-  target_link_libraries( aktool akrypt-shared akbase-shared ${LIBAKRYPT_LIBS} )
+  if( AK_BASE )
+    target_link_libraries( aktool akrypt-shared akbase-shared ${LIBAKRYPT_LIBS} )
+  else()
+    target_link_libraries( aktool akrypt-shared ${LIBAKRYPT_LIBS} )
+  endif()
 endif()
 
 # -------------------------------------------------------------------------------------------------- #
@@ -116,3 +124,7 @@ if( GZIP )
 else()
   install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/aktool/aktool.1 DESTINATION ${AK_MAN_PATH} )
 endif()
+
+# -------------------------------------------------------------------------------------------------- #
+#                                                                                      Aktool.cmake  #
+# -------------------------------------------------------------------------------------------------- #
diff --git a/doc/20-install-guide.rst b/doc/20-install-guide.rst
index e6dcba22..2fd1a7f1 100644
--- a/doc/20-install-guide.rst
+++ b/doc/20-install-guide.rst
@@ -420,6 +420,23 @@ Cтабильная версия библиотеки распространяе
     cmake -L ../libakrypt-0.x
 
 
+AK_BASE
+~~~~~~~
+
+Опция `AK_BASE` определяется в `CMakeLists.txt` следующим образом::
+
+    option( AK_BASE "Build two separate libraries - libkrypt and libakrypt-base" OFF )
+
+Опция `AK_BASE` устанавливает должна ли библиотека собираться в виде одного или двух исполняемых
+(объектных) файлов. Если опция включена (значение `ON`), то при сборке сознаются два файла
+libakrypt-base.so(.a) и libakrypt.so(.a), первый из которых содержит реализацию
+вспомогательных преобразований, а второй только криптографические преобразования.
+
+*Принимаемые значения*: `ON`, `OFF`.
+
+*Значение по-умолчанию*: `OFF`.
+
+
 AK_CA_PATH
 ~~~~~~~~~~
 
diff --git a/examples/tests/test-mpzn-password.c b/examples/tests/test-mpzn-password.c
index 2bda1824..7de30215 100644
--- a/examples/tests/test-mpzn-password.c
+++ b/examples/tests/test-mpzn-password.c
@@ -3,7 +3,7 @@
  #include <gmp.h>
  #include <libakrypt.h>
 
- const static ak_uint8 prime[32] = {
+ static const ak_uint8 prime[32] = {
     67,  71,  73,  79,  83,  89,  97, 101, 103, 107, 109, 113, 127, 131, 139, 149,
    151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233
  };
-- 
GitLab