# $NetBSD: Makefile.common,v 1.34 2024/01/27 02:54:36 riastradh Exp $
# used by multimedia/ffmpeg4/Makefile
# used by multimedia/ffplay4/Makefile

DISTNAME=	ffmpeg-4.4.4
CATEGORIES=	multimedia
MASTER_SITES=	http://www.ffmpeg.org/releases/
EXTRACT_SUFX=	.tar.xz

LICENSE=	gnu-lgpl-v2.1 AND gnu-gpl-v2 ${ADDITIONAL_LICENSE}

PATCHDIR=	${.CURDIR}/../../multimedia/ffmpeg4/patches

USE_LIBTOOL=		yes
USE_TOOLS+=		gmake pod2man perl pkg-config
HAS_CONFIGURE=		yes
CONFIGURE_ARGS+=	--cc=${CC:Q}
CONFIGURE_ARGS+=	--disable-debug
CONFIGURE_ARGS+=	--disable-optimizations
CONFIGURE_ARGS+=	--disable-stripping
CONFIGURE_ARGS+=	--enable-gpl
CONFIGURE_ARGS+=	--enable-libxml2
CONFIGURE_ARGS+=	--enable-pthreads
CONFIGURE_ARGS+=	--enable-shared
CONFIGURE_ARGS+=	--mandir=${PREFIX}/${PKGMANDIR}
CONFIGURE_ARGS+=	--prefix=${PREFIX}

CONFIGURE_ARGS+=	--progs-suffix=4
CONFIGURE_ARGS+=	--datadir=${PREFIX}/share/ffmpeg4
CONFIGURE_ARGS+=	--docdir=${PREFIX}/share/doc/ffmpeg4
CONFIGURE_ARGS+=	--incdir=${PREFIX}/include/ffmpeg4
CONFIGURE_ARGS+=	--libdir=${PREFIX}/lib/ffmpeg4
CONFIGURE_ARGS+=	--shlibdir=${PREFIX}/lib/ffmpeg4
LDFLAGS+=		${COMPILER_RPATH_FLAG}${PREFIX}/lib/ffmpeg4
# Misuse LDFLAGS because the package doesn't (at least right now) honor LIBS.
LDFLAGS.SunOS+=		-lrt

.if ${USE_CROSS_COMPILE:tl} == yes
CONFIGURE_ARGS+=	--enable-cross-compile
CONFIGURE_ARGS+=	--host-cc=${NATIVE_CC:Q}
CONFIGURE_ARGS+=	--host-ld=${NATIVE_CC:Q}
CONFIGURE_ARGS+=	--target-os=${LOWER_OPSYS:Q}
.  include "../../mk/endian.mk"
.  if ${MACHINE_ENDIAN} == "big"
CONFIGURE_ENV+=		bigendian=yes
.  endif
.endif

# altivec support is detected at runtime, and only code that is gated
# on the runtime detection can use it.  The code in ffmpeg that is
# gated on the runtime detection doesn't need -maltivec -mabi=altivec.
# But passing -maltivec -mabi=altivec tells the compiler that _any_
# code, whether or not gated on runtime detection, can be done with
# altivec -- and the compiler will quietly take advantage of this,
# e.g. to zero-initialize objects on the stack.  This doesn't work too
# well on powerpc CPUs without altivec, so nix the arguments.
.if !empty(MACHINE_ARCH:Mpowerpc*)
BUILDLINK_TRANSFORM+=	rm:-maltivec
BUILDLINK_TRANSFORM+=	rm:-mabi=altivec
.endif

.if !empty(MACHINE_PLATFORM:MDarwin-1[2-9].*-*) || !empty(MACHINE_PLATFORM:MDarwin-2*)
CONFIGURE_ARGS+=	--enable-opencl
.endif

.if ${OPSYS} == "SunOS"
USE_TOOLS+=	bash:build
CONFIG_SHELL=	${TOOLS_PATH.bash}
.endif

CONFIGURE_ARGS+=	--enable-runtime-cpudetect

# Let's not put garbage into /tmp
CONFIGURE_ENV+=		TMPDIR=${WRKSRC}/tmp

.include "../../mk/compiler.mk"

.if !empty(PKGSRC_COMPILER:Msunpro)
SUBST_CLASSES+=		sunwspro
SUBST_MESSAGE.sunwspro=	Fixing compiler options for SunStudio C compiler.
SUBST_STAGE.sunwspro=	post-configure
SUBST_FILES.sunwspro=	config.mak
SUBST_SED.sunwspro=	-e "s/-O /-KPIC -DPIC /"
SUBST_SED.sunwspro+=	-e "s/-O3/-xO2/g"
SUBST_SED.sunwspro+=	-e "s/-std=c99/-xc99=all/"
SUBST_SED.sunwspro+=	-e "s/-Wl,-rpath-link,/-L /g"
.endif

.if ${MACHINE_ARCH} == x86_64 || ${MACHINE_ARCH} == i386
TOOL_DEPENDS+=	nasm>=2.13:../../devel/nasm
.endif

REPLACE_PERL+=	doc/texi2pod.pl
REPLACE_SH+=	configure
REPLACE_SH+=	ffbuild/pkgconfig_generate.sh
REPLACE_SH+=	ffbuild/version.sh
REPLACE_SH+=	ffbuild/libversion.sh

PLIST_SRC+=	${PKGDIR}/PLIST

MAKE_ENV+=	EXTRA_LIBS=${LIBGETOPT:Q}

pre-configure:
	mkdir ${WRKSRC}/tmp

.include "../../archivers/bzip2/buildlink3.mk"
.include "../../archivers/xz/buildlink3.mk"
.include "../../devel/libgetopt/buildlink3.mk"
.include "../../devel/zlib/buildlink3.mk"
.include "../../textproc/libxml2/buildlink3.mk"
.include "../../mk/atomic64.mk"
.include "../../mk/pthread.buildlink3.mk"
.include "../../mk/bsd.pkg.mk"
