-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
103 lines (91 loc) · 3.47 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# SPDX-FileCopyrightText: 2022-2024 "extra" provider collective
#
# SPDX-License-Identifier: LGPL-3.0-or-later
cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
project(
extra-provider
VERSION 1.0
DESCRIPTION "'extra' is the extra provider for OpenSSL 3, with stuff that doesn't exist there for diverse reasons, ranging from having fallen so much out of favor that it isn't included even in the legacy provider, to stuff that is too experimental, or needs to mature further before inclusion in OpenSSL's official providers."
LANGUAGES C)
set(CMAKE_C_STANDARD 99)
# I use my github handle here
add_compile_definitions(AUTHOR="@levitte")
include(CTest)
include(GenerateExportHeader)
set(export_custom_content
[=====[
/*
* Generated by cmake using GenerateExportHeader
*/
]=====])
set(OPENSSL_USE_STATIC_LIBS TRUE)
add_subdirectory(libprov)
set_target_properties(libprov
PROPERTIES
VISIBILITY_INLINES_HIDDEN 1
C_VISIBILITY_PRESET hidden)
# For crypt.c, different libraries are needed depending on platform
# Only Windows uses OpenSSL::Crypto (support for Windows will disappear
# when OpenSSL doesn't support DES_crypt() any more)
if (DEFINED MSVC)
set(CRYPTLIB OpenSSL::Crypto)
elseif(NOT DEFINED APPLE)
set(CRYPTLIB crypt)
endif()
include(libprov/cmake/provider.cmake)
setup_provider_openssl()
add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/e_params.c
${CMAKE_CURRENT_SOURCE_DIR}/e_params.h
COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/libprov/perl/gen_param_LL.pl
${CMAKE_CURRENT_SOURCE_DIR}/e_params.c
${CMAKE_CURRENT_SOURCE_DIR}/e_params.h
${CMAKE_CURRENT_SOURCE_DIR}/extra_params.dat
MAIN_DEPENDENCY extra_params.dat
DEPENDS libprov/perl/gen_param_LL.pl)
set(extra_source
extra.c
e_params.c
# Implement The "crypt" KDF, using libcrypt or OpenSSL's DES_crypt()
crypt.c
# Implement MD6, with help from the reference implementation
md6.c
external/md6/md6_mode.c
external/md6/md6_compress.c)
build_provider(extra "${extra_source}" "libprov;${CRYPTLIB}")
set_target_properties(extra
PROPERTIES
VISIBILITY_INLINES_HIDDEN 1
C_VISIBILITY_PRESET hidden
LINKER_LANGUAGE C)
generate_export_header(extra
EXPORT_FILE_NAME ${CMAKE_CURRENT_SOURCE_DIR}/export.h
CUSTOM_CONTENT_FROM_VARIABLE export_custom_content)
# Testing
get_property(_is_multiconfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if (_is_multiconfig)
set(EXTRA_MODULE_DIRECTORY "${CMAKE_BINARY_DIR}/$<CONFIG>")
else()
set(EXTRA_MODULE_DIRECTORY "${CMAKE_BINARY_DIR}")
endif()
unset(_is_multiconfig)
message(STATUS "Determined the build time Extra provider location to be '${EXTRA_MODULE_DIRECTORY}'")
set(TEST_ENVIRONMENT
"OPENSSL_MODULES=${EXTRA_MODULE_DIRECTORY}"
"OPENSSL_PROGRAM=${OPENSSL_PROGRAM}"
"OPENSSL_RUNTIME_DIR=${OPENSSL_RUNTIME_DIR}"
"OPENSSL_LIBRARY_DIR=$<IF:$<BOOL:${WIN32}>,${OPENSSL_RUNTIME_DIR},${OPENSSL_LIBRARY_DIR}>"
"SOURCEDIR=${CMAKE_CURRENT_SOURCE_DIR}"
"PERL5LIB=${CMAKE_CURRENT_SOURCE_DIR}/t"
)
# Test with OpenSSL, using TAP
if (DEFINED MSVC_VERSION)
set(PROVE prove.bat)
else()
set(PROVE prove)
endif()
add_test(NAME openssl
COMMAND ${PROVE} -PWrapOpenSSL ${CMAKE_CURRENT_SOURCE_DIR}/t)
set_tests_properties(openssl PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT}")
# Installing
message(STATUS "Will install in ${OPENSSL_MODULES_DIR}")
install(TARGETS extra DESTINATION ${OPENSSL_MODULES_DIR})