[ebml] Initial port. (#2812)

This commit is contained in:
evpobr 2018-02-17 03:49:32 +05:00 committed by Robert Schumacher
parent 31c3fe1aa3
commit 726695c65c
4 changed files with 183 additions and 0 deletions

132
ports/ebml/CMakeLists.txt Normal file
View File

@ -0,0 +1,132 @@
cmake_minimum_required(VERSION 3.1.2)
project(ebml VERSION 1.3.5)
option(DISABLE_PKGCONFIG "Disable PkgConfig module generation" OFF)
option(DISABLE_CMAKE_CONFIG "Disable CMake package config module generation" OFF)
include(GNUInstallDirs)
set(libebml_SOURCES
src/Debug.cpp
src/EbmlBinary.cpp
src/EbmlContexts.cpp
src/EbmlCrc32.cpp
src/EbmlDate.cpp
src/EbmlDummy.cpp
src/EbmlElement.cpp
src/EbmlFloat.cpp
src/EbmlHead.cpp
src/EbmlMaster.cpp
src/EbmlSInteger.cpp
src/EbmlStream.cpp
src/EbmlString.cpp
src/EbmlSubHead.cpp
src/EbmlUInteger.cpp
src/EbmlUnicodeString.cpp
src/EbmlVersion.cpp
src/EbmlVoid.cpp
src/IOCallback.cpp
src/MemIOCallback.cpp
src/MemReadIOCallback.cpp
src/SafeReadIOCallback.cpp
src/StdIOCallback.cpp)
set(libebml_PUBLIC_HEADERS
ebml/Debug.h
ebml/EbmlBinary.h
ebml/EbmlConfig.h
ebml/EbmlContexts.h
ebml/EbmlCrc32.h
ebml/EbmlDate.h
ebml/EbmlDummy.h
ebml/EbmlElement.h
ebml/EbmlEndian.h
ebml/EbmlFloat.h
ebml/EbmlHead.h
ebml/EbmlId.h
ebml/EbmlMaster.h
ebml/EbmlSInteger.h
ebml/EbmlStream.h
ebml/EbmlString.h
ebml/EbmlSubHead.h
ebml/EbmlTypes.h
ebml/EbmlUInteger.h
ebml/EbmlUnicodeString.h
ebml/EbmlVersion.h
ebml/EbmlVoid.h
ebml/IOCallback.h
ebml/MemIOCallback.h
ebml/MemReadIOCallback.h
ebml/SafeReadIOCallback.h
ebml/StdIOCallback.h)
if(WIN32)
list(APPEND libebml_SOURCES
src/platform/win32/WinIOCallback.cpp)
list(APPEND libebml_PUBLIC_HEADERS
src/platform/win32/WinIOCallback.h)
endif()
set(libebml_C_PUBLIC_HEADERS ebml/c/libebml_t.h)
add_library(ebml ${libebml_SOURCES} ${libebml_PUBLIC_HEADERS} ${libebml_C_PUBLIC_HEADERS})
if(WIN32)
include(CheckIncludeFile)
check_include_file(winapifamily.h HAVE_WINAPIFAMILY_H)
if(HAVE_WINAPIFAMILY_H)
target_compile_definitions(ebml PUBLIC HAVE_WINAPIFAMILY_H)
endif()
endif()
set_target_properties(ebml PROPERTIES
VERSION 4.0.0
SOVERSION 4)
target_include_directories(ebml PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
if(MSVC)
target_compile_definitions(ebml PRIVATE _CRT_SECURE_NO_WARNINGS)
endif()
if(BUILD_SHARED_LIBS)
set_target_properties(ebml
PROPERTIES
DEFINE_SYMBOL "EBML_DLL_EXPORT"
C_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN 1)
target_compile_definitions(ebml
PUBLIC EBML_DLL
PRIVATE EBML_DLL_EXPORT)
endif()
install(TARGETS ebml
EXPORT EbmlTargets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(FILES ${libebml_PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ebml)
install(FILES ${libebml_C_PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ebml/c)
if(NOT DISABLE_PKGCONFIG)
set(prefix ${CMAKE_INSTALL_PREFIX})
set(exec_prefix "\$\{prefix\}")
set(libdir "\$\{prefix\}/${CMAKE_INSTALL_LIBDIR}")
set(includedir "\$\{prefix\}/${CMAKE_INSTALL_INCLUDEDIR}")
set(PACKAGE_VERSION ${PROJECT_VERSION})
configure_file(libebml.pc.in libebml.pc @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libebml.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
endif()
if(NOT DISABLE_CMAKE_CONFIG)
if(WIN32)
set(CMAKE_INSTALL_PACKAGEDIR cmake)
else()
set(CMAKE_INSTALL_PACKAGEDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
endif()
include(CMakePackageConfigHelpers)
write_basic_package_version_file(EbmlConfigVersion.cmake COMPATIBILITY SameMajorVersion)
install(EXPORT EbmlTargets DESTINATION ${CMAKE_INSTALL_PACKAGEDIR})
install(FILES
${CMAKE_CURRENT_SOURCE_DIR}/EbmlConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/EbmlConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_PACKAGEDIR})
endif()

3
ports/ebml/CONTROL Normal file
View File

@ -0,0 +1,3 @@
Source: ebml
Version: 1.3.5
Description: a C++ libary to parse EBML files

View File

@ -0,0 +1 @@
include(${CMAKE_CURRENT_LIST_DIR}/EbmlTargets.cmake)

47
ports/ebml/portfile.cmake Normal file
View File

@ -0,0 +1,47 @@
# Common Ambient Variables:
# CURRENT_BUILDTREES_DIR = ${VCPKG_ROOT_DIR}\buildtrees\${PORT}
# CURRENT_PACKAGES_DIR = ${VCPKG_ROOT_DIR}\packages\${PORT}_${TARGET_TRIPLET}
# CURRENT_PORT_DIR = ${VCPKG_ROOT_DIR}\ports\${PORT}
# PORT = current port name (zlib, etc)
# TARGET_TRIPLET = current triplet (x86-windows, x64-windows-static, etc)
# VCPKG_CRT_LINKAGE = C runtime linkage type (static, dynamic)
# VCPKG_LIBRARY_LINKAGE = target library linkage type (static, dynamic)
# VCPKG_ROOT_DIR = <C:\path\to\current\vcpkg>
# VCPKG_TARGET_ARCHITECTURE = target architecture (x64, x86, arm)
#
include(vcpkg_common_functions)
if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
message(FATAL_ERROR "${PORT} does not currently support UWP")
endif()
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO Matroska-Org/libebml
REF release-1.3.5
SHA512 ccfa58aebb8685b2dbbab7038ab7f7e0788dba2fc391abafad5a0e05c71c8f02c7e1e3521e1c59076057f9643737c2d96a4fffdeb7991214234f2db80c78254b
HEAD_REF master
)
file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH})
file(COPY ${CMAKE_CURRENT_LIST_DIR}/EbmlConfig.cmake DESTINATION ${SOURCE_PATH})
vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
PREFER_NINJA # Disable this option if project cannot be built with Ninja
OPTIONS -DDISABLE_PKGCONFIG=1
# OPTIONS_RELEASE -DOPTIMIZE=1
# OPTIONS_DEBUG -DDEBUGGABLE=1
)
vcpkg_install_cmake()
vcpkg_fixup_cmake_targets(CONFIG_PATH cmake)
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
# Handle copyright
file(INSTALL ${SOURCE_PATH}/LICENSE.LGPL DESTINATION ${CURRENT_PACKAGES_DIR}/share/ebml RENAME copyright)