# Created by: Felix Palmen <felix@palmen-it.de>

PORTNAME=	makemkv
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=	${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

LICENSE=		MAKEMKV LGPL21+ ${PORT_OPTIONS:MFDK_AAC}
LICENSE_COMB=		multi
LICENSE_NAME_MAKEMKV=	The MakeMKV EULA
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
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_${FFMPEG_ARCH}}
BUILD_DEPENDS_x86=	nasm:devel/nasm

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

SUB_FILES=	update-makemkv-drives
SUB_LIST=	LINUXBASE=${LINUXBASE}
PLIST_SUB=	LINUXBASE=${LINUXBASE}

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

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:}
LDFLAGS+=	-L${LINUXSYSROOT}/lib
PATCHELF_CMD?=	${LOCALBASE}/bin/patchelf
HAS_CONFIGURE=	yes
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"

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} ${LINUXSYSROOT}/lib
.for lib in ${LINUXLIBS}
		@${LN} -s ${LINUXLIBDIR}/${lib} ${LINUXSYSROOT}/lib/${lib:R}
.endfor

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:i686:i386:' \
			-e 's:-t \([^ ]*\) \([^ ]*\):\2 \1:' \
			-e 's:ARCH=:BINARCH=:' \
			-e 's:bin/$$(ARCH:bin/$$(BINARCH:' \
			${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:
		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 ${WRKSRC_openssl}; \
		./Configure --openssldir= --prefix=/usr ${OPENSSLTARGET}

pre-install:
		${MKDIR} ${STAGEDIR}${PREFIX}/lib/makemkv

post-install:
		${INSTALL_MAN} ${FILESDIR}/makemkvcon.1 \
			${STAGEDIR}${PREFIX}/man/man1
		cd ${WRKSRC_bin}; \
		${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
		${BRANDELF} -t Linux ${STAGEDIR}${PREFIX}/bin/makemkvcon
		${INSTALL_SCRIPT} ${WRKDIR}/update-makemkv-drives \
			${STAGEDIR}${PREFIX}/sbin

post-install-EXAMPLES-on:
		${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
		${INSTALL_DATA} ${FILESDIR}/update-makemkv-key.sh \
			${STAGEDIR}${EXAMPLESDIR}

.include <bsd.port.mk>
