記事ディレクトリ
序文
vcpkg は多くの C++ パッケージを収集しますが、含まれていないものも常にあります. バージョンをopenssl 3.0.0
例にとると、このバージョンの vcpkg は含まれていません. このチュートリアルでは、カスタム vcpkg を追加する方法を説明します.
新しいオーバーレイ ポート
vcpkg ルート ディレクトリにoverlayports
という名前のフォルダーを作成し (実際には、任意の名前を付けることができます。次のチュートリアルではこれを例として使用します) overlayports
、それぞれに 2 つの新しいフォルダーを作成しますports
。versions
# overlayports目录结构
├─ports
│ └─openssl
└─versions
└─o-
│ └─openssl.json
└─baseline.json
ベースライン.json を書く
overlayports/versions
新しいディレクトリを作成しbaseline.json
、次の内容を保存します
{
"default": {
"openssl": {
"baseline": "3.0.0",
"port-version": 0
}
}
}
port-version
これはバージョン管理から取得され、デフォルトは 0 です。たとえば、3.0.0 には 2 つのマイナー バージョンがあり、それぞれ 0 と 1 です。
openssl.json を書く
openssl は文字 o で始まるため、overlayports/versions
ディレクトリに新しいフォルダーを作成しo-
、o-
そのフォルダーに新しいフォルダーを作成します。openssl.json
{
"versions": [
{
"git-tree": "3e5163bcf41573dd2bc14130db52e77599f4132d",
"version": "3.0.0",
"port-version": 0
}
]
}
git-tree
フィールドはコミットのハッシュである必要がありますが、自由に入力することもできます
git add ports/openssl
git commit -m "ports: add openssl"
git rev-parse HEAD:ports/openssl
これは計算できる
構成の書き込み
このため、元のフォルダー全体をports
直接コピーすることをお勧めします。openssl
vcpkg.json を変更する
version
に変更し3.0.0
、port-version
キーの値を に変更し0
、その他はそのままにします。
{
"name": "openssl",
"version": "3.0.0",
"port-version": 1,
"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",
"license": "Apache-2.0",
"dependencies": [
{
"name": "vcpkg-cmake",
"host": true
},
{
"name": "vcpkg-cmake-config",
"host": true
},
{
"name": "vcpkg-cmake-get-vars",
"host": true
}
],
"features": {
"tools": {
"description": "Install openssl executable and scripts",
"supports": "!uwp"
}
}
}
portfile.cmake の修正
この変更は少し大きく、いくつかのコマンドが設計されています. たとえば、github の openssl は 3.0.0 のコードをアップロードするのではなく、公式 Web サイト. ソース コードをプルするために使用されるため、次のように変更する必要がありますvcpkg_from_github
。vcpkg_download_distfile
., 元のパッチは利用できません.vcpkg_extract_source_archive
パッチを適用するには追加のコマンドを使用する必要があります.取得するにはローカル計算にSHA512をダウンロードする必要があります.
(Get-FileHash .\openssl-3.0.0.tar.gz -Algorithm SHA512 | Format-List).Hash.ToLower()
- ただ保存する
if(EXISTS "${CURRENT_INSTALLED_DIR}/share/libressl/copyright"
OR EXISTS "${CURRENT_INSTALLED_DIR}/share/boringssl/copyright")
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()
if(VCPKG_TARGET_IS_EMSCRIPTEN)
vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
endif()
if (NOT "${VERSION}" MATCHES [[^([0-9]+)\.([0-9]+)\.([0-9]+)$]])
message(FATAL_ERROR "Version regex did not match.")
endif()
set(OPENSSL_VERSION_MAJOR "${CMAKE_MATCH_1}")
set(OPENSSL_VERSION_MINOR "${CMAKE_MATCH_2}")
set(OPENSSL_VERSION_FIX "${CMAKE_MATCH_3}")
configure_file("${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake.in" "${CURRENT_PACKAGES_DIR}/share/${PORT}/vcpkg-cmake-wrapper.cmake" @ONLY)
vcpkg_download_distfile(
ARCHIVE
URLS "https://www.openssl.org/source/old/3.0/openssl-${VERSION}.tar.gz"
FILENAME "openssl-${OPENSSL_VERSION}.tar.gz"
SHA512 1fdf769ef69631eb802671a9e0bb3a01883d58282f651986212983c2d7c9d3499dabe99a6dee0411e997e6fcfa6f682b121b7698596de0d6c78850c2200241b1
)
vcpkg_extract_source_archive(
SOURCE_PATH
ARCHIVE "${ARCHIVE}"
PATCHES
disable-apps.patch
disable-install-docs.patch
script-prefix.patch
windows/install-layout.patch
windows/install-pdbs.patch
unix/android-cc.patch
unix/move-openssldir.patch
unix/no-empty-dirs.patch
unix/no-static-libs-for-shared.patch
)
vcpkg_list(SET CONFIGURE_OPTIONS
enable-static-engine
enable-capieng
no-ssl3
no-weak-ssl-ciphers
no-tests
)
if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
vcpkg_list(APPEND CONFIGURE_OPTIONS shared)
else()
vcpkg_list(APPEND CONFIGURE_OPTIONS no-shared no-module)
endif()
if(NOT "tools" IN_LIST FEATURES)
vcpkg_list(APPEND CONFIGURE_OPTIONS no-apps)
endif()
if(DEFINED OPENSSL_USE_NOPINSHARED)
vcpkg_list(APPEND CONFIGURE_OPTIONS no-pinshared)
endif()
if(OPENSSL_NO_AUTOLOAD_CONFIG)
vcpkg_list(APPEND CONFIGURE_OPTIONS no-autoload-config)
endif()
if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
include("${CMAKE_CURRENT_LIST_DIR}/windows/portfile.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/install-pc-files.cmake")
else()
include("${CMAKE_CURRENT_LIST_DIR}/unix/portfile.cmake")
endif()
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
file(INSTALL "${SOURCE_PATH}/LICENSE.txt" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
マウントの取り付け
vcpkg インストール コマンドの実行時に、マウントするパスを入力する必要があります。
vcpkg install --overlay-ports=overlayports/ports/openssl openssl:x64-windows-static
- ログ
PS E:\vcpkg> vcpkg install --overlay-ports=overlayports/ports/openssl openssl:x64-windows-static
Computing installation plan...
The following packages will be built and installed:
openssl[core]:x64-windows-static -> 3.0.0 -- E:\vcpkg\overlayports/ports/openssl
Detecting compiler hash for triplet x64-windows-static...
-- Automatically setting HTTP(S)_PROXY environment variables to "127.0.0.1:7890".
Restored 0 package(s) from C:\Users\NueXini\AppData\Local\vcpkg\archives in 114 us. Use --debug to see more details.
Installing 1/1 openssl:x64-windows-static...
Building openssl[core]:x64-windows-static...
-- Installing port from location: E:\vcpkg\overlayports/ports/openssl
-- Downloading https://www.openssl.org/source/old/3.0/openssl-3.0.0.tar.gz -> openssl-.tar.gz...
-- Extracting source E:/vcpkg/downloads/openssl-.tar.gz
-- Applying patch disable-apps.patch
-- Applying patch disable-install-docs.patch
-- Applying patch script-prefix.patch
-- Applying patch windows/install-layout.patch
-- Applying patch windows/install-pdbs.patch
-- Applying patch unix/android-cc.patch
-- Applying patch unix/move-openssldir.patch
-- Applying patch unix/no-empty-dirs.patch
-- Applying patch unix/no-static-libs-for-shared.patch
-- Using source at E:/vcpkg/buildtrees/openssl/src/openssl--79f2f1128b.clean
-- Found external ninja('1.11.0').
-- Getting CMake variables for x64-windows-static
-- Getting CMake variables for x64-windows-static
-- Prerunning x64-windows-static-dbg
-- Building x64-windows-static-dbg
-- Prerunning x64-windows-static-rel
-- Building x64-windows-static-rel
-- Fixing pkgconfig file: E:/vcpkg/packages/openssl_x64-windows-static/lib/pkgconfig/libcrypto.pc
-- Fixing pkgconfig file: E:/vcpkg/packages/openssl_x64-windows-static/lib/pkgconfig/libssl.pc
-- Fixing pkgconfig file: E:/vcpkg/packages/openssl_x64-windows-static/lib/pkgconfig/openssl.pc
-- Using cached msys-mingw-w64-i686-pkg-config-0.29.2-3-any.pkg.tar.zst.
-- Using cached msys-mingw-w64-i686-libwinpthread-git-9.0.0.6373.5be8fcd83-1-any.pkg.tar.zst.
-- Using msys root at E:/vcpkg/downloads/tools/msys2/9a1ec3f33446b195
-- Fixing pkgconfig file: E:/vcpkg/packages/openssl_x64-windows-static/debug/lib/pkgconfig/libcrypto.pc
-- Fixing pkgconfig file: E:/vcpkg/packages/openssl_x64-windows-static/debug/lib/pkgconfig/libssl.pc
-- Fixing pkgconfig file: E:/vcpkg/packages/openssl_x64-windows-static/debug/lib/pkgconfig/openssl.pc
-- Installing: E:/vcpkg/packages/openssl_x64-windows-static/share/openssl/usage
-- Installing: E:/vcpkg/packages/openssl_x64-windows-static/share/openssl/copyright
-- Performing post-build validation
Stored binary cache: "C:\Users\NueXini\AppData\Local\vcpkg\archives\52\52725e8d8c97f33f16c3d5b775ac6942aa930813223f43e0faa0b77d8af5b265.zip"
Elapsed time to handle openssl:x64-windows-static: 2 min
Total install time: 2 min
The package openssl is compatible with built-in CMake targets:
find_package(OpenSSL REQUIRED)
target_link_libraries(main PRIVATE OpenSSL::SSL OpenSSL::Crypto)
これでopenssl3.0.0のインストールは完了です
あとがき
上記は、vcpkg がカスタム パッケージのインストールを追加するためのすべてのチュートリアルです. それでも理解できない場合は、次の記事を参照してください。
〜を楽しむ