Explorar el Código

Openssl 1.1.1o (#115)

* Upgrade to OpenSSL 1.1.1o

1.1.1m was the last one, 1.1.1n already has NVD entries opened on it.
So we're skipping straight to 1.1.1o.

Signed-off-by: lawsonamzn <[email protected]>

* Updates openssl1.1.1o package for windows and android

Needed to fix some line ending issues, and subprocess call issues.

Signed-off-by: lawsonamzn <[email protected]>
Nicholas Lawson hace 3 años
padre
commit
f59cefdf56

+ 41 - 2
Scripts/builders/vcpkgbuilder.py

@@ -29,6 +29,7 @@ class VcpkgBuilder(object):
         self._vcpkgDir = vcpkgDir
         self._triplet = VcpkgBuilder.tripletForPlatform(targetPlatform, static)
         self._customTripletsDir = Path(__file__).resolve().parents[1] / 'vcpkg/triplets'
+        self._customEnviron = os.environ.copy()
 
         if targetPlatform == 'android' and 'ANDROID_NDK_HOME' not in os.environ:
             # Copy some of the logic from vcpkg's android ndk detection, and see if we can print a warning early
@@ -43,6 +44,15 @@ class VcpkgBuilder(object):
             if not androidNdkFound:
                 raise RuntimeError('Unable to find the Android NDK. '
                     'Please set the ANDROID_NDK_HOME environment variable to the root of the Android NDK')
+        
+        if targetPlatform == 'mac':
+            # set default env vars that control minos version.  Change this if you change the toolchain files.
+            # ideally we'd put this in triplet files, but it turns out VCPKG triplets like the minos version
+            # don't acutally work in the case where the target is built using existing makefiles instead of
+            # CMake (ie, packages like OpenSSL1.1.1x)
+            self._customEnviron["MACOSX_DEPLOYMENT_TARGET"] = "11.0"
+        elif targetPlatform == 'ios':
+            self._customEnviron["IPHONEOS_DEPLOYMENT_TARGET"] = "14.0"
 
     @staticmethod
     def tripletForPlatform(platformName: str, static: bool):
@@ -90,6 +100,34 @@ class VcpkgBuilder(object):
         }
         return platformMap[platform.system()]
 
+    @staticmethod
+    def deleteFolder(folder):
+        """
+        Use the system's remove folder command instead of os.rmdir().
+        This function does various checks before trying, to avoid having to do those
+        checks over and over in code.
+        """
+        # wrap it up in a Path so that if a string is passed in, this still works.
+        path_folder = pathlib.Path(folder).resolve(strict=False)
+        if path_folder.is_file():
+            raise Exception(f"deleteFolder: Expected a folder, but found a file: {path_folder}.  Continuing may be unsafe.")
+        if not path_folder.is_dir():
+            print(f'deleteFolder:  Folder is already not present: {path_folder}')
+            return
+        
+        if platform.system() == 'Windows':
+            call_result = subprocess.run(' '.join(['rmdir', '/Q', '/S', str(path_folder)]),
+                                        shell=True,
+                                        capture_output=True,
+                                        cwd=str(path_folder.parent.resolve()))
+        else:
+            call_result = subprocess.run(' '.join(['rm', '-rf', str(path_folder)]),
+                                        shell=True,
+                                        capture_output=True,
+                                        cwd=str(path_folder.parent.resolve()))
+        if call_result.returncode != 0:
+            raise Exception(f"deleteFolder: Unable to delete folder {str(path_folder)}: {str(call_result.stderr.decode())}")
+
     @property
     def customTripletsDir(self):
         return self._customTripletsDir
@@ -148,7 +186,7 @@ class VcpkgBuilder(object):
 
     def patch(self, patchFile: pathlib.Path):
         subprocess.check_output(
-            ['git', 'apply', '--whitespace=fix', str(patchFile)],
+            ['git', 'apply', '--whitespace=fix', '--verbose',  str(patchFile)],
             cwd=self.vcpkgDir,
         )
 
@@ -157,7 +195,8 @@ class VcpkgBuilder(object):
 
         subprocess.check_call(
             [str(self.vcpkgDir / 'vcpkg'), 'install', f'{self.portName}:{self.triplet}', '--no-binarycaching', f'--overlay-triplets={self.customTripletsDir}'],
-            cwd=self.vcpkgDir,
+            cwd=self.vcpkgDir, 
+            env=self._customEnviron
         )
 
     def remove(self):

+ 5 - 0
package-system/OpenSSL/.gitattributes

@@ -0,0 +1,5 @@
+
+# In the case of OpenSSL, we're downloading a unix (Linefeed only, not CR/LF) tar.gz
+# and unzipping it.  This means that the patch should also be lf, not crlf
+
+*.patch text eol=lf

+ 1 - 1
package-system/OpenSSL/FindOpenSSL.cmake.template

@@ -30,7 +30,7 @@ set(OPENSSL_SSL_LIBRARIES
     $${OPENSSL_SSL_LIBRARY}
     $${OPENSSL_CRYPTO_LIBRARIES})
 set(OPENSSL_LIBRARIES $${OPENSSL_SSL_LIBRARIES})
-set(OPENSSL_VERSION "1.1.1m")
+set(OPENSSL_VERSION "1.1.1o")
 
 add_library($${CRYPTO_TARGETNAME} STATIC IMPORTED GLOBAL)
 set_target_properties($${CRYPTO_TARGETNAME} PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C")

+ 27 - 3
package-system/OpenSSL/build_package_image.py

@@ -11,6 +11,8 @@
 from pathlib import Path
 from tempfile import TemporaryDirectory
 import argparse
+import os
+import subprocess
 
 import sys
 sys.path.append(str(Path(__file__).parent.parent.parent / 'Scripts'))
@@ -29,8 +31,9 @@ def main():
 
     packageSystemDir = Path(__file__).resolve().parents[1]
     opensslPackageSourceDir = packageSystemDir / 'OpenSSL'
-    outputDir = packageSystemDir / f'OpenSSL-{args.platformName}'
-    opensslPatch = opensslPackageSourceDir / 'set_openssl_port_to_1_1_1_m.patch'
+    outputDir = opensslPackageSourceDir / 'temp' / f'OpenSSL-{args.platformName}'
+
+    opensslPatch = opensslPackageSourceDir / 'set_openssl_port_to_1_1_1_x.patch'
 
     enableStdioOnIOS = opensslPackageSourceDir / 'enable-stdio-on-iOS.patch'
 
@@ -44,9 +47,17 @@ def main():
         'windows': True,
     }
 
+    testScriptForPlatform = {
+        'android' : opensslPackageSourceDir / 'test_OpenSSL_android.cmd',
+        'mac' : opensslPackageSourceDir / 'test_OpenSSL_mac.sh',
+        'ios' : opensslPackageSourceDir / 'test_OpenSSL_ios.sh',
+        'windows' : opensslPackageSourceDir / 'test_OpenSSL_windows.cmd'
+    }
+
     with TemporaryDirectory() as tempdir:
         tempdir = Path(tempdir)
         builder = VcpkgBuilder(packageName='OpenSSL', portName='openssl', vcpkgDir=tempdir, targetPlatform=args.platformName, static=useStaticLibsForPlatform[args.platformName])
+        builder.deleteFolder(outputDir)
         builder.cloneVcpkg('b86c0c35b88e2bf3557ff49dc831689c2f085090')
         builder.bootstrap()
         builder.patch(opensslPatch)
@@ -61,7 +72,7 @@ def main():
         builder.writePackageInfoFile(
             outputDir,
             settings={
-                'PackageName': f'OpenSSL-1.1.1m-rev1-{args.platformName}',
+                'PackageName': f'OpenSSL-1.1.1o-rev1-{args.platformName}',
                 'URL': 'https://github.com/openssl/openssl',
                 'License': 'OpenSSL',
                 'LicenseFile': 'OpenSSL/LICENSE'
@@ -78,6 +89,19 @@ def main():
                 'CRYPTO_LIBRARY_DEPENDENCIES':crypto_library_dependencies
             },
         )
+    # now test the package, it will be in outputDir
+    customEnviron = os.environ.copy()
+    customEnviron["PACKAGE_ROOT"] = str(outputDir.resolve())
+    scriptpath = testScriptForPlatform[args.platformName].resolve()
+    cwdpath = opensslPackageSourceDir.resolve()
+    print(f'Running test script "{scriptpath}" with package "{outputDir}" with cwd "{cwdpath}"')
+    subprocess.check_call(
+                [ str(scriptpath) ],
+                cwd=str(cwdpath),
+                env=customEnviron
+            )
+    
 
 if __name__ == '__main__':
     main()
+

+ 0 - 36
package-system/OpenSSL/set_openssl_port_to_1_1_1_m.patch

@@ -1,36 +0,0 @@
-From 4fdbcfd46b65c2199e77b88f2478cf21ca19ee3c Mon Sep 17 00:00:00 2001
-Date: Fri, 11 Mar 2022 13:18:47 -0800
-Subject: [PATCH] Set OpenSSL version to 1.1.1m
-
----
- ports/openssl-unix/vcpkg.json    | 2 +-
- ports/openssl-windows/vcpkg.json | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/ports/openssl-unix/vcpkg.json b/ports/openssl-unix/vcpkg.json
-index 16ac635a7..e0694795f 100644
---- a/ports/openssl-unix/vcpkg.json
-+++ b/ports/openssl-unix/vcpkg.json
-@@ -1,6 +1,6 @@
- {
-   "name": "openssl-unix",
--  "version-string": "1.1.1h",
-+  "version-string": "1.1.1m",
-   "port-version": 2,
-   "description": "Deprecated OpenSSL port",
-   "supports": "!(windows | uwp)",
-diff --git a/ports/openssl-windows/vcpkg.json b/ports/openssl-windows/vcpkg.json
-index 069235b15..be53ad5c2 100644
---- a/ports/openssl-windows/vcpkg.json
-+++ b/ports/openssl-windows/vcpkg.json
-@@ -1,6 +1,6 @@
- {
-   "name": "openssl-windows",
--  "version-string": "1.1.1h",
-+  "version-string": "1.1.1m",
-   "port-version": 2,
-   "description": "Deprecated OpenSSL port",
-   "supports": "windows",
--- 
-2.34.0.windows.1
-

+ 31 - 0
package-system/OpenSSL/set_openssl_port_to_1_1_1_x.patch

@@ -0,0 +1,31 @@
+diff --git a/ports/openssl/portfile.cmake b/ports/openssl/portfile.cmake
+index 12142f8..791caf1 100644
+--- a/ports/openssl/portfile.cmake
++++ b/ports/openssl/portfile.cmake
+@@ -2,12 +2,12 @@ if(EXISTS "${CURRENT_INSTALLED_DIR}/include/openssl/ssl.h")
+     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.")
+ endif()
+ 
+-set(OPENSSL_VERSION 1.1.1m)
++set(OPENSSL_VERSION 1.1.1o)
+ vcpkg_download_distfile(
+     ARCHIVE
+     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"
+     FILENAME "openssl-${OPENSSL_VERSION}.tar.gz"
+-    SHA512 ba0ef99b321546c13385966e4a607734df38b96f6ed45c4c67063a5f8d1482986855279797a6920d9f86c2ec31ce3e104dcc62c37328caacdd78aec59aa66156
++    SHA512 75b2f1499cb4640229eb6cd35d85cbff2e19db17b959ac4d04b60f1b395b73567f9003521452a0fcfeea9b31b26de0a7bccf476ecf9caae02298f3647cfb7e23
+ )
+ 
+ vcpkg_find_acquire_program(PERL)
+diff --git a/ports/openssl/vcpkg.json b/ports/openssl/vcpkg.json
+index 516fc53..24f5696 100644
+--- a/ports/openssl/vcpkg.json
++++ b/ports/openssl/vcpkg.json
+@@ -1,6 +1,6 @@
+ {
+   "name": "openssl",
+-  "version-string": "1.1.1m",
++  "version-string": "1.1.1o",
+   "port-version": 2,
+   "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.",
+   "homepage": "https://www.openssl.org",

+ 1 - 1
package-system/OpenSSL/test/test_OpenSSL.c

@@ -24,7 +24,7 @@ int main()
         return 1;
     }
 
-    if (strcmp(OPENSSL_VERSION_TEXT, "OpenSSL 1.1.1m  14 Dec 2021") != 0)
+    if (strcmp(OPENSSL_VERSION_TEXT, "OpenSSL 1.1.1o  3 May 2022") != 0)
     {
         printf("FAILURE! OpenSSL OPENSSL_VERSION_TEXT returned invalid text (%s)!\n", OPENSSL_VERSION_TEXT);
         return 1;

+ 1 - 2
package-system/OpenSSL/test_OpenSSL_android.cmd

@@ -11,13 +11,12 @@ mkdir temp\build_test
 
 @rem CMAKE demands forward slashes but PACKAGE_ROOT is in native path:
 set "PACKAGE_ROOT=%PACKAGE_ROOT:\=/%"
-set "DOWNLOADED_PACKAGE_FOLDERS=%DOWNLOADED_PACKAGE_FOLDERS:\=/%"
 
 cmake -S test -B temp/build_test ^
     -G Ninja ^
     -DCMAKE_BUILD_TYPE=Release ^
     -DCMAKE_TOOLCHAIN_FILE=../../../../Scripts/cmake/Platform/Android/Toolchain_android.cmake ^
-    -DCMAKE_MODULE_PATH="%DOWNLOADED_PACKAGE_FOLDERS%;%PACKAGE_ROOT%" || exit /b 1
+    -DCMAKE_MODULE_PATH="%PACKAGE_ROOT%" || exit /b 1
 
 cmake --build temp/build_test --parallel || exit /b 1
 

+ 2 - 1
package-system/OpenSSL/test_OpenSSL_ios.sh

@@ -1,3 +1,4 @@
+#!/bin/bash
 #
 # Copyright (c) Contributors to the Open 3D Engine Project.
 # For complete copyright and license terms please see the LICENSE at the root of this distribution.
@@ -13,7 +14,7 @@ cmake -S test -B temp/build_test -G Xcode \
     -DCMAKE_TOOLCHAIN_FILE=../../../../Scripts/cmake/Platform/iOS/Toolchain_ios.cmake \
     -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED=false \
     -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=false \
-    -DCMAKE_MODULE_PATH="$DOWNLOADED_PACKAGE_FOLDERS;$PACKAGE_ROOT" || exit 1
+    -DCMAKE_MODULE_PATH="$PACKAGE_ROOT" || exit 1
 
 cmake --build temp/build_test --parallel --config Release || exit 1
 

+ 4 - 1
package-system/OpenSSL/test_OpenSSL_mac.sh

@@ -1,3 +1,4 @@
+#!/bin/bash
 #
 # Copyright (c) Contributors to the Open 3D Engine Project.
 # For complete copyright and license terms please see the LICENSE at the root of this distribution.
@@ -9,7 +10,9 @@
 rm -rf temp/build_test
 mkdir temp/build_test
 
-cmake -S test -B temp/build_test -G Xcode -DCMAKE_TOOLCHAIN_FILE=../../../../Scripts/cmake/Platform/Mac/Toolchain_mac.cmake -DCMAKE_MODULE_PATH="$DOWNLOADED_PACKAGE_FOLDERS;$PACKAGE_ROOT" || exit 1
+cmake -S test -B temp/build_test -G Xcode \
+ -DCMAKE_TOOLCHAIN_FILE=../../../../Scripts/cmake/Platform/Mac/Toolchain_mac.cmake \
+ -DCMAKE_MODULE_PATH="$PACKAGE_ROOT" || exit 1
 
 cmake --build temp/build_test --parallel --config Release || exit 1
 

+ 4 - 4
package_build_list_host_darwin.json

@@ -22,8 +22,8 @@
         "libsamplerate-0.2.1-rev2-mac": "Scripts/extras/pull_and_build_from_git.py ../../package-system/libsamplerate --platform-name Mac --package-root ../../package-system --clean",
         "libsamplerate-0.2.1-rev2-ios": "Scripts/extras/pull_and_build_from_git.py ../../package-system/libsamplerate --platform-name iOS --package-root ../../package-system --clean",
         "OpenMesh-8.1-rev3-mac": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenMesh --platform-name Mac --package-root ../../package-system --clean",
-        "OpenSSL-1.1.1m-rev1-mac": "package-system/OpenSSL/build_package_image.py",
-        "OpenSSL-1.1.1m-rev1-ios": "package-system/OpenSSL/build_package_image.py --platform ios",
+        "OpenSSL-1.1.1o-rev1-mac": "package-system/OpenSSL/build_package_image.py",
+        "OpenSSL-1.1.1o-rev1-ios": "package-system/OpenSSL/build_package_image.py --platform ios",
         "OpenEXR-3.1.3-rev4-mac": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenEXR --platform-name Mac --package-root ../../package-system/OpenEXR/temp --clean",
         "PhysX-4.1.2.29882248-rev5-mac": "package-system/PhysX/build_package_image.py --platform mac",
         "PhysX-4.1.2.29882248-rev5-ios": "package-system/PhysX/build_package_image.py --platform ios",
@@ -70,8 +70,8 @@
         "libsamplerate-0.2.1-rev2-mac": "package-system/libsamplerate-mac",
         "libsamplerate-0.2.1-rev2-ios": "package-system/libsamplerate-ios",
         "OpenMesh-8.1-rev3-mac": "package-system/OpenMesh-mac",
-        "OpenSSL-1.1.1m-rev1-mac": "package-system/OpenSSL-mac",
-        "OpenSSL-1.1.1m-rev1-ios": "package-system/OpenSSL-ios",
+        "OpenSSL-1.1.1o-rev1-mac": "package-system/OpenSSL/temp/OpenSSL-mac",
+        "OpenSSL-1.1.1o-rev1-ios": "package-system/OpenSSL/temp/OpenSSL-ios",
         "OpenEXR-3.1.3-rev4-mac": "package-system/OpenEXR/temp/OpenEXR-mac",
         "tiff-4.2.0.15-rev3-mac": "package-system/tiff-mac",
         "tiff-4.2.0.15-rev3-ios": "package-system/tiff-ios",

+ 4 - 4
package_build_list_host_windows.json

@@ -36,8 +36,8 @@
         "NvCloth-v1.1.6-4-gd243404-pr58-rev1-android": "package-system/NvCloth/build_package_image.py --platform-name android",
         "OpenEXR-3.1.3-rev4-windows": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenEXR --platform-name Windows --package-root ../../package-system/OpenEXR/temp --clean",
         "OpenMesh-8.1-rev3-windows": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenMesh --platform-name Windows --package-root ../../package-system --clean",
-        "OpenSSL-1.1.1m-rev1-android": "package-system/OpenSSL/build_package_image.py --platform-name android",
-        "OpenSSL-1.1.1m-rev1-windows": "package-system/OpenSSL/build_package_image.py",
+        "OpenSSL-1.1.1o-rev1-android": "package-system/OpenSSL/build_package_image.py --platform-name android",
+        "OpenSSL-1.1.1o-rev1-windows": "package-system/OpenSSL/build_package_image.py",
         "OpenXR-1.0.22-rev1-android": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenXR --platform-name Android --package-root ../../package-system --clean",
         "OpenXR-1.0.22-rev1-windows": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenXR --platform-name Windows --package-root ../../package-system --clean",
         "PhysX-4.1.2.29882248-rev5-android": "package-system/PhysX/build_package_image.py --platform android",
@@ -101,8 +101,8 @@
     "OpenEXR-3.1.3-rev4-windows": "package-system/OpenEXR/temp/OpenEXR-windows",
     "openimageio-2.1.16.0-rev2-windows": "package-system/openimageio-windows",
     "OpenMesh-8.1-rev3-windows": "package-system/OpenMesh-windows",
-    "OpenSSL-1.1.1m-rev1-android": "package-system/OpenSSL-android",
-    "OpenSSL-1.1.1m-rev1-windows": "package-system/OpenSSL-windows",
+    "OpenSSL-1.1.1o-rev1-android": "package-system/OpenSSL/temp/OpenSSL-android",
+    "OpenSSL-1.1.1o-rev1-windows": "package-system/OpenSSL/temp/OpenSSL-windows",
     "OpenXR-1.0.22-rev1-android": "package-system/OpenXR-android",
     "OpenXR-1.0.22-rev1-windows": "package-system/OpenXR-windows",
     "PhysX-4.1.2.29882248-rev5-android": "package-system/PhysX-android",