Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
Rework on top of minizip 1.3.1#1 port
  • Loading branch information
brendan-ward committed Aug 29, 2024
commit 27c21070a844bddbb167acaed4a98aad566a44c8
96 changes: 47 additions & 49 deletions ci/vcpkg-custom-ports/minizip/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,78 +1,76 @@
cmake_minimum_required(VERSION 3.8)
project(minizip VERSION 1.2.13 LANGUAGES C)

find_package(ZLIB REQUIRED)
set(MIN_SRC contrib/minizip)

include_directories(${MIN_SRC} ${ZLIB_INCLUDE_DIRS})

set(MINIZIP_LIBRARIES ZLIB::ZLIB)
cmake_minimum_required(VERSION 3.25)
project(minizip LANGUAGES C)

set(SRC
${MIN_SRC}/ioapi.c
${MIN_SRC}/unzip.c
${MIN_SRC}/zip.c
${MIN_SRC}/mztools.c
ioapi.c
unzip.c
zip.c
mztools.c
)

set(HEADERS
${MIN_SRC}/crypt.h
${MIN_SRC}/ioapi.h
${MIN_SRC}/unzip.h
${MIN_SRC}/zip.h
${MIN_SRC}/mztools.h
crypt.h
ioapi.h
unzip.h
zip.h
mztools.h
)

add_library(minizip ${SRC})
target_include_directories(minizip PUBLIC $<INSTALL_INTERFACE:include/minizip>)

target_link_libraries(minizip PRIVATE ZLIB::ZLIB)
find_package(ZLIB REQUIRED)
target_compile_definitions(minizip PRIVATE -D_ZLIB_H)
target_link_libraries(minizip PUBLIC ZLIB::ZLIB)
set(MINIZIP_REQUIRES zlib)

if(NOT DISABLE_INSTALL_TOOLS)
add_executable(minizip_bin ${MIN_SRC}/minizip.c)
add_executable(miniunz_bin ${MIN_SRC}/miniunz.c)

target_link_libraries(minizip_bin minizip ${MINIZIP_LIBRARIES})
target_link_libraries(miniunz_bin minizip ${MINIZIP_LIBRARIES})

set_target_properties(minizip_bin PROPERTIES OUTPUT_NAME minizip)
set_target_properties(miniunz_bin PROPERTIES OUTPUT_NAME miniunz)
if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
target_compile_definitions(minizip PRIVATE -DIOWIN32_USING_WINRT_API)
endif()

install(
TARGETS minizip
EXPORT minizipTargets
EXPORT unofficial-minizipTargets
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)

include(CMakePackageConfigHelpers)
write_basic_package_version_file("${PROJECT_BINARY_DIR}/minizipConfigVersion.cmake"
COMPATIBILITY SameMajorVersion)
write_basic_package_version_file("${PROJECT_BINARY_DIR}/unofficial-minizipConfigVersion.cmake"
VERSION "${PACKAGE_VERSION}"
COMPATIBILITY SameMajorVersion
)

configure_package_config_file(${PROJECT_SOURCE_DIR}/cmake/minizipConfig.cmake.in
minizipConfig.cmake
INSTALL_DESTINATION share/minizip)
configure_package_config_file(unofficial-minizipConfig.cmake.in
unofficial-minizipConfig.cmake
INSTALL_DESTINATION share/unofficial-minizip
)

install(FILES
"${PROJECT_BINARY_DIR}/minizipConfig.cmake"
"${PROJECT_BINARY_DIR}/minizipConfigVersion.cmake"
DESTINATION share/minizip
"${PROJECT_BINARY_DIR}/unofficial-minizipConfig.cmake"
"${PROJECT_BINARY_DIR}/unofficial-minizipConfigVersion.cmake"
DESTINATION share/unofficial-minizip
)

install(EXPORT minizipTargets
NAMESPACE minizip::
DESTINATION share/minizip
install(EXPORT unofficial-minizipTargets
NAMESPACE unofficial::minizip::
DESTINATION share/unofficial-minizip
)

if(NOT DISABLE_INSTALL_TOOLS)
install(
TARGETS minizip_bin miniunz_bin
RUNTIME DESTINATION tools/minizip
)
endif()

if(NOT DISABLE_INSTALL_HEADERS)
install(FILES ${HEADERS} DESTINATION include/minizip)
endif()
endif()

list(JOIN MINIZIP_REQUIRES " " MINIZIP_REQUIRES)
set(exec_prefix "\${prefix}")
set(libdir "\${prefix}/lib")
set(includedir "\${prefix}/include")
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/minizip.pc.in"
"${CMAKE_CURRENT_BINARY_DIR}/minizip.pc"
@ONLY
)
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/minizip.pc"
DESTINATION lib/pkgconfig
)
4 changes: 3 additions & 1 deletion ci/vcpkg-custom-ports/minizip/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
Port adapted from [minizip 1.2.13#0](https://github.com/microsoft/vcpkg/tree/e0a9559a9b24af116388eae242d675bf9fde025c/ports/minizip).
Port adapted from [minizip 1.3.1#1](https://github.com/microsoft/vcpkg/tree/6db51d86a9c2796581d74c9a7eb46e52ee8cb7eb/ports/minizip).

Major edits:

- change version to v1.2.5.2
- stripped out feature support
- stripped out Windows support
- stripped out Android support and related patch
- stripped out generating symbols in cmake
- stripped out building tools
47 changes: 47 additions & 0 deletions ci/vcpkg-custom-ports/minizip/lib-to-def.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
function(lib_to_def)
if(NOT VCPKG_TARGET_IS_WINDOWS OR VCPKG_TARGET_IS_MINGW OR NOT VCPKG_LIBRARY_LINKAGE STREQUAL "static")
return()
endif()

cmake_parse_arguments(PARSE_ARGV 0 arg "" "BASENAME;REGEX" "")

if(NOT arg_BASENAME)
message(FATAL_ERROR "BASENAME is a required argument.")
endif()

if(NOT arg_REGEX)
set(arg_REGEX "[^ ]+")
endif()

set(logfile "${CURRENT_BUILDTREES_DIR}/dumpbin-${arg_BASENAME}-${TARGET_TRIPLET}-symbols.log")
vcpkg_execute_required_process(
COMMAND dumpbin /symbols "/OUT:${logfile}" "${CURRENT_PACKAGES_DIR}/lib/${arg_BASENAME}.lib"
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
LOGNAME "dumpbin-${arg_BASENAME}-${TARGET_TRIPLET}"
)
file(STRINGS "${logfile}" symbols REGEX "^... ........ SECT.. notype .. External [|] ${arg_REGEX}")
list(TRANSFORM symbols REPLACE "^[^|]+[|] " " ")

if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
string(REPLACE " _" " " symbols "${symbols}")
endif()

list(JOIN symbols "\n" symbols)
set(symbols "EXPORTS\n${symbols}\n")
set(def_file "${CMAKE_CURRENT_LIST_DIR}/${arg_BASENAME}-${VCPKG_TARGET_ARCHITECTURE}.def")

if(NOT EXISTS "${def_file}")
set(def_file "${CMAKE_CURRENT_LIST_DIR}/${arg_BASENAME}-win32.def")
endif()

if(EXISTS "${def_file}")
file(READ "${def_file}" original_symbols)
else()
set(original_symbols "")
endif()

if(NOT symbols STREQUAL original_symbols)
file(WRITE "${CURRENT_BUILDTREES_DIR}/${arg_BASENAME}-${VCPKG_TARGET_ARCHITECTURE}.def.log" "${symbols}")
message(SEND_ERROR "${arg_BASENAME}-${VCPKG_TARGET_ARCHITECTURE}.def has changed.")
endif()
endfunction()
8 changes: 0 additions & 8 deletions ci/vcpkg-custom-ports/minizip/minizipConfig.cmake.in

This file was deleted.

11 changes: 11 additions & 0 deletions ci/vcpkg-custom-ports/minizip/pkgconfig.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
diff --git a/contrib/minizip/minizip.pc.in b/contrib/minizip/minizip.pc.in
index 69b5b7f..9e43084 100644
--- a/contrib/minizip/minizip.pc.in
+++ b/contrib/minizip/minizip.pc.in
@@ -8,5 +8,5 @@ Description: Minizip zip file manipulation library
Requires:
Version: @PACKAGE_VERSION@
Libs: -L${libdir} -lminizip
-Libs.private: -lz
+Requires.private: @MINIZIP_REQUIRES@
Cflags: -I${includedir}
33 changes: 26 additions & 7 deletions ci/vcpkg-custom-ports/minizip/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,42 @@ vcpkg_from_github(
PATCHES
0001-remove-ifndef-NOUNCRYPT.patch
0002-add-declaration-for-mkdir.patch
pkgconfig.patch
)

configure_file("${CMAKE_CURRENT_LIST_DIR}/minizipConfig.cmake.in" "${SOURCE_PATH}/cmake/minizipConfig.cmake.in" COPYONLY)
configure_file("${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt" "${SOURCE_PATH}/CMakeLists.txt" COPYONLY)
# When zlib updated, the minizip port should be updated at the same time
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO madler/zlib
REF v1.2.5.2
SHA512 8b9a7b27c744d9347da308257ba39eb09bfc012dccfcccc6a6b31aa810f4f88655f028b03358abd610559fbff264c3af5fbb4a079495cbec6c945bbc0c2e504a
HEAD_REF master
PATCHES
0001-remove-ifndef-NOUNCRYPT.patch
0002-add-declaration-for-mkdir.patch
)

file(COPY "${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt"
"${CMAKE_CURRENT_LIST_DIR}/minizip-win32.def"
"${CMAKE_CURRENT_LIST_DIR}/unofficial-minizipConfig.cmake.in"
DESTINATION "${SOURCE_PATH}/contrib/minizip"
)

vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
SOURCE_PATH "${SOURCE_PATH}/contrib/minizip"
OPTIONS
-DDISABLE_INSTALL_TOOLS=${VCPKG_TARGET_IS_IOS}
${FEATURE_OPTIONS}
-DPACKAGE_VERSION=${VERSION}
OPTIONS_DEBUG
-DDISABLE_INSTALL_HEADERS=ON
-DDISABLE_INSTALL_TOOLS=ON
)

vcpkg_cmake_install()
vcpkg_copy_pdbs()
vcpkg_cmake_config_fixup()
vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/minizip")
vcpkg_cmake_config_fixup(PACKAGE_NAME unofficial-minizip)
vcpkg_fixup_pkgconfig()

configure_file("${CMAKE_CURRENT_LIST_DIR}/minizipConfig.cmake.in" "${CURRENT_PACKAGES_DIR}/share/${PORT}/minizipConfig.cmake" @ONLY)
file(COPY "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
file(INSTALL "${SOURCE_PATH}/contrib/minizip/MiniZip64_info.txt" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/contrib/minizip/MiniZip64_info.txt")
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
@PACKAGE_INIT@

include(CMakeFindDependencyMacro)
find_dependency(ZLIB)

include("${CMAKE_CURRENT_LIST_DIR}/unofficial-minizipTargets.cmake")
check_required_components(unofficial-minizip)
6 changes: 3 additions & 3 deletions ci/vcpkg-custom-ports/minizip/usage
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
minizip provides CMake targets :
minizip provides CMake targets:

find_package(minizip CONFIG REQUIRED)
target_link_libraries(main PRIVATE minizip::minizip)
find_package(unofficial-minizip CONFIG REQUIRED)
target_link_libraries(main PRIVATE unofficial::minizip::minizip)