aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodrigo Osorio <rodrigo@FreeBSD.org>2020-04-05 15:09:56 +0000
committerRodrigo Osorio <rodrigo@FreeBSD.org>2020-04-05 15:09:56 +0000
commitf07c0a40b04849b00f2757776b2717824628b3e7 (patch)
tree72a8e77018551e8ed56e5e489027413f4a3d78b4
parent00c86f71719e1a9789cea4551db1478db57e43f2 (diff)
downloadports-f07c0a40b04849b00f2757776b2717824628b3e7.tar.gz
ports-f07c0a40b04849b00f2757776b2717824628b3e7.zip
New port: multimedia/makemkv a CLI video converter from DVD
This port is CLI only and leaves out the MakeMKV GUI, because makemkvcon (closed source Linux binary) won't run in guiserver mode. Also, as described in the pkg-message, it requires a custom FreeBSD kernel with the Linux SCSI generic drivers and has to be build by the final user to comply with the license terms. Work is ongoing with the author to have a FreeBSD native version of this port in the future. PR: 238004 Submitted by: Felix Palmen <felix@palmen-it.de>
Notes
Notes: svn path=/head/; revision=530792
-rw-r--r--LEGAL1
-rw-r--r--multimedia/Makefile1
-rw-r--r--multimedia/makemkv/Makefile265
-rw-r--r--multimedia/makemkv/distinfo25
-rw-r--r--multimedia/makemkv/files/makemkvcon.1103
-rw-r--r--multimedia/makemkv/files/update-makemkv-drives.in58
-rw-r--r--multimedia/makemkv/pkg-descr45
-rw-r--r--multimedia/makemkv/pkg-message12
-rw-r--r--multimedia/makemkv/pkg-plist12
9 files changed, 522 insertions, 0 deletions
diff --git a/LEGAL b/LEGAL
index 98af61be787d..b59636444e3c 100644
--- a/LEGAL
+++ b/LEGAL
@@ -25,6 +25,7 @@
#
# Dist Port Why
# ------------------------------------------------------------------------------
+makemkv-* multimedia/makemkv MAKEMKV licenses don't allow 't allow distributing the package as it contains a modified version of the makemkvcon binary
*-for-1.4.tgz net/dgd-lpmud May not be used for monetary gain
*_MegaCLI.zip sysutils/megacli Source recipient must acknowledge license. Reproduction or redistribution prohibited. See http://www.lsi.com/lookup/License.aspx
26410-800.zip audio/libaacplus unclear legal status, probably need licenses from 3GPP, Via Licensing and Coding Technologies
diff --git a/multimedia/Makefile b/multimedia/Makefile
index 7b3ca3c7124b..acc03360fcea 100644
--- a/multimedia/Makefile
+++ b/multimedia/Makefile
@@ -244,6 +244,7 @@
SUBDIR += lxdvdrip
SUBDIR += m2tstoavi
SUBDIR += m2vrequantiser
+ SUBDIR += makemkv
SUBDIR += mediainfo
SUBDIR += mencoder
SUBDIR += mimms
diff --git a/multimedia/makemkv/Makefile b/multimedia/makemkv/Makefile
new file mode 100644
index 000000000000..c35ded9bee8c
--- /dev/null
+++ b/multimedia/makemkv/Makefile
@@ -0,0 +1,265 @@
+# Created by: Felix Palmen <felix@palmen-it.de>
+# $FreeBSD$
+
+PORTNAME= makemkv
+PORTVERSION= 1.15.0
+CATEGORIES= multimedia
+MASTER_SITES= http://www.makemkv.com/download/:makemkv \
+ http://www.makemkv.com/download/old/:makemkv \
+ KERNEL_ORG/linux/kernel/v2.6:linux \
+ GNU/binutils:binutils \
+ GNU/glibc:glibc \
+ GNU/gmp:gmp \
+ GNU/mpfr:mpfr \
+ GNU/mpc:mpc \
+ GCC/releases/gcc-${GCCVERSION}:gcc \
+ 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 \
+ linux-${LINUXVERSION}.tar.xz:linux \
+ binutils-${BINUTILSVERSION}.tar.bz2:binutils \
+ glibc-${GLIBCVERSION}.tar.xz:glibc \
+ gmp-${GMPVERSION}.tar.xz:gmp \
+ mpfr-${MPFRVERSION}.tar.xz:mpfr \
+ mpc-${MPCVERSION}.tar.gz:mpc \
+ gcc-${GCCVERSION}.tar.gz:gcc \
+ fdk-aac-${FDKAACVERSION}.tar.gz:fdkaac \
+ ffmpeg-${FFMPEGVERSION}.tar.bz2:ffmpeg \
+ openssl-${OPENSSLFULLVER}.tar.gz:openssl
+DIST_SUBDIR= ${PORTNAME}
+
+MAINTAINER= felix@palmen-it.de
+COMMENT= Video converter reading from DVD and Bluray
+
+LICENSE= MAKEMKV FDK GPLv2 GPLv3 LGPL21+ LGPL3 OpenSSL
+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= no-dist-mirror no-dist-sell no-pkg-mirror no-pkg-sell \
+ no-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_GPLv2= binutils-${BINUTILSVERSION}.tar.bz2 \
+ glibc-${GLIBCVERSION}.tar.xz \
+ linux-${LINUXVERSION}.tar.xz \
+ gcc-${GCCVERSION}.tar.gz
+LICENSE_DISTFILES_LGPL21+ = ffmpeg-${FFMPEGVERSION}.tar.bz2
+LICENSE_DISTFILES_GPLv3= gmp-${GMPVERSION}.tar.xz \
+ mpfr-${MPFRVERSION}.tar.xz
+LICENSE_DISTFILES_LGPL3= mpc-${MPCVERSION}.tar.gz
+LICENSE_DISTFILES_OpenSSL= openssl-${OPENSSLFULLVER}.tar.gz
+LICENSE_DISTFILES_MAKEMKV= makemkv-bin-${PORTVERSION}.tar.gz \
+ makemkv-oss-${PORTVERSION}.tar.gz
+
+ONLY_FOR_ARCHS= amd64 i386
+USE_LDCONFIG= yes
+USES= gmake linux pkgconfig perl5
+USE_LINUX= base expat expat:build openssl openssl:build
+USE_PERL5= build
+USE_GCC= yes
+BUILD_DEPENDS= nasm>0:devel/nasm \
+ ${LOCALBASE}/include/expat.h:textproc/expat2 \
+ patchelf>0:sysutils/patchelf \
+ gawk>0:lang/gawk \
+ gsed>0:textproc/gsed
+
+RESTRICTED= yes
+RESTRICTED_FILES= makemkv-bin-${PORTVERSION}.tar.gz
+
+WRKSRC= ${WRKDIR}/makemkv-oss-${PORTVERSION}
+
+SUB_FILES= update-makemkv-drives
+SUB_LIST= LINUXBASE=${LINUXBASE}
+PLIST_SUB= LINUXBASE=${LINUXBASE}
+
+LINUXVERSION= 2.6.32.27
+BINUTILSVERSION= 2.27
+GLIBCVERSION= 2.17
+GMPVERSION= 5.1.3
+MPFRVERSION= 3.1.2
+MPCVERSION= 1.0.3
+GCCVERSION= 5.5.0
+FDKAACVERSION= 2.0.1
+FFMPEGVERSION= 4.2.2
+OPENSSLVERSION= 1.0.2
+OPENSSLPATCHLEVEL= k
+OPENSSLFULLVER= ${OPENSSLVERSION}${OPENSSLPATCHLEVEL}
+
+LINUXARCH= ${ARCH:S/amd64/x86_64/}
+LINUXTRIPLET= ${LINUXARCH}-unknown-linux-gnu
+LINUXLIBDIR= ${LINUXBASE}/${"${LINUXARCH:Mx86_64}" != "":?lib64:lib}
+GNUCROSSDIR= ${WRKDIR}/gnuroot/${LINUXTRIPLET}
+GNUCROSSLIBDIR= ${GNUCROSSDIR}/${"${LINUXARCH:Mx86_64}" != "":?lib64:lib}
+OPENSSLTARGET= ${"${LINUXARCH:Mx86_64}" != "":?linux-x86_64:linux-elf}
+
+PATCHELF_CMD?= ${LOCALBASE}/bin/patchelf
+
+CFLAGS+= -DFORCE_OPENSSL_NO_EC -I${WRKDIR}/gnuroot/include \
+ -I${WRKDIR}/openssl-${OPENSSLFULLVER}/include
+SSP_CFLAGS=
+LDFLAGS+= -L${WRKDIR}/gnuroot/lib -Wl,-rpath-link=${WRKDIR}/gnuroot/lib
+HAS_CONFIGURE= yes
+CONFIGURE_ARGS= --prefix=${PREFIX} --disable-gui --host=${LINUXTRIPLET} \
+ --libdir=${PREFIX}/lib/makemkv
+CONFIGURE_ENV= CC=${LINUXTRIPLET}-gcc CXX=${LINUXTRIPLET}-g++ \
+ CFLAGS="${CFLAGS:N-Wl,-rpath=*}" \
+ CXXFLAGS="${CXXFLAGS:N-Wl,-rpath=*}" \
+ LDFLAGS="${LDFLAGS:N-Wl,-rpath=*}" \
+ PATH=${WRKDIR}/gnuroot/bin:${PATH} \
+ PKG_CONFIG_PATH=${WRKDIR}/gnuroot/lib/pkgconfig
+MAKE_ENV= PATH=${WRKDIR}/gnuroot/bin:${PATH}
+STRIP_CMD= ${WRKDIR}/gnuroot/bin/${LINUXTRIPLET}-strip
+
+post-extract:
+ @${MV} -f ${WRKDIR}/gmp-${GMPVERSION} \
+ ${WRKDIR}/gcc-${GCCVERSION}/gmp
+ @${MV} -f ${WRKDIR}/mpfr-${MPFRVERSION} \
+ ${WRKDIR}/gcc-${GCCVERSION}/mpfr
+ @${MV} -f ${WRKDIR}/mpc-${MPCVERSION} \
+ ${WRKDIR}/gcc-${GCCVERSION}/mpc
+ @${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}/binutils-build
+ @${MKDIR} ${WRKDIR}/gcc-build
+ @${MKDIR} ${WRKDIR}/glibc-build
+
+post-patch:
+ @${REINPLACE_CMD} -e 's:INSTALL) -D:INSTALL):' \
+ ${WRKSRC}/Makefile.in
+ @${REINPLACE_CMD} -e 's:/bin/bash:/bin/sh:' \
+ -e 's:x86_64:amd64:' \
+ -e 's:-t \([^ ]*\) \([^ ]*\):\2 \1:' \
+ ${WRKDIR}/makemkv-bin-${PORTVERSION}/Makefile
+ @${REINPLACE_CMD} -e 's:3\.79:4.*:' \
+ ${WRKDIR}/glibc-${GLIBCVERSION}/configure
+ @${REINPLACE_CMD} -e 's:#ifndef __u_char_defined:#if 0:' \
+ -e 's:#ifndef __daddr_t_defined:#if 0:' \
+ ${WRKDIR}/glibc-${GLIBCVERSION}/sunrpc/rpc/types.h
+ @${REINPLACE_CMD} -e 's:^\([[:space:]]*\)sed :\1gsed :' \
+ ${WRKDIR}/glibc-${GLIBCVERSION}/Makerules
+
+pre-configure:
+ # Linux headers
+ cd ${WRKDIR}/linux-${LINUXVERSION}; \
+ ${MAKE_CMD} V=1 HOSTCC=${CC} ARCH=${LINUXARCH} \
+ INSTALL_HDR_PATH=${GNUCROSSDIR} headers_install; \
+ # Binutils
+ cd ${WRKDIR}/binutils-build; \
+ CC=${CC} CXX=${CXX} ../binutils-${BINUTILSVERSION}/configure \
+ --target=${LINUXTRIPLET} \
+ --prefix=${WRKDIR}/gnuroot \
+ --disable-multilib --disable-nls; \
+ ${MAKE_CMD} ${_MAKE_JOBS} && \
+ ${MAKE_CMD} install
+ # GCC compiler
+ cd ${WRKDIR}/gcc-build; \
+ export PATH=${WRKDIR}/gnuroot/bin:$$PATH; \
+ CC=${CC} CXX=${CXX} ../gcc-${GCCVERSION}/configure \
+ --target=${LINUXTRIPLET} \
+ --prefix=${WRKDIR}/gnuroot \
+ --enable-languages=c,c++ --disable-multilib; \
+ ${MAKE_CMD} ${_MAKE_JOBS} all-gcc && \
+ ${MAKE_CMD} install-gcc
+ # Glibc headers / startup code
+ cd ${WRKDIR}/glibc-build; \
+ export PATH=${WRKDIR}/gnuroot/bin:$$PATH; \
+ export nargs=0; \
+ BUILD_CC=${CC} CC=${LINUXTRIPLET}-gcc \
+ ../glibc-${GLIBCVERSION}/configure \
+ --host=${LINUXTRIPLET} \
+ --prefix=${GNUCROSSDIR} \
+ --with-binutils=${WRKDIR}/gnuroot/bin \
+ --with-headers=${GNUCROSSDIR}/include \
+ --disable-profile --disable-multilib \
+ --enable-kernel=2.6.32 libc_cv_forced_unwind=yes \
+ libc_cv_ssp=no; \
+ ${MAKE_CMD} install-bootstrap-headers=yes install-headers; \
+ ${MAKE_CMD} ${_MAKE_JOBS} csu/subdir_lib; \
+ ${INSTALL_DATA} csu/crt1.o csu/crti.o csu/crtn.o \
+ ${GNUCROSSDIR}/lib; \
+ ${LINUXTRIPLET}-gcc -nostdlib -nostartfiles -shared \
+ -x c /dev/null -o ${GNUCROSSDIR}/lib/libc.so; \
+ ${TOUCH} ${GNUCROSSDIR}/include/gnu/stubs.h
+ # GCC support libs
+ cd ${WRKDIR}/gcc-build; \
+ export PATH=${WRKDIR}/gnuroot/bin:$$PATH; \
+ ${MAKE_CMD} ${_MAKE_JOBS} all-target-libgcc; \
+ ${MAKE_CMD} install-target-libgcc
+ # Glibc library
+ cd ${WRKDIR}/glibc-build; \
+ export PATH=${WRKDIR}/gnuroot/bin:$$PATH; \
+ ${MAKE_CMD} ${_MAKE_JOBS}; \
+ ${MAKE_CMD} install
+ # GCC libstdc++
+ ${ECHO_CMD} '#/bin/sh\ntrue' \
+ >${WRKDIR}/gnuroot/bin/ldconfig
+ ${CHMOD} +x ${WRKDIR}/gnuroot/bin/ldconfig
+ cd ${WRKDIR}/gcc-build; \
+ export PATH=${WRKDIR}/gnuroot/bin:$$PATH; \
+ ${MAKE_CMD} ${_MAKE_JOBS}; \
+ ${MAKE_CMD} install
+ # FDK AAC
+ cd ${WRKDIR}/fdk-aac-${FDKAACVERSION}; \
+ export PATH=${WRKDIR}/gnuroot/bin:$$PATH; \
+ export CXXFLAGS="${CFLAGS}"; \
+ 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}"; \
+ PKG_CONFIG_PATH=${WRKDIR}/gnuroot/lib/pkgconfig \
+ CPPFLAGS="-Dcaddr_t=void\* -D__daddr_t_defined" \
+ 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}" \
+ ${MAKE_CMD} ${_MAKE_JOBS} V=1 ARCH=x86 all install
+ # OpenSSL headers
+ cd ${WRKDIR}/openssl-${OPENSSLFULLVER}; \
+ ./Configure --openssldir= --prefix=/usr ${OPENSSLTARGET}
+
+pre-install:
+ ${MKDIR} ${STAGEDIR}${PREFIX}/lib/makemkv
+
+post-install:
+ ${INSTALL_MAN} ${FILESDIR}/makemkvcon.1 \
+ ${STAGEDIR}${PREFIX}/man/man1
+ ${INSTALL_LIB} ${GNUCROSSLIBDIR}/libstdc++.so.6 \
+ ${STAGEDIR}${PREFIX}/lib/makemkv
+ cd ${WRKDIR}/makemkv-bin-${PORTVERSION}; \
+ ${MKDIR} tmp; \
+ ${ECHO_CMD} accepted > tmp/eula_accepted; \
+ ${MAKE_CMD} DESTDIR=${STAGEDIR} PREFIX=${PREFIX} install
+ ${PATCHELF_CMD} --set-rpath ${PREFIX}/lib/makemkv \
+ ${STAGEDIR}${PREFIX}/bin/makemkvcon
+ ${REINPLACE_CMD} -e 's:/sys/bus/scsi:/etc/makemkv/:' \
+ ${STAGEDIR}${PREFIX}/bin/makemkvcon
+ ${INSTALL_SCRIPT} ${WRKDIR}/update-makemkv-drives \
+ ${STAGEDIR}${PREFIX}/sbin
+
+.include <bsd.port.mk>
diff --git a/multimedia/makemkv/distinfo b/multimedia/makemkv/distinfo
new file mode 100644
index 000000000000..529230f39c0a
--- /dev/null
+++ b/multimedia/makemkv/distinfo
@@ -0,0 +1,25 @@
+TIMESTAMP = 1585042908
+SHA256 (makemkv/makemkv-oss-1.15.0.tar.gz) = a9213fa7cbf2bf2f03d90cd350ad53aa82394bc3991c440e9e369e4169f3ed06
+SIZE (makemkv/makemkv-oss-1.15.0.tar.gz) = 6383576
+SHA256 (makemkv/makemkv-bin-1.15.0.tar.gz) = 442d67d5368390263c30fca2d980ebfffb716be227b9f056b69961d2b11b26ff
+SIZE (makemkv/makemkv-bin-1.15.0.tar.gz) = 9516617
+SHA256 (makemkv/linux-2.6.32.27.tar.xz) = 96c20c370ed440db61624d93f34721a09a69b12bb81b1b03bb735041983fb1bd
+SIZE (makemkv/linux-2.6.32.27.tar.xz) = 52652044
+SHA256 (makemkv/binutils-2.27.tar.bz2) = 369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
+SIZE (makemkv/binutils-2.27.tar.bz2) = 26099568
+SHA256 (makemkv/glibc-2.17.tar.xz) = 6914e337401e0e0ade23694e1b2c52a5f09e4eda3270c67e7c3ba93a89b5b23e
+SIZE (makemkv/glibc-2.17.tar.xz) = 10981956
+SHA256 (makemkv/gmp-5.1.3.tar.xz) = dee2eda37f4ff541f30019932db0c37f6f77a30ba3609234933b1818f9b07071
+SIZE (makemkv/gmp-5.1.3.tar.xz) = 1818812
+SHA256 (makemkv/mpfr-3.1.2.tar.xz) = 399d0f47ef6608cc01d29ed1b99c7faff36d9994c45f36f41ba250147100453b
+SIZE (makemkv/mpfr-3.1.2.tar.xz) = 1074388
+SHA256 (makemkv/mpc-1.0.3.tar.gz) = 617decc6ea09889fb08ede330917a00b16809b8db88c29c31bfbb49cbf88ecc3
+SIZE (makemkv/mpc-1.0.3.tar.gz) = 669925
+SHA256 (makemkv/gcc-5.5.0.tar.gz) = 3aabce75d6dd206876eced17504b28d47a724c2e430dbd2de176beb948708983
+SIZE (makemkv/gcc-5.5.0.tar.gz) = 123816630
+SHA256 (makemkv/fdk-aac-2.0.1.tar.gz) = 840133aa9412153894af03b27b03dde1188772442c316a4ce2a24ed70093f271
+SIZE (makemkv/fdk-aac-2.0.1.tar.gz) = 2865456
+SHA256 (makemkv/ffmpeg-4.2.2.tar.bz2) = b620d187c26f76ca19e74210a0336c3b8380b97730df5cdf45f3e69e89000e5c
+SIZE (makemkv/ffmpeg-4.2.2.tar.bz2) = 10953320
+SHA256 (makemkv/openssl-1.0.2k.tar.gz) = 6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0
+SIZE (makemkv/openssl-1.0.2k.tar.gz) = 5309236
diff --git a/multimedia/makemkv/files/makemkvcon.1 b/multimedia/makemkv/files/makemkvcon.1
new file mode 100644
index 000000000000..75aad41f0051
--- /dev/null
+++ b/multimedia/makemkv/files/makemkvcon.1
@@ -0,0 +1,103 @@
+.Dd May 20, 2019
+.Dt MAKEMKVCON 1
+.Os
+.Sh NAME
+.Nm makemkvcon
+.Nd read video from DVD or Bluray disc and convert to mkv format
+.Sh SYNOPSIS
+.Nm
+.Op Fl -minlength= Ns Ar seconds
+.Cm info
+.Ar source_spec
+.Nm
+.Op Fl -minlength= Ns Ar seconds
+.Cm mkv
+.Ar source_spec
+.Ar title_spec
+.Pa target_directory
+.Sh DESCRIPTION
+The
+.Nm
+utility shows information about a video disc in an optical drive, the
+.Cm mkv
+subcommand also converts selected titles from the disc to
+.Sy .mkv
+files in a given location.
+.sp
+The arguments are as follows:
+.Bl -tag -width Ds
+.It Fl -minlength= Ns Ar seconds
+Only consider video titles with a minimal length of
+.Ar seconds . No If you use the
+.Cm mkv
+subcommand after the
+.Cm info
+subcommand, make sure to pass the same value for
+.Ar seconds ,
+as filtering out titles with a smaller length happens before
+numbering the titles.
+.It Ar source_spec
+Read video disc from the given source.
+Use
+.Dq disc:0
+here to have
+.Nm
+read from the first video disc it can find.
+.It Ar title_spec
+Determines which titles to read.
+This can be either a whole number from
+.Sy 0
+to
+.Sy n-1
+for a disc with
+.Sy n
+titles to read exactly one title, or the string
+.Dq all
+to read all titles found.
+.It Ar target_directory
+The path where to store the converted
+.Sy .mkv
+files.
+.El
+.Sh FILES
+.Bl -tag -width Ds
+.It Pa ~/.MakeMKV/settings.conf
+You may put a license key in this file in the following format:
+.Dl app_Key = Qq XXXXXXXXXXXXXXXX...
+You can either buy a license or use the key, that is freely available
+as long as MakeMKV is in beta from
+.Lk https://www.makemkv.com/forum/ .
+.El
+.Sh EXAMPLES
+.Bd -literal -offset indent
+% makemkvcon mkv disc:0 0 .
+.Ed
+.sp
+This command reads the first title from the first disc it can find and stores
+a converted
+.Sy .mkv
+file in the current directory.
+.Sh SEE ALSO
+This manpage only describes the most commonly used options.
+A more complete documentation is available online at
+.Lk https://www.makemkv.com/developers/usage.txt
+.sp
+For some examples what you can put in your configuration file, see
+.Lk http://wiki.indie-it.com/wiki/MakeMKV
+.Sh BUGS
+On
+.Fx Ns ,
+.Nm
+crashes with a signal 11 (segmentation fault) after finishing its job.
+Be aware this might leave a
+.Sy .core
+file on your file system.
+.Sh KNOWN ISSUES
+To find optical drives,
+.Nm
+uses some entries from Linux' sysfs that aren't present on
+.Fx .
+A script `update-makemkv-drives` is included to fake these entries and is run
+automatically on installation.
+If your system's configuration changes, you must run this script as root
+manually, so new or changed drives can be found.
diff --git a/multimedia/makemkv/files/update-makemkv-drives.in b/multimedia/makemkv/files/update-makemkv-drives.in
new file mode 100644
index 000000000000..4b1096ecb7ed
--- /dev/null
+++ b/multimedia/makemkv/files/update-makemkv-drives.in
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+trap 'rm -fr $TMPFIFODIR' EXIT
+TMPFIFODIR=$(mktemp -d)
+mkfifo $TMPFIFODIR/campipe
+
+SGDEVS=
+
+rm -fr %%LINUXBASE%%/etc/makemkv/devices
+rm -fr %%LINUXBASE%%/etc/makemkv/drivers
+
+camcontrol devlist | grep -E '[(,]cd[0-9]+[,)]' > $TMPFIFODIR/campipe &
+while read line
+do
+ SCBUS=`echo $line | grep -Eo 'scbus[0-9]+' | sed -e 's:scbus::'`
+ TARGET=`echo $line | grep -Eo 'target [0-9]+' | sed -e 's:target ::'`
+ LUN=`echo $line | grep -Eo 'lun [0-9]+' | sed -e 's:lun ::'`
+ SGDEV=`echo $line | grep -Eo '(.*)' | grep -Eo 'sg[0-9]+'`
+ if [ -n "$SCBUS" -a -n "$TARGET" -a -n "$LUN" ]; then
+ if [ -z "$SGDEV" ]; then
+ cat <<EOF
+Optical drive without 'sg' device found! Make sure your kernel supports
+sg devices. To build a kernel with sg devices, you must add the following
+to your kernel configuration:
+
+device sg
+
+Refer to
+<https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-building.html>
+for building a custom kernel.
+
+When finished, re-run this script (update-makemkv-drives).
+EOF
+ exit 1
+ fi
+ SGDEVS="$SGDEVS /dev/$SGDEV"
+ LOC=$SCBUS:0:$TARGET:$LUN
+ mkdir -p %%LINUXBASE%%/etc/makemkv/devices/$LOC/scsi_generic/$SGDEV
+ mkdir -p %%LINUXBASE%%/etc/makemkv/drivers/sr
+ ln -s ../../devices/$LOC %%LINUXBASE%%/etc/makemkv/drivers/sr/$LOC
+ echo 5 >%%LINUXBASE%%/etc/makemkv/devices/$LOC/type
+ fi
+done < $TMPFIFODIR/campipe
+
+if [ -z "$SGDEVS" ]; then
+ cat <<EOF
+No usable optical drives found. Make sure your drive (/dev/cd*) is available.
+Check the output of "camcontrol devlist".
+
+When finished, re-run this script (update-makemkv-drives).
+EOF
+ exit 1
+fi
+
+echo devices linked: $SGDEVS.
+
+echo "When your configuration changes, re-run this script (update-makemkv-drives)."
+
diff --git a/multimedia/makemkv/pkg-descr b/multimedia/makemkv/pkg-descr
new file mode 100644
index 000000000000..083b77d35b61
--- /dev/null
+++ b/multimedia/makemkv/pkg-descr
@@ -0,0 +1,45 @@
+Video converter reading from DVD and Bluray
+
+MakeMKV is your one-click solution to convert video that you own into free and
+patents-unencumbered format that can be played everywhere. MakeMKV is a format
+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. The MKV format can store
+multiple video/audio tracks with all meta-information and preserve chapters.
+There are many players that can play MKV files nearly on all platforms, and
+there are tools to convert MKV files to many formats, including DVD and Blu-ray
+discs.
+
+* Reads DVD and Blu-ray discs
+* Reads Blu-ray discs protected with latest versions of AACS and BD+
+* Preserves all video and audio tracks, including HD audio
+* Preserves chapters information
+* Preserves all meta-information (track language, audio type)
+* Fast conversion - converts as fast as your drive can read data.
+* No additional software is required for conversion or decryption.
+* Functionality to open DVD discs is free and will always stay free.
+* All features (including Blu-ray decryption and processing) are free during
+ BETA.
+
+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.
+
+Requirements:
+
+* A custom FreeBSD kernel with sg devices (Linux' "scsi generic" interface) is
+ required to use makemkvcon. To build such a kernel, add "device sg" to your
+ kernel configuration and follow the instructions at
+ https://www.freebsd.org/doc/handbook/kernelconfig-building.html
+* Make sure you have the "linux" kernel module loaded. On amd64, "linux64" is
+ also required.
+
+WWW: https://www.makemkv.com
diff --git a/multimedia/makemkv/pkg-message b/multimedia/makemkv/pkg-message
new file mode 100644
index 000000000000..f0cfb71e17e9
--- /dev/null
+++ b/multimedia/makemkv/pkg-message
@@ -0,0 +1,12 @@
+This port doesn't include the MakeMKV GUI as it doesn't work on FreeBSD.
+
+To enable makemkvcon to find a drive on FreeBSD, a part of Linux' sysfs must
+be faked. The included script `update-makemkv-drives' creates these faked
+sysfs entries and is run automatically after installation. If your hardware
+configuration changes, make sure to re-run `update-makemkv-drives'.
+
+If makemkvcon refuses to work as root, check the permissions of
+/compat/linux/tmp -- it should be world-writable and sticky. To set these
+permissions, use the command
+
+ chmod 1777 /compat/linux/tmp
diff --git a/multimedia/makemkv/pkg-plist b/multimedia/makemkv/pkg-plist
new file mode 100644
index 000000000000..a3e192cb5bfd
--- /dev/null
+++ b/multimedia/makemkv/pkg-plist
@@ -0,0 +1,12 @@
+bin/makemkvcon
+lib/makemkv/libdriveio.so.0
+lib/makemkv/libmakemkv.so.1
+lib/makemkv/libmmbd.so.0
+lib/makemkv/libstdc++.so.6
+man/man1/makemkvcon.1.gz
+sbin/update-makemkv-drives
+share/MakeMKV/appdata.tar
+share/MakeMKV/blues.jar
+share/MakeMKV/blues.policy
+@postexec update-makemkv-drives
+@preunexec rm -fr %%LINUXBASE%%/etc/makemkv