[yubico-piv-tool] Add new port (#50590)

This commit is contained in:
Kim Laine 2026-03-23 23:45:17 -07:00 committed by GitHub
parent 45c49259e4
commit 6bb5d895fb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 258 additions and 0 deletions

View File

@ -0,0 +1,111 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -63,10 +63,12 @@
endif()
if(MSVC)
- if((NOT GETOPT_LIB_DIR) OR (NOT GETOPT_INCLUDE_DIR))
- message(FATAL_ERROR "please provide definitions for "
- "GETOPT_LIB_DIR and GETOPT_INCLUDE_DIR when building "
- "under msvc")
+ if(NOT BUILD_ONLY_LIB)
+ if((NOT GETOPT_LIB_DIR) OR (NOT GETOPT_INCLUDE_DIR))
+ message(FATAL_ERROR "please provide definitions for "
+ "GETOPT_LIB_DIR and GETOPT_INCLUDE_DIR when building "
+ "under msvc")
+ endif()
endif()
if(SUPRESS_MSVC_WARNINGS)
set(MSVC_DISABLED_WARNINGS_LIST
@@ -93,7 +95,7 @@
else()
find_package (PkgConfig REQUIRED)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-braces")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wformat -Wformat-security")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wshadow -Wpointer-arith")
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -79,38 +79,43 @@
endif(BUILD_STATIC_LIB)
# dynamic library
-add_library(ykpiv_shared SHARED ${SOURCE})
-target_link_libraries(ykpiv_shared ${LIBCRYPTO_LIBRARIES} ${PCSC_LIBRARIES} ${ZLIB_LIBS} ${ADDITIONAL_LIBRARY})
-set_target_properties(ykpiv_shared PROPERTIES SOVERSION ${SO_VERSION} VERSION ${VERSION})
-if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
- set_target_properties(ykpiv_shared PROPERTIES INSTALL_RPATH "${YKPIV_INSTALL_LIB_DIR}")
-endif()
-if(WIN32)
- set_target_properties(ykpiv_shared PROPERTIES OUTPUT_NAME libykpiv)
-else(WIN32)
- set_target_properties(ykpiv_shared PROPERTIES OUTPUT_NAME ykpiv)
-endif(WIN32)
-add_coverage(ykpiv_shared)
+if(NOT BUILD_STATIC_LIB)
+ add_library(ykpiv_shared SHARED ${SOURCE})
+ target_link_libraries(ykpiv_shared ${LIBCRYPTO_LIBRARIES} ${PCSC_LIBRARIES} ${ZLIB_LIBS} ${ADDITIONAL_LIBRARY})
+ set_target_properties(ykpiv_shared PROPERTIES SOVERSION ${SO_VERSION} VERSION ${VERSION})
+ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+ set_target_properties(ykpiv_shared PROPERTIES INSTALL_RPATH "${YKPIV_INSTALL_LIB_DIR}")
+ endif()
+ if(WIN32)
+ set_target_properties(ykpiv_shared PROPERTIES OUTPUT_NAME libykpiv)
+ else(WIN32)
+ set_target_properties(ykpiv_shared PROPERTIES OUTPUT_NAME ykpiv)
+ endif(WIN32)
+ add_coverage(ykpiv_shared)
+endif()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ykpiv.pc.in ${CMAKE_CURRENT_SOURCE_DIR}/ykpiv.pc @ONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ykpiv-config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/ykpiv-config.h @ONLY)
-install(
- TARGETS ykpiv_shared
- ARCHIVE DESTINATION ${YKPIV_INSTALL_LIB_DIR}
- LIBRARY DESTINATION ${YKPIV_INSTALL_LIB_DIR}
- RUNTIME DESTINATION ${YKPIV_INSTALL_BIN_DIR})
-if(BUILD_STATIC_LIB)
- install(
+if(NOT BUILD_STATIC_LIB)
+ install(
+ TARGETS ykpiv_shared
+ ARCHIVE DESTINATION ${YKPIV_INSTALL_LIB_DIR}
+ LIBRARY DESTINATION ${YKPIV_INSTALL_LIB_DIR}
+ RUNTIME DESTINATION ${YKPIV_INSTALL_BIN_DIR})
+else()
+ install(
TARGETS ykpiv
ARCHIVE DESTINATION ${YKPIV_INSTALL_LIB_DIR}
LIBRARY DESTINATION ${YKPIV_INSTALL_LIB_DIR}
RUNTIME DESTINATION ${YKPIV_INSTALL_BIN_DIR})
-endif(BUILD_STATIC_LIB)
+endif()
install(FILES ykpiv.h DESTINATION ${YKPIV_INSTALL_INC_DIR}/ykpiv)
install(FILES ykpiv-config.h DESTINATION ${YKPIV_INSTALL_INC_DIR}/ykpiv)
install(FILES ykpiv.pc DESTINATION ${YKPIV_INSTALL_PKGCONFIG_DIR})
-add_subdirectory(tests)
+if(NOT DEFINED SKIP_TESTS)
+ add_subdirectory(tests)
+endif()
diff --git a/lib/ykpiv.pc.in b/lib/ykpiv.pc.in
--- a/lib/ykpiv.pc.in
+++ b/lib/ykpiv.pc.in
@@ -26,8 +26,8 @@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=@CMAKE_INSTALL_PREFIX@
-libdir=@YKPIV_INSTALL_LIB_DIR@
-includedir=@YKPIV_INSTALL_INC_DIR@
+libdir=${prefix}/@YKPIV_INSTALL_LIB_DIR@
+includedir=${prefix}/@YKPIV_INSTALL_INC_DIR@
Name: @CMAKE_PROJECT_NAME@
Description: Yubico PIV C Library

View File

@ -0,0 +1,51 @@
vcpkg_download_distfile(ARCHIVE
URLS "https://developers.yubico.com/yubico-piv-tool/Releases/yubico-piv-tool-${VERSION}.tar.gz"
FILENAME "yubico-piv-tool-${VERSION}.tar.gz"
SHA512 2bac8a875c7c5c3d1e5e8ec84fc70b37fc5b08985ef7ef96f6a9eaf5be882eeb9b1dbfb6cc0d6f5c00586f625cefa38c2d34d0e5aef5164be7274162af3554b8
)
vcpkg_extract_source_archive(SOURCE_PATH
ARCHIVE "${ARCHIVE}"
PATCHES
patches/fix-build-system.patch
)
# Map vcpkg linkage to upstream's BUILD_STATIC_LIB option
string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" YKPIV_BUILD_STATIC)
vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
DISABLE_PARALLEL_CONFIGURE
OPTIONS
-DBUILD_ONLY_LIB=ON
-DBUILD_STATIC_LIB=${YKPIV_BUILD_STATIC}
-DSKIP_TESTS=1
-DENABLE_HARDWARE_TESTS=OFF
-DGENERATE_MAN_PAGES=OFF
-DENABLE_COVERAGE=OFF
-DENABLE_CERT_COMPRESS=ON
-DYKPIV_INSTALL_LIB_DIR=lib
-DYKPIV_INSTALL_INC_DIR=include
-DYKPIV_INSTALL_BIN_DIR=bin
-DYKPIV_INSTALL_PKGCONFIG_DIR=lib/pkgconfig
MAYBE_UNUSED_VARIABLES
SKIP_TESTS # Not consumed when BUILD_ONLY_LIB is ON
)
vcpkg_cmake_install()
vcpkg_copy_pdbs()
vcpkg_fixup_pkgconfig()
# Remove duplicate/unnecessary dirs from debug
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share")
# Install unofficial CMake config
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/unofficial-libykpiv-config.cmake"
DESTINATION "${CURRENT_PACKAGES_DIR}/share/unofficial-libykpiv")
# Install usage instructions
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage"
DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYING")

View File

@ -0,0 +1,54 @@
include(CMakeFindDependencyMacro)
find_dependency(OpenSSL)
find_dependency(ZLIB)
if(NOT TARGET unofficial::libykpiv::ykpiv)
add_library(unofficial::libykpiv::ykpiv UNKNOWN IMPORTED)
find_library(_unofficial_ykpiv_library_release
NAMES ykpiv ykpiv_static libykpiv
PATHS "${CMAKE_CURRENT_LIST_DIR}/../../lib"
NO_DEFAULT_PATH
)
find_library(_unofficial_ykpiv_library_debug
NAMES ykpiv ykpiv_static libykpiv
PATHS "${CMAKE_CURRENT_LIST_DIR}/../../debug/lib"
NO_DEFAULT_PATH
)
# Transitive dependencies
set(_ykpiv_link_libs OpenSSL::Crypto ZLIB::ZLIB)
if(WIN32)
list(APPEND _ykpiv_link_libs winscard ws2_32)
elseif(APPLE)
list(APPEND _ykpiv_link_libs "-framework PCSC")
else()
find_library(_unofficial_ykpiv_pcsclite pcsclite)
if(NOT _unofficial_ykpiv_pcsclite)
message(FATAL_ERROR "libpcsclite not found.")
endif()
list(APPEND _ykpiv_link_libs ${_unofficial_ykpiv_pcsclite})
endif()
set_target_properties(unofficial::libykpiv::ykpiv PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_LIST_DIR}/../../include"
INTERFACE_LINK_LIBRARIES "${_ykpiv_link_libs}"
)
if(_unofficial_ykpiv_library_release)
set_property(TARGET unofficial::libykpiv::ykpiv APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(unofficial::libykpiv::ykpiv PROPERTIES
IMPORTED_LOCATION_RELEASE "${_unofficial_ykpiv_library_release}"
)
endif()
if(_unofficial_ykpiv_library_debug)
set_property(TARGET unofficial::libykpiv::ykpiv APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(unofficial::libykpiv::ykpiv PROPERTIES
IMPORTED_LOCATION_DEBUG "${_unofficial_ykpiv_library_debug}"
)
endif()
unset(_ykpiv_link_libs)
endif()

View File

@ -0,0 +1,9 @@
yubico-piv-tool provides CMake targets:
find_package(unofficial-libykpiv CONFIG REQUIRED)
target_link_libraries(main PRIVATE unofficial::libykpiv::ykpiv)
yubico-piv-tool provides pkg-config modules:
# Yubico PIV C Library
ykpiv

View File

@ -0,0 +1,16 @@
{
"name": "yubico-piv-tool",
"version": "2.7.3",
"description": "YubiKey PIV library (libykpiv) for interacting with the PIV application on a YubiKey",
"homepage": "https://github.com/Yubico/yubico-piv-tool",
"license": "BSD-2-Clause",
"supports": "!android & !ios",
"dependencies": [
"openssl",
{
"name": "vcpkg-cmake",
"host": true
},
"zlib"
]
}

View File

@ -716,6 +716,8 @@ xbitmaps:x64-android=fail
xbitmaps:x64-linux=fail
xdigest:arm64-linux=fail
yara:arm64-linux=fail
yubico-piv-tool:arm64-linux=fail # requires system libpcsclite-dev
yubico-piv-tool:x64-linux=fail # requires system libpcsclite-dev
z3:arm64-linux=fail
zeroc-ice:arm-neon-android=fail
zeroc-ice:arm64-android=fail

View File

@ -1541,6 +1541,8 @@ xdigest:arm64-linux=fail
xerces-c[xmlch-wchar](!windows)=feature-fails # wchar_t must be 16 bit and not 32
yara:arm64-linux=fail
yoctolib:arm64-linux=cascade
yubico-piv-tool:arm64-linux=fail # requires system libpcsclite-dev
yubico-piv-tool:x64-linux=fail # requires system libpcsclite-dev
z3:arm64-linux=fail
zeroc-ice:arm64-linux=fail
zeroc-ice[icediscovery]:x64-windows-static-md=cascade

View File

@ -11020,6 +11020,10 @@
"baseline": "1.6.0",
"port-version": 0
},
"yubico-piv-tool": {
"baseline": "2.7.3",
"port-version": 0
},
"yyjson": {
"baseline": "0.12.0",
"port-version": 0

View File

@ -0,0 +1,9 @@
{
"versions": [
{
"git-tree": "40436deb11b8ddf2267cb5d4633d1853040316b1",
"version": "2.7.3",
"port-version": 0
}
]
}