PORTNAME=	tor-browser
DISTVERSION=	16.0a1
PORTREVISION=	7
CATEGORIES=	www net security wayland
TAG_BASE=	d366318349af0977ff23b492fa87e436e8672fdd
TAG_TOR=	45b67d3be52f79e8a4b361fd04ab12f342ab0016
MASTER_SITES=	TOR \
		LOCAL/vvd \
		https://build-sources.tbb.torproject.org/:source1 \
		LOCAL/vvd:source1 \
		LOCAL/jsm:source2 \
		LOCAL/vvd:source2 \
		https://dist.torproject.org/torbrowser/noscript/:source3 \
		LOCAL/vvd:source3 \
		https://gitlab.torproject.org/tpo/translation/-/archive/${TAG_BASE}.tar.gz?dummy=/:source4 \
		LOCAL/vvd:source4 \
		https://gitlab.torproject.org/tpo/translation/-/archive/${TAG_TOR}.tar.gz?dummy=/:source5 \
		LOCAL/vvd:source5
MASTER_SITE_SUBDIR=	torbrowser/${DISTVERSION}/:DEFAULT \
			download/releases/:source3
DISTNAME=	src-firefox-tor-browser-146.0a1-16.0-2-build2
MANUAL=		manual_215922.zip
NOSCRIPT=	noscript-13.5.4.1984.xpi
DISTFILES=	${DISTNAME}.tar.xz \
		${MANUAL}:source1 \
		fonts-3--4348e1.tar.zst:source2 \
		${NOSCRIPT}:source3 \
		tpo-translation-${TAG_BASE}_GL0.tar.gz:source4 \
		tpo-translation-${TAG_TOR}_GL0.tar.gz:source5

MAINTAINER=	freebsd@sysctl.cz
COMMENT=	Tor Browser for FreeBSD
WWW=		https://www.torproject.org/

LICENSE=	MPL20
LICENSE_FILE=	${WRKSRC}/LICENSE

BUILD_DEPENDS=	nspr>=4.32:devel/nspr \
		nss>=3.112:security/nss \
		icu>=76.1:devel/icu \
		libevent>=2.1.8:devel/libevent \
		harfbuzz>=10.1.0:print/harfbuzz \
		graphite2>=1.3.14:graphics/graphite2 \
		png>=1.6.45:graphics/png \
		dav1d>=1.0.0:multimedia/dav1d \
		libvpx>=1.14:multimedia/libvpx \
		${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \
		v4l_compat>0:multimedia/v4l_compat \
		autoconf2.13:devel/autoconf2.13 \
		nasm:devel/nasm \
		yasm:devel/yasm
RUN_DEPENDS=	tor:security/tor \
		obfs4proxy:security/obfs4proxy-tor \
		snowflake-client:security/snowflake-tor

USES=		compiler:c++11-lib libtool localbase:ldflags perl5 pkgconfig \
		python shebangfix tar:xz
USE_GECKO=	gecko
USE_GITHUB=	nodefault
TAG_L10N=	4b41b2ae00d50633e5e9d8204b0f45e468920743
GH_TUPLE=	mozilla-l10n:firefox-l10n:${TAG_L10N}:ffl10n
USE_MOZILLA=	-sqlite

LOCALES=	af ar az be bg bs ca cs da de el es-ES et fa fi fr ga-IE gu-IN \
		he hi-IN hr hu hy-AM id is it ja ka km ko lt lv mk mr ms my \
		nb-NO nl nn-NO pa-IN pl pt-BR pt-PT ro ru sk sl sq sr sv-SE ta \
		te th tl tr uk ur vi zh-CN zh-TW

CONFIGURE_ENV+=	BINDGEN_CFLAGS="-I${LOCALBASE}/include"
CONFIGURE_ENV+=	MOZ_CHROME_MULTILOCALE="${LOCALES}"

MAKE_ENV+=	LOCALES="${LOCALES}"

CFLAGS_powerpc64le=	-DSQLITE_BYTEORDER=1234
SSP_UNSAFE=		yes

BUNDLE_LIBS=	yes
SUB_FILES=	fonts.conf tor-browser.desktop torrc-defaults

WRKSRC=		${WRKDIR}/${DISTNAME:S/src-//}

MOZ_EXPORT=	MOZ_TELEMETRY_REPORTING="" \
		MOZILLA_OFFICIAL="1" \
		MOZ_APP_DISPLAYNAME="Tor Browser" \
		MOZ_APP_NAME="tor-browser" \
		MOZ_BRANDING_DIRECTORY="browser/branding/tb-release" \
		MOZ_CHROME_MULTILOCALE="${LOCALES}"

MOZ_OPTIONS=	--with-base-browser-version=${DISTVERSION} \
		--enable-optimize \
		--enable-bundled-fonts \
		--disable-tests \
		--disable-debug \
		--disable-crashreporter \
		--disable-webrtc \
		--disable-parental-controls \
		--enable-proxy-bypass-protection \
		--disable-system-policies \
		--disable-backgroundtasks \
		--with-distribution-id=org.torproject \
		--with-branding=browser/branding/tb-release

.include "${.CURDIR}/../../www/firefox/Makefile.options"

.include <bsd.port.options.mk>

.if ${ARCH} == i386 && ${MACHINE_CPU:Msse2}
# is not enabled on i386 by default
# Fix for error: always_inline function '_mm_setzero_si64' requires target feature 'sse2'
CFLAGS_i386+=	-msse2
.endif

.if ${ARCH} == amd64
MOZ_OPTIONS+=	--enable-rust-simd
.endif
.if ${ARCH} == powerpc64
MOZ_OPTIONS+=	--without-wasm-sandboxed-libraries
.else
BUILD_DEPENDS+=	${LOCALBASE}/share/wasi-sysroot/lib/wasm32-wasip1/libc++abi.a:devel/wasi-libcxx${LLVM_VERSION} \
		${LOCALBASE}/share/wasi-sysroot/lib/wasm32-wasip1/libc.a:devel/wasi-libc@${LLVM_VERSION} \
		wasi-compiler-rt${LLVM_VERSION}>0:devel/wasi-compiler-rt${LLVM_VERSION}
MOZILLA_PLIST_DIRS=	bin lib share/applications share/pixmaps \
			share/tor-browser
MOZ_OPTIONS+=	--with-wasi-sysroot=${LOCALBASE}/share/wasi-sysroot
.endif

post-patch:
	@${REINPLACE_CMD} 's|LOCALBASE|${LOCALBASE}|g' \
		"${WRKSRC}/browser/app/profile/000-tor-browser.js"
	@${REINPLACE_CMD} 's|%%LOCALBASE%%|${LOCALBASE}|g' \
		${WRKSRC}/browser/app/nsBrowserApp.cpp
.if ${ARCH} != powerpc64
	@${REINPLACE_CMD} 's|wasm32-wasi|&p1|' \
		${WRKSRC}/build/moz.configure/toolchain.configure
.endif
	${MKDIR} ${WRKSRC}/tmp-manual
	${UNZIP_NATIVE_CMD} -d ${WRKSRC}/tmp-manual ${DISTDIR}/${MANUAL}

pre-configure:
	@${REINPLACE_CMD} 's|export MOZ_GOOGLE_.*||g' ${WRKSRC}/.mozconfig
	${PYTHON_CMD} ${FILESDIR}/packagemanual.py ${WRKSRC}/tmp-manual/public \
		${WRKSRC}/browser/base/content/manual

post-configure:
	${MKDIR} ${WRKDIR}/.mozbuild/l10n-central
	${CP} -r ${WRKDIR}/firefox-l10n-${TAG_L10N}/* \
		${WRKDIR}/.mozbuild/l10n-central
.for i in ${LOCALES}
	${CP} ${WRKDIR}/translation-${TAG_BASE}/${i}/base-browser.ftl \
		${WRKDIR}/.mozbuild/l10n-central/${i}/toolkit/toolkit/global/
	${CP} ${WRKDIR}/translation-${TAG_TOR}/${i}/tor-browser.ftl \
		${WRKDIR}/.mozbuild/l10n-central/${i}/toolkit/toolkit/global/
	${MKDIR} ${WRKDIR}/.mozbuild/l10n-central/${i}/browser/branding/tb-release \
		 ${WRKSRC}/toolkit/torbutton/chrome/locale/${i}
	${CP} ${WRKDIR}/translation-${TAG_TOR}/${i}/brand.properties \
	      ${WRKDIR}/translation-${TAG_TOR}/${i}/branding/brand.ftl \
		${WRKDIR}/.mozbuild/l10n-central/${i}/browser/branding/tb-release
. for j in onionLocation.properties settings.properties torConnect.properties \
	torlauncher.properties
	${CP} ${WRKDIR}/translation-${TAG_TOR}/${i}/${j} \
		${WRKSRC}/toolkit/torbutton/chrome/locale/${i}/
. endfor
	${CP} -r ${WRKDIR}/translation-${TAG_TOR}/${i}/branding \
		${WRKSRC}/toolkit/torbutton/chrome/locale/${i}/
.endfor

post-build:
	MOZBUILD_STATE_PATH=${WRKDIR}/.mozbuild AB_CD="multi" MOZ_AUTOMATION="1" \
		PATH="`find ${WRKRDIR}/.mozbuild/srcdirs -name build -type d -print`/bin:${PATH}" \
		${WRKSRC}/mach package-multi-locale --locales ${LOCALES}

post-install:
	${MKDIR} ${STAGEDIR}${DATADIR} \
		 ${STAGEDIR}${PREFIX}/lib/tor-browser/fontconfig \
		 ${STAGEDIR}${PREFIX}/lib/tor-browser/fonts \
		 ${STAGEDIR}${PREFIX}/lib/tor-browser/distribution/extensions
	${INSTALL_DATA} ${WRKDIR}/torrc-defaults \
		${STAGEDIR}${DATADIR}/torrc-defaults
	${INSTALL_DATA} ${WRKDIR}/tor-browser.desktop ${STAGEDIR}${DESKTOPDIR}
	${INSTALL_DATA} ${WRKDIR}/fonts.conf \
		${STAGEDIR}${PREFIX}/lib/tor-browser/fontconfig/fonts.conf
	(cd ${WRKDIR}/fonts && \
		${COPYTREE_SHARE} "*.otf *.ttf" ${STAGEDIR}${PREFIX}/lib/tor-browser/fonts)
	${INSTALL_DATA} ${DISTDIR}/${NOSCRIPT} \
		"${STAGEDIR}${PREFIX}/lib/tor-browser/distribution/extensions/{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi"

.include <bsd.port.mk>
