aboutsummaryrefslogtreecommitdiff
path: root/multimedia/makemkv/Makefile
blob: 8504405cc77c889248984382fe945caaff8249b2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
PORTNAME=	makemkv
DISTVERSION=	1.17.3
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
DISTFILES=	${DISTFL_MAKEMKV:S/$/:makemkv/} \
		${DISTFL_FFMPEG:S/$/:ffmpeg/}

MAINTAINER=	zirias@FreeBSD.org
COMMENT=	Video converter reading from DVD and Bluray
WWW=		https://www.makemkv.com

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
USE_CSTD=	c11
USE_CXXSTD=	c++11
USE_LINUX=	base expat \
		devtools:build expat-devel:build openssl-devel:build \
		zlib-devel:build
BUILD_DEPENDS=	patchelf: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}

CONFLICTS_BUILD=	v4l_compat

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

FDKAACVERSION=	2.0.2
FFMPEGVERSION=	5.1.2

DISTFL_MAKEMKV=	makemkv-oss-${DISTVERSION}.tar.gz \
		makemkv-bin-${DISTVERSION}.tar.gz
DISTFL_FDKAAC=	fdk-aac-${FDKAACVERSION}.tar.gz
DISTFL_FFMPEG=	ffmpeg-${FFMPEGVERSION}.tar.xz

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

CC=		${LINUXBASE}/bin/gcc
CXX=		${LINUXBASE}/bin/g++
CPPFLAGS+=	-D_linux_ -DFORCE_OPENSSL_NO_EC \
		${${OSVERSION}<1300000:?-Dcaddr_t=void\* -D__daddr_t_defined:}
PATCHELF_CMD?=	${LOCALBASE}/bin/patchelf
LINUXSYSROOT=	${WRKDIR}/gnuroot
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-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}

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>