blob: 8a96f6cf142d8c1933b4e1adc3e72441d3851994 (
plain)
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
|
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO randombit/botan
REF "${VERSION}"
SHA512 596f4c5c167d1a8d3e387b764fab95fc01827988df93da9cdf3c10d632c8e662d3f9a2121a43c79ab44534a45b7e63c0e1adef61c7666d7851b83f6065815788
HEAD_REF master
PATCHES
embed-debug-info.patch
pkgconfig.patch
verbose-install.patch
configure-zlib.patch
fix_android.patch
libcxx-winpthread-fixes.patch
fix-cmake-usage.patch
0009-fix-regression-f2bf049-85491b3.patch # extract from PR 4255
)
file(COPY "${CMAKE_CURRENT_LIST_DIR}/configure" DESTINATION "${SOURCE_PATH}")
if(VCPKG_TARGET_IS_MINGW)
vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
endif()
vcpkg_find_acquire_program(PYTHON3)
vcpkg_cmake_get_vars(cmake_vars_file)
include("${cmake_vars_file}")
set(pkgconfig_syntax "")
if(VCPKG_DETECTED_CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set(pkgconfig_syntax "--msvc-syntax")
endif()
vcpkg_list(SET configure_arguments
"--distribution-info=vcpkg ${TARGET_TRIPLET}"
--disable-cc-tests
--with-pkg-config
--link-method=copy
--with-debug-info
--includedir=include
--bindir=bin
--libdir=lib
--without-documentation
"--with-external-includedir=${CURRENT_INSTALLED_DIR}/include"
)
vcpkg_list(SET pkgconfig_requires)
if("amalgamation" IN_LIST FEATURES)
vcpkg_list(APPEND configure_arguments --amalgamation)
endif()
set(ZLIB_LIBS_RELEASE "")
set(ZLIB_LIBS_DEBUG "")
if("zlib" IN_LIST FEATURES)
vcpkg_list(APPEND configure_arguments --with-zlib)
vcpkg_list(APPEND pkgconfig_requires zlib)
x_vcpkg_pkgconfig_get_modules(LIBS PREFIX "ZLIB" MODULES "zlib" ${pkgconfig_syntax})
endif()
if(VCPKG_TARGET_IS_EMSCRIPTEN)
vcpkg_list(APPEND configure_arguments --cpu=wasm)
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
vcpkg_list(APPEND configure_arguments --cpu=x86)
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
vcpkg_list(APPEND configure_arguments --cpu=x86_64)
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
vcpkg_list(APPEND configure_arguments --cpu=arm32)
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
vcpkg_list(APPEND configure_arguments --cpu=arm64)
else()
message(FATAL_ERROR "Unsupported architecture")
endif()
# Allow disabling use of WinSock2 by setting BOTAN_USE_WINSOCK2=OFF in triplet
# for targeting older Windows versions with missing APIs.
if(VCPKG_TARGET_IS_WINDOWS AND DEFINED BOTAN_USE_WINSOCK2 AND NOT BOTAN_USE_WINSOCK2)
vcpkg_list(APPEND configure_arguments --without-os-features=winsock2)
endif()
if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
vcpkg_list(APPEND configure_arguments --os=windows)
if(VCPKG_DETECTED_CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
vcpkg_list(APPEND configure_arguments --cc=msvc)
endif()
# When compiling with Clang, -mrdrand is required to enable the RDRAND intrinsics. Botan will
# check for RDRAND at runtime before trying to use it, so we should be safe to specify this
# without triggering illegal instruction faults on older CPUs.
if(VCPKG_DETECTED_CMAKE_CXX_COMPILER MATCHES "clang-cl(\.exe)?$")
vcpkg_list(APPEND configure_arguments "--extra-cxxflags=${VCPKG_DETECTED_CMAKE_CXX_FLAGS} -mrdrnd")
else()
# ...otherwise just forward the detected CXXFLAGS.
vcpkg_list(APPEND configure_arguments "--extra-cxxflags=${VCPKG_DETECTED_CMAKE_CXX_FLAGS}")
endif()
if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
vcpkg_list(APPEND configure_arguments --enable-shared-library --disable-static-library)
else()
vcpkg_list(APPEND configure_arguments --disable-shared-library --enable-static-library)
endif()
if(VCPKG_CRT_LINKAGE STREQUAL "dynamic")
set(BOTAN_MSVC_RUNTIME MD)
else()
set(BOTAN_MSVC_RUNTIME MT)
endif()
vcpkg_install_nmake(
SOURCE_PATH "${SOURCE_PATH}"
PROJECT_NAME "Makefile"
PREFER_JOM
PRERUN_SHELL_RELEASE
"${PYTHON3}" "${SOURCE_PATH}/configure.py"
${configure_arguments}
"--prefix=${CURRENT_PACKAGES_DIR}"
"--msvc-runtime=${BOTAN_MSVC_RUNTIME}"
"--with-external-libdir=${CURRENT_INSTALLED_DIR}/lib"
PRERUN_SHELL_DEBUG
"${PYTHON3}" "${SOURCE_PATH}/configure.py"
${configure_arguments}
"--prefix=${CURRENT_PACKAGES_DIR}/debug"
"--msvc-runtime=${BOTAN_MSVC_RUNTIME}d"
"--with-external-libdir=${CURRENT_INSTALLED_DIR}/debug/lib"
--debug-mode
OPTIONS
"CXX=\"${VCPKG_DETECTED_CMAKE_CXX_COMPILER}\""
"LINKER=\"${VCPKG_DETECTED_CMAKE_LINKER}\""
"AR=\"${VCPKG_DETECTED_CMAKE_AR}\""
"EXE_LINK_CMD=\"${VCPKG_DETECTED_CMAKE_LINKER}\" ${VCPKG_LINKER_FLAGS}"
OPTIONS_RELEASE
"ZLIB_LIBS=${ZLIB_LIBS_RELEASE}"
OPTIONS_DEBUG
"ZLIB_LIBS=${ZLIB_LIBS_DEBUG}"
)
vcpkg_copy_tools(TOOL_NAMES botan-cli AUTO_CLEAN)
vcpkg_copy_pdbs()
else()
if(VCPKG_TARGET_IS_ANDROID)
vcpkg_list(APPEND configure_arguments --os=android)
elseif(VCPKG_TARGET_IS_EMSCRIPTEN)
vcpkg_list(APPEND configure_arguments --os=emscripten)
elseif(VCPKG_TARGET_IS_MINGW)
vcpkg_list(APPEND configure_arguments --os=mingw)
endif()
if(VCPKG_TARGET_IS_EMSCRIPTEN)
vcpkg_list(APPEND configure_arguments --cc=emcc)
elseif(VCPKG_DETECTED_CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
vcpkg_list(APPEND configure_arguments --cc=gcc)
elseif(VCPKG_DETECTED_CMAKE_CXX_COMPILER_ID MATCHES "Clang")
vcpkg_list(APPEND configure_arguments --cc=clang)
endif()
# botan's install.py doesn't handle DESTDIR on windows host,
# so we must avoid the standard '--prefix' and 'DESTDIR' install.
vcpkg_configure_make(
SOURCE_PATH "${SOURCE_PATH}"
DISABLE_VERBOSE_FLAGS
NO_ADDITIONAL_PATHS
OPTIONS
"${PYTHON3}" "${SOURCE_PATH}/configure.py"
${configure_arguments}
OPTIONS_RELEASE
"--prefix=${CURRENT_PACKAGES_DIR}"
"--with-external-libdir=${CURRENT_INSTALLED_DIR}/lib"
OPTIONS_DEBUG
--debug-mode
"--prefix=${CURRENT_PACKAGES_DIR}/debug"
"--with-external-libdir=${CURRENT_INSTALLED_DIR}/debug/lib"
)
vcpkg_build_make(
BUILD_TARGET install
OPTIONS
"ZLIB_LIBS_RELEASE=${ZLIB_LIBS_RELEASE}"
"ZLIB_LIBS_DEBUG=${ZLIB_LIBS_DEBUG}"
)
if(NOT VCPKG_TARGET_IS_EMSCRIPTEN)
vcpkg_copy_tools(TOOL_NAMES botan AUTO_CLEAN)
endif()
endif()
vcpkg_cmake_config_fixup(CONFIG_PATH "lib/cmake/Botan-${VERSION}")
file(RENAME "${CURRENT_PACKAGES_DIR}/include/botan-3/botan" "${CURRENT_PACKAGES_DIR}/include/botan")
if(pkgconfig_requires)
list(JOIN pkgconfig_requires ", " pkgconfig_requires)
file(APPEND "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/botan-3.pc" "Requires.private: ${pkgconfig_requires}")
if(NOT VCPKG_BUILD_TYPE)
file(APPEND "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/botan-3.pc" "Requires.private: ${pkgconfig_requires}")
endif()
endif()
vcpkg_fixup_pkgconfig()
file(REMOVE_RECURSE
"${CURRENT_PACKAGES_DIR}/debug/include"
"${CURRENT_PACKAGES_DIR}/debug/share"
"${CURRENT_PACKAGES_DIR}/include/botan-3"
)
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/botan/build.h" "#define BOTAN_INSTALL_PREFIX R\"(${CURRENT_PACKAGES_DIR})\"" "")
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/botan/build.h" "#define BOTAN_INSTALL_LIB_DIR R\"(${CURRENT_PACKAGES_DIR}\\lib)\"" "" IGNORE_UNCHANGED)
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/botan/build.h" "#define BOTAN_INSTALL_LIB_DIR R\"(${CURRENT_PACKAGES_DIR}/lib)\"" "" IGNORE_UNCHANGED)
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/botan/build.h" "--prefix=${CURRENT_PACKAGES_DIR}" "")
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/license.txt")
|