Commit 096eb54e authored by Нестеренко Алексей Юрьевич's avatar Нестеренко Алексей Юрьевич :headphones:
Browse files

Добавлена опция AK_BASE для сборки единой библиотеки

parent 7d3ff709
No related merge requests found
Showing with 151 additions and 67 deletions
+151 -67
......@@ -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()
......
......@@ -3,7 +3,9 @@
## Изменения в версии 0.9.17
- добавлена опция cmake AK_TOOL
- добавлены опции cmake
- AK_TOOL для включения/отключения сборки консольной утилиты
- AK_BASE для сборки библиотеки в виде одного или двух исполняемых модулей
- изменения в утилите aktool icode
- добавлена опция -n, --no-database
- добавлены опции --offset, --size для контроля целостности фрагментов файлов
......
......@@ -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
......
......@@ -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 )
......
......@@ -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()
......
# -------------------------------------------------------------------------------------------------- #
# 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 #
# -------------------------------------------------------------------------------------------------- #
......@@ -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
~~~~~~~~~~
......
......@@ -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
};
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment