An error occurred while loading the file. Please try again.
-
Brice Rising authored
helm dependency upgrade wasn't working on certain file system because it assumes that os.rename is available. Since rename isn't available for subfolders in docker containers, I ripped a fallback rename strategy from dep (https://github.com/golang/dep/blob/5b1fe9e6d89372487d0aac78d9c5362a517857e7/internal/fs/fs.go#L103-L118 ) that works in docker. Signed-off-by:
Brice Rising <brice.rising@slalom.com> (cherry picked from commit 94d87ef9)
Unverifiedc41037d9
# -------------------------------------------------------------------------------------------------- #
# Copyright (c) 2014 - 2024 by Axel Kenzo, axelkenzo@mail.ru
#
# CMakeLists.txt
# -------------------------------------------------------------------------------------------------- #
# Минимальная версия cmake для сборки
cmake_minimum_required( VERSION 3.5 )
# -------------------------------------------------------------------------------------------------- #
set( HEAD_VERSION 0 )
set( MAIN_VERSION 9 )
set( MINOR_VERSION 17 )
set( MAJOR_VERSION ${HEAD_VERSION}.${MAIN_VERSION} )
set( FULL_VERSION ${MAJOR_VERSION}.${MINOR_VERSION} )
# строка с текущей датой, используется при сборке документации
string( TIMESTAMP CURRENT_DATE_STRING "[%d %B, %Y]" )
# -------------------------------------------------------------------------------------------------- #
# Формируем название проекта
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 )
option( AK_TESTS "Build tests for libakrypt" OFF )
option( AK_TESTS_GMP "Build comparison tests for gmp and libakrypt" OFF )
option( AK_TOOL "Build aktool utility" ON )
string( COMPARE EQUAL ${CMAKE_HOST_SYSTEM_NAME} "FreeBSD" AK_FREEBSD )
# -------------------------------------------------------------------------------------------------- #
# Перечень опций, которые имеют предустановленные значения и могут изменяться через командную строку
# путь установки файла с криптографическими опциями библиотеки
# set( AK_CONFIG_PATH "/etc" )
# путь установки корневых сертификатов библиотеки
# set( AK_CA_PATH "/usr/share/ca-certificates" )
# путь установки файлов русификации для утилиты aktool
# set( AK_LOCALE_PATH "/usr/share/locale" )
#
# -------------------------------------------------------------------------------------------------- #
# добавляем и такое
if( CMAKE_BUILD_TYPE )
else()
set( CMAKE_BUILD_TYPE Release )
set( CMAKE_C_FLAGS_RELEASE -DNDEBUG )
endif()
# -------------------------------------------------------------------------------------------------- #
# Определяем базовое множество исходных текстов библиотеки
set( MAIN_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/libakrypt-base.h source/libakrypt.h )
# -------------------------------------------------------------------------------------------------- #
set( AKBASE_SOURCES
source/ak_tools.c
source/ak_ini.c
source/ak_list.c
source/ak_file.c
source/ak_base64.c
source/ak_buffer.c
source/ak_htable.c
)
# -------------------------------------------------------------------------------------------------- #
# Добавляем исходные тексты для криптобиблиотеки
set( AKRYPT_SOURCES
source/libakrypt-internal.h
source/ak_options.c
source/ak_libakrypt.c
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
source/ak_oid.c
source/ak_random.c
source/ak_gf2n.c
source/ak_mpzn.c
source/ak_curves.c
source/ak_parameters.c
source/ak_mac.c
source/ak_hash.c
source/ak_crc.c
source/ak_skey.c
source/ak_hmac.c
source/ak_bckey.c
source/ak_cmac.c
source/ak_magma.c
source/ak_kuznechik.c
source/ak_acpkm.c
source/ak_mgm.c
source/ak_aead.c
source/ak_xts.c
source/ak_xtsmac.c
source/ak_asn1.c
source/ak_sign.c
source/ak_asn1_keys.c
source/ak_asn1_cert.c
source/ak_blom.c
source/ak_kdf.c
source/ak_encrypt.c
)
# -------------------------------------------------------------------------------------------------- #
# Проверка архитектуры
include( TestBigEndian )
TEST_BIG_ENDIAN( IS_BIG_ENDIAN )
if( IS_BIG_ENDIAN )
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DAK_BIG_ENDIAN" )
else()
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DAK_LITTLE_ENDIAN" )
endif()
# -------------------------------------------------------------------------------------------------- #
# Проверка разрядности системы
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( 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( STATUS "Using 64-bit architecture")
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DAK_SIZEOF_VOID_P_IS_8" )
endif()
# -------------------------------------------------------------------------------------------------- #
# Подключаем модули CMake для тонкой настройки параметров сборки
set( CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH} )
include( DetectFlags )
include( DetectHeaders )
include( DetectIntrinsics )
include( DetectLibraries )
# модули CMake
include( GNUInstallDirs )
# -------------------------------------------------------------------------------------------------- #
# Вырабатываем заголовочный файл (в каталоге сборки)
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/source/libakrypt-base.h.in ${CMAKE_CURRENT_BINARY_DIR}/libakrypt-base.h @ONLY )
message( STATUS "Generation of libakrypt-base.h is done")
# -------------------------------------------------------------------------------------------------- #
# Определяем место хранения файла с настройками библиотеки
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
# -------------------------------------------------------------------------------------------------- #
if( AK_CONFIG_PATH )
else()
if( CMAKE_HOST_UNIX )
set( AK_CONFIG_PATH "/etc" )
endif()
if( WIN32 )
set( AK_CONFIG_PATH "C:\\\\Program Files\\\\Akrypt" )
endif()
endif()
message( STATUS "Path for libakrypt.conf is ${AK_CONFIG_PATH}")
# -------------------------------------------------------------------------------------------------- #
# Определяем место хранения доверенных сертификатов библиотеки
# -------------------------------------------------------------------------------------------------- #
if( AK_CA_PATH )
else()
if( CMAKE_HOST_UNIX )
set( AK_CA_PATH ${CMAKE_INSTALL_PREFIX}/share/ca-certificates/libakrypt )
endif()
if( WIN32 )
set( AK_CA_PATH "C:\\\\Program Files\\\\Akrypt\\\\ca-certificates" )
endif()
endif()
message( STATUS "Path for ca-certificates is ${AK_CA_PATH}")
# -------------------------------------------------------------------------------------------------- #
# Определем процедуры сборки библиотек - статической или динамической
include_directories( "source" )
include_directories( ${CMAKE_CURRENT_BINARY_DIR} )
add_compile_options( -DLIBAKRYPT_OPTIONS_PATH="${AK_CONFIG_PATH}" )
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( STATUS "Used compile flags ${CMAKE_C_FLAGS}")
if( CMAKE_BUILD_TYPE STREQUAL 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 )
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()
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
#
if( AK_STATIC_LIB )
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()
# -------------------------------------------------------------------------------------------------- #
# Сборка различных примеров и иллюстраций
# -------------------------------------------------------------------------------------------------- #
# начинаем с примеров
# определяем перечень примеров и тестов для akbase
set( BASE_EXAMPLES_LIST
ini
ini-file
file
file-seek
mmap
realpath
htable
)
# определяем перечень примеров из FAQ
set( EXAMPLES_LIST
g01n01 g01n02 g01n03
g02n01 g02n02 g02n03 g02n04 g02n05 g02n06
g03n01 g03n02 g03n03 g03n04
g04n01 g04n02 g04n03
g05n01 g05n02 g05n03 g05n04 g05n05
g06n01
)
if( AK_EXAMPLES )
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 )
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 )
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} )
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
endif()
endforeach()
# теперь то же самое, но из другого каталога + дополнительные зависимости
message( STATUS "FAQ examples:" )
enable_testing()
foreach( programm ${EXAMPLES_LIST} )
if( AK_STATIC_LIB )
add_executable( example-${programm} examples/faq/example-${programm}.c )
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 )
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()
endif()
# -------------------------------------------------------------------------------------------------- #
# теперь тесты (включая арифметические)
if( AK_TESTS_GMP )
set( AK_TESTS ON )
endif()
set ( ARITHMETIC_TESTS_LIST
random01
random02
gf2n
mgm01
xtsmac01
aead
asn1-build
asn1-parse
sign01
sign02
asn1-keys
asn1-keys02
blom-keys
cmac01
cmac02
hmac
kdf-state
hash01
hash02
kuznechik01
mac-offset
)
if( AK_TESTS_GMP )
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DAK_HAVE_GMP_H" )
set( ARITHMETIC_TESTS_LIST ${ARITHMETIC_TESTS_LIST}
mpzn-arithmetic
mpzn-convert
mpzn-montgomery
mpzn-rem
mpzn-password
)
endif()
351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
if( AK_TESTS )
enable_testing()
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 )
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()
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( NOTICE " test-${programm}" )
endforeach()
endif()
# -------------------------------------------------------------------------------------------------- #
# Сборка большого примера для функций криптобиблиотеки -- утилиты aktool
# -------------------------------------------------------------------------------------------------- #
if( AK_TOOL )
include( MakeAktool )
endif()
# -------------------------------------------------------------------------------------------------- #
# Сборка документации и завершающие настройки
include( MakeDoc )
set( LIBAKRYPT_DOCUMENTATION
${CMAKE_CURRENT_SOURCE_DIR}/LICENSE
${CMAKE_CURRENT_SOURCE_DIR}/Changelog.md
)
# теперь файлы с документацией не включаются в перечень инсталлируемых файлов по-умолчанию
# set( LIBAKRYPT_GENERATED_DOCUMENTATION
# ${CMAKE_CURRENT_BINARY_DIR}/libakrypt-base-doc-${FULL_VERSION}.pdf
# ${CMAKE_CURRENT_BINARY_DIR}/libakrypt-doc-${FULL_VERSION}.pdf
# )
# -------------------------------------------------------------------------------------------------- #
# инсталляция библиотеки (только для UNIX)
message( STATUS "Install path:" ${CMAKE_INSTALL_PREFIX} )
if( CMAKE_HOST_UNIX )
if( AK_STATIC_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 )
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()
# инсталлируем заголовочные файлы и документацию к библиотеке
install( FILES ${MAIN_HEADERS} DESTINATION include )
install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/libakrypt.conf DESTINATION ${AK_CONFIG_PATH} )
install( FILES ${LIBAKRYPT_DOCUMENTATION} DESTINATION ${CMAKE_INSTALL_FULL_DOCDIR} )
# инсталлируем корневой сертификат библиотеки
install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/cert/ca-libakrypt.crt DESTINATION ${AK_CA_PATH} )
421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
# изменение настроек rsyslog для уточнения аудита:
# необходимо добавить следующую строку в /etc/rsyslog.conf
# :programname, startswith, "aktool" /var/log/aktool.log
# деинсталляция
# sudo xargs rm < install_manifest.txt
endif()
# -------------------------------------------------------------------------------------------------- #
# настройка пакета для дистрибуции
set( CPACK_GENERATOR "DEB" )
set( CPACK_SOURCE_GENERATOR "TBZ2")
set( CPACK_SOURCE_IGNORE_FILES
\\.git/
.gitignore
.delme*
.kdev4/*
TAGS
"CMakeLists.txt.user*"
"scratch*"
)
# -------------------------------------------------------------------------------------------------- #
# в зависимостях можно указать в явном виде стандартную библиотеку языка Си,
# но она и так входит в перечень
set( CPACK_DEBIAN_PACKAGE_DEPENDS "libbz2-1.0, libelf1" )
set( CPACK_PACKAGE_VERSION_MAJOR ${HEAD_VERSION} )
set( CPACK_PACKAGE_VERSION_MINOR ${MAIN_VERSION} )
set( CPACK_PACKAGE_VERSION_PATCH ${MINOR_VERSION} )
set( CPACK_DEBIAN_PACKAGE_MAINTAINER "Axel Kenzo <axelkenzo@mail.ru>") #required
set( CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://libakrypt.ru")
set( CPACK_PACKAGE_VENDOR "Axel Kenzo и Московский институт электроники и математики")
set( CPACK_PACKAGE_FILE_NAME ${CMAKE_PROJECT_NAME}-${FULL_VERSION}-${CMAKE_SYSTEM_PROCESSOR} )
set( CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${FULL_VERSION}" )
set( CPACK_STRIP_FILES TRUE )
set( CPACK_PACKAGE_DESCRIPTION
"Библиотека, реализующая российские криптографические механизмы в пространстве пользователя" )
set( CPACK_VERBATIM_VARIABLES YES )
include( CPack )
# запуск
# make package
# make package_source
# -------------------------------------------------------------------------------------------------- #
# CMakeLists.txt
# -------------------------------------------------------------------------------------------------- #