Files
2026-10-04 04:07:15 +00:00

139 lines
4.7 KiB
Makefile

PORTNAME= jellyfin
DISTVERSION= 10.11.11
PORTREVISION= 1
CATEGORIES= multimedia
EXTRACT_ONLY+= ${PORTNAME}-${PORTNAME}-${GH_TAGNAME}_GH0.tar.gz \
${PORTNAME}-${PORTNAME}-web-${GH_TAGNAME}_GH0.tar.gz
MAINTAINER= bapt@FreeBSD.org
COMMENT= Jellyfin Server Component with WebUI
WWW= https://jellyfin.org/
LICENSE= BSD3CLAUSE GPLv2
LICENSE_COMB= multi
FETCH_DEPENDS= npm:www/npm${NODEJS_SUFFIX}
BUILD_DEPENDS= npm:www/npm${NODEJS_SUFFIX} \
dotnet:lang/dotnet
LIB_DEPENDS= libSkiaSharp.so:graphics/libskiasharp \
libharfbuzz.so:print/harfbuzz
RUN_DEPENDS= ca_root_nss>0:security/ca_root_nss \
dejavu>0:x11-fonts/dejavu \
ffmpeg>0:multimedia/ffmpeg \
icu>0:devel/icu \
krb5>0:security/krb5 \
libinotify>0:devel/libinotify \
libunwind>0:devel/libunwind \
mediainfo>0:multimedia/mediainfo
TEST_DEPENDS= npm:www/npm${NODEJS_SUFFIX} \
dotnet:lang/dotnet
USES= nodejs:24,build sqlite:3 ssl elfctl
USE_GITHUB= nodefault
GH_ACCOUNT= jellyfin:server,ui
GH_PROJECT= jellyfin:server jellyfin-web:ui
GH_SUBDIR= ${PORTNAME}
GH_TAGNAME= v${DISTVERSION}
USE_RC_SUBR= jellyfin
NUGET_GROUPS= NUGET
#NUPKG_NUGET must be regenerated every time DISTVERSION is changed
.include "nupkg_nuget.mk"
SUB_FILES= jellyfin pkg-message
SUB_LIST= DATADIR=${LOCALBASE}/jellyfin \
GROUPS=${GROUPS} \
USERS=${USERS}
USERS= jellyfin
GROUPS= jellyfin
DOTNET_ENV= DOTNET_CLI_HOME=/tmp
#json files must be replaced every time DISTVERSION is updated
PREFETCH_TIMESTAMP= 61171200
DOTNET_RUNTIME= ${OPSYS:tl}.${OSREL:R}-${ARCH:S|amd64|x64|:C|aarch64|arm64|}
.include "nuget.mk"
# Always list both arch tarballs in DISTFILES so make makesum checksums both.
# Only extract the one matching the current ARCH.
# files/packagejsons/ are copies of upstream with optionalDependencies removed
# (sass-embedded pulls native binaries unavailable on FreeBSD).
FILE_AMD64= ${PORTNAME}-${DISTVERSION}-node${NODEJS_VERSION}-amd64-modules.tar.gz
FILE_ARM64= ${PORTNAME}-${DISTVERSION}-node${NODEJS_VERSION}-arm64-modules.tar.gz
DISTFILES+= ${FILE_AMD64}:prefetch ${FILE_ARM64}:prefetch
.include <bsd.port.options.mk>
.if ${ARCH} == amd64
EXTRACT_ONLY+= ${FILE_AMD64}
.elif ${ARCH} == aarch64
EXTRACT_ONLY+= ${FILE_ARM64}
MAKE_ENV+= NODE_OPTIONS="--max-old-space-size=3072"
.endif
# We need NODEJS_VERSION to be expanded before assigning it
.include <bsd.port.pre.mk>
.for c f in x64 ${FILE_AMD64} arm64 ${FILE_ARM64}
${DISTDIR}/$f:
${MKDIR} ${WRKDIR}/ui/node-modules-cache; \
${CP} -R ${FILESDIR}/packagejsons/* ${WRKDIR}/ui/node-modules-cache; \
cd ${WRKDIR}/ui/node-modules-cache && \
${SETENV} HOME=${WRKDIR} \
npm ci --ignore-scripts --no-progress --no-audit --no-fund --cpu=$c; \
${FIND} ${WRKDIR}/ui/node-modules-cache -depth 1 -print | \
${GREP} -v node_modules | ${XARGS} ${RM} -r; \
${FIND} ${WRKDIR}/ui/node-modules-cache -type d -exec ${CHMOD} 755 {} ';'; \
cd ${WRKDIR}//ui/node-modules-cache && \
${MTREE_CMD} -cbnSp node_modules | ${MTREE_CMD} -C | ${SED} \
-e 's:time=[0-9.]*:time=${PREFETCH_TIMESTAMP}.000000000:' \
-e 's:\([gu]id\)=[0-9]*:\1=0:g' \
-e 's:flags=.*:flags=none:' \
-e 's:^\.:./node_modules:' > node-modules-cache.mtree; \
${TAR} -cz --options 'gzip:!timestamp' \
-f ${DISTDIR}/$f \
@node-modules-cache.mtree; \
${RM} -r ${WRKDIR}; \
PREFETCH_DEP+= ${DISTDIR}/$f
.endfor
pre-fetch: ${PREFETCH_DEP}
@-${_NUGET_FETCH}
post-extract:
${MV} ${WRKDIR}/node_modules ${WRKSRC_ui}
post-patch:
${REINPLACE_CMD} -e 's|%%DISTDIR%%|${DISTDIR}|' \
-e 's|%%LOCALBASE%%|${LOCALBASE}|' ${WRKSRC_server}/nuget.config
do-build:
cd ${WRKSRC_ui} && ${SETENV} ${MAKE_ENV} \
npm run build:production
cd ${WRKSRC_server}/ && \
${SETENV} ${MAKE_ENV} ${DOTNET_ENV} dotnet restore Jellyfin.Server --runtime ${DOTNET_RUNTIME} --packages ${WRKDIR}/packages && \
${SETENV} ${MAKE_ENV} ${DOTNET_ENV} dotnet publish Jellyfin.Server --runtime ${DOTNET_RUNTIME} --configuration Release --self-contained --packages ${WRKDIR}/packages -o bin/publish "-p:DebugSymbols=false;DebugType=none;UseAppHost=true;PublishReadyToRun=false"
post-build:
${MKDIR} ${WRKSRC_server}/bin/publish/jellyfin-web
${CP} -r ${WRKSRC_ui}/dist/ ${WRKSRC_server}/bin/publish/jellyfin-web
do-install:
cd ${WRKSRC}/bin/publish/ && ${ELFCTL} -e +noaslr ./jellyfin
cd ${WRKSRC}/bin/publish/ && ${COPYTREE_SHARE} . ${STAGEDIR}/${LOCALBASE}/jellyfin "! ( -type f -name *\.so -or -type f -name "jellyfin" )"
cd ${WRKSRC}/bin/publish/ && ${COPYTREE_BIN} . ${STAGEDIR}/${LOCALBASE}/jellyfin " -type f -name "jellyfin" "
${INSTALL_DATA} ${WRKSRC}/bin/publish/*.so ${STAGEDIR}/${LOCALBASE}/jellyfin
post-install:
@${ECHO_CMD} "libe_sqlite3.so libsqlite3.so" \
>${STAGEDIR}${PREFIX}/etc/libmap.d/jellyfin.conf
${LN} -sf ${LOCALBASE}/lib/libharfbuzz.so \
${STAGEDIR}${LOCALBASE}/jellyfin/libHarfBuzzSharp.so
.include <bsd.port.post.mk>