From 9f0f0bdedc512519e37a5c5e5651984725a90573 Mon Sep 17 00:00:00 2001 From: Nick Renieris Date: Mon, 18 May 2020 20:38:59 +0300 Subject: [PATCH] [libvmdk] Initial port (#11010) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [libvmdk] Initial port Signed-off-by: Nick Renieris * Update scripts/ci.baseline.txt Co-authored-by: Jack·Boos·Yu <47264268+JackBoosY@users.noreply.github.com> --- ports/libvmdk/CMakeLists.txt | 84 +++++++++++++++++++ ports/libvmdk/CONTROL | 6 ++ ports/libvmdk/Config.cmake.in | 4 + .../libvmdk/no_fs_and_fadvise_on_macos.patch | 25 ++++++ ports/libvmdk/portfile.cmake | 35 ++++++++ scripts/ci.baseline.txt | 2 + 6 files changed, 156 insertions(+) create mode 100644 ports/libvmdk/CMakeLists.txt create mode 100644 ports/libvmdk/CONTROL create mode 100644 ports/libvmdk/Config.cmake.in create mode 100644 ports/libvmdk/no_fs_and_fadvise_on_macos.patch create mode 100644 ports/libvmdk/portfile.cmake diff --git a/ports/libvmdk/CMakeLists.txt b/ports/libvmdk/CMakeLists.txt new file mode 100644 index 000000000..1fb043d90 --- /dev/null +++ b/ports/libvmdk/CMakeLists.txt @@ -0,0 +1,84 @@ +cmake_minimum_required(VERSION 3.12) + +project(libvmdk C) + +find_package(ZLIB REQUIRED) + +if(MSVC) + add_compile_definitions(_CRT_SECURE_NO_DEPRECATE) + add_compile_definitions(_CRT_NONSTDC_NO_DEPRECATE) +endif() + +add_compile_definitions(HAVE_LOCAL_LIBCAES) +add_compile_definitions(HAVE_LOCAL_LIBCERROR) +add_compile_definitions(HAVE_LOCAL_LIBCTHREADS) +add_compile_definitions(HAVE_LOCAL_LIBCDATA) +add_compile_definitions(HAVE_LOCAL_LIBCLOCALE) +add_compile_definitions(HAVE_LOCAL_LIBCNOTIFY) +add_compile_definitions(HAVE_LOCAL_LIBCSPLIT) +add_compile_definitions(HAVE_LOCAL_LIBCFILE) +add_compile_definitions(HAVE_LOCAL_LIBCPATH) +add_compile_definitions(HAVE_LOCAL_LIBUNA) +add_compile_definitions(HAVE_LOCAL_LIBBFIO) +add_compile_definitions(HAVE_LOCAL_LIBFCACHE) +add_compile_definitions(HAVE_LOCAL_LIBFDATA) +add_compile_definitions(HAVE_LOCAL_LIBFVALUE) +add_compile_definitions(ZLIB_DLL) + +if(UNIX) + configure_file(common/config.h.in common/config.h) + add_compile_definitions(HAVE_CONFIG_H) + add_compile_definitions(LOCALEDIR="/usr/share/locale") +endif() + +if(MSVC) + add_compile_definitions(LIBVMDK_DLL_EXPORT) + set(LIB_RC libvmdk/libvmdk.rc) +endif() + + +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) + +# Add CMake find_package() integration +set(PROJECT_TARGET_NAME "${PROJECT_NAME}") +set(CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") +set(PROJECT_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/generated/${PROJECT_TARGET_NAME}Config.cmake") +set(TARGETS_EXPORT_NAME "${PROJECT_TARGET_NAME}Targets") +set(NAMESPACE "libvmdk::") + +# Source files +file(GLOB LIB_SRC lib*/*.c) + +# Headers +file(GLOB LIB_INST_HEADERS include/libvmdk/*.h) + +add_library(${PROJECT_NAME} ${LIB_SRC} ${LIB_RC}) + +target_include_directories(${PROJECT_NAME} PRIVATE ./include ./common) +target_include_directories(${PROJECT_NAME} PRIVATE ./libbfio ./libcdata ./libcerror ./libcfile ./libclocale) +target_include_directories(${PROJECT_NAME} PRIVATE ./libcnotify ./libcpath ./libcsplit ./libcthreads) +target_include_directories(${PROJECT_NAME} PRIVATE ./libfcache ./libfdata ./libfvalue ./libuna) + +target_link_libraries(${PROJECT_NAME} PRIVATE ZLIB::ZLIB) + +install(TARGETS ${PROJECT_NAME} + EXPORT ${TARGETS_EXPORT_NAME} + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + INCLUDES DESTINATION include) + +install(FILES ${LIB_INST_HEADERS} DESTINATION include/libvmdk) +install(FILES include/libvmdk.h DESTINATION include) + + +# Generate and install libvmdkConfig.cmake +configure_package_config_file("Config.cmake.in" "${PROJECT_CONFIG}" INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}") +install(FILES "${PROJECT_CONFIG}" DESTINATION "${CONFIG_INSTALL_DIR}") + +# Generate and install libvmdkTargets*.cmake +install(EXPORT ${TARGETS_EXPORT_NAME} + NAMESPACE ${NAMESPACE} + DESTINATION "${CONFIG_INSTALL_DIR}") + diff --git a/ports/libvmdk/CONTROL b/ports/libvmdk/CONTROL new file mode 100644 index 000000000..8eeff87d0 --- /dev/null +++ b/ports/libvmdk/CONTROL @@ -0,0 +1,6 @@ +Source: libvmdk +Version: 2019-12-21 +Homepage: https://github.com/libyal/libvmdk +Description: Library and tools to access the VMware Virtual Disk (VMDK) format +Build-Depends: gettext,zlib +Supports: !uwp diff --git a/ports/libvmdk/Config.cmake.in b/ports/libvmdk/Config.cmake.in new file mode 100644 index 000000000..bd6bd4532 --- /dev/null +++ b/ports/libvmdk/Config.cmake.in @@ -0,0 +1,4 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake") +check_required_components("@PROJECT_NAME@") diff --git a/ports/libvmdk/no_fs_and_fadvise_on_macos.patch b/ports/libvmdk/no_fs_and_fadvise_on_macos.patch new file mode 100644 index 000000000..3e95869fe --- /dev/null +++ b/ports/libvmdk/no_fs_and_fadvise_on_macos.patch @@ -0,0 +1,25 @@ +diff --git a/libcfile/libcfile_file.c b/libcfile/libcfile_file.c +index 13eab02..690cc04 100644 +--- a/libcfile/libcfile_file.c ++++ b/libcfile/libcfile_file.c +@@ -56,7 +56,7 @@ + #elif defined( HAVE_CYGWIN_FS_H ) + #include + +-#elif defined( HAVE_LINUX_FS_H ) ++#elif defined( __linux__ ) && defined( HAVE_LINUX_FS_H ) + /* Required for Linux platforms that use a sizeof( u64 ) + * in linux/fs.h but have no typedef of it + */ +@@ -4603,6 +4603,11 @@ ssize_t libcfile_file_io_control_read_with_error_code( + #error Missing file IO control with data function + #endif + ++// Force disable on Darwin, it can be erroneously defined ++#if defined ( __APPLE__ ) ++#undef HAVE_POSIX_FADVISE ++#endif ++ + /* On some versions of Linux the FADVISE definions seem to be missing from fcntl.h + */ + #if defined( HAVE_POSIX_FADVISE ) && !defined( WINAPI ) diff --git a/ports/libvmdk/portfile.cmake b/ports/libvmdk/portfile.cmake new file mode 100644 index 000000000..7fc06f802 --- /dev/null +++ b/ports/libvmdk/portfile.cmake @@ -0,0 +1,35 @@ +vcpkg_fail_port_install(ON_TARGET "uwp") + +set(LIB_VERSION 20191221) +set(LIB_FILENAME libvmdk-alpha-${LIB_VERSION}.tar.gz) + +vcpkg_download_distfile(ARCHIVE + URLS "https://github.com/libyal/libvmdk/releases/download/${LIB_VERSION}/${LIB_FILENAME}" + FILENAME "${LIB_FILENAME}" + SHA512 fd14760034ada2b01599f6c812b1a94592067bc224495aaae736d81d08629b1904935f43516513ba726d2d04589aa816c17b72a6f9ae035ee0030dba93dce865 +) + +vcpkg_extract_source_archive_ex( + OUT_SOURCE_PATH SOURCE_PATH + ARCHIVE ${ARCHIVE} + REF ${LIB_VERSION} + PATCHES no_fs_and_fadvise_on_macos.patch +) + +file(COPY "${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt" DESTINATION "${SOURCE_PATH}") +file(COPY "${CMAKE_CURRENT_LIST_DIR}/Config.cmake.in" DESTINATION "${SOURCE_PATH}") + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA +) + +vcpkg_install_cmake() + +vcpkg_fixup_cmake_targets(CONFIG_PATH "lib/cmake/libvmdk" TARGET_PATH "share/libvmdk") + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") + +file(INSTALL ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) + +vcpkg_copy_pdbs() diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 3cf2987d2..3d118c6d3 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -990,6 +990,8 @@ libuuid:x86-windows=fail libuv:arm64-windows=fail libuv:arm-uwp=fail libuv:x64-uwp=fail +libvmdk:arm-uwp=fail +libvmdk:x64-uwp=fail libvpx:arm-uwp=fail libvpx:arm64-windows=fail libwandio:x86-windows=fail