diff --git a/ports/liblzma/CMakeLists.txt b/ports/liblzma/CMakeLists.txt deleted file mode 100644 index c87b0b611f9bdf..00000000000000 --- a/ports/liblzma/CMakeLists.txt +++ /dev/null @@ -1,182 +0,0 @@ -cmake_minimum_required(VERSION 3.0) -project(LibLZMA) - -set(INSTALL_BIN_DIR "bin" CACHE PATH "Path where exe and dll will be installed") -set(INSTALL_LIB_DIR "lib" CACHE PATH "Path where lib will be installed") -set(INSTALL_INCLUDE_DIR "include" CACHE PATH "Path where headers will be installed") -set(INSTALL_CMAKE_DIR "share/liblzma" CACHE PATH "Path where cmake configs will be installed") -set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Append a suffix to debug libraries") - -if(NOT WIN32) - file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/config.h - " -#define TUKLIB_SYMBOL_PREFIX lzma_ -#define ASSUME_RAM 128 -#define HAVE_CHECK_CRC32 1 -#define HAVE_CHECK_CRC64 1 -#define HAVE_CHECK_SHA256 1 -#define HAVE_DECODERS 1 -#define HAVE_DECODER_ARM 1 -#define HAVE_DECODER_ARMTHUMB 1 -#define HAVE_DECODER_DELTA 1 -#define HAVE_DECODER_IA64 1 -#define HAVE_DECODER_LZMA1 1 -#define HAVE_DECODER_LZMA2 1 -#define HAVE_DECODER_POWERPC 1 -#define HAVE_DECODER_SPARC 1 -#define HAVE_DECODER_X86 1 -#define HAVE_ENCODERS 1 -#define HAVE_ENCODER_ARM 1 -#define HAVE_ENCODER_ARMTHUMB 1 -#define HAVE_ENCODER_DELTA 1 -#define HAVE_ENCODER_IA64 1 -#define HAVE_ENCODER_LZMA1 1 -#define HAVE_ENCODER_LZMA2 1 -#define HAVE_ENCODER_POWERPC 1 -#define HAVE_ENCODER_SPARC 1 -#define HAVE_ENCODER_X86 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_LIMITS_H 1 -#define HAVE_MF_BT2 1 -#define HAVE_MF_BT3 1 -#define HAVE_MF_BT4 1 -#define HAVE_MF_HC3 1 -#define HAVE_MF_HC4 1 -#define HAVE_STDBOOL_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STRING_H 1 -#define HAVE_VISIBILITY 1 -#define MYTHREAD_POSIX 1 -#define PACKAGE_NAME \"XZ Utils\" -#define PACKAGE_URL \"http://tukaani.org/xz/\" -#define SIZEOF_SIZE_T (sizeof(size_t)) -") -endif() - -add_library(LibLZMA - src/common/tuklib_cpucores.c - src/common/tuklib_physmem.c - src/liblzma/check/check.c - src/liblzma/check/crc32_fast.c - src/liblzma/check/crc32_table.c - src/liblzma/check/crc64_fast.c - src/liblzma/check/crc64_table.c - src/liblzma/check/sha256.c - src/liblzma/common/alone_decoder.c - src/liblzma/common/alone_encoder.c - src/liblzma/common/auto_decoder.c - src/liblzma/common/block_buffer_decoder.c - src/liblzma/common/block_buffer_encoder.c - src/liblzma/common/block_decoder.c - src/liblzma/common/block_encoder.c - src/liblzma/common/block_header_decoder.c - src/liblzma/common/block_header_encoder.c - src/liblzma/common/block_util.c - src/liblzma/common/common.c - src/liblzma/common/easy_buffer_encoder.c - src/liblzma/common/easy_decoder_memusage.c - src/liblzma/common/easy_encoder.c - src/liblzma/common/easy_encoder_memusage.c - src/liblzma/common/easy_preset.c - src/liblzma/common/filter_buffer_decoder.c - src/liblzma/common/filter_buffer_encoder.c - src/liblzma/common/filter_common.c - src/liblzma/common/filter_decoder.c - src/liblzma/common/filter_encoder.c - src/liblzma/common/filter_flags_decoder.c - src/liblzma/common/filter_flags_encoder.c - src/liblzma/common/hardware_cputhreads.c - src/liblzma/common/hardware_physmem.c - src/liblzma/common/index.c - src/liblzma/common/index_decoder.c - src/liblzma/common/index_encoder.c - src/liblzma/common/index_hash.c - src/liblzma/common/outqueue.c - src/liblzma/common/stream_buffer_decoder.c - src/liblzma/common/stream_buffer_encoder.c - src/liblzma/common/stream_decoder.c - src/liblzma/common/stream_encoder.c - src/liblzma/common/stream_encoder_mt.c - src/liblzma/common/stream_flags_common.c - src/liblzma/common/stream_flags_decoder.c - src/liblzma/common/stream_flags_encoder.c - src/liblzma/common/vli_decoder.c - src/liblzma/common/vli_encoder.c - src/liblzma/common/vli_size.c - src/liblzma/delta/delta_common.c - src/liblzma/delta/delta_decoder.c - src/liblzma/delta/delta_encoder.c - src/liblzma/lzma/fastpos_table.c - src/liblzma/lzma/lzma2_decoder.c - src/liblzma/lzma/lzma2_encoder.c - src/liblzma/lzma/lzma_decoder.c - src/liblzma/lzma/lzma_encoder.c - src/liblzma/lzma/lzma_encoder_optimum_fast.c - src/liblzma/lzma/lzma_encoder_optimum_normal.c - src/liblzma/lzma/lzma_encoder_presets.c - src/liblzma/lz/lz_decoder.c - src/liblzma/lz/lz_encoder.c - src/liblzma/lz/lz_encoder_mf.c - src/liblzma/rangecoder/price_table.c - src/liblzma/simple/arm.c - src/liblzma/simple/armthumb.c - src/liblzma/simple/ia64.c - src/liblzma/simple/powerpc.c - src/liblzma/simple/simple_coder.c - src/liblzma/simple/simple_decoder.c - src/liblzma/simple/simple_encoder.c - src/liblzma/simple/sparc.c - src/liblzma/simple/x86.c -) - -if(WIN32) - target_include_directories(LibLZMA PRIVATE $) -else() - target_compile_definitions(LibLZMA PRIVATE -DHAVE_VISIBILITY=1) -endif() - -if(BUILD_SHARED_LIBS) - target_compile_definitions(LibLZMA PRIVATE -DDLL_EXPORT) - target_compile_definitions(LibLZMA PUBLIC -DLIBLZMADLL_EXPORTS) -else() - target_compile_definitions(LibLZMA PUBLIC -DLZMA_API_STATIC) -endif() -target_compile_definitions(LibLZMA PRIVATE -DHAVE_CONFIG_H) - -target_include_directories(LibLZMA PUBLIC - $ - $ - $ - $ - $ - $ - $ - $ - $ - $ - $ -) - -set_target_properties(LibLZMA PROPERTIES OUTPUT_NAME "lzma") - -set_target_properties(LibLZMA PROPERTIES PUBLIC_HEADER -"${PROJECT_SOURCE_DIR}/src/liblzma/api/lzma/base.h;${PROJECT_SOURCE_DIR}/src/liblzma/api/lzma/bcj.h;${PROJECT_SOURCE_DIR}/src/liblzma/api/lzma/block.h;${PROJECT_SOURCE_DIR}/src/liblzma/api/lzma/check.h;${PROJECT_SOURCE_DIR}/src/liblzma/api/lzma/container.h;${PROJECT_SOURCE_DIR}/src/liblzma/api/lzma/delta.h;${PROJECT_SOURCE_DIR}/src/liblzma/api/lzma/filter.h;${PROJECT_SOURCE_DIR}/src/liblzma/api/lzma/hardware.h;${PROJECT_SOURCE_DIR}/src/liblzma/api/lzma/index.h;${PROJECT_SOURCE_DIR}/src/liblzma/api/lzma/index_hash.h;${PROJECT_SOURCE_DIR}/src/liblzma/api/lzma/lzma12.h;${PROJECT_SOURCE_DIR}/src/liblzma/api/lzma/stream_flags.h;${PROJECT_SOURCE_DIR}/src/liblzma/api/lzma/version.h;${PROJECT_SOURCE_DIR}/src/liblzma/api/lzma/vli.h" -) - -install(TARGETS LibLZMA EXPORT LibLZMATargets - RUNTIME DESTINATION "${INSTALL_BIN_DIR}" - ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" - LIBRARY DESTINATION "${INSTALL_LIB_DIR}" - PUBLIC_HEADER DESTINATION "${INSTALL_INCLUDE_DIR}/lzma" -) - -install(FILES "${PROJECT_SOURCE_DIR}/src/liblzma/api/lzma.h" - DESTINATION "${INSTALL_INCLUDE_DIR}" -) - -install(EXPORT LibLZMATargets - FILE LibLZMAConfig.cmake - NAMESPACE LibLZMA:: - DESTINATION "${INSTALL_CMAKE_DIR}" -) diff --git a/ports/liblzma/CONTROL b/ports/liblzma/CONTROL index dc9d0fda86c7e5..da00befc3aca47 100644 --- a/ports/liblzma/CONTROL +++ b/ports/liblzma/CONTROL @@ -1,5 +1,5 @@ Source: liblzma Version: 5.2.5 -Port-Version: 1 +Port-Version: 2 Homepage: https://github.com/xz-mirror/xz Description: Compression library with an API similar to that of zlib. diff --git a/ports/liblzma/fix_config_include.patch b/ports/liblzma/fix_config_include.patch new file mode 100644 index 00000000000000..20b32895a6618f --- /dev/null +++ b/ports/liblzma/fix_config_include.patch @@ -0,0 +1,12 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 34c6aca00..7b3708ab2 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -401,6 +401,7 @@ if(WIN32) + if(BUILD_SHARED_LIBS) + # Add the Windows resource file for liblzma.dll. + target_sources(liblzma PRIVATE src/liblzma/liblzma_w32res.rc) ++ target_include_directories(liblzma PRIVATE windows/vs2019) + + # Export the public API symbols with __declspec(dllexport). + target_compile_definitions(liblzma PRIVATE DLL_EXPORT) diff --git a/ports/liblzma/portfile.cmake b/ports/liblzma/portfile.cmake index c29dbafedc367e..e58a0e543cd52d 100644 --- a/ports/liblzma/portfile.cmake +++ b/ports/liblzma/portfile.cmake @@ -6,20 +6,43 @@ vcpkg_from_github( HEAD_REF master PATCHES enable-uwp-builds.patch + fix_config_include.patch + win_output_name.patch # Fix output name on Windows. Autotool build does not generate lib prefixed libraries on windows. ) -file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH}) - vcpkg_configure_cmake( SOURCE_PATH ${SOURCE_PATH} PREFER_NINJA + OPTIONS + "-DCMAKE_DEBUG_POSTFIX=d" # This was in the old vcpkg CMakeLists.txt and I don't intend to fix it all over vcpkg ) - vcpkg_install_cmake() vcpkg_copy_pdbs() -vcpkg_fixup_cmake_targets() -file(APPEND ${CURRENT_PACKAGES_DIR}/share/liblzma/LibLZMAConfig.cmake +set(exec_prefix "\${prefix}") +set(libdir "\${prefix}/lib") +set(includedir "\${prefix}/include") +set(PACKAGE_URL https://tukaani.org/xz/) +set(PACKAGE_VERSION 5.2.5) +if(NOT VCPKG_TARGET_IS_WINDOWS) + set(PTHREAD_CFLAGS -pthread) +endif() +if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + set(prefix "${CURRENT_INSTALLED_DIR}") + configure_file("${SOURCE_PATH}/src/liblzma/liblzma.pc.in" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/liblzma.pc" @ONLY) +endif() +if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + set(prefix "${CURRENT_INSTALLED_DIR}/debug") + configure_file("${SOURCE_PATH}/src/liblzma/liblzma.pc.in" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/liblzma.pc" @ONLY) + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/liblzma.pc" "-llzma" "-llzmad") +endif() +vcpkg_fixup_pkgconfig() + + +vcpkg_fixup_cmake_targets(CONFIG_PATH lib/cmake/liblzma) + +file(WRITE "${CURRENT_PACKAGES_DIR}/share/liblzma/liblzma-config.cmake" "include(\"\${CMAKE_CURRENT_LIST_DIR}/liblzmaConfig.cmake\")") +file(APPEND "${CURRENT_PACKAGES_DIR}/share/liblzma/liblzmaConfig.cmake" " include(\${CMAKE_ROOT}/Modules/SelectLibraryConfigurations.cmake) find_path(LibLZMA_INCLUDE_DIR @@ -27,8 +50,8 @@ find_path(LibLZMA_INCLUDE_DIR PATH_SUFFIXES lzma ) if(NOT LibLZMA_LIBRARY) - find_library(LibLZMA_LIBRARY_RELEASE NAMES lzma LZMA LibLZMA PATHS \${_IMPORT_PREFIX}/lib/) - find_library(LibLZMA_LIBRARY_DEBUG NAMES lzmad LZMAd LibLZMAd PATHS \${_IMPORT_PREFIX}/debug/lib/) + find_library(LibLZMA_LIBRARY_RELEASE NAMES lzma LZMA LibLZMA liblzma PATHS \${_IMPORT_PREFIX}/lib/) + find_library(LibLZMA_LIBRARY_DEBUG NAMES lzmad LZMAd LibLZMAd lzma LZMA LibLZMA liblzma PATHS \${_IMPORT_PREFIX}/debug/lib/) select_library_configurations(LibLZMA) endif() set(LibLZMA_INCLUDE_DIRS \${LibLZMA_INCLUDE_DIR} CACHE PATH \"\") @@ -91,5 +114,21 @@ if(VCPKG_LIBRARY_LINKAGE STREQUAL static) endif() file(COPY ${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT}) +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share") + +set(TOOLS xz xzdec) +foreach(_tool IN LISTS TOOLS) + if(NOT EXISTS "${CURRENT_PACKAGES_DIR}/bin/${_tool}${VCPKG_TARGET_EXECUTABLE_SUFFIX}") + list(REMOVE_ITEM TOOLS ${_tool}) + endif() +endforeach() +if(TOOLS) + vcpkg_copy_tools(TOOL_NAMES ${TOOLS} AUTO_CLEAN) +endif() + +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin" "${CURRENT_PACKAGES_DIR}/debug/bin") +endif() file(INSTALL ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) +file(COPY "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}") \ No newline at end of file diff --git a/ports/liblzma/usage b/ports/liblzma/usage new file mode 100644 index 00000000000000..8d70b5804e7f7b --- /dev/null +++ b/ports/liblzma/usage @@ -0,0 +1,9 @@ +The package liblzma provides CMake targets: + + find_package(LibLZMA REQUIRED) + target_link_libraries(main PRIVATE LibLZMA::LibLZMA) + + or + + find_package(liblzma CONFIG REQUIRED) + target_link_libraries(main PRIVATE liblzma::liblzma) diff --git a/ports/liblzma/vcpkg-cmake-wrapper.cmake b/ports/liblzma/vcpkg-cmake-wrapper.cmake index b7572d736c0f14..cf22af021a6489 100644 --- a/ports/liblzma/vcpkg-cmake-wrapper.cmake +++ b/ports/liblzma/vcpkg-cmake-wrapper.cmake @@ -1,4 +1,8 @@ list(REMOVE_ITEM ARGS "NO_MODULE") list(REMOVE_ITEM ARGS "CONFIG") -list(REMOVE_ITEM ARGS "MODULE") +list(REMOVE_ITEM ARGS "MODULE") # Always call CONFIG. _find_package(${ARGS} CONFIG) +if(NOT TARGET LibLZMA::LibLZMA AND TARGET liblzma::liblzma) + add_library(LibLZMA::LibLZMA INTERFACE IMPORTED) # Too lazy to fix wrong target usage all over vcpkg. + set_target_properties(LibLZMA::LibLZMA PROPERTIES INTERFACE_LINK_LIBRARIES liblzma::liblzma) +endif() diff --git a/ports/liblzma/win_output_name.patch b/ports/liblzma/win_output_name.patch new file mode 100644 index 00000000000000..b6e3cd8ee86bb7 --- /dev/null +++ b/ports/liblzma/win_output_name.patch @@ -0,0 +1,17 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 120dc7548..728ca3591 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -398,11 +398,12 @@ else() + endif() + + if(WIN32) ++ set_target_properties(liblzma PROPERTIES OUTPUT_NAME lzma) + if(BUILD_SHARED_LIBS) + # Add the Windows resource file for liblzma.dll. + target_sources(liblzma PRIVATE src/liblzma/liblzma_w32res.rc) + target_include_directories(liblzma PRIVATE windows/vs2019) + + # Export the public API symbols with __declspec(dllexport). + target_compile_definitions(liblzma PRIVATE DLL_EXPORT) + else()