From b4422a1b7ec3c0728108972c07f4daeaa2c9b2a8 Mon Sep 17 00:00:00 2001 From: Robert Schumacher Date: Tue, 17 Jul 2018 16:07:52 -0700 Subject: [PATCH] [openssl] Split openssl into multiple ports per platform --- .../{openssl => openssl-unix}/CMakeLists.txt | 2 + ports/openssl-unix/CONTROL | 3 + .../ConfigureIncludeQuotesFix.patch | 0 .../EmbedSymbolsInStaticLibsZ7.patch | 0 .../STRINGIFYPatch.patch | 0 .../portfile.cmake} | 98 +++++++---- .../remove-deps.cmake | 0 ports/{openssl => openssl-unix}/usage | 0 .../vcpkg-cmake-wrapper.cmake | 0 ports/openssl-uwp/CONTROL | 3 + .../fix-uwp-rs4.patch | 0 .../{openssl => openssl-uwp}/make-openssl.bat | 0 .../portfile.cmake} | 11 +- ports/openssl-uwp/usage | 4 + ports/openssl-windows/CONTROL | 3 + .../ConfigureIncludeQuotesFix.patch | 13 ++ .../EmbedSymbolsInStaticLibsZ7.patch | 25 +++ ports/openssl-windows/STRINGIFYPatch.patch | 23 +++ ports/openssl-windows/portfile.cmake | 157 +++++++++++++++++ ports/openssl-windows/usage | 4 + ports/openssl/CONTROL | 3 +- ports/openssl/LICENSE | 127 -------------- ports/openssl/portfile.cmake | 165 +----------------- 23 files changed, 302 insertions(+), 339 deletions(-) rename ports/{openssl => openssl-unix}/CMakeLists.txt (95%) create mode 100644 ports/openssl-unix/CONTROL rename ports/{openssl => openssl-unix}/ConfigureIncludeQuotesFix.patch (100%) rename ports/{openssl => openssl-unix}/EmbedSymbolsInStaticLibsZ7.patch (100%) rename ports/{openssl => openssl-unix}/STRINGIFYPatch.patch (100%) rename ports/{openssl/portfile-nonwindows.cmake => openssl-unix/portfile.cmake} (50%) rename ports/{openssl => openssl-unix}/remove-deps.cmake (100%) rename ports/{openssl => openssl-unix}/usage (100%) rename ports/{openssl => openssl-unix}/vcpkg-cmake-wrapper.cmake (100%) create mode 100644 ports/openssl-uwp/CONTROL rename ports/{openssl => openssl-uwp}/fix-uwp-rs4.patch (100%) rename ports/{openssl => openssl-uwp}/make-openssl.bat (100%) rename ports/{openssl/portfile-uwp.cmake => openssl-uwp/portfile.cmake} (88%) create mode 100644 ports/openssl-uwp/usage create mode 100644 ports/openssl-windows/CONTROL create mode 100644 ports/openssl-windows/ConfigureIncludeQuotesFix.patch create mode 100644 ports/openssl-windows/EmbedSymbolsInStaticLibsZ7.patch create mode 100644 ports/openssl-windows/STRINGIFYPatch.patch create mode 100644 ports/openssl-windows/portfile.cmake create mode 100644 ports/openssl-windows/usage delete mode 100644 ports/openssl/LICENSE diff --git a/ports/openssl/CMakeLists.txt b/ports/openssl-unix/CMakeLists.txt similarity index 95% rename from ports/openssl/CMakeLists.txt rename to ports/openssl-unix/CMakeLists.txt index a2d863452..f9c6e7e7c 100644 --- a/ports/openssl/CMakeLists.txt +++ b/ports/openssl-unix/CMakeLists.txt @@ -45,6 +45,8 @@ if(CMAKE_SYSROOT AND CMAKE_C_COMPILE_OPTIONS_SYSROOT) set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT}") endif() +string(REGEX REPLACE "^ " "" CFLAGS "${CFLAGS}") + file(TO_NATIVE_PATH ENV_PATH "${COMPILER_ROOT};$ENV{PATH}") set(ENV{ANDROID_DEV} "${CMAKE_SYSROOT}/usr") set(ENV{CC} "${CMAKE_C_COMPILER}") diff --git a/ports/openssl-unix/CONTROL b/ports/openssl-unix/CONTROL new file mode 100644 index 000000000..fb2909bec --- /dev/null +++ b/ports/openssl-unix/CONTROL @@ -0,0 +1,3 @@ +Source: openssl-unix +Version: 1.0.2o +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. diff --git a/ports/openssl/ConfigureIncludeQuotesFix.patch b/ports/openssl-unix/ConfigureIncludeQuotesFix.patch similarity index 100% rename from ports/openssl/ConfigureIncludeQuotesFix.patch rename to ports/openssl-unix/ConfigureIncludeQuotesFix.patch diff --git a/ports/openssl/EmbedSymbolsInStaticLibsZ7.patch b/ports/openssl-unix/EmbedSymbolsInStaticLibsZ7.patch similarity index 100% rename from ports/openssl/EmbedSymbolsInStaticLibsZ7.patch rename to ports/openssl-unix/EmbedSymbolsInStaticLibsZ7.patch diff --git a/ports/openssl/STRINGIFYPatch.patch b/ports/openssl-unix/STRINGIFYPatch.patch similarity index 100% rename from ports/openssl/STRINGIFYPatch.patch rename to ports/openssl-unix/STRINGIFYPatch.patch diff --git a/ports/openssl/portfile-nonwindows.cmake b/ports/openssl-unix/portfile.cmake similarity index 50% rename from ports/openssl/portfile-nonwindows.cmake rename to ports/openssl-unix/portfile.cmake index c324b132a..49561ccde 100644 --- a/ports/openssl/portfile-nonwindows.cmake +++ b/ports/openssl-unix/portfile.cmake @@ -1,37 +1,61 @@ -if(CMAKE_HOST_WIN32) - vcpkg_acquire_msys(MSYS_ROOT PACKAGES make) - set(BASH ${MSYS_ROOT}/usr/bin/bash.exe) - set(MAKE ${MSYS_ROOT}/usr/bin/make.exe) -else() - find_program(MAKE make) - if(NOT MAKE) - message(FATAL_ERROR "Could not find make. Please install it through your package manager.") - endif() -endif() - -vcpkg_configure_cmake( - SOURCE_PATH ${CMAKE_CURRENT_LIST_DIR} - PREFER_NINJA - OPTIONS - -DSOURCE_PATH=${MASTER_COPY_SOURCE_PATH} - -DPERL=${PERL} - -DMAKE=${MAKE} - OPTIONS_RELEASE - -DINSTALL_HEADERS=ON -) - -vcpkg_install_cmake() - -file(GLOB HEADERS ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*/include/openssl/*.h) -set(RESOLVED_HEADERS) -foreach(HEADER ${HEADERS}) - get_filename_component(X "${HEADER}" REALPATH) - list(APPEND RESOLVED_HEADERS "${X}") -endforeach() - -file(INSTALL ${RESOLVED_HEADERS} DESTINATION ${CURRENT_PACKAGES_DIR}/include/openssl) -file(INSTALL ${MASTER_COPY_SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/openssl RENAME copyright) - -if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") - file(COPY ${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/openssl) -endif() +if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" OR NOT VCPKG_CMAKE_SYSTEM_NAME) + message(FATAL_ERROR "This port is only for openssl on Unix-like systems") +endif() + +include(vcpkg_common_functions) +set(OPENSSL_VERSION 1.0.2o) +set(MASTER_COPY_SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/openssl-${OPENSSL_VERSION}) + +vcpkg_find_acquire_program(PERL) + +vcpkg_download_distfile(OPENSSL_SOURCE_ARCHIVE + URLS "https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz" "https://www.openssl.org/source/old/1.0.2/openssl-${OPENSSL_VERSION}.tar.gz" + FILENAME "openssl-${OPENSSL_VERSION}.tar.gz" + SHA512 8a2c93657c85143e76785bb32ee836908c31a6f5f8db993fa9777acba6079e630cdddd03edbad65d1587199fc13a1507789eacf038b56eb99139c2091d9df7fd +) + +vcpkg_extract_source_archive(${OPENSSL_SOURCE_ARCHIVE}) +vcpkg_apply_patches( + SOURCE_PATH ${MASTER_COPY_SOURCE_PATH} + PATCHES ${CMAKE_CURRENT_LIST_DIR}/ConfigureIncludeQuotesFix.patch + ${CMAKE_CURRENT_LIST_DIR}/STRINGIFYPatch.patch + ${CMAKE_CURRENT_LIST_DIR}/EmbedSymbolsInStaticLibsZ7.patch +) + +if(CMAKE_HOST_WIN32) + vcpkg_acquire_msys(MSYS_ROOT PACKAGES make) + set(BASH ${MSYS_ROOT}/usr/bin/bash.exe) + set(MAKE ${MSYS_ROOT}/usr/bin/make.exe) +else() + find_program(MAKE make) + if(NOT MAKE) + message(FATAL_ERROR "Could not find make. Please install it through your package manager.") + endif() +endif() + +vcpkg_configure_cmake( + SOURCE_PATH ${CMAKE_CURRENT_LIST_DIR} + PREFER_NINJA + OPTIONS + -DSOURCE_PATH=${MASTER_COPY_SOURCE_PATH} + -DPERL=${PERL} + -DMAKE=${MAKE} + OPTIONS_RELEASE + -DINSTALL_HEADERS=ON +) + +vcpkg_install_cmake() + +file(GLOB HEADERS ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*/include/openssl/*.h) +set(RESOLVED_HEADERS) +foreach(HEADER ${HEADERS}) + get_filename_component(X "${HEADER}" REALPATH) + list(APPEND RESOLVED_HEADERS "${X}") +endforeach() + +file(INSTALL ${RESOLVED_HEADERS} DESTINATION ${CURRENT_PACKAGES_DIR}/include/openssl) +file(INSTALL ${MASTER_COPY_SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/openssl-unix RENAME copyright) + +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + file(COPY ${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/openssl) +endif() diff --git a/ports/openssl/remove-deps.cmake b/ports/openssl-unix/remove-deps.cmake similarity index 100% rename from ports/openssl/remove-deps.cmake rename to ports/openssl-unix/remove-deps.cmake diff --git a/ports/openssl/usage b/ports/openssl-unix/usage similarity index 100% rename from ports/openssl/usage rename to ports/openssl-unix/usage diff --git a/ports/openssl/vcpkg-cmake-wrapper.cmake b/ports/openssl-unix/vcpkg-cmake-wrapper.cmake similarity index 100% rename from ports/openssl/vcpkg-cmake-wrapper.cmake rename to ports/openssl-unix/vcpkg-cmake-wrapper.cmake diff --git a/ports/openssl-uwp/CONTROL b/ports/openssl-uwp/CONTROL new file mode 100644 index 000000000..4b4871f3c --- /dev/null +++ b/ports/openssl-uwp/CONTROL @@ -0,0 +1,3 @@ +Source: openssl-uwp +Version: 1.0.2l-winrt +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. diff --git a/ports/openssl/fix-uwp-rs4.patch b/ports/openssl-uwp/fix-uwp-rs4.patch similarity index 100% rename from ports/openssl/fix-uwp-rs4.patch rename to ports/openssl-uwp/fix-uwp-rs4.patch diff --git a/ports/openssl/make-openssl.bat b/ports/openssl-uwp/make-openssl.bat similarity index 100% rename from ports/openssl/make-openssl.bat rename to ports/openssl-uwp/make-openssl.bat diff --git a/ports/openssl/portfile-uwp.cmake b/ports/openssl-uwp/portfile.cmake similarity index 88% rename from ports/openssl/portfile-uwp.cmake rename to ports/openssl-uwp/portfile.cmake index 6aef52695..167d98658 100644 --- a/ports/openssl/portfile-uwp.cmake +++ b/ports/openssl-uwp/portfile.cmake @@ -1,11 +1,3 @@ -# Common Ambient Variables: -# VCPKG_ROOT_DIR = -# TARGET_TRIPLET is the current triplet (x86-windows, etc) -# PORT is the current port name (zlib, etc) -# CURRENT_BUILDTREES_DIR = ${VCPKG_ROOT_DIR}\buildtrees\${PORT} -# CURRENT_PACKAGES_DIR = ${VCPKG_ROOT_DIR}\packages\${PORT}_${TARGET_TRIPLET} -# - if (VCPKG_LIBRARY_LINKAGE STREQUAL static) set(VCPKG_LIBRARY_LINKAGE dynamic) message("Static building not supported yet") @@ -94,6 +86,5 @@ file(INSTALL ${SOURCE_PATH}/out32dll/ssleay32.lib DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib) -file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/openssl RENAME copyright) - +file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) file(COPY ${CMAKE_CURRENT_LIST_DIR}/usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT}) diff --git a/ports/openssl-uwp/usage b/ports/openssl-uwp/usage new file mode 100644 index 000000000..f535cb6a4 --- /dev/null +++ b/ports/openssl-uwp/usage @@ -0,0 +1,4 @@ +The package openssl is compatible with built-in CMake targets: + + find_package(OpenSSL REQUIRED) + target_link_libraries(main PRIVATE OpenSSL::SSL OpenSSL::Crypto) diff --git a/ports/openssl-windows/CONTROL b/ports/openssl-windows/CONTROL new file mode 100644 index 000000000..a9c10c583 --- /dev/null +++ b/ports/openssl-windows/CONTROL @@ -0,0 +1,3 @@ +Source: openssl-windows +Version: 1.0.2o +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. diff --git a/ports/openssl-windows/ConfigureIncludeQuotesFix.patch b/ports/openssl-windows/ConfigureIncludeQuotesFix.patch new file mode 100644 index 000000000..09494f565 --- /dev/null +++ b/ports/openssl-windows/ConfigureIncludeQuotesFix.patch @@ -0,0 +1,13 @@ +diff --git a/Configure b/Configure +index c98107a..77ad9d3 100644 +--- a/Configure ++++ b/Configure +@@ -972,7 +972,7 @@ PROCESS_ARGS: + } + elsif (/^--with-zlib-include=(.*)$/) + { +- $withargs{"zlib-include"}="-I$1"; ++ $withargs{"zlib-include"}="-I\"$1\""; + } + elsif (/^--with-fipsdir=(.*)$/) + { diff --git a/ports/openssl-windows/EmbedSymbolsInStaticLibsZ7.patch b/ports/openssl-windows/EmbedSymbolsInStaticLibsZ7.patch new file mode 100644 index 000000000..1a8de2c4b --- /dev/null +++ b/ports/openssl-windows/EmbedSymbolsInStaticLibsZ7.patch @@ -0,0 +1,25 @@ +diff --git a/util/pl/VC-32.pl b/util/pl/VC-32.pl +index dba96cb..5722f6e 100644 +--- a/util/pl/VC-32.pl ++++ b/util/pl/VC-32.pl +@@ -154,9 +154,17 @@ else + $cflags=$opt_cflags.$base_cflags; + } + +-# generate symbols.pdb unconditionally +-$app_cflag.=" /Zi /Fd\$(TMP_D)/app"; +-$lib_cflag.=" /Zi /Fd\$(TMP_D)/lib"; ++# generate symbols.pdb when building dlls and embed symbols when building static libs ++if ($shlib) ++ { ++ $app_cflag.=" /Zi /Fd\$(TMP_D)/app.pdb"; ++ $lib_cflag.=" /Zi /Fd\$(TMP_D)/lib.pdb"; ++ } ++else ++ { ++ $app_cflag.=" /Z7"; ++ $lib_cflag.=" /Z7"; ++ } + $lflags.=" /debug"; + + $obj='.obj'; diff --git a/ports/openssl-windows/STRINGIFYPatch.patch b/ports/openssl-windows/STRINGIFYPatch.patch new file mode 100644 index 000000000..dd8f9c297 --- /dev/null +++ b/ports/openssl-windows/STRINGIFYPatch.patch @@ -0,0 +1,23 @@ +diff --git a/crypto/cversion.c b/crypto/cversion.c +index bfff699..17b7912 100644 +--- a/crypto/cversion.c ++++ b/crypto/cversion.c +@@ -56,6 +56,9 @@ + * [including the GNU Public Licence.] + */ + ++#define STRINGIFY2(x) #x ++#define STRINGIFY(x) STRINGIFY2(x) ++ + #include "cryptlib.h" + + #ifndef NO_WINDOWS_BRAINDEATH +@@ -79,7 +82,7 @@ const char *SSLeay_version(int t) + } + if (t == SSLEAY_CFLAGS) { + #ifdef CFLAGS +- return (CFLAGS); ++ return STRINGIFY(CFLAGS); + #else + return ("compiler: information not available"); + #endif diff --git a/ports/openssl-windows/portfile.cmake b/ports/openssl-windows/portfile.cmake new file mode 100644 index 000000000..22a6a2a28 --- /dev/null +++ b/ports/openssl-windows/portfile.cmake @@ -0,0 +1,157 @@ +if(VCPKG_CMAKE_SYSTEM_NAME) + message(FATAL_ERROR "This port is only for building openssl on Windows Desktop") +endif() + +include(vcpkg_common_functions) +set(OPENSSL_VERSION 1.0.2o) +set(MASTER_COPY_SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/openssl-${OPENSSL_VERSION}) + +vcpkg_find_acquire_program(PERL) + +get_filename_component(PERL_EXE_PATH ${PERL} DIRECTORY) +set(ENV{PATH} "$ENV{PATH};${PERL_EXE_PATH}") + +vcpkg_download_distfile(OPENSSL_SOURCE_ARCHIVE + URLS "https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz" "https://www.openssl.org/source/old/1.0.2/openssl-${OPENSSL_VERSION}.tar.gz" + FILENAME "openssl-${OPENSSL_VERSION}.tar.gz" + SHA512 8a2c93657c85143e76785bb32ee836908c31a6f5f8db993fa9777acba6079e630cdddd03edbad65d1587199fc13a1507789eacf038b56eb99139c2091d9df7fd +) + +vcpkg_extract_source_archive(${OPENSSL_SOURCE_ARCHIVE}) +vcpkg_apply_patches( + SOURCE_PATH ${MASTER_COPY_SOURCE_PATH} + PATCHES ${CMAKE_CURRENT_LIST_DIR}/ConfigureIncludeQuotesFix.patch + ${CMAKE_CURRENT_LIST_DIR}/STRINGIFYPatch.patch + ${CMAKE_CURRENT_LIST_DIR}/EmbedSymbolsInStaticLibsZ7.patch +) + +vcpkg_find_acquire_program(NASM) +get_filename_component(NASM_EXE_PATH ${NASM} DIRECTORY) +set(ENV{PATH} "${NASM_EXE_PATH};$ENV{PATH}") + +vcpkg_find_acquire_program(JOM) + +set(CONFIGURE_COMMAND ${PERL} Configure + enable-static-engine + enable-capieng + no-ssl2 + -utf-8 +) + +if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86") + set(OPENSSL_ARCH VC-WIN32) + set(OPENSSL_DO "ms\\do_nasm.bat") +elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") + set(OPENSSL_ARCH VC-WIN64A) + set(OPENSSL_DO "ms\\do_win64a.bat") +else() + message(FATAL_ERROR "Unsupported target architecture: ${VCPKG_TARGET_ARCHITECTURE}") +endif() + +if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic) + set(OPENSSL_MAKEFILE "ms\\ntdll.mak") +else() + set(OPENSSL_MAKEFILE "ms\\nt.mak") +endif() + +file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg) + + +file(COPY ${MASTER_COPY_SOURCE_PATH} DESTINATION ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel) +set(SOURCE_PATH_RELEASE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/openssl-${OPENSSL_VERSION}) +set(OPENSSLDIR_RELEASE ${CURRENT_PACKAGES_DIR}) + +message(STATUS "Configure ${TARGET_TRIPLET}-rel") +vcpkg_execute_required_process( + COMMAND ${CONFIGURE_COMMAND} ${OPENSSL_ARCH} "--prefix=${OPENSSLDIR_RELEASE}" "--openssldir=${OPENSSLDIR_RELEASE}" -FS + WORKING_DIRECTORY ${SOURCE_PATH_RELEASE} + LOGNAME configure-perl-${TARGET_TRIPLET}-${CMAKE_BUILD_TYPE}-rel +) +vcpkg_execute_required_process( + COMMAND ${OPENSSL_DO} + WORKING_DIRECTORY ${SOURCE_PATH_RELEASE} + LOGNAME configure-do-${TARGET_TRIPLET}-${CMAKE_BUILD_TYPE}-rel +) +message(STATUS "Configure ${TARGET_TRIPLET}-rel done") + +message(STATUS "Build ${TARGET_TRIPLET}-rel") +# Openssl's buildsystem has a race condition which will cause JOM to fail at some point. +# This is ok; we just do as much work as we can in parallel first, then follow up with a single-threaded build. +make_directory(${SOURCE_PATH_RELEASE}/inc32/openssl) +execute_process( + COMMAND ${JOM} -k -j $ENV{NUMBER_OF_PROCESSORS} -f ${OPENSSL_MAKEFILE} + WORKING_DIRECTORY ${SOURCE_PATH_RELEASE} + OUTPUT_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-rel-0-out.log + ERROR_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-rel-0-err.log +) +vcpkg_execute_required_process( + COMMAND nmake -f ${OPENSSL_MAKEFILE} install + WORKING_DIRECTORY ${SOURCE_PATH_RELEASE} + LOGNAME build-${TARGET_TRIPLET}-rel-1) + +message(STATUS "Build ${TARGET_TRIPLET}-rel done") + + +message(STATUS "Configure ${TARGET_TRIPLET}-dbg") +file(COPY ${MASTER_COPY_SOURCE_PATH} DESTINATION ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg) +set(SOURCE_PATH_DEBUG ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/openssl-${OPENSSL_VERSION}) +set(OPENSSLDIR_DEBUG ${CURRENT_PACKAGES_DIR}/debug) + +vcpkg_execute_required_process( + COMMAND ${CONFIGURE_COMMAND} debug-${OPENSSL_ARCH} "--prefix=${OPENSSLDIR_DEBUG}" "--openssldir=${OPENSSLDIR_DEBUG}" -FS + WORKING_DIRECTORY ${SOURCE_PATH_DEBUG} + LOGNAME configure-perl-${TARGET_TRIPLET}-${CMAKE_BUILD_TYPE}-dbg +) +vcpkg_execute_required_process( + COMMAND ${OPENSSL_DO} + WORKING_DIRECTORY ${SOURCE_PATH_DEBUG} + LOGNAME configure-do-${TARGET_TRIPLET}-${CMAKE_BUILD_TYPE}-dbg +) +message(STATUS "Configure ${TARGET_TRIPLET}-dbg done") + +message(STATUS "Build ${TARGET_TRIPLET}-dbg") +make_directory(${SOURCE_PATH_DEBUG}/inc32/openssl) +execute_process( + COMMAND ${JOM} -k -j $ENV{NUMBER_OF_PROCESSORS} -f ${OPENSSL_MAKEFILE} + WORKING_DIRECTORY ${SOURCE_PATH_DEBUG} + OUTPUT_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-dbg-0-out.log + ERROR_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-dbg-0-err.log +) +vcpkg_execute_required_process( + COMMAND nmake -f ${OPENSSL_MAKEFILE} install + WORKING_DIRECTORY ${SOURCE_PATH_DEBUG} + LOGNAME build-${TARGET_TRIPLET}-dbg-1) + +message(STATUS "Build ${TARGET_TRIPLET}-dbg done") + + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) +file(REMOVE + ${CURRENT_PACKAGES_DIR}/debug/bin/openssl.exe + ${CURRENT_PACKAGES_DIR}/debug/openssl.cnf + ${CURRENT_PACKAGES_DIR}/openssl.cnf +) + +file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/tools/openssl/) +file(RENAME ${CURRENT_PACKAGES_DIR}/bin/openssl.exe ${CURRENT_PACKAGES_DIR}/tools/openssl/openssl.exe) + +vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/openssl) + +if(VCPKG_LIBRARY_LINKAGE STREQUAL static) + # They should be empty, only the exes deleted above were in these directories + file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/bin/) + file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/bin/) +endif() + +file(READ "${CURRENT_PACKAGES_DIR}/include/openssl/dtls1.h" _contents) +string(REPLACE "" "" _contents "${_contents}") +file(WRITE "${CURRENT_PACKAGES_DIR}/include/openssl/dtls1.h" "${_contents}") + +file(READ "${CURRENT_PACKAGES_DIR}/include/openssl/rand.h" _contents) +string(REPLACE "# include " "#ifndef _WINSOCKAPI_\n#define _WINSOCKAPI_\n#endif\n# include " _contents "${_contents}") +file(WRITE "${CURRENT_PACKAGES_DIR}/include/openssl/rand.h" "${_contents}") + +vcpkg_copy_pdbs() + +file(COPY ${CMAKE_CURRENT_LIST_DIR}/usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT}) +file(INSTALL ${MASTER_COPY_SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) diff --git a/ports/openssl-windows/usage b/ports/openssl-windows/usage new file mode 100644 index 000000000..f535cb6a4 --- /dev/null +++ b/ports/openssl-windows/usage @@ -0,0 +1,4 @@ +The package openssl is compatible with built-in CMake targets: + + find_package(OpenSSL REQUIRED) + target_link_libraries(main PRIVATE OpenSSL::SSL OpenSSL::Crypto) diff --git a/ports/openssl/CONTROL b/ports/openssl/CONTROL index ed9ccf48b..4d81a1962 100644 --- a/ports/openssl/CONTROL +++ b/ports/openssl/CONTROL @@ -1,3 +1,4 @@ Source: openssl -Version: 1.0.2o-3 +Version: 0 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. +Build-Depends: openssl-windows (windows), openssl-uwp (uwp), openssl-unix (!uwp&!windows) diff --git a/ports/openssl/LICENSE b/ports/openssl/LICENSE deleted file mode 100644 index e47d101f1..000000000 --- a/ports/openssl/LICENSE +++ /dev/null @@ -1,127 +0,0 @@ - - LICENSE ISSUES - ============== - - The OpenSSL toolkit stays under a dual license, i.e. both the conditions of - the OpenSSL License and the original SSLeay license apply to the toolkit. - See below for the actual license texts. Actually both licenses are BSD-style - Open Source licenses. In case of any license issues related to OpenSSL - please contact openssl-core@openssl.org. - - OpenSSL License - --------------- - -/* ==================================================================== - * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - - Original SSLeay License - ----------------------- - -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - diff --git a/ports/openssl/portfile.cmake b/ports/openssl/portfile.cmake index a6e5fd110..065116c27 100644 --- a/ports/openssl/portfile.cmake +++ b/ports/openssl/portfile.cmake @@ -1,164 +1 @@ -if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") - include(${CMAKE_CURRENT_LIST_DIR}/portfile-uwp.cmake) - return() -endif() - -include(vcpkg_common_functions) -set(OPENSSL_VERSION 1.0.2o) -set(MASTER_COPY_SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/openssl-${OPENSSL_VERSION}) - -vcpkg_find_acquire_program(PERL) - -get_filename_component(PERL_EXE_PATH ${PERL} DIRECTORY) -set(ENV{PATH} "$ENV{PATH};${PERL_EXE_PATH}") - -vcpkg_download_distfile(OPENSSL_SOURCE_ARCHIVE - URLS "https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz" "https://www.openssl.org/source/old/1.0.2/openssl-${OPENSSL_VERSION}.tar.gz" - FILENAME "openssl-${OPENSSL_VERSION}.tar.gz" - SHA512 8a2c93657c85143e76785bb32ee836908c31a6f5f8db993fa9777acba6079e630cdddd03edbad65d1587199fc13a1507789eacf038b56eb99139c2091d9df7fd -) - -vcpkg_extract_source_archive(${OPENSSL_SOURCE_ARCHIVE}) -vcpkg_apply_patches( - SOURCE_PATH ${MASTER_COPY_SOURCE_PATH} - PATCHES ${CMAKE_CURRENT_LIST_DIR}/ConfigureIncludeQuotesFix.patch - ${CMAKE_CURRENT_LIST_DIR}/STRINGIFYPatch.patch - ${CMAKE_CURRENT_LIST_DIR}/EmbedSymbolsInStaticLibsZ7.patch -) - -if(VCPKG_CMAKE_SYSTEM_NAME) - include(${CMAKE_CURRENT_LIST_DIR}/portfile-nonwindows.cmake) - return() -endif() - -vcpkg_find_acquire_program(NASM) -get_filename_component(NASM_EXE_PATH ${NASM} DIRECTORY) -set(ENV{PATH} "${NASM_EXE_PATH};$ENV{PATH}") - -vcpkg_find_acquire_program(JOM) - -set(CONFIGURE_COMMAND ${PERL} Configure - enable-static-engine - enable-capieng - no-ssl2 - -utf-8 -) - -if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86") - set(OPENSSL_ARCH VC-WIN32) - set(OPENSSL_DO "ms\\do_nasm.bat") -elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") - set(OPENSSL_ARCH VC-WIN64A) - set(OPENSSL_DO "ms\\do_win64a.bat") -else() - message(FATAL_ERROR "Unsupported target architecture: ${VCPKG_TARGET_ARCHITECTURE}") -endif() - -if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic) - set(OPENSSL_MAKEFILE "ms\\ntdll.mak") -else() - set(OPENSSL_MAKEFILE "ms\\nt.mak") -endif() - -file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg) - - -file(COPY ${MASTER_COPY_SOURCE_PATH} DESTINATION ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel) -set(SOURCE_PATH_RELEASE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/openssl-${OPENSSL_VERSION}) -set(OPENSSLDIR_RELEASE ${CURRENT_PACKAGES_DIR}) - -message(STATUS "Configure ${TARGET_TRIPLET}-rel") -vcpkg_execute_required_process( - COMMAND ${CONFIGURE_COMMAND} ${OPENSSL_ARCH} "--prefix=${OPENSSLDIR_RELEASE}" "--openssldir=${OPENSSLDIR_RELEASE}" -FS - WORKING_DIRECTORY ${SOURCE_PATH_RELEASE} - LOGNAME configure-perl-${TARGET_TRIPLET}-${CMAKE_BUILD_TYPE}-rel -) -vcpkg_execute_required_process( - COMMAND ${OPENSSL_DO} - WORKING_DIRECTORY ${SOURCE_PATH_RELEASE} - LOGNAME configure-do-${TARGET_TRIPLET}-${CMAKE_BUILD_TYPE}-rel -) -message(STATUS "Configure ${TARGET_TRIPLET}-rel done") - -message(STATUS "Build ${TARGET_TRIPLET}-rel") -# Openssl's buildsystem has a race condition which will cause JOM to fail at some point. -# This is ok; we just do as much work as we can in parallel first, then follow up with a single-threaded build. -make_directory(${SOURCE_PATH_RELEASE}/inc32/openssl) -execute_process( - COMMAND ${JOM} -k -j $ENV{NUMBER_OF_PROCESSORS} -f ${OPENSSL_MAKEFILE} - WORKING_DIRECTORY ${SOURCE_PATH_RELEASE} - OUTPUT_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-rel-0-out.log - ERROR_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-rel-0-err.log -) -vcpkg_execute_required_process( - COMMAND nmake -f ${OPENSSL_MAKEFILE} install - WORKING_DIRECTORY ${SOURCE_PATH_RELEASE} - LOGNAME build-${TARGET_TRIPLET}-rel-1) - -message(STATUS "Build ${TARGET_TRIPLET}-rel done") - - -message(STATUS "Configure ${TARGET_TRIPLET}-dbg") -file(COPY ${MASTER_COPY_SOURCE_PATH} DESTINATION ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg) -set(SOURCE_PATH_DEBUG ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/openssl-${OPENSSL_VERSION}) -set(OPENSSLDIR_DEBUG ${CURRENT_PACKAGES_DIR}/debug) - -vcpkg_execute_required_process( - COMMAND ${CONFIGURE_COMMAND} debug-${OPENSSL_ARCH} "--prefix=${OPENSSLDIR_DEBUG}" "--openssldir=${OPENSSLDIR_DEBUG}" -FS - WORKING_DIRECTORY ${SOURCE_PATH_DEBUG} - LOGNAME configure-perl-${TARGET_TRIPLET}-${CMAKE_BUILD_TYPE}-dbg -) -vcpkg_execute_required_process( - COMMAND ${OPENSSL_DO} - WORKING_DIRECTORY ${SOURCE_PATH_DEBUG} - LOGNAME configure-do-${TARGET_TRIPLET}-${CMAKE_BUILD_TYPE}-dbg -) -message(STATUS "Configure ${TARGET_TRIPLET}-dbg done") - -message(STATUS "Build ${TARGET_TRIPLET}-dbg") -make_directory(${SOURCE_PATH_DEBUG}/inc32/openssl) -execute_process( - COMMAND ${JOM} -k -j $ENV{NUMBER_OF_PROCESSORS} -f ${OPENSSL_MAKEFILE} - WORKING_DIRECTORY ${SOURCE_PATH_DEBUG} - OUTPUT_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-dbg-0-out.log - ERROR_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-dbg-0-err.log -) -vcpkg_execute_required_process( - COMMAND nmake -f ${OPENSSL_MAKEFILE} install - WORKING_DIRECTORY ${SOURCE_PATH_DEBUG} - LOGNAME build-${TARGET_TRIPLET}-dbg-1) - -message(STATUS "Build ${TARGET_TRIPLET}-dbg done") - - -file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) -file(REMOVE - ${CURRENT_PACKAGES_DIR}/debug/bin/openssl.exe - ${CURRENT_PACKAGES_DIR}/debug/openssl.cnf - ${CURRENT_PACKAGES_DIR}/openssl.cnf -) - -file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/tools/${PORT}/) -file(RENAME ${CURRENT_PACKAGES_DIR}/bin/openssl.exe ${CURRENT_PACKAGES_DIR}/tools/${PORT}/openssl.exe) - -vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/${PORT}) - -file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/openssl RENAME copyright) - -if(VCPKG_LIBRARY_LINKAGE STREQUAL static) - # They should be empty, only the exes deleted above were in these directories - file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/bin/) - file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/bin/) -endif() - -file(READ "${CURRENT_PACKAGES_DIR}/include/openssl/dtls1.h" _contents) -string(REPLACE "" "" _contents "${_contents}") -file(WRITE "${CURRENT_PACKAGES_DIR}/include/openssl/dtls1.h" "${_contents}") - -file(READ "${CURRENT_PACKAGES_DIR}/include/openssl/rand.h" _contents) -string(REPLACE "# include " "#ifndef _WINSOCKAPI_\n#define _WINSOCKAPI_\n#endif\n# include " _contents "${_contents}") -file(WRITE "${CURRENT_PACKAGES_DIR}/include/openssl/rand.h" "${_contents}") - -vcpkg_copy_pdbs() - -file(COPY ${CMAKE_CURRENT_LIST_DIR}/usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT}) +set(VCPKG_POLICY_EMPTY_PACKAGE enabled)