Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added a port for xmlsec library #7177

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
147 changes: 147 additions & 0 deletions ports/xmlsec/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
cmake_minimum_required (VERSION 3.8)
project (xmlsec C)

option(INSTALL_HEADERS_TOOLS "Install public header files and tools" ON)

set(CMAKE_SHARED_LIBRARY_PREFIX)
set(CMAKE_STATIC_LIBRARY_PREFIX)

find_package(LibXml2 REQUIRED)
find_package(OpenSSL REQUIRED)

FILE(GLOB SOURCESXMLSEC
src/*.c
)

FILE(GLOB SOURCESXMLSECOPENSSL
src/openssl/*.c
src/strings.c
)

# Generate xmlexports with fixed definition of XMLSEC_STATIC
file(READ include/xmlsec/exports.h EXPORTS_H)
if(BUILD_SHARED_LIBS)
string(REPLACE "!defined(XMLSEC_STATIC)" "1" EXPORTS_H "${EXPORTS_H}")
else()
string(REPLACE "!defined(XMLSEC_STATIC)" "0" EXPORTS_H "${EXPORTS_H}")
endif()
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/exports.h "${EXPORTS_H}")

message(STATUS "Reading version info from configure.ac")

file(STRINGS "configure.ac"
_xmlsec_version_defines REGEX "XMLSEC_VERSION_(MAJOR|MINOR|SUBMINOR)=([0-9]+)$")

foreach(ver ${_xmlsec_version_defines})
if(ver MATCHES "XMLSEC_VERSION_(MAJOR|MINOR|SUBMINOR)=([0-9]+)$")
set(XMLSEC_VERSION_${CMAKE_MATCH_1} "${CMAKE_MATCH_2}" CACHE INTERNAL "")
endif()
endforeach()

set(XMLSEC_VERSION ${XMLSEC_VERSION_MAJOR}.${XMLSEC_VERSION_MINOR}.${XMLSEC_VERSION_SUBMINOR})
math(EXPR XMLSEC_VERSION_INFO_NUMBER
"${XMLSEC_VERSION_MAJOR} + ${XMLSEC_VERSION_MINOR}")
set(XMLSEC_VERSION_INFO ${XMLSEC_VERSION_INFO_NUMBER}:${XMLSEC_VERSION_SUBMINOR}:${XMLSEC_VERSION_MINOR})

message(STATUS "XMLSEC_VERSION: ${XMLSEC_VERSION}")
message(STATUS "XMLSEC_VERSION_MAJOR: ${XMLSEC_VERSION_MAJOR}")
message(STATUS "XMLSEC_VERSION_MINOR: ${XMLSEC_VERSION_MINOR}")
message(STATUS "XMLSEC_VERSION_SUBMINOR: ${XMLSEC_VERSION_SUBMINOR}")
message(STATUS "XMLSEC_VERSION_INFO: ${XMLSEC_VERSION_INFO}")

message(STATUS "Generating version.h")

configure_file(include/xmlsec/version.h.in include/xmlsec/version.h)

if(MSVC)
add_compile_options(/wd4130 /wd4127 /wd4152)
endif()

add_library(libxmlsec ${SOURCESXMLSEC})
add_library(libxmlsec-openssl ${SOURCESXMLSECOPENSSL})

include_directories(${CMAKE_CURRENT_BINARY_DIR}/include include ${LIBXML2_INCLUDE_DIRS})

target_link_libraries(libxmlsec PRIVATE
${LIBXML2_LIBRARIES} OpenSSL::SSL
)
target_link_libraries(libxmlsec-openssl PRIVATE
${LIBXML2_LIBRARIES} OpenSSL::SSL libxmlsec
)

add_compile_definitions(inline=__inline)
add_compile_definitions(PACKAGE="xmlsec")
add_compile_definitions(XMLSEC_MSCRYPTO_NT4=1)
add_compile_definitions(HAVE_STDIO_H)
add_compile_definitions(HAVE_STDLIB_H)
add_compile_definitions(HAVE_STRING_H)
add_compile_definitions(HAVE_CTYPE_H)
add_compile_definitions(HAVE_MALLOC_H)
add_compile_definitions(HAVE_MEMORY_H)
add_compile_definitions(XMLSEC_NO_XSLT=1)
add_compile_definitions(XMLSEC_DEFAULT_CRYPTO="openssl")
add_compile_definitions(XMLSEC_NO_GOST)
add_compile_definitions(XMLSEC_NO_GOST2012)
add_compile_definitions(XMLSEC_NO_SIZE_T)
add_compile_definitions(UNICODE)
add_compile_definitions(_UNICODE)
add_compile_definitions(_MBCS)
add_compile_definitions(_REENTRANT)

target_compile_definitions(libxmlsec-openssl PRIVATE
-DXMLSEC_CRYPTO_OPENSSL
)

set_target_properties(libxmlsec PROPERTIES VERSION ${XMLSEC_VERSION_MAJOR}.${XMLSEC_VERSION_MINOR})
set_target_properties(libxmlsec-openssl PROPERTIES VERSION ${XMLSEC_VERSION_MAJOR}.${XMLSEC_VERSION_MINOR})

if(NOT BUILD_SHARED_LIBS)
target_compile_definitions(libxmlsec PRIVATE -DLIBXML_STATIC -DLIBXSLT_STATIC -DXMLSEC_STATIC -DXMLSEC_NO_CRYPTO_DYNAMIC_LOADING)
target_compile_definitions(libxmlsec-openssl PRIVATE -DLIBXML_STATIC -DLIBXSLT_STATIC -DXMLSEC_STATIC -DXMLSEC_NO_CRYPTO_DYNAMIC_LOADING)
else()
target_compile_definitions(libxmlsec PRIVATE -DXMLSEC_DL_WIN32)
target_compile_definitions(libxmlsec-openssl PRIVATE -DXMLSEC_DL_WIN32)
endif()

install(TARGETS libxmlsec libxmlsec-openssl
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)

if(INSTALL_HEADERS_TOOLS)
file(GLOB PUBLIC_HEADERS
include/xmlsec/*.h
include/xmlsec/openssl/*.h)
list(FILTER PUBLIC_HEADERS EXCLUDE REGEX "exports\\.h$")

foreach(file IN LISTS PUBLIC_HEADERS)
get_filename_component(dir ${file} DIRECTORY)
file(RELATIVE_PATH rel_dir ${CMAKE_SOURCE_DIR}/xmlsec/${LIB} ${dir})
install(FILES ${file} DESTINATION "include/${rel_dir}")
endforeach()

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/xmlsec/version.h DESTINATION "include/xmlsec")
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/exports.h DESTINATION "include/xmlsec")

# xmlsec application
add_executable(xmlsec
apps/crypto.c
apps/cmdline.c
apps/xmlsec.c)

target_link_libraries(xmlsec PRIVATE
${LIBXML2_LIBRARIES} OpenSSL::SSL libxmlsec libxmlsec-openssl
)

target_compile_definitions(xmlsec PRIVATE
-DXMLSEC_CRYPTO_OPENSSL
)

if(BUILD_SHARED_LIBS)
target_compile_definitions(xmlsec PRIVATE -DXMLSEC_CRYPTO_DYNAMIC_LOADING)
else()
target_compile_definitions(xmlsec PRIVATE -DLIBXML_STATIC -DLIBXSLT_STATIC -DXMLSEC_STATIC)
endif()
install(TARGETS xmlsec DESTINATION tools/xmlsec)
endif()
5 changes: 5 additions & 0 deletions ports/xmlsec/CONTROL
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Source: xmlsec
Version: 1.2.28
Homepage: https://www.aleksey.com/xmlsec/
Description: XML Security Library is a C library based on LibXML2. The library supports major XML security standards.
Build-Depends: libxml2, openssl
25 changes: 25 additions & 0 deletions ports/xmlsec/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
include(vcpkg_common_functions)

vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO lsh123/xmlsec
REF xmlsec-1_2_28
SHA512 fb0c775f6455ce5a5579a69bb91d60fe90c023e538c32bdf2a70aa413a53b22ef938349a3ce6b42bb23f8f70b4e00f1b9917f877487bb1507c927ec70c3d95f5
HEAD_REF master
)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vcpkg_check_linkage(ONLY_STATIC_LIBRARY)

file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH})


vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
PREFER_NINJA
OPTIONS -DPORT_DIR=${CMAKE_CURRENT_LIST_DIR}
OPTIONS_DEBUG -DINSTALL_HEADERS_TOOLS=OFF
)

vcpkg_install_cmake()

file(INSTALL ${SOURCE_PATH}/Copyright DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)

vcpkg_copy_pdbs()