aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichaƂ Janiszewski <janisozaur@users.noreply.github.com>2020-05-06 22:53:41 +0200
committerGitHub <noreply@github.com>2020-05-06 13:53:41 -0700
commit305785ba9b2b4ebd37d0a2c9676b863bb7e0a94e (patch)
tree2e429e1ca48974ee9c2f4ce09f0292bd9fd677a6
parent0bbf4400e977b2db20f5acda1522ba5ecae1d789 (diff)
downloadvcpkg-305785ba9b2b4ebd37d0a2c9676b863bb7e0a94e.tar.gz
vcpkg-305785ba9b2b4ebd37d0a2c9676b863bb7e0a94e.zip
[libmpeg2] Add new port (#8871)
* [libmpeg2] Add new port Libmpeg2 seems to be a somewhat old project, last release was done in 2008, but it is still in use by some projects e.g. ResidualVM I have verified the mpeg2dec built for x86-64 with MSVC produces similar results as the one pre-packaged on my Arch. * [libmpeg2] Apply review comments * [libmpeg2] Add ci.baseline.txt exemptions
-rw-r--r--ports/libmpeg2/0001-Add-naive-MSVC-support-to-sources.patch146
-rw-r--r--ports/libmpeg2/CMakeLists.txt108
-rw-r--r--ports/libmpeg2/CONTROL8
-rw-r--r--ports/libmpeg2/portfile.cmake38
-rw-r--r--scripts/ci.baseline.txt4
5 files changed, 304 insertions, 0 deletions
diff --git a/ports/libmpeg2/0001-Add-naive-MSVC-support-to-sources.patch b/ports/libmpeg2/0001-Add-naive-MSVC-support-to-sources.patch
new file mode 100644
index 000000000..1bbebffc0
--- /dev/null
+++ b/ports/libmpeg2/0001-Add-naive-MSVC-support-to-sources.patch
@@ -0,0 +1,146 @@
+From ed3b6e4bca1fe5211e3d7ca06bbbf9b161c8bc19 Mon Sep 17 00:00:00 2001
+From: Michal Janiszewski <janisozaur@gmail.com>
+Date: Sat, 2 Nov 2019 14:50:53 -0700
+Subject: [PATCH] Add naive MSVC support to sources
+
+---
+ libmpeg2/convert/rgb.c | 2 +-
+ libmpeg2/cpu_accel.c | 4 ++--
+ libmpeg2/cpu_state.c | 4 ++--
+ libmpeg2/idct.c | 2 +-
+ libmpeg2/motion_comp.c | 2 +-
+ libvo/video_out_dx.c | 6 +++---
+ vc++/config.h | 2 ++
+ 7 files changed, 12 insertions(+), 10 deletions(-)
+
+diff --git a/libmpeg2/convert/rgb.c b/libmpeg2/convert/rgb.c
+index 8863b0b..db6f4e3 100644
+--- a/libmpeg2/convert/rgb.c
++++ b/libmpeg2/convert/rgb.c
+@@ -499,7 +499,7 @@ static int rgb_internal (mpeg2convert_rgb_order_t order, unsigned int bpp,
+ int convert420 = 0;
+ int rgb_stride_min = ((bpp + 7) >> 3) * seq->width;
+
+-#ifdef ARCH_X86
++#if !defined(_MSC_VER) && defined(ARCH_X86)
+ if (!copy && (accel & MPEG2_ACCEL_X86_MMXEXT)) {
+ convert420 = 0;
+ copy = mpeg2convert_rgb_mmxext (order, bpp, seq);
+diff --git a/libmpeg2/cpu_accel.c b/libmpeg2/cpu_accel.c
+index 9b24610..a922df1 100644
+--- a/libmpeg2/cpu_accel.c
++++ b/libmpeg2/cpu_accel.c
+@@ -29,7 +29,7 @@
+ #include "attributes.h"
+ #include "mpeg2_internal.h"
+
+-#if defined(ARCH_X86) || defined(ARCH_X86_64)
++#if !defined(_MSC_VER) && (defined(ARCH_X86) || defined(ARCH_X86_64))
+ static inline uint32_t arch_accel (uint32_t accel)
+ {
+ if (accel & (MPEG2_ACCEL_X86_3DNOW | MPEG2_ACCEL_X86_MMXEXT))
+@@ -253,7 +253,7 @@ static inline uint32_t arch_accel (uint32_t accel)
+
+ uint32_t mpeg2_detect_accel (uint32_t accel)
+ {
+-#if defined (ARCH_X86) || defined (ARCH_X86_64) || defined (ARCH_PPC) || defined (ARCH_ALPHA) || defined (ARCH_SPARC)
++#if !defined(_MSC_VER) && (defined (ARCH_X86) || defined (ARCH_X86_64) || defined (ARCH_PPC) || defined (ARCH_ALPHA) || defined (ARCH_SPARC))
+ accel = arch_accel (accel);
+ #endif
+ return accel;
+diff --git a/libmpeg2/cpu_state.c b/libmpeg2/cpu_state.c
+index 2f2f64a..f4966c1 100644
+--- a/libmpeg2/cpu_state.c
++++ b/libmpeg2/cpu_state.c
+@@ -36,7 +36,7 @@
+ void (* mpeg2_cpu_state_save) (cpu_state_t * state) = NULL;
+ void (* mpeg2_cpu_state_restore) (cpu_state_t * state) = NULL;
+
+-#if defined(ARCH_X86) || defined(ARCH_X86_64)
++#if !defined(_MSC_VER) && (defined(ARCH_X86) || defined(ARCH_X86_64))
+ static void state_restore_mmx (cpu_state_t * state)
+ {
+ emms ();
+@@ -115,7 +115,7 @@ static void state_restore_altivec (cpu_state_t * state)
+
+ void mpeg2_cpu_state_init (uint32_t accel)
+ {
+-#if defined(ARCH_X86) || defined(ARCH_X86_64)
++#if !defined(_MSC_VER) && (defined(ARCH_X86) || defined(ARCH_X86_64))
+ if (accel & MPEG2_ACCEL_X86_MMX) {
+ mpeg2_cpu_state_restore = state_restore_mmx;
+ }
+diff --git a/libmpeg2/idct.c b/libmpeg2/idct.c
+index 81c57e0..a057bf7 100644
+--- a/libmpeg2/idct.c
++++ b/libmpeg2/idct.c
+@@ -235,7 +235,7 @@ static void mpeg2_idct_add_c (const int last, int16_t * block,
+
+ void mpeg2_idct_init (uint32_t accel)
+ {
+-#ifdef ARCH_X86
++#if !defined(_MSC_VER) && defined(ARCH_X86)
+ if (accel & MPEG2_ACCEL_X86_SSE2) {
+ mpeg2_idct_copy = mpeg2_idct_copy_sse2;
+ mpeg2_idct_add = mpeg2_idct_add_sse2;
+diff --git a/libmpeg2/motion_comp.c b/libmpeg2/motion_comp.c
+index 7aed113..b00a32d 100644
+--- a/libmpeg2/motion_comp.c
++++ b/libmpeg2/motion_comp.c
+@@ -33,7 +33,7 @@ mpeg2_mc_t mpeg2_mc;
+
+ void mpeg2_mc_init (uint32_t accel)
+ {
+-#ifdef ARCH_X86
++#if !defined(_MSC_VER) && defined(ARCH_X86)
+ if (accel & MPEG2_ACCEL_X86_MMXEXT)
+ mpeg2_mc = mpeg2_mc_mmxext;
+ else if (accel & MPEG2_ACCEL_X86_3DNOW)
+diff --git a/libvo/video_out_dx.c b/libvo/video_out_dx.c
+index 36de68a..0797cdc 100644
+--- a/libvo/video_out_dx.c
++++ b/libvo/video_out_dx.c
+@@ -82,7 +82,7 @@ static void update_overlay (dx_instance_t * instance)
+ dwFlags, &ddofx);
+ }
+
+-static long FAR PASCAL event_procedure (HWND hwnd, UINT message,
++static LRESULT FAR PASCAL event_procedure (HWND hwnd, UINT message,
+ WPARAM wParam, LPARAM lParam)
+ {
+ RECT rect_window;
+@@ -92,7 +92,7 @@ static long FAR PASCAL event_procedure (HWND hwnd, UINT message,
+ switch (message) {
+
+ case WM_WINDOWPOSCHANGED:
+- instance = (dx_instance_t *) GetWindowLong (hwnd, GWL_USERDATA);
++ instance = (dx_instance_t *) GetWindowLongPtr (hwnd, GWLP_USERDATA);
+
+ /* update the window position and size */
+ point_window.x = 0;
+@@ -173,7 +173,7 @@ static int create_window (dx_instance_t * instance)
+ /* store a directx_instance pointer into the window local storage
+ * (for later use in event_handler).
+ * We need to use SetWindowLongPtr when it is available in mingw */
+- SetWindowLong (instance->window, GWL_USERDATA, (LONG) instance);
++ SetWindowLongPtr (instance->window, GWLP_USERDATA, (LONG_PTR) instance);
+
+ ShowWindow (instance->window, SW_SHOW);
+
+diff --git a/vc++/config.h b/vc++/config.h
+index 93719f0..a03cce6 100644
+--- a/vc++/config.h
++++ b/vc++/config.h
+@@ -16,7 +16,9 @@
+ /* #undef ARCH_SPARC */
+
+ /* x86 architecture */
++#if defined(_M_AMD64) || defined(_M_IX86)
+ #define ARCH_X86
++#endif
+
+ /* maximum supported data alignment */
+ /* #undef ATTRIBUTE_ALIGNED_MAX */
+--
+2.25.0
+
diff --git a/ports/libmpeg2/CMakeLists.txt b/ports/libmpeg2/CMakeLists.txt
new file mode 100644
index 000000000..88c0c8712
--- /dev/null
+++ b/ports/libmpeg2/CMakeLists.txt
@@ -0,0 +1,108 @@
+cmake_minimum_required(VERSION 3.2)
+project(libmpeg2)
+
+option(TOOLS "Build libmpeg2 tools" OFF)
+
+set(MPEG2_SOURCE_FILES
+ libmpeg2/alloc.c
+ libmpeg2/cpu_accel.c
+ libmpeg2/cpu_state.c
+ libmpeg2/decode.c
+ libmpeg2/header.c
+ libmpeg2/idct.c
+ libmpeg2/idct_alpha.c
+ libmpeg2/idct_altivec.c
+ #libmpeg2/idct_mmx.c
+ libmpeg2/motion_comp.c
+ libmpeg2/motion_comp_alpha.c
+ libmpeg2/motion_comp_altivec.c
+ libmpeg2/motion_comp_arm.c
+ #libmpeg2/motion_comp_mmx.c
+ libmpeg2/motion_comp_vis.c
+ libmpeg2/slice.c
+ )
+set(VO_SOURCE_FILES
+ libvo/video_out.c
+ libvo/video_out_dx.c
+ libvo/video_out_null.c
+ libvo/video_out_pgm.c
+ libvo/video_out_sdl.c
+ libvo/video_out_x11.c
+ )
+set(MPEG2_CONVERT_SOURCES
+ libmpeg2/convert/rgb.c
+ #libmpeg2/convert/rgb_mmx.c
+ libmpeg2/convert/rgb_vis.c
+ libmpeg2/convert/uyvy.c
+ )
+set(GETOPT_FILES
+ src/getopt.c
+ )
+set(HEADERS
+ include/mpeg2.h
+ include/mpeg2convert.h
+ )
+
+add_library(mpeg2 ${MPEG2_SOURCE_FILES})
+add_library(mpeg2convert ${MPEG2_CONVERT_SOURCES})
+add_library(getopt STATIC ${GETOPT_FILES})
+add_library(vo STATIC ${VO_SOURCE_FILES})
+
+target_include_directories(mpeg2convert PUBLIC
+ "${CMAKE_SOURCE_DIR}/vc++"
+ "${CMAKE_SOURCE_DIR}/include"
+ )
+target_include_directories(getopt PUBLIC
+ "${CMAKE_SOURCE_DIR}/vc++"
+ "${CMAKE_SOURCE_DIR}/include"
+ )
+target_include_directories(vo PUBLIC
+ "${CMAKE_SOURCE_DIR}/vc++"
+ "${CMAKE_SOURCE_DIR}/include"
+ )
+target_include_directories(mpeg2 PUBLIC
+ "${CMAKE_SOURCE_DIR}/vc++"
+ "${CMAKE_SOURCE_DIR}/include"
+ )
+target_include_directories(mpeg2 INTERFACE
+ "${CMAKE_SOURCE_DIR}/include"
+ )
+
+target_compile_definitions(getopt PUBLIC HAVE_CONFIG_H)
+target_link_libraries(vo mpeg2convert)
+
+if (TOOLS)
+ add_executable(mpeg2dec src/mpeg2dec.c src/dump_state.c src/gettimeofday.c)
+ add_executable(extract_mpeg2 src/extract_mpeg2.c)
+ add_executable(corrupt_mpeg2 src/corrupt_mpeg2.c)
+
+ target_compile_definitions(extract_mpeg2 PUBLIC HAVE_CONFIG_H)
+ target_compile_definitions(corrupt_mpeg2 PUBLIC HAVE_CONFIG_H)
+
+ target_link_libraries(mpeg2dec PRIVATE getopt vo mpeg2convert mpeg2 gdi32)
+ target_link_libraries(extract_mpeg2 PRIVATE getopt)
+ target_link_libraries(corrupt_mpeg2 PRIVATE getopt)
+
+ target_include_directories(mpeg2dec PUBLIC
+ "${CMAKE_SOURCE_DIR}/vc++"
+ "${CMAKE_SOURCE_DIR}/include"
+ "${CMAKE_SOURCE_DIR}/src"
+ )
+ target_include_directories(extract_mpeg2 PUBLIC
+ "${CMAKE_SOURCE_DIR}/vc++"
+ "${CMAKE_SOURCE_DIR}/include"
+ "${CMAKE_SOURCE_DIR}/src"
+ )
+ target_include_directories(corrupt_mpeg2 PUBLIC
+ "${CMAKE_SOURCE_DIR}/vc++"
+ "${CMAKE_SOURCE_DIR}/include"
+ "${CMAKE_SOURCE_DIR}/src"
+ )
+endif (TOOLS)
+
+install(TARGETS mpeg2
+ EXPORT libmpeg2
+ LIBRARY DESTINATION lib
+)
+
+install(FILES ${HEADERS} DESTINATION "include/mpeg2dec")
diff --git a/ports/libmpeg2/CONTROL b/ports/libmpeg2/CONTROL
new file mode 100644
index 000000000..380cc6493
--- /dev/null
+++ b/ports/libmpeg2/CONTROL
@@ -0,0 +1,8 @@
+Source: libmpeg2
+Version: 0.5.1
+Homepage: http://libmpeg2.sourceforge.net/
+Description: a free MPEG-2 video stream decoder
+Supports: !(linux|osx|uwp)
+
+Feature: tools
+Description: Build tools provided with libmpeg2
diff --git a/ports/libmpeg2/portfile.cmake b/ports/libmpeg2/portfile.cmake
new file mode 100644
index 000000000..3813e0d6e
--- /dev/null
+++ b/ports/libmpeg2/portfile.cmake
@@ -0,0 +1,38 @@
+vcpkg_fail_port_install(MESSAGE "${PORT} currently only supports Windows Desktop platform." ON_TARGET "Linux" "OSX" "uwp")
+vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
+
+# There is archived version of releases available at https://github.com/janisozaur/libmpeg2
+vcpkg_download_distfile(ARCHIVE
+ URLS "http://libmpeg2.sourceforge.net/files/libmpeg2-0.5.1.tar.gz"
+ FILENAME "libmpeg2-0.5.1.tar.gz"
+ SHA512 3648a2b3d7e2056d5adb328acd2fb983a1fa9a05ccb6f9388cc686c819445421811f42e8439418a0491a13080977f074a0d8bf8fa6bc101ff245ddea65a46fbc
+)
+
+vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE ${ARCHIVE}
+ PATCHES
+ 0001-Add-naive-MSVC-support-to-sources.patch
+)
+
+file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH})
+
+vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
+ FEATURES
+ tools TOOLS
+)
+
+vcpkg_configure_cmake(
+ SOURCE_PATH ${SOURCE_PATH}
+ PREFER_NINJA
+ OPTIONS ${FEATURE_OPTIONS}
+)
+
+vcpkg_install_cmake()
+
+# # Handle copyright
+file(INSTALL ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/libmpeg2 RENAME copyright)
+
+file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
+
+vcpkg_copy_pdbs()
diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt
index de3112d21..198853666 100644
--- a/scripts/ci.baseline.txt
+++ b/scripts/ci.baseline.txt
@@ -821,6 +821,10 @@ libmodman:x64-uwp=fail
libmodman:x64-windows-static=fail
libmodplug:arm-uwp=fail
libmodplug:x64-uwp=fail
+libmpeg2:arm-uwp=fail
+libmpeg2:x64-linux=fail
+libmpeg2:x64-osx=fail
+libmpeg2:x64-uwp=fail
libmupdf:x64-osx=fail
libmysql:x86-windows=fail
libnice:x64-linux=fail