Skip to content

Commit

Permalink
multimedia/makemkv: Update to 1.17.1
Browse files Browse the repository at this point in the history
* Add FDK_AAC option, it's an optional dependency (disabled by default
  for patent reasons).
* Improve port structure, consistently honor {C,CPP,CXX,LD}FLAGS from
  environment also for the static libs (fdk-aac and ffmpeg).
* Remove cross-compiling cruft, it's unnecessary when using compilers
  from linux-c7-devtools.
* Remove redundant info from pkg-descr that's already in pkg-message.
* Drop OpenSSL from LICENSE, it's linked dynamically and the distfile
  is only needed to get the headers required for building.
* Update statically linked FFmpeg to latest version 5.1.

Changelog:

  Small improvements and bugfixes
  Details: https://makemkv.com/download/

Approved by:		tcberner (mentor)
MFH:			2022Q3
Differential Revision:	https://reviews.freebsd.org/D36039

(cherry picked from commit 28f74df)
  • Loading branch information
Zirias committed Aug 7, 2022
1 parent 88ac87e commit 59a9ef2
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 116 deletions.
174 changes: 78 additions & 96 deletions multimedia/makemkv/Makefile
@@ -1,52 +1,51 @@
# Created by: Felix Palmen <felix@palmen-it.de>

PORTNAME= makemkv
PORTVERSION= 1.17.0
DISTVERSION= 1.17.1
CATEGORIES= multimedia
MASTER_SITES= http://www.makemkv.com/download/:makemkv \
http://www.makemkv.com/download/old/:makemkv \
SF/opencore-amr/fdk-aac/:fdkaac \
https://ffmpeg.org/releases/:ffmpeg \
https://www.openssl.org/source/old/${OPENSSLVERSION}/:openssl
DISTFILES= makemkv-oss-${PORTVERSION}.tar.gz:makemkv \
makemkv-bin-${PORTVERSION}.tar.gz:makemkv \
fdk-aac-${FDKAACVERSION}.tar.gz:fdkaac \
ffmpeg-${FFMPEGVERSION}.tar.bz2:ffmpeg \
openssl-${OPENSSLFULLVER}.tar.gz:openssl
DISTFILES= ${DISTFL_MAKEMKV:=:makemkv} \
${DISTFL_FFMPEG:=:ffmpeg} \
${DISTFL_OPENSSL:=:openssl}
DIST_SUBDIR= ${PORTNAME}

MAINTAINER= felix@palmen-it.de
COMMENT= Video converter reading from DVD and Bluray

# Do not sell. Do not redistribute modified binaries, but
# explicit permission to distribute a patched makemkvcon given by
# copyright owner
LICENSE= MAKEMKV FDK LGPL21+ OpenSSL
LICENSE_COMB= multi
LICENSE= MAKEMKV LGPL21+ ${PORT_OPTIONS:MFDK_AAC}
LICENSE_COMB= multi
LICENSE_NAME_MAKEMKV= The MakeMKV EULA
LICENSE_NAME_FDK= The FDK AAC License
LICENSE_FILE_MAKEMKV= ${WRKDIR}/makemkv-bin-${PORTVERSION}/src/eula_en_linux.txt
LICENSE_FILE_FDK= ${WRKDIR}/fdk-aac-${FDKAACVERSION}/NOTICE
LICENSE_PERMS_MAKEMKV= dist-mirror no-dist-sell pkg-mirror no-pkg-sell \
auto-accept
LICENSE_PERMS_FDK= dist-mirror no-dist-sell pkg-mirror no-pkg-sell \
auto-accept
LICENSE_DISTFILES_FDK= fdk-aac-${FDKAACVERSION}.tar.gz
LICENSE_DISTFILES_LGPL21+ = ffmpeg-${FFMPEGVERSION}.tar.bz2
LICENSE_DISTFILES_OpenSSL= openssl-${OPENSSLFULLVER}.tar.gz
LICENSE_DISTFILES_MAKEMKV= makemkv-bin-${PORTVERSION}.tar.gz \
makemkv-oss-${PORTVERSION}.tar.gz
LICENSE_NAME_FDK_AAC= The FDK AAC License
LICENSE_FILE_MAKEMKV= ${WRKSRC_bin}/src/eula_en_linux.txt
LICENSE_FILE_FDK_AAC= ${WRKSRC_fdkaac}/NOTICE
LICENSE_PERMS_MAKEMKV= dist-mirror pkg-mirror auto-accept \
# eplicit permission granted by copyright owner to \
# distribute a patched makemkvcon binary.
LICENSE_PERMS_FDK_AAC= auto-accept
LICENSE_DISTFILES_FDK_AAC= ${DISTFL_FDKAAC}
LICENSE_DISTFILES_LGPL21+ = ${DISTFL_FFMPEG}
LICENSE_DISTFILES_MAKEMKV= ${DISTFL_MAKEMKV}

ONLY_FOR_ARCHS= aarch64 amd64 i386
USES= gmake linux pkgconfig perl5
USES= gmake linux pkgconfig perl5
USE_CSTD= c11
USE_CXXSTD= c++11
USE_LINUX= base expat expat:build openssl openssl:build devtools:build
USE_PERL5= build
BUILD_DEPENDS= ${LOCALBASE}/include/expat.h:textproc/expat2 \
patchelf>0:sysutils/patchelf \
${BUILD_DEPENDS_${FFMPEGARCH}}
BUILD_DEPENDS_x86= nasm>0:devel/nasm
${BUILD_DEPENDS_${FFMPEG_ARCH}}
BUILD_DEPENDS_x86= nasm:devel/nasm

WRKSRC= ${WRKDIR}/makemkv-oss-${PORTVERSION}
WRKSRC= ${WRKDIR}/makemkv-oss-${DISTVERSION}
WRKSRC_bin= ${WRKDIR}/makemkv-bin-${DISTVERSION}
WRKSRC_fdkaac= ${WRKDIR}/fdk-aac-${FDKAACVERSION}
WRKSRC_ffmpeg= ${WRKDIR}/ffmpeg-${FFMPEGVERSION}
WRKSRC_openssl= ${WRKDIR}/openssl-${OPENSSLFULLVER}

CONFLICTS_BUILD= v4l_compat

Expand All @@ -55,59 +54,54 @@ SUB_LIST= LINUXBASE=${LINUXBASE}
PLIST_SUB= LINUXBASE=${LINUXBASE}

FDKAACVERSION= 2.0.2
FFMPEGVERSION= 5.0.1
FFMPEGVERSION= 5.1
OPENSSLVERSION= 1.0.2
OPENSSLPATCHLEVEL= k
OPENSSLFULLVER= ${OPENSSLVERSION}${OPENSSLPATCHLEVEL}

LINUXARCH= ${ARCH:S/amd64/x86_64/}
LINUXTRIPLET= ${LINUXARCH}-redhat-linux
LINUXLIBDIR= ${LINUXBASE}/${"${LINUXARCH:Mi386}" != "":?lib:lib64}
OPENSSLTARGET= linux-${LINUXARCH:S/i386/elf/}
FFMPEGARCH= ${"${LINUXARCH:Maarch64}" != "":?aarch64:x86}

OPTIONS_DEFINE= EXAMPLES

PATCHELF_CMD?= ${LOCALBASE}/bin/patchelf

CPPFLAGS+= -I${WRKDIR}/gnuroot/include \
-I${WRKDIR}/openssl-${OPENSSLFULLVER}/include \
DISTFL_MAKEMKV= makemkv-oss-${DISTVERSION}.tar.gz \
makemkv-bin-${DISTVERSION}.tar.gz
DISTFL_FDKAAC= fdk-aac-${FDKAACVERSION}.tar.gz
DISTFL_FFMPEG= ffmpeg-${FFMPEGVERSION}.tar.bz2
DISTFL_OPENSSL= openssl-${OPENSSLFULLVER}.tar.gz

LINUXLIBDIR= ${LINUXBASE}/${"${ARCH:Mi386}":?lib:lib64}
OPENSSLTARGET= linux-${ARCH:S/i386/elf/:S/amd64/x86_64/}
LINUXLIBS= libcrypto.so.10 libexpat.so.1 libz.so.1
LINUXSYSROOT= ${WRKDIR}/gnuroot

OPTIONS_DEFINE= EXAMPLES FDK_AAC
OPTIONS_DEFAULT= EXAMPLES
FDK_AAC_DESC= Support AAC via statically linked fdk-aac
FDK_AAC_DISTFILES= ${DISTFL_FDKAAC:=:fdkaac}
TARGET_ORDER_OVERRIDE= 290:pre-configure-FDK_AAC-on

CC= ${LINUXBASE}/bin/gcc
CXX= ${LINUXBASE}/bin/g++
CPPFLAGS+= -I${LINUXSYSROOT}/include -I${WRKSRC_openssl}/include \
-D_linux_ -DFORCE_OPENSSL_NO_EC \
${${OSVERSION}<1300000:?-Dcaddr_t=void\* -D__daddr_t_defined:}
CFLAGS+= -std=c11
CXXFLAGS+= -std=c++11
LDFLAGS+= -L${WRKDIR}/gnuroot/lib
LDFLAGS+= -L${LINUXSYSROOT}/lib
PATCHELF_CMD?= ${LOCALBASE}/bin/patchelf
HAS_CONFIGURE= yes
CONFIGURE_ARGS= --prefix=${PREFIX} --disable-gui --host=${LINUXTRIPLET} \
--libdir=${PREFIX}/lib/makemkv
CONFIGURE_ENV= CC=${LINUXTRIPLET}-gcc CXX=${LINUXTRIPLET}-g++ \
PATH=${WRKDIR}/gnuroot/bin:${PATH} \
PKG_CONFIG_PATH=${WRKDIR}/gnuroot/lib/pkgconfig
MAKE_ENV= PATH=${WRKDIR}/gnuroot/bin:${PATH}
CONFIGURE_ARGS= --prefix=${PREFIX} --disable-gui --libdir=${PREFIX}/lib/makemkv
CONFIGURE_ENV= PKG_CONFIG_PATH=${LINUXSYSROOT}/lib/pkgconfig
MAKE_ARGS= CFLAGS="${CXXFLAGS} ${CPPFLAGS} -std=c11"
STRIP_CMD= ${WRKDIR}/gnuroot/bin/${LINUXTRIPLET}-strip

FFMPEG_ARCH= ${ARCH:Maarch64:S/^$/x86/}
FFMPEG_CONFIGURE_ARGS= --prefix=${LINUXSYSROOT} --pkg-config=pkg-config \
--disable-shared --enable-static --enable-pic \
--target-os=linux --cc=${CC} \
${"${PORT_OPTIONS:MFDK_AAC}":?--enable-libfdk-aac:}
FFMPEG_CONFIGURE_ENV= ${CONFIGURE_ENV} CFLAGS="${CPPFLAGS} ${CFLAGS}"
FFMPEG_MAKE_ARGS= V=1 ARCH=${FFMPEG_ARCH}
FFMPEG_INSTALL_TARGET= ${ALL_TARGET} ${INSTALL_TARGET}

post-extract:
@${MKDIR} ${WRKDIR}/gnuroot/lib
@cd ${WRKDIR}/gnuroot/lib; \
${LN} -s ${LINUXLIBDIR}/libz.so.1; \
${LN} -s libz.so.1 libz.so; \
${LN} -s ${LINUXLIBDIR}/libcrypto.so.10; \
${LN} -s libcrypto.so.10 libcrypto.so; \
${LN} -s ${LINUXLIBDIR}/libexpat.so.1; \
${LN} -s libexpat.so.1 libexpat.so
@${MKDIR} ${WRKDIR}/gnuroot/include
@cd ${WRKDIR}/gnuroot/include; \
${LN} -s /usr/include/zlib.h; \
${LN} -s /usr/include/zconf.h; \
${LN} -s ${LOCALBASE}/include/expat.h; \
${LN} -s ${LOCALBASE}/include/expat_config.h; \
${LN} -s ${LOCALBASE}/include/expat_external.h
@${MKDIR} ${WRKDIR}/gnuroot/bin
@cd ${WRKDIR}/gnuroot/bin; \
for t in gcc link ld objdump ar nm strip ranlib g++; do \
${LN} -s ${LINUXBASE}/bin/$$t ${LINUXTRIPLET}-$$t; \
done
@${MKDIR} ${LINUXSYSROOT}/lib
.for lib in ${LINUXLIBS}
@${LN} -s ${LINUXLIBDIR}/${lib} ${LINUXSYSROOT}/lib/${lib:R}
.endfor

post-patch:
@${REINPLACE_CMD} -e 's:INSTALL) -D:INSTALL):' \
Expand All @@ -118,34 +112,22 @@ post-patch:
-e 's:-t \([^ ]*\) \([^ ]*\):\2 \1:' \
-e 's:ARCH=:BINARCH=:' \
-e 's:bin/$$(ARCH:bin/$$(BINARCH:' \
${WRKDIR}/makemkv-bin-${PORTVERSION}/Makefile
${WRKSRC_bin}/Makefile

pre-configure-FDK_AAC-on:
cd ${WRKSRC_fdkaac}; \
${CONFIGURE_ENV} CXX=${CXX} \
./configure --prefix=${LINUXSYSROOT} --disable-silent-rules \
--disable-shared --enable-static --with-pic; \
${MAKE_ENV} ${MAKE_CMD} ${_MAKE_JOBS} ${INSTALL_TARGET}

pre-configure:
# FDK AAC
cd ${WRKDIR}/fdk-aac-${FDKAACVERSION}; \
export PATH=${WRKDIR}/gnuroot/bin:$$PATH; \
export CXXFLAGS="${CXXFLAGS}"; \
LDFLAGS=-L${WRKDIR}/gnuroot/lib \
./configure --prefix=${WRKDIR}/gnuroot \
--disable-shared --enable-static --with-pic \
--host=${LINUXTRIPLET} --disable-silent-rules; \
${MAKE_CMD} ${_MAKE_JOBS} install
# ffmpeg
cd ${WRKDIR}/ffmpeg-${FFMPEGVERSION}; \
export PATH=${WRKDIR}/gnuroot/bin:$$PATH; \
export CFLAGS="${CFLAGS}"; \
export CPPFLAGS="${CPPFLAGS}"; \
PKG_CONFIG_PATH=${WRKDIR}/gnuroot/lib/pkgconfig \
LDFLAGS=-L${WRKDIR}/gnuroot/lib \
./configure --prefix=${WRKDIR}/gnuroot \
--disable-shared --enable-static --enable-pic \
--enable-libfdk-aac --pkg-config=pkg-config \
--cross-prefix=${LINUXTRIPLET}- --arch=${LINUXARCH} \
--target-os=linux --host-cc=${CC}; \
CFLAGS="${CFLAGS}" CPPFLAGS="${CPPFLAGS}" \
${MAKE_CMD} ${_MAKE_JOBS} V=1 ARCH=${FFMPEGARCH} all install
cd ${WRKSRC_ffmpeg}; \
${FFMPEG_CONFIGURE_ENV} ./configure ${FFMPEG_CONFIGURE_ARGS}; \
${MAKE_ENV} ${MAKE_CMD} ${_MAKE_JOBS} \
${FFMPEG_MAKE_ARGS} ${FFMPEG_INSTALL_TARGET}
# OpenSSL headers
cd ${WRKDIR}/openssl-${OPENSSLFULLVER}; \
cd ${WRKSRC_openssl}; \
./Configure --openssldir= --prefix=/usr ${OPENSSLTARGET}

pre-install:
Expand All @@ -154,7 +136,7 @@ pre-install:
post-install:
${INSTALL_MAN} ${FILESDIR}/makemkvcon.1 \
${STAGEDIR}${PREFIX}/man/man1
cd ${WRKDIR}/makemkv-bin-${PORTVERSION}; \
cd ${WRKSRC_bin}; \
${MKDIR} tmp; \
${ECHO_CMD} accepted > tmp/eula_accepted; \
${MAKE_CMD} DESTDIR=${STAGEDIR} PREFIX=${PREFIX} install
Expand Down
18 changes: 9 additions & 9 deletions multimedia/makemkv/distinfo
@@ -1,11 +1,11 @@
TIMESTAMP = 1657210297
SHA256 (makemkv/makemkv-oss-1.17.0.tar.gz) = ede75c7cc05dbef9d2e5c55d340dc090f58b25b0c809e2345c2554f0b20cf75f
SIZE (makemkv/makemkv-oss-1.17.0.tar.gz) = 6631571
SHA256 (makemkv/makemkv-bin-1.17.0.tar.gz) = e277d75722aede64ac1b564969c7d64608e00591b17068dc7a88358e7a03e2c0
SIZE (makemkv/makemkv-bin-1.17.0.tar.gz) = 16332197
SHA256 (makemkv/fdk-aac-2.0.2.tar.gz) = c9e8630cf9d433f3cead74906a1520d2223f89bcd3fa9254861017440b8eb22f
SIZE (makemkv/fdk-aac-2.0.2.tar.gz) = 2886434
SHA256 (makemkv/ffmpeg-5.0.1.tar.bz2) = 28df33d400a1c1c1b20d07a99197809a3b88ef765f5f07dc1ff067fac64c59d6
SIZE (makemkv/ffmpeg-5.0.1.tar.bz2) = 11824483
TIMESTAMP = 1659596273
SHA256 (makemkv/makemkv-oss-1.17.1.tar.gz) = 0d572b1b937d97275cb75d71a142b3d555428aebd53a64161a500fda7ae766fe
SIZE (makemkv/makemkv-oss-1.17.1.tar.gz) = 6631683
SHA256 (makemkv/makemkv-bin-1.17.1.tar.gz) = 0784908b07f9fc87307a0f958105b7e2d37f5f10c0ef1a1280854e7d7c06b1f3
SIZE (makemkv/makemkv-bin-1.17.1.tar.gz) = 16162724
SHA256 (makemkv/ffmpeg-5.1.tar.bz2) = 32b56fb01ce90d452958ae25e91c9564abf49ed5453c127bec23c63e530aa8fa
SIZE (makemkv/ffmpeg-5.1.tar.bz2) = 12070454
SHA256 (makemkv/openssl-1.0.2k.tar.gz) = 6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0
SIZE (makemkv/openssl-1.0.2k.tar.gz) = 5309236
SHA256 (makemkv/fdk-aac-2.0.2.tar.gz) = c9e8630cf9d433f3cead74906a1520d2223f89bcd3fa9254861017440b8eb22f
SIZE (makemkv/fdk-aac-2.0.2.tar.gz) = 2886434
13 changes: 2 additions & 11 deletions multimedia/makemkv/pkg-descr
Expand Up @@ -6,17 +6,8 @@ converter, otherwise called "transcoder". It converts the video clips from
proprietary (and usually encrypted) disc into a set of MKV files, preserving
most information but not changing it in any way.

Known issues on FreeBSD:

* Only the commandline interface works, so there is no GUI in this port. The
port includes a small manpage to get you started using makemkvcon.
* makemkvcon always crashes on exit (after completing its job), so be aware
this might leave core files on your system.
* To find optical drives, makemkvcon uses some entries from Linux' sysfs that
aren't present on FreeBSD. A script `update-makemkv-drives` is included with
the port that fakes these entries. It is run automatically on installation,
but if the system's configuration changes, it must be run manually again by
root.
Only the commandline interface works, so there is no GUI in this port. The port
includes a small manpage to get you started using makemkvcon.

Requirements:

Expand Down

0 comments on commit 59a9ef2

Please sign in to comment.