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

[libvmdk] Initial port #11010

Merged
merged 2 commits into from May 18, 2020
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
84 changes: 84 additions & 0 deletions 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}")

6 changes: 6 additions & 0 deletions 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
4 changes: 4 additions & 0 deletions 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@")
25 changes: 25 additions & 0 deletions 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 <cygwin/fs.h>

-#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 )
35 changes: 35 additions & 0 deletions 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
)

NancyLi1013 marked this conversation as resolved.
Show resolved Hide resolved
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()
5 changes: 4 additions & 1 deletion scripts/ci.baseline.txt
Expand Up @@ -957,6 +957,9 @@ libuuid:x86-windows=fail
libuv:arm64-windows=fail
libuv:arm-uwp=fail
libuv:x64-uwp=fail
libvmdk:arm-uwp=fail
NancyLi1013 marked this conversation as resolved.
Show resolved Hide resolved
libvmdk:x64-uwp=fail
libvmdk:x64-windows-static=fail
JackBoosY marked this conversation as resolved.
Show resolved Hide resolved
JackBoosY marked this conversation as resolved.
Show resolved Hide resolved
libvpx:arm-uwp=fail
libvpx:arm64-windows=fail
libvpx:x64-linux=fail
Expand Down Expand Up @@ -1506,7 +1509,7 @@ qt5-wayland:x64-windows=fail
qt5-wayland:x64-windows-static=fail
qt5-winextras:x64-linux=fail
qt5-winextras:x64-osx=fail
# Too big for CI.
# Too big for CI.
qt5-webengine:x64-windows=skip
qt5-webengine:x86-windows=skip
# Missing prerequisites for CI success
Expand Down