Skip to content
Merged
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
20 changes: 20 additions & 0 deletions ports/xmlsec/0001-uwp-fix.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
diff --git a/src/dl.c b/src/dl.c
index b13f9d4..4a1b0c1 100644
--- a/src/dl.c
+++ b/src/dl.c
@@ -148,7 +148,14 @@ xmlSecCryptoDLLibraryCreate(const xmlChar* name) {
#endif /* XMLSEC_DL_LIBLTDL */

#ifdef XMLSEC_DL_WIN32
- lib->handle = LoadLibraryA((char*)lib->filename);
+#if !defined(WINAPI_FAMILY) || WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP
+ lib->handle = LoadLibraryA((char*)lib->filename);
+#else
+ LPTSTR wcLib = NULL;
+ wcLib = xmlSecWin32ConvertUtf8ToTstr((char*)lib->filename);
+ if (wcLib)
+ lib->handle = LoadPackagedLibrary(wcLib, 0);
+#endif
if(lib->handle == NULL) {
xmlSecIOError("LoadLibraryA", lib->filename, NULL);
xmlSecCryptoDLLibraryDestroy(lib);
152 changes: 152 additions & 0 deletions ports/xmlsec/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
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)
find_package(unofficial-iconv 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)

if(CMAKE_SYSTEM_NAME STREQUAL "Windows" OR CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
target_link_libraries(xmlsec PRIVATE crypt32.lib)
endif()

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

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
27 changes: 27 additions & 0 deletions ports/xmlsec/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
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
PATCHES
0001-uwp-fix.patch
)

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()