aboutsummaryrefslogtreecommitdiff
path: root/multimedia/mythtv/Makefile
blob: 085be8e39c3dc7381463f132cfe33b7a877c679f (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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
PORTNAME=	mythtv
DISTVERSIONPREFIX=	v
DISTVERSION=	33.1
PORTREVISION=	4
PORTEPOCH=	1
CATEGORIES=	multimedia

MAINTAINER=	ahicks@p-o.co.uk
COMMENT=	Homebrew PVR project
WWW=		https://www.mythtv.org/

LICENSE=	GPLv2+

ONLY_FOR_ARCHS=	aarch64 amd64 i386 powerpc powerpc64 powerpc64le
.if ${/usr/bin/ld:L:tA} == /usr/bin/ld.lld
BROKEN_i386=	ld: error: can't create dynamic relocation R_386_32 against local symbol in readonly segment
.endif
DEPRECATED=Depends on deprecated www/qt5-webkit
EXPIRATION_DATE=2023-12-31

LIB_DEPENDS=	liblzo2.so:archivers/lzo2 \
		libmp3lame.so:audio/lame \
		libsamplerate.so:audio/libsamplerate \
		libtag.so:audio/taglib \
		libexiv2.so:graphics/exiv2 \
		libva.so:multimedia/libva \
		libva-glx.so:multimedia/libva-glx \
		libbluray.so:multimedia/libbluray \
		libass.so:multimedia/libass \
		libfftw3_threads.so:math/fftw3 \
		libfftw3f.so:math/fftw3-float \
		libfreetype.so:print/freetype2 \
		libxml2.so:textproc/libxml2 \
		libdav1d.so:multimedia/dav1d \
		libaom.so:multimedia/aom \
		libdrm.so:graphics/libdrm \
		libpulse.so:audio/pulseaudio \
		libjack.so:audio/jack \
		libSoundTouch.so:audio/soundtouch \
		libasound.so:audio/alsa-lib \
		libsndio.so:audio/sndio \
		libgnutls.so:security/gnutls \
		libzip.so:archivers/libzip \
		libexpat.so:textproc/expat2
BUILD_DEPENDS=	yasm:devel/yasm \
		${LOCALBASE}/include/linux/input.h:devel/evdev-proto

USES=		compiler:c++17-lang gmake gl iconv libtool pkgconfig pathfix \
		perl5 python qmake:no_env qt:5 shebangfix ssl xorg

USE_GITHUB=	yes
GH_ACCOUNT=	MythTV
USE_GL=		gl
USE_LDCONFIG=	yes
USE_QT=		buildtools:build core dbus gui imageformats:run \
		linguist:build multimedia network opengl qmake:build script \
		sql sql-mysql:run webkit widgets xml
USE_PERL5=	run build
USE_XORG=	x11 xv xrandr xxf86vm xinerama xext xcb
SHEBANG_FILES=	programs/scripts/database/*.pl \
		programs/scripts/metadata/Music/mbutils.py

HAS_CONFIGURE=	yes
CONFIGURE_ARGS=	--prefix="${PREFIX}" --cc="${CC}" --cxx="${CXX}" \
		--libxml2-path="${LOCALBASE}/include/libxml2" \
		--disable-audio-alsa
CONFIGURE_ENV=	QMAKESPEC="${QMAKESPEC}" MOC="${MOC}" \
		QTDIR="${PREFIX}" PKG_CONFIG_PATH="${LOCALBASE}/libdata/pkgconfig"
MAKE_ENV=	QTDIR="${PREFIX}" \
		QMAKESPEC="${QMAKESPEC}"
NOPRECIOUSMAKEVARS=	# don't override ARCH in ffmpeg makefiles
DESTDIRNAME=	INSTALL_ROOT
CPPFLAGS+=	${QTCPPFLAGS}
LDFLAGS+=	-L${LOCALBASE}/lib
LDFLAGS_aarch64=-Wl,-z,notext

REINPLACE_ARGS=	-i ""
WRKSRC_SUBDIR=	${PORTNAME}

DESKTOP_ENTRIES="MythTV Frontend" "MythTV is a homebrew PVR project" "" \
		"mythfrontend" "AudioVideo;Video;" false

CONFLICTS_INSTALL=	mythtv-frontend

RUN_DEPENDS+=	tv_check:textproc/p5-xmltv \
		wget:ftp/wget
USE_RC_SUBR=	mythbackend
SHEBANG_FILES=	programs/scripts/database/*.pl \
		programs/scripts/internetcontent/*.py \
		programs/scripts/internetcontent/*.pl \
		programs/scripts/internetcontent/nv_python_libs/*.py \
		programs/scripts/hardwareprofile/*.py \
		programs/scripts/metadata/Movie/tmdb3.py \
		programs/scripts/metadata/Music/mbutils.py

CONFIGURE_ARGS+=--dvb-path="${WRKSRC}/media_tree/include/uapi" \
		--enable-v4l2

USERS=		mythtv
GROUPS=		mythtv

SUB_FILES=	pkg-message

OPTIONS_DEFINE=		BINDINGS HDHOMERUN JACK LIRC MYSQL PULSEAUDIO VDPAU
OPTIONS_DEFAULT=	BINDINGS HDHOMERUN VDPAU
OPTIONS_SUB=		yes

BINDINGS_DESC=		Perl and Python bindings
BINDINGS_BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}mysqlclient>=0:databases/py-mysqlclient@${PY_FLAVOR} \
			${PYTHON_PKGNAMEPREFIX}future>=0:devel/py-future@${PY_FLAVOR} \
			${PYTHON_PKGNAMEPREFIX}lxml>=0:devel/py-lxml@${PY_FLAVOR} \
			${PYTHON_PKGNAMEPREFIX}requests>=0:www/py-requests@${PY_FLAVOR} \
			${PYTHON_PKGNAMEPREFIX}simplejson>=0:devel/py-simplejson@${PY_FLAVOR} \
			p5-DBI>=0:databases/p5-DBI \
			p5-DBD-mysql>0:databases/p5-DBD-mysql \
			p5-Net-UPnP>=0:multimedia/p5-Net-UPnP \
			p5-IO-Socket-INET6>=2.51:net/p5-IO-Socket-INET6 \
			p5-XML-Simple>=0:textproc/p5-XML-Simple \
			p5-HTTP-Request-Params>=0:www/p5-HTTP-Request-Params \
			p5-LWP-UserAgent-Determined>=0:www/p5-LWP-UserAgent-Determined
BINDINGS_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}mysqlclient>=1.2.2:databases/py-mysqlclient@${PY_FLAVOR} \
			${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \
			${PYTHON_PKGNAMEPREFIX}lxml>=0:devel/py-lxml@${PY_FLAVOR} \
			${PYTHON_PKGNAMEPREFIX}requests>0:www/py-requests@${PY_FLAVOR} \
			${PYTHON_PKGNAMEPREFIX}requests-cache>0:www/py-requests-cache@${PY_FLAVOR} \
			${PYTHON_PKGNAMEPREFIX}simplejson>=3:devel/py-simplejson@${PY_FLAVOR} \
			p5-DBI>=0:databases/p5-DBI \
			p5-DBD-mysql>0:databases/p5-DBD-mysql \
			p5-Net-UPnP>=0:multimedia/p5-Net-UPnP \
			p5-IO-Socket-INET6>=2.51:net/p5-IO-Socket-INET6 \
			p5-XML-Simple>=0:textproc/p5-XML-Simple \
			p5-HTTP-Request-Params>=0:www/p5-HTTP-Request-Params \
			p5-LWP-UserAgent-Determined>=0:www/p5-LWP-UserAgent-Determined
BINDINGS_CONFIGURE_ON=	--python="${PYTHON_CMD}" --with-bindings=perl,python
BINDINGS_CONFIGURE_OFF=	--without-bindings=perl,python

HDHOMERUN_DESC=		Native support for HDHomeRun network tuners
HDHOMERUN_LIB_DEPENDS=	libhdhomerun.so:multimedia/libhdhomerun
HDHOMERUN_CONFIGURE_OFF=	--disable-hdhomerun

JACK_LIB_DEPENDS=	libjack.so:audio/jack
JACK_CONFIGURE_OFF=	--disable-audio-jack

LIRC_LIB_DEPENDS=	liblirc_client.so:comms/lirc
LIRC_CONFIGURE_OFF=	--disable-lirc

MYSQL_DESC=		Install MySQL server in addition to client
MYSQL_USES=		mysql:client,server
MYSQL_USES_OFF=		mysql

PULSEAUDIO_LIB_DEPENDS=	libpulse.so:audio/pulseaudio
PULSEAUDIO_CONFIGURE_OFF=	--disable-audio-pulseoutput

VDPAU_LIB_DEPENDS=	libvdpau.so:multimedia/libvdpau
VDPAU_CONFIGURE_OFF=	--disable-vdpau

LINUXDVB=	${WRKSRC}/media_tree/include/uapi/linux/dvb

post-patch:
	@${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|g' \
		${WRKSRC}/configure \
		${WRKSRC}/libs/libmythtv/libmythtv.pro \
		${WRKSRC}/bindings/perl/MythTV/Recording.pm \
		${WRKSRC}/programs/mythtranscode/external/replex/Makefile.standalone \
		${WRKSRC}/programs/scripts/database/mythconverg_backup.pl \
		${WRKSRC}/programs/scripts/database/mythconverg_restore.pl \
		${WRKSRC}/programs/mythcommflag/mythcommflag-analyze
.if !defined(SLAVEPORT)
	# Header file from:
	# https://git.linuxtv.org/media_tree.git/tree/include/uapi/linux/dvb
	@${MKDIR} ${LINUXDVB}
	@${CP} ${FILESDIR}/audio.h ${LINUXDVB}
	@${CP} ${FILESDIR}/ca.h ${LINUXDVB}
	@${CP} ${FILESDIR}/dmx.h ${LINUXDVB}
	@${CP} ${FILESDIR}/frontend.h ${LINUXDVB}
	@${CP} ${FILESDIR}/net.h ${LINUXDVB}
	@${CP} ${FILESDIR}/osd.h ${LINUXDVB}
	@${CP} ${FILESDIR}/version.h ${LINUXDVB}
	@${CP} ${FILESDIR}/video.h ${LINUXDVB}
	# Linux to BSD from multimedia/libv4l/Makefile
	@${FIND} ${LINUXDVB} -type f -name "*.h" | \
		${XARGS} -n 1 ${REINPLACE_CMD} \
		-e 's|#include <linux/types.h>|#include <sys/types.h>|'\
		-e 's|__inline__|inline|g' \
		-e 's|__u8|uint8_t|g' \
		-e 's|__s8|int8_t|g' \
		-e 's|__le16|uint16_t|g' \
		-e 's|__be16|uint16_t|g' \
		-e 's|__u16|uint16_t|g' \
		-e 's|__s16|int16_t|g' \
		-e 's|__le32|uint32_t|g' \
		-e 's|__be32|uint32_t|g' \
		-e 's|__u32|uint32_t|g' \
		-e 's|__s32|int32_t|g' \
		-e 's|__le64|uint64_t|g' \
		-e 's|__be64|uint64_t|g' \
		-e 's|__u64|uint64_t|g' \
		-e 's|__s64|int64_t|g' \
		-e 's|uint16_t_to_cpu|letoh16|g' \
		-e 's|uint32_t_to_cpu|letoh32|g' \
		-e 's|uint64_t_to_cpu|letoh64|g' \
		-e 's|error_t|int|g' \
		-e 's|"gettext.h"|<stdio.h>|g' \
		-e 's|MSG_MORE|0|g' \
		-e 's|EBADR|EFAULT|g' \
		-e 's|ENONET|EHOSTDOWN|g' \
		-e 's|_IOC_READ|IOC_OUT|g' \
		-e 's|_IOC_WRITE|IOC_IN|g' \
		-e 's|_IOC_NONE|IOC_VOID|g' \
		-e 's|<endian.h>|<sys/endian.h>|g' \
		-e 's|<linux/compiler.h>|<sys/cdefs.h>|g' \
		-e 's|<linux/errno.h>|<errno.h>|g' \
		-e 's|<linux/ioctl.h>|<sys/ioctl.h>|g' \
		-e '/^.*\<linux\/kernel.h\>.*/d' \
		-e 's|<linux/string.h>|<string.h>|g' \
		-e 's|<linux/sysmacros.h>|<sys/types.h>|g' \
		-e 's|<malloc.h>|<stdlib.h>|g' \
		-e 's|<sys/epoll.h>|<libepoll-shim/sys/epoll.h>|g' \
		-e 's|<sys/sysmacros.h>|<sys/types.h>|g' \
		-e 's|/usr/bin/perl|${LOCALBASE}/bin/perl|g' \
		-e 's|__user||g' \
		${LINUXDVB}/frontend.h
.endif

pre-install:
.if !defined(SLAVEPORT)
	@${REINPLACE_CMD} -e '/^CPPFLAGS=/ s#$$# -I${LOCALBASE}/include#' \
		${WRKSRC}/libs/libmythbase/mythconfig.mak
.endif

post-install:
.if !defined(SLAVEPORT)
	@${MKDIR} ${STAGEDIR}${PREFIX}/share/mythtv/database
	${INSTALL_DATA} ${WRKSRC}/database/mc.sql ${STAGEDIR}${PREFIX}/share/mythtv/database
.endif
	@${FIND} ${STAGEDIR}${PREFIX}/bin -type f -exec ${SH} -c "${FILE} -i '{}' | \
		${GREP} -q 'x-executable; charset=binary'" \; -print | ${XARGS} ${STRIP_CMD}
	@${FIND} ${STAGEDIR}${PREFIX}/lib -type f -name lib\*.so.\* | ${XARGS} ${STRIP_CMD}

# Apply additional substitutions to pkg-plist generated by the 'makeplist' target
create-plist: stage
	@(cd ${.CURDIR} && ${MAKE} makeplist > pkg-plist && \
		${REINPLACE_CMD} -E \
		-e '1d' -e '/etc\/rc.d\/mythbackend/d' -e '/[.]packlist$$/d' \
		-e '/[.]bak$$/d' \
		-e '/[.]gitignore$$/d' \
		-e 's#^bin/mythpython#%%BINDINGS%%bin/mythpython#' \
		-e 's#^bin/mythwikiscripts#%%BINDINGS%%bin/mythwikiscripts#' \
		-e 's#^%%PYTHON_SITELIBDIR%%#%%BINDINGS%%%%PYTHON_SITELIBDIR%%#' \
		-e 's#^%%DATADIR%%hardwareprofile#%%BINDINGS%%hardwareprofile#' \
		-e 's#^%%DATADIR%%internetcontent#%%BINDINGS%%internetcontent#' \
		-e 's#^%%SITE_PERL%%#%%BINDINGS%%%%SITE_PERL%%#' \
		pkg-plist)

.include <bsd.port.mk>