In default configuration OpenSSL loads config from
certain location on disk, for example
c:\vcpkg\packages\openssl_x64-windows\openvpn.cnf
which may pose a security risk.
There is "no-autoload-config" config option for OpenSSL
which disables this functionality:
https://github.com/openssl/openssl/pull/5959
however it is not "exported" to vcpkg.
This adds openssl port overlay which sets "no-autoload-config"
config option. Here is the diff (indented with "!" to avoid
confusing "git am"):
! diff --git a/ports/openssl/windows/portfile.cmake
! b/ports/openssl/windows/portfile.cmake
! index 7a3bf08ed..c873eb756 100644
! --- a/ports/openssl/windows/portfile.cmake
! +++ b/ports/openssl/windows/portfile.cmake
! @@ -21,6 +21,7 @@ set(CONFIGURE_OPTIONS
! enable-capieng
! no-ssl2
! no-tests
! + no-autoload-config
! -utf-8
! ${OPENSSL_SHARED}
! )
There is also corresponsing PR to vcpkg:
https://github.com/microsoft/vcpkg/pull/18389
When above PR is merged, this port overlay can be removed.
CVE: 2121-3606
Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20210617061259.297-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg22569.html
1 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,25 @@ |
0 |
+if(EXISTS "${CURRENT_INSTALLED_DIR}/include/openssl/ssl.h") |
|
1 |
+ message(FATAL_ERROR "Can't build openssl if libressl/boringssl is installed. Please remove libressl/boringssl, and try install openssl again if you need it.") |
|
2 |
+endif() |
|
3 |
+ |
|
4 |
+set(OPENSSL_VERSION 1.1.1k) |
|
5 |
+vcpkg_download_distfile(ARCHIVE |
|
6 |
+ URLS "https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz" "https://www.openssl.org/source/old/1.1.1/openssl-${OPENSSL_VERSION}.tar.gz" |
|
7 |
+ FILENAME "openssl-${OPENSSL_VERSION}.tar.gz" |
|
8 |
+ SHA512 73cd042d4056585e5a9dd7ab68e7c7310a3a4c783eafa07ab0b560e7462b924e4376436a6d38a155c687f6942a881cfc0c1b9394afcde1d8c46bf396e7d51121 |
|
9 |
+) |
|
10 |
+ |
|
11 |
+vcpkg_find_acquire_program(PERL) |
|
12 |
+get_filename_component(PERL_EXE_PATH ${PERL} DIRECTORY) |
|
13 |
+vcpkg_add_to_path("${PERL_EXE_PATH}") |
|
14 |
+ |
|
15 |
+if(VCPKG_TARGET_IS_UWP) |
|
16 |
+ include("${CMAKE_CURRENT_LIST_DIR}/uwp/portfile.cmake") |
|
17 |
+elseif(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) |
|
18 |
+ include("${CMAKE_CURRENT_LIST_DIR}/windows/portfile.cmake") |
|
19 |
+else() |
|
20 |
+ include("${CMAKE_CURRENT_LIST_DIR}/unix/portfile.cmake") |
|
21 |
+endif() |
|
22 |
+ |
|
23 |
+ |
|
24 |
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}") |
0 | 25 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,280 @@ |
0 |
+cmake_minimum_required(VERSION 3.9) |
|
1 |
+project(openssl C) |
|
2 |
+ |
|
3 |
+if(NOT SOURCE_PATH) |
|
4 |
+ message(FATAL_ERROR "Requires SOURCE_PATH") |
|
5 |
+endif() |
|
6 |
+ |
|
7 |
+if(CMAKE_SYSTEM_NAME STREQUAL "Android" OR CMAKE_SYSTEM_NAME STREQUAL "Linux") |
|
8 |
+ if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") |
|
9 |
+ set(PLATFORM linux-x86_64) |
|
10 |
+ else() |
|
11 |
+ set(PLATFORM linux-generic32) |
|
12 |
+ endif() |
|
13 |
+elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS") |
|
14 |
+ if(VCPKG_TARGET_ARCHITECTURE MATCHES "arm64") |
|
15 |
+ set(PLATFORM ios64-xcrun) |
|
16 |
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "arm") |
|
17 |
+ set(PLATFORM ios-xcrun) |
|
18 |
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" OR |
|
19 |
+ VCPKG_TARGET_ARCHITECTURE MATCHES "x64") |
|
20 |
+ set(PLATFORM iossimulator-xcrun) |
|
21 |
+ else() |
|
22 |
+ message(FATAL_ERROR "Unknown iOS target architecture: ${VCPKG_TARGET_ARCHITECTURE}") |
|
23 |
+ endif() |
|
24 |
+ # disable that makes linkage error (e.g. require stderr usage) |
|
25 |
+ list(APPEND DISABLES no-stdio no-ui no-asm) |
|
26 |
+elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") |
|
27 |
+ if(VCPKG_TARGET_ARCHITECTURE MATCHES "arm64") |
|
28 |
+ set(PLATFORM darwin64-arm64-cc) |
|
29 |
+ else() |
|
30 |
+ set(PLATFORM darwin64-x86_64-cc) |
|
31 |
+ endif() |
|
32 |
+elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") |
|
33 |
+ set(PLATFORM BSD-generic64) |
|
34 |
+elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") |
|
35 |
+ set(PLATFORM BSD-generic64) |
|
36 |
+elseif(MINGW) |
|
37 |
+ if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") |
|
38 |
+ set(PLATFORM mingw64) |
|
39 |
+ else() |
|
40 |
+ set(PLATFORM mingw) |
|
41 |
+ endif() |
|
42 |
+elseif(EMSCRIPTEN) |
|
43 |
+ set(MAKE $ENV{EMSDK}/upstream/emscripten/emmake) |
|
44 |
+ set(ENV{MAKE} $ENV{EMSDK}/upstream/emscripten/emmake) |
|
45 |
+else() |
|
46 |
+ message(FATAL_ERROR "Unknown platform") |
|
47 |
+endif() |
|
48 |
+ |
|
49 |
+get_filename_component(COMPILER_ROOT "${CMAKE_C_COMPILER}" DIRECTORY) |
|
50 |
+ |
|
51 |
+message("CMAKE_C_COMPILER=${CMAKE_C_COMPILER}") |
|
52 |
+message("COMPILER_ROOT=${COMPILER_ROOT}") |
|
53 |
+message("CMAKE_SYSROOT=${CMAKE_SYSROOT}") |
|
54 |
+message("CMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}") |
|
55 |
+message("CMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}") |
|
56 |
+message("CMAKE_C_FLAGS=${CMAKE_C_FLAGS}") |
|
57 |
+message("CMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}") |
|
58 |
+message("CMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}") |
|
59 |
+message("CMAKE_INCLUDE_SYSTEM_FLAG_C=${CMAKE_INCLUDE_SYSTEM_FLAG_C}") |
|
60 |
+message("CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG=${CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG}") |
|
61 |
+ |
|
62 |
+set(CFLAGS "${CMAKE_C_FLAGS}") |
|
63 |
+if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") |
|
64 |
+ set(CFLAGS "-Wno-error=unused-command-line-argument ${CMAKE_C_FLAGS}") |
|
65 |
+endif() |
|
66 |
+if(CMAKE_C_COMPILER_TARGET AND CMAKE_C_COMPILE_OPTIONS_TARGET) |
|
67 |
+ set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_TARGET}${CMAKE_C_COMPILER_TARGET}") |
|
68 |
+endif() |
|
69 |
+if(CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN AND CMAKE_C_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN) |
|
70 |
+ set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN}") |
|
71 |
+endif() |
|
72 |
+if(CMAKE_SYSROOT AND CMAKE_C_COMPILE_OPTIONS_SYSROOT) |
|
73 |
+ set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT}") |
|
74 |
+elseif(CMAKE_OSX_SYSROOT AND CMAKE_C_COMPILE_OPTIONS_SYSROOT) |
|
75 |
+ set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_SYSROOT}${CMAKE_OSX_SYSROOT}") |
|
76 |
+endif() |
|
77 |
+if (CMAKE_OSX_DEPLOYMENT_TARGET AND CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG) |
|
78 |
+ set(CFLAGS "${CFLAGS} ${CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG}${CMAKE_OSX_DEPLOYMENT_TARGET}") |
|
79 |
+endif() |
|
80 |
+ |
|
81 |
+string(REGEX REPLACE "^ " "" CFLAGS "${CFLAGS}") |
|
82 |
+ |
|
83 |
+if(CMAKE_HOST_WIN32) |
|
84 |
+ file(TO_NATIVE_PATH ENV_PATH "${COMPILER_ROOT};$ENV{PATH}") |
|
85 |
+else() |
|
86 |
+ file(TO_NATIVE_PATH ENV_PATH "${COMPILER_ROOT}:$ENV{PATH}") |
|
87 |
+endif() |
|
88 |
+set(ENV{ANDROID_DEV} "${CMAKE_SYSROOT}/usr") |
|
89 |
+ |
|
90 |
+if(NOT IOS) |
|
91 |
+ set(ENV{CC} "${CMAKE_C_COMPILER}") |
|
92 |
+endif() |
|
93 |
+ |
|
94 |
+message("ENV{ANDROID_DEV}=$ENV{ANDROID_DEV}") |
|
95 |
+ |
|
96 |
+get_filename_component(SOURCE_PATH_NAME "${SOURCE_PATH}" NAME) |
|
97 |
+set(BUILDDIR "${CMAKE_CURRENT_BINARY_DIR}/${SOURCE_PATH_NAME}") |
|
98 |
+ |
|
99 |
+if(NOT EXISTS "${BUILDDIR}") |
|
100 |
+ file(COPY ${SOURCE_PATH} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) |
|
101 |
+endif() |
|
102 |
+ |
|
103 |
+get_filename_component(MSYS_BIN_DIR "${MAKE}" DIRECTORY) |
|
104 |
+ |
|
105 |
+if(BUILD_SHARED_LIBS) |
|
106 |
+ set(SHARED shared) |
|
107 |
+ file(STRINGS "${BUILDDIR}/include/openssl/opensslv.h" SHLIB_VERSION |
|
108 |
+ REGEX "^#[\t ]*define[\t ]+SHLIB_VERSION_NUMBER[\t ]+\".*\".*") |
|
109 |
+ string(REGEX REPLACE "^.*SHLIB_VERSION_NUMBER[\t ]+\"([^\"]*)\".*$" "\\1" |
|
110 |
+ SHLIB_VERSION "${SHLIB_VERSION}") |
|
111 |
+ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "iOS") |
|
112 |
+ set(LIB_EXT dylib) |
|
113 |
+ set(LIB_EXTS ${SHLIB_VERSION}.${LIB_EXT}) |
|
114 |
+ elseif(MINGW) |
|
115 |
+ string(REPLACE "." "_" SHLIB_VERSION "${SHLIB_VERSION}") |
|
116 |
+ set(BIN_EXT dll) |
|
117 |
+ set(LIB_EXT dll.a) |
|
118 |
+ else() |
|
119 |
+ set(LIB_EXT so) |
|
120 |
+ set(LIB_EXTS ${LIB_EXT}.${SHLIB_VERSION}) |
|
121 |
+ endif() |
|
122 |
+ list(APPEND BIN_EXTS ${BIN_EXT}) |
|
123 |
+ list(APPEND LIB_EXTS ${LIB_EXT}) |
|
124 |
+else() |
|
125 |
+ set(SHARED no-shared) |
|
126 |
+ set(LIB_EXTS a) |
|
127 |
+endif() |
|
128 |
+foreach(lib ssl crypto) |
|
129 |
+ foreach(ext ${LIB_EXTS}) |
|
130 |
+ list(APPEND INSTALL_LIBS "${BUILDDIR}/lib${lib}.${ext}") |
|
131 |
+ list(APPEND INSTALL_PKG_CONFIGS "${BUILDDIR}/lib${lib}.pc") |
|
132 |
+ endforeach() |
|
133 |
+ foreach(ext ${BIN_EXTS}) |
|
134 |
+ # This might be wrong for targets which don't follow this naming scheme, but I'm not aware of any |
|
135 |
+ if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") |
|
136 |
+ list(APPEND INSTALL_BINS "${BUILDDIR}/lib${lib}-${SHLIB_VERSION}-x64.${ext}") |
|
137 |
+ else() |
|
138 |
+ list(APPEND INSTALL_BINS "${BUILDDIR}/lib${lib}-${SHLIB_VERSION}.${ext}") |
|
139 |
+ endif() |
|
140 |
+ endforeach() |
|
141 |
+endforeach() |
|
142 |
+ |
|
143 |
+if(CMAKE_HOST_WIN32) |
|
144 |
+ set(ENV_COMMAND set) |
|
145 |
+ set(PATH_VAR ";%PATH%") |
|
146 |
+else() |
|
147 |
+ set(ENV_COMMAND export) |
|
148 |
+ set(PATH_VAR ":$ENV{PATH}") |
|
149 |
+endif() |
|
150 |
+ |
|
151 |
+add_custom_command( |
|
152 |
+ OUTPUT "${BUILDDIR}/Makefile" |
|
153 |
+ COMMAND ${ENV_COMMAND} "PATH=${MSYS_BIN_DIR}${PATH_VAR}" |
|
154 |
+ VERBATIM |
|
155 |
+ WORKING_DIRECTORY "${BUILDDIR}" |
|
156 |
+) |
|
157 |
+ |
|
158 |
+if(NOT IOS) |
|
159 |
+ add_custom_command( |
|
160 |
+ OUTPUT "${BUILDDIR}/Makefile" |
|
161 |
+ COMMAND ${ENV_COMMAND} CC=${CMAKE_C_COMPILER} |
|
162 |
+ COMMAND ${ENV_COMMAND} AR=${CMAKE_AR} |
|
163 |
+ COMMAND ${ENV_COMMAND} LD=${CMAKE_LINKER} |
|
164 |
+ COMMAND ${ENV_COMMAND} RANLIB=${CMAKE_RANLIB} |
|
165 |
+ COMMAND ${ENV_COMMAND} MAKE=${MAKE} |
|
166 |
+ COMMAND ${ENV_COMMAND} MAKEDEPPROG=${CMAKE_C_COMPILER} |
|
167 |
+ VERBATIM |
|
168 |
+ APPEND |
|
169 |
+ ) |
|
170 |
+ |
|
171 |
+ if(EMSCRIPTEN) |
|
172 |
+ list(APPEND DISABLES |
|
173 |
+ threads |
|
174 |
+ no-engine |
|
175 |
+ no-dso |
|
176 |
+ no-asm |
|
177 |
+ no-shared |
|
178 |
+ no-sse2 |
|
179 |
+ no-srtp |
|
180 |
+ ) |
|
181 |
+ else() |
|
182 |
+ list(APPEND DISABLES |
|
183 |
+ enable-static-engine |
|
184 |
+ no-zlib |
|
185 |
+ no-ssl2 |
|
186 |
+ no-idea |
|
187 |
+ no-cast |
|
188 |
+ no-seed |
|
189 |
+ no-md2 |
|
190 |
+ no-tests) |
|
191 |
+ endif() |
|
192 |
+endif() |
|
193 |
+ |
|
194 |
+if(EMSCRIPTEN) |
|
195 |
+ add_custom_command( |
|
196 |
+ OUTPUT "${BUILDDIR}/Makefile" |
|
197 |
+ COMMAND "$ENV{EMSDK}/upstream/emscripten/emconfigure" ./config |
|
198 |
+ ${SHARED} |
|
199 |
+ ${DISABLES} |
|
200 |
+ "--prefix=${CMAKE_INSTALL_PREFIX}" |
|
201 |
+ "--openssldir=/etc/ssl" |
|
202 |
+ "--cross-compile-prefix=\"/\"" |
|
203 |
+ VERBATIM |
|
204 |
+ APPEND |
|
205 |
+ ) |
|
206 |
+ |
|
207 |
+ add_custom_target(build_libs ALL |
|
208 |
+ COMMAND ${ENV_COMMAND} "PATH=${MSYS_BIN_DIR}${PATH_VAR}" |
|
209 |
+ COMMAND "${CMAKE_COMMAND}" -E touch "${BUILDDIR}/krb5.h" |
|
210 |
+ COMMAND "${MAKE}" make build_libs |
|
211 |
+ VERBATIM |
|
212 |
+ WORKING_DIRECTORY "${BUILDDIR}" |
|
213 |
+ DEPENDS "${BUILDDIR}/Makefile" |
|
214 |
+ BYPRODUCTS ${INSTALL_LIBS} |
|
215 |
+ ) |
|
216 |
+else() |
|
217 |
+ add_custom_command( |
|
218 |
+ OUTPUT "${BUILDDIR}/Makefile" |
|
219 |
+ COMMAND "${PERL}" Configure |
|
220 |
+ ${SHARED} |
|
221 |
+ ${DISABLES} |
|
222 |
+ ${PLATFORM} |
|
223 |
+ "--prefix=${CMAKE_INSTALL_PREFIX}" |
|
224 |
+ "--openssldir=/etc/ssl" |
|
225 |
+ ${CFLAGS} |
|
226 |
+ VERBATIM |
|
227 |
+ APPEND |
|
228 |
+ ) |
|
229 |
+ |
|
230 |
+ add_custom_target(build_libs ALL |
|
231 |
+ COMMAND ${ENV_COMMAND} "PATH=${MSYS_BIN_DIR}${PATH_VAR}" |
|
232 |
+ COMMAND "${CMAKE_COMMAND}" -E touch "${BUILDDIR}/krb5.h" |
|
233 |
+ COMMAND "${MAKE}" -j ${VCPKG_CONCURRENCY} build_libs |
|
234 |
+ VERBATIM |
|
235 |
+ WORKING_DIRECTORY "${BUILDDIR}" |
|
236 |
+ DEPENDS "${BUILDDIR}/Makefile" |
|
237 |
+ BYPRODUCTS ${INSTALL_LIBS} |
|
238 |
+ ) |
|
239 |
+endif() |
|
240 |
+ |
|
241 |
+add_custom_command( |
|
242 |
+ OUTPUT "${BUILDDIR}/Makefile" |
|
243 |
+ COMMAND "${CMAKE_COMMAND}" "-DDIR=${BUILDDIR}" -P "${CMAKE_CURRENT_LIST_DIR}/remove-deps.cmake" |
|
244 |
+ VERBATIM |
|
245 |
+ APPEND |
|
246 |
+) |
|
247 |
+ |
|
248 |
+if((CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "iOS") AND BUILD_SHARED_LIBS) |
|
249 |
+ if(DEFINED CMAKE_INSTALL_NAME_DIR) |
|
250 |
+ set(ID_PREFIX "${CMAKE_INSTALL_NAME_DIR}") |
|
251 |
+ else() |
|
252 |
+ set(ID_PREFIX "@rpath") |
|
253 |
+ endif() |
|
254 |
+ |
|
255 |
+ add_custom_command( |
|
256 |
+ TARGET build_libs |
|
257 |
+ COMMAND /usr/bin/install_name_tool -id "${ID_PREFIX}/libssl.${SHLIB_VERSION}.dylib" |
|
258 |
+ "${BUILDDIR}/libssl.${SHLIB_VERSION}.dylib" |
|
259 |
+ COMMAND /usr/bin/install_name_tool -id "${ID_PREFIX}/libcrypto.${SHLIB_VERSION}.dylib" |
|
260 |
+ "${BUILDDIR}/libcrypto.1.1.dylib" |
|
261 |
+ COMMAND /usr/bin/install_name_tool -change "${CMAKE_INSTALL_PREFIX}/lib/libcrypto.${SHLIB_VERSION}.dylib" |
|
262 |
+ "${ID_PREFIX}/libcrypto.${SHLIB_VERSION}.dylib" |
|
263 |
+ "${BUILDDIR}/libssl.${SHLIB_VERSION}.dylib" |
|
264 |
+ VERBATIM |
|
265 |
+ ) |
|
266 |
+endif() |
|
267 |
+ |
|
268 |
+install( |
|
269 |
+ FILES ${INSTALL_LIBS} |
|
270 |
+ DESTINATION lib |
|
271 |
+) |
|
272 |
+install( |
|
273 |
+ FILES ${INSTALL_BINS} |
|
274 |
+ DESTINATION bin |
|
275 |
+) |
|
276 |
+install( |
|
277 |
+ FILES ${INSTALL_PKG_CONFIGS} |
|
278 |
+ DESTINATION lib/pkgconfig |
|
279 |
+) |
0 | 280 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,49 @@ |
0 |
+if (NOT VCPKG_TARGET_IS_MINGW) |
|
1 |
+ vcpkg_fail_port_install(MESSAGE "${PORT} is only for openssl on Unix-like systems" ON_TARGET "UWP" "Windows") |
|
2 |
+endif() |
|
3 |
+ |
|
4 |
+vcpkg_extract_source_archive_ex( |
|
5 |
+ OUT_SOURCE_PATH MASTER_COPY_SOURCE_PATH |
|
6 |
+ ARCHIVE "${ARCHIVE}" |
|
7 |
+ REF ${OPENSSL_VERSION} |
|
8 |
+) |
|
9 |
+ |
|
10 |
+if(CMAKE_HOST_WIN32) |
|
11 |
+ vcpkg_acquire_msys(MSYS_ROOT PACKAGES make perl) |
|
12 |
+ set(MAKE ${MSYS_ROOT}/usr/bin/make.exe) |
|
13 |
+ set(PERL ${MSYS_ROOT}/usr/bin/perl.exe) |
|
14 |
+else() |
|
15 |
+ find_program(MAKE make) |
|
16 |
+ if(NOT MAKE) |
|
17 |
+ message(FATAL_ERROR "Could not find make. Please install it through your package manager.") |
|
18 |
+ endif() |
|
19 |
+endif() |
|
20 |
+ |
|
21 |
+vcpkg_configure_cmake( |
|
22 |
+ SOURCE_PATH ${CMAKE_CURRENT_LIST_DIR} |
|
23 |
+ PREFER_NINJA |
|
24 |
+ OPTIONS |
|
25 |
+ -DSOURCE_PATH=${MASTER_COPY_SOURCE_PATH} |
|
26 |
+ -DPERL=${PERL} |
|
27 |
+ -DMAKE=${MAKE} |
|
28 |
+ -DVCPKG_CONCURRENCY=${VCPKG_CONCURRENCY} |
|
29 |
+ OPTIONS_RELEASE |
|
30 |
+ -DINSTALL_HEADERS=ON |
|
31 |
+) |
|
32 |
+ |
|
33 |
+vcpkg_install_cmake() |
|
34 |
+vcpkg_fixup_pkgconfig() |
|
35 |
+ |
|
36 |
+file(GLOB HEADERS ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*/include/openssl/*.h) |
|
37 |
+set(RESOLVED_HEADERS) |
|
38 |
+foreach(HEADER ${HEADERS}) |
|
39 |
+ get_filename_component(X "${HEADER}" REALPATH) |
|
40 |
+ list(APPEND RESOLVED_HEADERS "${X}") |
|
41 |
+endforeach() |
|
42 |
+ |
|
43 |
+file(INSTALL ${RESOLVED_HEADERS} DESTINATION ${CURRENT_PACKAGES_DIR}/include/openssl) |
|
44 |
+file(INSTALL ${MASTER_COPY_SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) |
|
45 |
+ |
|
46 |
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") |
|
47 |
+ file(COPY ${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/openssl) |
|
48 |
+endif() |
0 | 49 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,7 @@ |
0 |
+file(GLOB_RECURSE MAKEFILES ${DIR}/*/Makefile) |
|
1 |
+foreach(MAKEFILE ${MAKEFILES}) |
|
2 |
+ message("removing deps from ${MAKEFILE}") |
|
3 |
+ file(READ "${MAKEFILE}" _contents) |
|
4 |
+ string(REGEX REPLACE "\n# DO NOT DELETE THIS LINE.*" "" _contents "${_contents}") |
|
5 |
+ file(WRITE "${MAKEFILE}" "${_contents}") |
|
6 |
+endforeach() |
0 | 7 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,18 @@ |
0 |
+_find_package(${ARGS}) |
|
1 |
+if(OPENSSL_FOUND) |
|
2 |
+ find_library(OPENSSL_DL_LIBRARY NAMES dl) |
|
3 |
+ if(OPENSSL_DL_LIBRARY) |
|
4 |
+ list(APPEND OPENSSL_LIBRARIES "dl") |
|
5 |
+ if(TARGET OpenSSL::Crypto) |
|
6 |
+ set_property(TARGET OpenSSL::Crypto APPEND PROPERTY INTERFACE_LINK_LIBRARIES "dl") |
|
7 |
+ endif() |
|
8 |
+ endif() |
|
9 |
+ find_package(Threads REQUIRED) |
|
10 |
+ list(APPEND OPENSSL_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) |
|
11 |
+ if(TARGET OpenSSL::Crypto) |
|
12 |
+ set_property(TARGET OpenSSL::Crypto APPEND PROPERTY INTERFACE_LINK_LIBRARIES "Threads::Threads") |
|
13 |
+ endif() |
|
14 |
+ if(TARGET OpenSSL::SSL) |
|
15 |
+ set_property(TARGET OpenSSL::SSL APPEND PROPERTY INTERFACE_LINK_LIBRARIES "Threads::Threads") |
|
16 |
+ endif() |
|
17 |
+endif() |
0 | 4 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,170 @@ |
0 |
+diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf |
|
1 |
+index 3c4299d264..99fcb1f713 100644 |
|
2 |
+--- a/Configurations/10-main.conf |
|
3 |
+@@ -1287,7 +1287,7 @@ my %targets = ( |
|
4 |
+ }, |
|
5 |
+ "VC-WIN64I" => { |
|
6 |
+ inherit_from => [ "VC-WIN64-common", asm("ia64_asm"), |
|
7 |
+- sub { $disabled{shared} ? () : "ia64_uplink" } ], |
|
8 |
++ sub { $disabled{uplink} ? () : "ia64_uplink" } ], |
|
9 |
+ AS => "ias", |
|
10 |
+ ASFLAGS => "-d debug", |
|
11 |
+ asoutflag => "-o ", |
|
12 |
+@@ -1299,7 +1299,7 @@ my %targets = ( |
|
13 |
+ }, |
|
14 |
+ "VC-WIN64A" => { |
|
15 |
+ inherit_from => [ "VC-WIN64-common", asm("x86_64_asm"), |
|
16 |
+- sub { $disabled{shared} ? () : "x86_64_uplink" } ], |
|
17 |
++ sub { $disabled{uplink} ? () : "x86_64_uplink" } ], |
|
18 |
+ AS => sub { vc_win64a_info()->{AS} }, |
|
19 |
+ ASFLAGS => sub { vc_win64a_info()->{ASFLAGS} }, |
|
20 |
+ asoutflag => sub { vc_win64a_info()->{asoutflag} }, |
|
21 |
+@@ -1312,7 +1312,7 @@ my %targets = ( |
|
22 |
+ }, |
|
23 |
+ "VC-WIN32" => { |
|
24 |
+ inherit_from => [ "VC-noCE-common", asm("x86_asm"), |
|
25 |
+- sub { $disabled{shared} ? () : "uplink_common" } ], |
|
26 |
++ sub { $disabled{uplink} ? () : "uplink_common" } ], |
|
27 |
+ AS => sub { vc_win32_info()->{AS} }, |
|
28 |
+ ASFLAGS => sub { vc_win32_info()->{ASFLAGS} }, |
|
29 |
+ asoutflag => sub { vc_win32_info()->{asoutflag} }, |
|
30 |
+@@ -1374,7 +1374,7 @@ my %targets = ( |
|
31 |
+ #### MinGW |
|
32 |
+ "mingw" => { |
|
33 |
+ inherit_from => [ "BASE_unix", asm("x86_asm"), |
|
34 |
+- sub { $disabled{shared} ? () : "x86_uplink" } ], |
|
35 |
++ sub { $disabled{uplink} ? () : "x86_uplink" } ], |
|
36 |
+ CC => "gcc", |
|
37 |
+ CFLAGS => picker(default => "-Wall", |
|
38 |
+ debug => "-g -O0", |
|
39 |
+diff --git a/Configurations/50-win-onecore.conf b/Configurations/50-win-onecore.conf |
|
40 |
+index d478f42b0f..e0fb70daca 100644 |
|
41 |
+--- a/Configurations/50-win-onecore.conf |
|
42 |
+@@ -1,3 +1,4 @@ |
|
43 |
++## -*- mode: perl; -*- |
|
44 |
+ # Windows OneCore targets. |
|
45 |
+ # |
|
46 |
+ # OneCore is new API stability "contract" that transcends Desktop, IoT and |
|
47 |
+@@ -10,6 +11,25 @@ |
|
48 |
+ # TODO: extend error handling to use ETW based eventing |
|
49 |
+ # (Or rework whole error messaging) |
|
50 |
+ |
|
51 |
++my $UWP_info = {}; |
|
52 |
++sub UWP_info { |
|
53 |
++ unless (%$UWP_info) { |
|
54 |
++ my $SDKver = `pwsh.exe -Command \"& {\$(Get-Item \\\"hklm:\\SOFTWARE\\WOW6432Node\\Microsoft\\Microsoft SDKs\\Windows\\\").GetValue(\\\"CurrentVersion\\\")}\"`; |
|
55 |
++ $SDKver =~ s|\R$||; |
|
56 |
++ my @SDKver_split = split(/\./, $SDKver); |
|
57 |
++ # SDK version older than 10.0.17763 don't support our ASM builds |
|
58 |
++ if ($SDKver_split[0] < 10 |
|
59 |
++ || ($SDKver_split[0] == 10 |
|
60 |
++ && $SDKver_split[1] == 0 |
|
61 |
++ && $SDKver_split[2] < 17763)) { |
|
62 |
++ $UWP_info->{disable} = [ 'asm' ]; |
|
63 |
++ } else { |
|
64 |
++ $UWP_info->{disable} = [ ]; |
|
65 |
++ } |
|
66 |
++ } |
|
67 |
++ return $UWP_info; |
|
68 |
++} |
|
69 |
++ |
|
70 |
+ my %targets = ( |
|
71 |
+ "VC-WIN32-ONECORE" => { |
|
72 |
+ inherit_from => [ "VC-WIN32" ], |
|
73 |
+@@ -61,4 +81,57 @@ my %targets = ( |
|
74 |
+ ex_libs => "onecore.lib", |
|
75 |
+ multilib => "-arm64", |
|
76 |
+ }, |
|
77 |
++ |
|
78 |
++ # Universal Windows Platform (UWP) App Support |
|
79 |
++ |
|
80 |
++ # TODO |
|
81 |
++ # |
|
82 |
++ # The 'disable' attribute should have 'uplink'. |
|
83 |
++ # however, these are checked in some 'inherit_from', which is processed |
|
84 |
++ # very early, before the 'disable' attributes are seen. |
|
85 |
++ # This is a problem that needs to be resolved in Configure first. |
|
86 |
++ # |
|
87 |
++ # But if you want to build library with Windows 10 Version 1809 SDK or |
|
88 |
++ # earlier, the 'disable' attribute should also have 'asm'. |
|
89 |
++ |
|
90 |
++ "VC-WIN32-UWP" => { |
|
91 |
++ inherit_from => [ "VC-WIN32-ONECORE" ], |
|
92 |
++ lflags => add("/APPCONTAINER"), |
|
93 |
++ defines => add("WINAPI_FAMILY=WINAPI_FAMILY_APP", |
|
94 |
++ "_WIN32_WINNT=0x0A00"), |
|
95 |
++ dso_scheme => "", |
|
96 |
++ disable => sub { [ 'ui-console', 'stdio', 'async', 'uplink', |
|
97 |
++ @{ UWP_info()->{disable} } ] }, |
|
98 |
++ ex_libs => "WindowsApp.lib", |
|
99 |
++ }, |
|
100 |
++ "VC-WIN64A-UWP" => { |
|
101 |
++ inherit_from => [ "VC-WIN64A-ONECORE" ], |
|
102 |
++ lflags => add("/APPCONTAINER"), |
|
103 |
++ defines => add("WINAPI_FAMILY=WINAPI_FAMILY_APP", |
|
104 |
++ "_WIN32_WINNT=0x0A00"), |
|
105 |
++ dso_scheme => "", |
|
106 |
++ disable => sub { [ 'ui-console', 'stdio', 'async', 'uplink', |
|
107 |
++ @{ UWP_info()->{disable} } ] }, |
|
108 |
++ ex_libs => "WindowsApp.lib", |
|
109 |
++ }, |
|
110 |
++ "VC-WIN32-ARM-UWP" => { |
|
111 |
++ inherit_from => [ "VC-WIN32-ARM" ], |
|
112 |
++ lflags => add("/APPCONTAINER"), |
|
113 |
++ defines => add("WINAPI_FAMILY=WINAPI_FAMILY_APP", |
|
114 |
++ "_WIN32_WINNT=0x0A00"), |
|
115 |
++ dso_scheme => "", |
|
116 |
++ disable => sub { [ 'ui-console', 'stdio', 'async', 'uplink', |
|
117 |
++ @{ UWP_info()->{disable} } ] }, |
|
118 |
++ ex_libs => "WindowsApp.lib", |
|
119 |
++ }, |
|
120 |
++ "VC-WIN64-ARM-UWP" => { |
|
121 |
++ inherit_from => [ "VC-WIN64-ARM" ], |
|
122 |
++ lflags => add("/APPCONTAINER"), |
|
123 |
++ defines => add("WINAPI_FAMILY=WINAPI_FAMILY_APP", |
|
124 |
++ "_WIN32_WINNT=0x0A00"), |
|
125 |
++ dso_scheme => "", |
|
126 |
++ disable => sub { [ 'ui-console', 'stdio', 'async', 'uplink', |
|
127 |
++ @{ UWP_info()->{disable} } ] }, |
|
128 |
++ ex_libs => "WindowsApp.lib", |
|
129 |
++ }, |
|
130 |
+ ); |
|
131 |
+diff --git a/Configure b/Configure |
|
132 |
+index 5a699836f3..de45f1e299 100755 |
|
133 |
+--- a/Configure |
|
134 |
+@@ -407,6 +408,7 @@ my @disablables = ( |
|
135 |
+ "ubsan", |
|
136 |
+ "ui-console", |
|
137 |
+ "unit-test", |
|
138 |
++ "uplink", |
|
139 |
+ "whirlpool", |
|
140 |
+ "weak-ssl-ciphers", |
|
141 |
+ "zlib", |
|
142 |
+@@ -491,8 +493,8 @@ my @disable_cascades = ( |
|
143 |
+ |
|
144 |
+ # Without position independent code, there can be no shared libraries or DSOs |
|
145 |
+ "pic" => [ "shared" ], |
|
146 |
+- "shared" => [ "dynamic-engine" ], |
|
147 |
++ "shared" => [ "dynamic-engine", "uplink" ], |
|
148 |
+ "dso" => [ "dynamic-engine" ], |
|
149 |
+ "engine" => [ "afalgeng", "devcryptoeng" ], |
|
150 |
+ |
|
151 |
+ # no-autoalginit is only useful when building non-shared |
|
152 |
+diff --git a/INSTALL b/INSTALL |
|
153 |
+index 2119cbae9e..ee54e8c215 100644 |
|
154 |
+--- a/INSTALL |
|
155 |
+@@ -560,6 +560,10 @@ |
|
156 |
+ likely to complement configuration command line with |
|
157 |
+ suitable compiler-specific option. |
|
158 |
+ |
|
159 |
++ no-uplink |
|
160 |
++ Don't build support for UPLINK interface. |
|
161 |
++ |
|
162 |
++ |
|
163 |
+ no-<prot> |
|
164 |
+ Don't build support for negotiating the specified SSL/TLS |
|
165 |
+ protocol (one of ssl, ssl3, tls, tls1, tls1_1, tls1_2, |
0 | 166 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,16 @@ |
0 |
+set build=%1 |
|
1 |
+ |
|
2 |
+perl Configure no-asm no-hw no-dso VC-WINUNIVERSAL -FS -FIWindows.h |
|
3 |
+ |
|
4 |
+for /D %%f in ("%WindowsSdkDir%References\%WindowsSDKLibVersion%Windows.Foundation.FoundationContract\*") do set LibPath=%LibPath%;%%f\ |
|
5 |
+for /D %%f in ("%WindowsSdkDir%References\%WindowsSDKLibVersion%Windows.Foundation.UniversalApiContract\*") do set LibPath=%LibPath%;%%f\ |
|
6 |
+for /D %%f in ("%WindowsSdkDir%References\Windows.Foundation.FoundationContract\*") do set LibPath=%LibPath%;%%f\ |
|
7 |
+for /D %%f in ("%WindowsSdkDir%References\Windows.Foundation.UniversalApiContract\*") do set LibPath=%LibPath%;%%f\ |
|
8 |
+ |
|
9 |
+call ms\do_winuniversal.bat |
|
10 |
+ |
|
11 |
+mkdir inc32\openssl |
|
12 |
+ |
|
13 |
+jom -j %NUMBER_OF_PROCESSORS% -k -f ms\ntdll.mak |
|
14 |
+REM due to a race condition in the build, we need to have a second single-threaded pass. |
|
15 |
+nmake -f ms\ntdll.mak |
0 | 16 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,156 @@ |
0 |
+vcpkg_fail_port_install(MESSAGE "${PORT} is only for Windows Universal Platform" ON_TARGET "Linux" "OSX") |
|
1 |
+ |
|
2 |
+vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY) |
|
3 |
+ |
|
4 |
+vcpkg_find_acquire_program(JOM) |
|
5 |
+get_filename_component(JOM_EXE_PATH ${JOM} DIRECTORY) |
|
6 |
+vcpkg_add_to_path("${PERL_EXE_PATH}") |
|
7 |
+ |
|
8 |
+vcpkg_extract_source_archive_ex( |
|
9 |
+ OUT_SOURCE_PATH SOURCE_PATH |
|
10 |
+ ARCHIVE ${ARCHIVE} |
|
11 |
+ PATCHES |
|
12 |
+ uwp/EnableUWPSupport.patch |
|
13 |
+) |
|
14 |
+ |
|
15 |
+vcpkg_find_acquire_program(NASM) |
|
16 |
+get_filename_component(NASM_EXE_PATH ${NASM} DIRECTORY) |
|
17 |
+vcpkg_add_to_path(PREPEND "${NASM_EXE_PATH}") |
|
18 |
+ |
|
19 |
+set(CONFIGURE_COMMAND ${PERL} Configure |
|
20 |
+ enable-static-engine |
|
21 |
+ enable-capieng |
|
22 |
+ no-unit-test |
|
23 |
+ no-ssl2 |
|
24 |
+ no-asm |
|
25 |
+ no-uplink |
|
26 |
+ no-tests |
|
27 |
+ -utf-8 |
|
28 |
+ shared |
|
29 |
+) |
|
30 |
+ |
|
31 |
+if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86") |
|
32 |
+ set(OPENSSL_ARCH VC-WIN32-UWP) |
|
33 |
+elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") |
|
34 |
+ set(OPENSSL_ARCH VC-WIN64A-UWP) |
|
35 |
+elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm") |
|
36 |
+ set(OPENSSL_ARCH VC-WIN32-ARM-UWP) |
|
37 |
+elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64") |
|
38 |
+ set(OPENSSL_ARCH VC-WIN64-ARM-UWP) |
|
39 |
+else() |
|
40 |
+ message(FATAL_ERROR "Unsupported target architecture: ${VCPKG_TARGET_ARCHITECTURE}") |
|
41 |
+endif() |
|
42 |
+ |
|
43 |
+set(OPENSSL_MAKEFILE "makefile") |
|
44 |
+ |
|
45 |
+file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg) |
|
46 |
+ |
|
47 |
+ |
|
48 |
+if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") |
|
49 |
+ |
|
50 |
+ # Copy openssl sources. |
|
51 |
+ message(STATUS "Copying openssl release source files...") |
|
52 |
+ file(GLOB OPENSSL_SOURCE_FILES "${SOURCE_PATH}/*") |
|
53 |
+ foreach(SOURCE_FILE ${OPENSSL_SOURCE_FILES}) |
|
54 |
+ file(COPY ${SOURCE_FILE} DESTINATION "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel") |
|
55 |
+ endforeach() |
|
56 |
+ message(STATUS "Copying openssl release source files... done") |
|
57 |
+ set(SOURCE_PATH_RELEASE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel") |
|
58 |
+ |
|
59 |
+ set(OPENSSLDIR_RELEASE "${CURRENT_PACKAGES_DIR}") |
|
60 |
+ |
|
61 |
+ message(STATUS "Configure ${TARGET_TRIPLET}-rel") |
|
62 |
+ vcpkg_execute_required_process( |
|
63 |
+ COMMAND ${CONFIGURE_COMMAND} ${OPENSSL_ARCH} "--prefix=${OPENSSLDIR_RELEASE}" "--openssldir=${OPENSSLDIR_RELEASE}" -FS |
|
64 |
+ WORKING_DIRECTORY "${SOURCE_PATH_RELEASE}" |
|
65 |
+ LOGNAME configure-perl-${TARGET_TRIPLET}-${VCPKG_BUILD_TYPE}-rel |
|
66 |
+ ) |
|
67 |
+ message(STATUS "Configure ${TARGET_TRIPLET}-rel done") |
|
68 |
+ |
|
69 |
+ message(STATUS "Build ${TARGET_TRIPLET}-rel") |
|
70 |
+ # Openssl's buildsystem has a race condition which will cause JOM to fail at some point. |
|
71 |
+ # This is ok; we just do as much work as we can in parallel first, then follow up with a single-threaded build. |
|
72 |
+ make_directory(${SOURCE_PATH_RELEASE}/inc32/openssl) |
|
73 |
+ execute_process( |
|
74 |
+ COMMAND "${JOM}" -k -j ${VCPKG_CONCURRENCY} -f "${OPENSSL_MAKEFILE}" build_libs |
|
75 |
+ WORKING_DIRECTORY "${SOURCE_PATH_RELEASE}" |
|
76 |
+ OUTPUT_FILE "${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-rel-0-out.log" |
|
77 |
+ ERROR_FILE "${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-rel-0-err.log" |
|
78 |
+ ) |
|
79 |
+ vcpkg_execute_required_process( |
|
80 |
+ COMMAND nmake -f "${OPENSSL_MAKEFILE}" install_dev |
|
81 |
+ WORKING_DIRECTORY "${SOURCE_PATH_RELEASE}" |
|
82 |
+ LOGNAME build-${TARGET_TRIPLET}-rel-1) |
|
83 |
+ |
|
84 |
+ message(STATUS "Build ${TARGET_TRIPLET}-rel done") |
|
85 |
+endif() |
|
86 |
+ |
|
87 |
+ |
|
88 |
+if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") |
|
89 |
+ # Copy openssl sources. |
|
90 |
+ message(STATUS "Copying openssl debug source files...") |
|
91 |
+ file(GLOB OPENSSL_SOURCE_FILES ${SOURCE_PATH}/*) |
|
92 |
+ foreach(SOURCE_FILE ${OPENSSL_SOURCE_FILES}) |
|
93 |
+ file(COPY "${SOURCE_FILE}" DESTINATION "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") |
|
94 |
+ endforeach() |
|
95 |
+ message(STATUS "Copying openssl debug source files... done") |
|
96 |
+ set(SOURCE_PATH_DEBUG "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") |
|
97 |
+ |
|
98 |
+ set(OPENSSLDIR_DEBUG "${CURRENT_PACKAGES_DIR}/debug") |
|
99 |
+ |
|
100 |
+ message(STATUS "Configure ${TARGET_TRIPLET}-dbg") |
|
101 |
+ vcpkg_execute_required_process( |
|
102 |
+ COMMAND ${CONFIGURE_COMMAND} debug-${OPENSSL_ARCH} "--prefix=${OPENSSLDIR_DEBUG}" "--openssldir=${OPENSSLDIR_DEBUG}" -FS |
|
103 |
+ WORKING_DIRECTORY "${SOURCE_PATH_DEBUG}" |
|
104 |
+ LOGNAME configure-perl-${TARGET_TRIPLET}-${VCPKG_BUILD_TYPE}-dbg |
|
105 |
+ ) |
|
106 |
+ message(STATUS "Configure ${TARGET_TRIPLET}-dbg done") |
|
107 |
+ |
|
108 |
+ message(STATUS "Build ${TARGET_TRIPLET}-dbg") |
|
109 |
+ make_directory("${SOURCE_PATH_DEBUG}/inc32/openssl") |
|
110 |
+ execute_process( |
|
111 |
+ COMMAND "${JOM}" -k -j ${VCPKG_CONCURRENCY} -f "${OPENSSL_MAKEFILE}" build_libs |
|
112 |
+ WORKING_DIRECTORY "${SOURCE_PATH_DEBUG}" |
|
113 |
+ OUTPUT_FILE "${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-dbg-0-out.log" |
|
114 |
+ ERROR_FILE "${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-dbg-0-err.log" |
|
115 |
+ ) |
|
116 |
+ vcpkg_execute_required_process( |
|
117 |
+ COMMAND nmake -f "${OPENSSL_MAKEFILE}" install_dev |
|
118 |
+ WORKING_DIRECTORY "${SOURCE_PATH_DEBUG}" |
|
119 |
+ LOGNAME build-${TARGET_TRIPLET}-dbg-1) |
|
120 |
+ |
|
121 |
+ message(STATUS "Build ${TARGET_TRIPLET}-dbg done") |
|
122 |
+endif() |
|
123 |
+ |
|
124 |
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/certs") |
|
125 |
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/private") |
|
126 |
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/lib/engines-1_1") |
|
127 |
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/certs") |
|
128 |
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/lib/engines-1_1") |
|
129 |
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/private") |
|
130 |
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") |
|
131 |
+ |
|
132 |
+file(REMOVE |
|
133 |
+ "${CURRENT_PACKAGES_DIR}/bin/openssl.exe" |
|
134 |
+ "${CURRENT_PACKAGES_DIR}/debug/bin/openssl.exe" |
|
135 |
+ "${CURRENT_PACKAGES_DIR}/debug/openssl.cnf" |
|
136 |
+ "${CURRENT_PACKAGES_DIR}/openssl.cnf" |
|
137 |
+ "${CURRENT_PACKAGES_DIR}/ct_log_list.cnf" |
|
138 |
+ "${CURRENT_PACKAGES_DIR}/ct_log_list.cnf.dist" |
|
139 |
+ "${CURRENT_PACKAGES_DIR}/openssl.cnf.dist" |
|
140 |
+ "${CURRENT_PACKAGES_DIR}/debug/ct_log_list.cnf" |
|
141 |
+ "${CURRENT_PACKAGES_DIR}/debug/ct_log_list.cnf.dist" |
|
142 |
+ "${CURRENT_PACKAGES_DIR}/debug/openssl.cnf.dist" |
|
143 |
+) |
|
144 |
+ |
|
145 |
+file(READ "${CURRENT_PACKAGES_DIR}/include/openssl/dtls1.h" _contents) |
|
146 |
+string(REPLACE "<winsock.h>" "<winsock2.h>" _contents "${_contents}") |
|
147 |
+file(WRITE "${CURRENT_PACKAGES_DIR}/include/openssl/dtls1.h" "${_contents}") |
|
148 |
+ |
|
149 |
+file(READ "${CURRENT_PACKAGES_DIR}/include/openssl/rand.h" _contents) |
|
150 |
+string(REPLACE "# include <windows.h>" "#ifndef _WINSOCKAPI_\n#define _WINSOCKAPI_\n#endif\n# include <windows.h>" _contents "${_contents}") |
|
151 |
+file(WRITE "${CURRENT_PACKAGES_DIR}/include/openssl/rand.h" "${_contents}") |
|
152 |
+ |
|
153 |
+vcpkg_copy_pdbs() |
|
154 |
+ |
|
155 |
+file(INSTALL "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright) |
0 | 156 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,7 @@ |
0 |
+{ |
|
1 |
+ "name": "openssl", |
|
2 |
+ "version-string": "1.1.1k", |
|
3 |
+ "port-version": 4, |
|
4 |
+ "description": "OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library.", |
|
5 |
+ "homepage": "https://www.openssl.org" |
|
6 |
+} |
0 | 7 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,174 @@ |
0 |
+vcpkg_fail_port_install(MESSAGE "${PORT} is only for Windows Desktop" ON_TARGET "UWP" "Linux" "OSX") |
|
1 |
+ |
|
2 |
+vcpkg_extract_source_archive_ex( |
|
3 |
+ OUT_SOURCE_PATH SOURCE_PATH |
|
4 |
+ ARCHIVE ${ARCHIVE} |
|
5 |
+) |
|
6 |
+ |
|
7 |
+vcpkg_find_acquire_program(NASM) |
|
8 |
+get_filename_component(NASM_EXE_PATH "${NASM}" DIRECTORY) |
|
9 |
+vcpkg_add_to_path(PREPEND "${NASM_EXE_PATH}") |
|
10 |
+ |
|
11 |
+vcpkg_find_acquire_program(JOM) |
|
12 |
+ |
|
13 |
+set(OPENSSL_SHARED no-shared) |
|
14 |
+if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic) |
|
15 |
+ set(OPENSSL_SHARED shared) |
|
16 |
+endif() |
|
17 |
+ |
|
18 |
+set(CONFIGURE_OPTIONS |
|
19 |
+ enable-static-engine |
|
20 |
+ enable-capieng |
|
21 |
+ no-ssl2 |
|
22 |
+ no-tests |
|
23 |
+ no-autoload-config |
|
24 |
+ -utf-8 |
|
25 |
+ ${OPENSSL_SHARED} |
|
26 |
+) |
|
27 |
+ |
|
28 |
+if(DEFINED OPENSSL_USE_NOPINSHARED) |
|
29 |
+ set(CONFIGURE_OPTIONS ${CONFIGURE_OPTIONS} no-pinshared) |
|
30 |
+endif() |
|
31 |
+ |
|
32 |
+set(CONFIGURE_COMMAND "${PERL}" Configure ${CONFIGURE_OPTIONS}) |
|
33 |
+ |
|
34 |
+if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86") |
|
35 |
+ set(OPENSSL_ARCH VC-WIN32) |
|
36 |
+elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") |
|
37 |
+ set(OPENSSL_ARCH VC-WIN64A) |
|
38 |
+elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm") |
|
39 |
+ set(OPENSSL_ARCH VC-WIN32-ARM) |
|
40 |
+elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64") |
|
41 |
+ set(OPENSSL_ARCH VC-WIN64-ARM) |
|
42 |
+else() |
|
43 |
+ message(FATAL_ERROR "Unsupported target architecture: ${VCPKG_TARGET_ARCHITECTURE}") |
|
44 |
+endif() |
|
45 |
+ |
|
46 |
+set(OPENSSL_MAKEFILE "makefile") |
|
47 |
+ |
|
48 |
+file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel" |
|
49 |
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") |
|
50 |
+ |
|
51 |
+if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") |
|
52 |
+ |
|
53 |
+ # Copy openssl sources. |
|
54 |
+ message(STATUS "Copying openssl release source files...") |
|
55 |
+ file(GLOB OPENSSL_SOURCE_FILES ${SOURCE_PATH}/*) |
|
56 |
+ foreach(SOURCE_FILE ${OPENSSL_SOURCE_FILES}) |
|
57 |
+ file(COPY ${SOURCE_FILE} DESTINATION "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel") |
|
58 |
+ endforeach() |
|
59 |
+ message(STATUS "Copying openssl release source files... done") |
|
60 |
+ set(SOURCE_PATH_RELEASE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel") |
|
61 |
+ |
|
62 |
+ set(OPENSSLDIR_RELEASE ${CURRENT_PACKAGES_DIR}) |
|
63 |
+ |
|
64 |
+ message(STATUS "Configure ${TARGET_TRIPLET}-rel") |
|
65 |
+ vcpkg_execute_required_process( |
|
66 |
+ COMMAND ${CONFIGURE_COMMAND} ${OPENSSL_ARCH} "--prefix=${OPENSSLDIR_RELEASE}" "--openssldir=${OPENSSLDIR_RELEASE}" -FS |
|
67 |
+ WORKING_DIRECTORY ${SOURCE_PATH_RELEASE} |
|
68 |
+ LOGNAME configure-perl-${TARGET_TRIPLET}-rel |
|
69 |
+ ) |
|
70 |
+ message(STATUS "Configure ${TARGET_TRIPLET}-rel done") |
|
71 |
+ |
|
72 |
+ message(STATUS "Build ${TARGET_TRIPLET}-rel") |
|
73 |
+ # Openssl's buildsystem has a race condition which will cause JOM to fail at some point. |
|
74 |
+ # This is ok; we just do as much work as we can in parallel first, then follow up with a single-threaded build. |
|
75 |
+ make_directory(${SOURCE_PATH_RELEASE}/inc32/openssl) |
|
76 |
+ execute_process( |
|
77 |
+ COMMAND ${JOM} -k -j $ENV{NUMBER_OF_PROCESSORS} -f ${OPENSSL_MAKEFILE} |
|
78 |
+ WORKING_DIRECTORY ${SOURCE_PATH_RELEASE} |
|
79 |
+ OUTPUT_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-rel-0-out.log |
|
80 |
+ ERROR_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-rel-0-err.log |
|
81 |
+ ) |
|
82 |
+ vcpkg_execute_required_process( |
|
83 |
+ COMMAND nmake -f ${OPENSSL_MAKEFILE} install_sw install_ssldirs |
|
84 |
+ WORKING_DIRECTORY ${SOURCE_PATH_RELEASE} |
|
85 |
+ LOGNAME build-${TARGET_TRIPLET}-rel-1) |
|
86 |
+ |
|
87 |
+ message(STATUS "Build ${TARGET_TRIPLET}-rel done") |
|
88 |
+endif() |
|
89 |
+ |
|
90 |
+ |
|
91 |
+if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") |
|
92 |
+ # Copy openssl sources. |
|
93 |
+ message(STATUS "Copying openssl debug source files...") |
|
94 |
+ file(GLOB OPENSSL_SOURCE_FILES ${SOURCE_PATH}/*) |
|
95 |
+ foreach(SOURCE_FILE ${OPENSSL_SOURCE_FILES}) |
|
96 |
+ file(COPY ${SOURCE_FILE} DESTINATION "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") |
|
97 |
+ endforeach() |
|
98 |
+ message(STATUS "Copying openssl debug source files... done") |
|
99 |
+ set(SOURCE_PATH_DEBUG "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") |
|
100 |
+ |
|
101 |
+ set(OPENSSLDIR_DEBUG ${CURRENT_PACKAGES_DIR}/debug) |
|
102 |
+ |
|
103 |
+ message(STATUS "Configure ${TARGET_TRIPLET}-dbg") |
|
104 |
+ vcpkg_execute_required_process( |
|
105 |
+ COMMAND ${CONFIGURE_COMMAND} debug-${OPENSSL_ARCH} "--prefix=${OPENSSLDIR_DEBUG}" "--openssldir=${OPENSSLDIR_DEBUG}" -FS |
|
106 |
+ WORKING_DIRECTORY ${SOURCE_PATH_DEBUG} |
|
107 |
+ LOGNAME configure-perl-${TARGET_TRIPLET}-dbg |
|
108 |
+ ) |
|
109 |
+ message(STATUS "Configure ${TARGET_TRIPLET}-dbg done") |
|
110 |
+ |
|
111 |
+ message(STATUS "Build ${TARGET_TRIPLET}-dbg") |
|
112 |
+ make_directory(${SOURCE_PATH_DEBUG}/inc32/openssl) |
|
113 |
+ execute_process( |
|
114 |
+ COMMAND "${JOM}" -k -j ${VCPKG_CONCURRENCY} -f "${OPENSSL_MAKEFILE}" |
|
115 |
+ WORKING_DIRECTORY ${SOURCE_PATH_DEBUG} |
|
116 |
+ OUTPUT_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-dbg-0-out.log |
|
117 |
+ ERROR_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-dbg-0-err.log |
|
118 |
+ ) |
|
119 |
+ vcpkg_execute_required_process( |
|
120 |
+ COMMAND nmake -f "${OPENSSL_MAKEFILE}" install_sw install_ssldirs |
|
121 |
+ WORKING_DIRECTORY ${SOURCE_PATH_DEBUG} |
|
122 |
+ LOGNAME build-${TARGET_TRIPLET}-dbg-1) |
|
123 |
+ |
|
124 |
+ message(STATUS "Build ${TARGET_TRIPLET}-dbg done") |
|
125 |
+endif() |
|
126 |
+ |
|
127 |
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/certs") |
|
128 |
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/private") |
|
129 |
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/lib/engines-1_1") |
|
130 |
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/certs") |
|
131 |
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/lib/engines-1_1") |
|
132 |
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/private") |
|
133 |
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") |
|
134 |
+ |
|
135 |
+file(REMOVE |
|
136 |
+ "${CURRENT_PACKAGES_DIR}/ct_log_list.cnf" |
|
137 |
+ "${CURRENT_PACKAGES_DIR}/ct_log_list.cnf.dist" |
|
138 |
+ "${CURRENT_PACKAGES_DIR}/openssl.cnf.dist" |
|
139 |
+ "${CURRENT_PACKAGES_DIR}/debug/bin/openssl.exe" |
|
140 |
+ "${CURRENT_PACKAGES_DIR}/debug/ct_log_list.cnf" |
|
141 |
+ "${CURRENT_PACKAGES_DIR}/debug/ct_log_list.cnf.dist" |
|
142 |
+ "${CURRENT_PACKAGES_DIR}/debug/openssl.cnf" |
|
143 |
+ "${CURRENT_PACKAGES_DIR}/debug/openssl.cnf.dist" |
|
144 |
+) |
|
145 |
+ |
|
146 |
+file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/openssl/") |
|
147 |
+file(RENAME "${CURRENT_PACKAGES_DIR}/bin/openssl.exe" "${CURRENT_PACKAGES_DIR}/tools/openssl/openssl.exe") |
|
148 |
+file(RENAME "${CURRENT_PACKAGES_DIR}/openssl.cnf" "${CURRENT_PACKAGES_DIR}/tools/openssl/openssl.cnf") |
|
149 |
+ |
|
150 |
+vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/openssl") |
|
151 |
+ |
|
152 |
+if(VCPKG_LIBRARY_LINKAGE STREQUAL static) |
|
153 |
+ # They should be empty, only the exes deleted above were in these directories |
|
154 |
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/bin/") |
|
155 |
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin/") |
|
156 |
+endif() |
|
157 |
+ |
|
158 |
+vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/openssl/dtls1.h" |
|
159 |
+ "<winsock.h>" |
|
160 |
+ "<winsock2.h>" |
|
161 |
+) |
|
162 |
+ |
|
163 |
+vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/openssl/rand.h" |
|
164 |
+ "# include <windows.h>" |
|
165 |
+ "#ifndef _WINSOCKAPI_\n#define _WINSOCKAPI_\n#endif\n# include <windows.h>" |
|
166 |
+) |
|
167 |
+ |
|
168 |
+vcpkg_copy_pdbs() |
|
169 |
+ |
|
170 |
+file(INSTALL "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright) |
|
171 |
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") |
|
172 |
+ file(COPY "${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/openssl") |
|
173 |
+endif() |
0 | 174 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,10 @@ |
0 |
+_find_package(${ARGS}) |
|
1 |
+if(OPENSSL_FOUND) |
|
2 |
+ list(APPEND OPENSSL_LIBRARIES Crypt32.lib ws2_32.lib) |
|
3 |
+ if(TARGET OpenSSL::Crypto) |
|
4 |
+ set_property(TARGET OpenSSL::Crypto APPEND PROPERTY INTERFACE_LINK_LIBRARIES "Crypt32.lib;ws2_32.lib") |
|
5 |
+ endif() |
|
6 |
+ if(TARGET OpenSSL::SSL) |
|
7 |
+ set_property(TARGET OpenSSL::SSL APPEND PROPERTY INTERFACE_LINK_LIBRARIES "Crypt32.lib;ws2_32.lib") |
|
8 |
+ endif() |
|
9 |
+endif() |