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

216 lines
7.9 KiB
Makefile

PORTNAME= mongodb
DISTVERSIONPREFIX= r
DISTVERSION= 8.0.29
CATEGORIES= databases net
MASTER_SITES+= LOCAL/ronald:mongodb_bazel \
https://codeload.github.com/bazelbuild/bazel-central-registry/tar.gz/${BAZEL_REGISTRY_COMMIT}?dummy=/:bazel_registry \
https://codeload.github.com/mongodb-forks/rules_poetry/tar.gz/${RULES_POETRY_COMMIT}?dummy=/:rules_poetry
PKGNAMESUFFIX= ${DISTVERSION:R:S/.//}
BAZEL_CACHE_DISTFILE= ${PORTNAME}-${DISTVERSIONFULL}-bazel-repository-cache.tar.gz
BAZEL_REGISTRY_DISTFILE= bazelbuild-bazel-central-registry-${BAZEL_REGISTRY_COMMIT}_GH0.tar.gz
RULES_POETRY_DISTFILE= mongodb-forks-rules_poetry-${RULES_POETRY_COMMIT}_GH0.tar.gz
DISTFILES+= ${BAZEL_CACHE_DISTFILE}:mongodb_bazel \
${BAZEL_REGISTRY_DISTFILE}:bazel_registry \
${RULES_POETRY_DISTFILE}:rules_poetry
MAINTAINER= ronald@FreeBSD.org
COMMENT= MongoDB Community Edition (8.0.x Branch)
WWW= https://www.mongodb.com/docs/v8.0/
LICENSE= APACHE20 SSPLv1 # mongodb is SSPLv1, C++ driver is APACHE20
LICENSE_COMB= multi
LICENSE_NAME_SSPLv1= Server Side Public License Version 1
LICENSE_FILE_SSPLv1= ${WRKSRC}/LICENSE-Community.txt
LICENSE_PERMS_SSPLv1= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
BROKEN_FreeBSD_16= src/third_party/boost/boost/mpl/aux_/integral_wrapper.hpp:71:51: error: in-class initializer for static data member is not a constant expression
ONLY_FOR_ARCHS= aarch64 amd64 powerpc64le
ONLY_FOR_ARCHS_REASON= only ported to amd64, aarch64, and powerpc64le on FreeBSD; upstream supports arm64, ppc64le, s390x, and x86-64
BUILD_DEPENDS= bazel:devel/bazel7 \
bash:shells/bash \
${PY_SETUPTOOLS} \
${PYTHON_PKGNAMEPREFIX}cheetah3>0:devel/py-cheetah3@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}distro>0:sysutils/py-distro@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}gitpython>0:devel/py-gitpython@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}packaging>0:devel/py-packaging@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}psutil>0:sysutils/py-psutil@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pymongo>0:databases/py-pymongo@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pyyaml>=3.11:devel/py-pyyaml@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}requests>0:www/py-requests@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}retry2>0:devel/py-retry2@${PY_FLAVOR} \
git:devel/git@tiny \
rust-cbindgen>0:devel/rust-cbindgen \
yq:textproc/go-yq
# build depends used while running ${WRKSRC}/src/third_party/mozjs/scripts/gen-config.sh
BUILD_DEPENDS+= gm4:devel/m4 \
gsed:textproc/gsed
LIB_DEPENDS= libcurl.so:ftp/curl
FLAVORS= default armv80a
armv80a_PKGNAMESUFFIX= ${DISTVERSION:R:S/.//}-armv80a
# gmake is used while running ${WRKSRC}/src/third_party/mozjs/scripts/gen-config.sh
USES= compiler:c++20-lang cpe gmake pkgconfig python:build shebangfix ssl
CPE_PRODUCT= mongodb
# mozjs tag comes from ${WRKSRC}/src/third_party/mozjs/scripts/import.sh
MOZJS_TAG= 7aeaf7a44d420360bde75db8453636092c3e2f56
BAZEL_REGISTRY_COMMIT= 5df17720d4367282afb8e5ca27a35199ab7620e4
RULES_POETRY_COMMIT= 917630033c736c188605cf0f558c34afc1eca540
USE_GITHUB= yes
GH_ACCOUNT= mongodb mongodb-forks:mozjs
GH_PROJECT= mongo spidermonkey:mozjs
GH_TAGNAME= ${MOZJS_TAG}:mozjs
USE_RC_SUBR= mongod
SHEBANG_FILES= src/third_party/mozjs/scripts/gen-config.sh
HAS_CONFIGURE= yes
CONFIGURE_SCRIPT= scripts/gen-config.sh
CONFIGURE_ARGS= ${MOZJS_ARCH} \
freebsd
CONFIGURE_ENV+= PYTHON3="${PYTHON_CMD}"
BAZEL= ${LOCALBASE}/bin/bazel
BAZEL_OUTPUT_USER_ROOT= ${WRKDIR}/bazel
BAZEL_REPOSITORY_CACHE=${WRKDIR}/bazel-repository-cache
BAZEL_STARTUP_ARGS= --output_user_root=${BAZEL_OUTPUT_USER_ROOT}
BAZEL_ENV= BAZEL_SH=${LOCALBASE}/bin/bash \
CC="${CC}" \
CXX="${CXX}" \
HOME=${WRKDIR} \
MONGO_USE_SYSTEM_PYTHON=1 \
PYTHON_CMD=${PYTHON_CMD} \
TMPDIR=${WRKDIR}
BAZEL_ARGS= --repository_cache=${BAZEL_REPOSITORY_CACHE} \
--distdir=${DISTDIR} \
--registry=file://${BAZEL_REGISTRY_WRKSRC} \
--repository_disable_download \
--lockfile_mode=off \
--//bazel/config:running_through_bazelisk=True \
--config=local \
--config=opt \
--verbose_failures \
--jobs=${MAKE_JOBS_NUMBER} \
--action_env=AR=llvm-ar \
--action_env=CC=${CC} \
--action_env=CXX=${CXX} \
--action_env=PATH=${LOCALBASE}/bin:/bin:/usr/bin \
--repo_env=CC=${CC} \
--repo_env=CXX=${CXX} \
--repo_env=LOCALBASE=${LOCALBASE} \
--repo_env=MONGO_USE_SYSTEM_PYTHON=1 \
--repo_env=PATH=${LOCALBASE}/bin:/bin:/usr/bin \
--repo_env=PYTHON_CMD=${PYTHON_CMD} \
--build_enterprise=False \
--enterprise_feature_all=False \
--allocator=system \
--libunwind=off \
--ssl=True \
--disable_warnings_as_errors=True \
--create_dwp=False \
--copt=-isystem${LOCALBASE}/include \
--define=GIT_COMMIT_HASH=freebsd-${PORTVERSION} \
--define=MONGO_DISTMOD=freebsd \
--define=MONGO_VERSION=${DISTVERSION} \
--cxxopt=-isystem${LOCALBASE}/include \
--cxxopt=-DBOOST_NO_CXX98_FUNCTION_BASE \
--linkopt=-L${LOCALBASE}/lib \
--linkopt=-lm \
--linkopt=-pthread \
--linkopt=-lexecinfo \
--linkopt=-lkvm \
--noexperimental_collect_system_network_usage
ALL_TARGET= install-core
CONFLICTS_INSTALL= mongodb[0-9][0-9]
BINARY_ALIAS= python3=${PYTHON_CMD}
EXTRACT_AFTER_ARGS= --no-same-owner --no-same-permissions
# This ports is only following the Major Release.
# https://docs.mongodb.com/manual/reference/versioning/
PORTSCOUT= limit:^8\.0\.
CONFIGURE_WRKSRC= ${MOZJS_WRKSRC}
USERS= mongodb
GROUPS= mongodb
OPTIONS_DEFINE= LTO NOAVX
OPTIONS_DEFINE_aarch64= ARMV80A
OPTIONS_DEFAULT= NOAVX
# MongoDB on non-LSE ARM cpu like Raspberry Pi can work but is unsupported upstream.
# Can give corruption on high concurrency.
# Please read https://jira.mongodb.org/browse/SERVER-71772.
ARMV80A_DESC= Enable non-LSE ARM64 CPUs like RPI4.
NOAVX_DESC= "Disable AVX instructions on amd64 (Sandybridge+)"
ARMV80A_VARS= BAZEL_ARGS+="--copt=-march=armv8-a --cxxopt=-march=armv8-a"
LTO_VARS= BAZEL_ARGS+=--thin_lto=True
NOAVX_EXTRA_PATCHES= ${FILESDIR}/extrapatch-src_third__party_mozjs_extract_mozglue_misc_SIMD.cpp
MOZJS_WRKSRC= ${WRKSRC}/src/third_party/mozjs
BAZEL_REGISTRY_WRKSRC= ${WRKDIR}/bazel-central-registry-${BAZEL_REGISTRY_COMMIT}
RULES_POETRY_WRKSRC= ${WRKDIR}/rules_poetry-${RULES_POETRY_COMMIT}
BAZEL_INSTALL_WRKSRC= ${WRKSRC}/bazel-bin/${ALL_TARGET}
.if ${FLAVOR:U} == armv80a
OPTIONS_SET+= ARMV80A
.endif
.include <bsd.port.pre.mk>
.if ${FLAVOR:U} == armv80a && ${ARCH} != aarch64
IGNORE= flavor armv80a is only valid on aarch64
.endif
.if ${ARCH} == amd64
MOZJS_ARCH= x86_64
.elif ${ARCH} == powerpc64le
MOZJS_ARCH= ppc64le
.elif ${ARCH} == aarch64
MOZJS_ARCH= ${ARCH}
.endif
post-extract:
# Verify we downloaded the proper mozjs git tag.
${SH} -xc "test \"X`grep -E '^LIB_GIT_REVISION=' ${MOZJS_WRKSRC}/scripts/import.sh`\" = \"XLIB_GIT_REVISION=${MOZJS_TAG}\""
pre-configure:
# Replacement of ${WRKSRC}/src/third_party/mozjs/scripts/import.sh
${LN} -sF ${WRKDIR}/spidermonkey-${MOZJS_TAG} ${MOZJS_WRKSRC}/mozilla-release
post-patch:
${PATCH} -d ${RULES_POETRY_WRKSRC} -p0 < ${WRKSRC}/bazel/rules_poetry/rules_poetry.patch
do-build:
${MKDIR} ${BAZEL_REPOSITORY_CACHE}
cd ${WRKSRC} && ${SETENV} ${BAZEL_ENV} ${BAZEL} ${BAZEL_STARTUP_ARGS} build ${BAZEL_ARGS} ${ALL_TARGET}
do-install:
${INSTALL_PROGRAM} ${BAZEL_INSTALL_WRKSRC}/bin/mongod ${STAGEDIR}${PREFIX}/bin/
${INSTALL_PROGRAM} ${BAZEL_INSTALL_WRKSRC}/bin/mongos ${STAGEDIR}${PREFIX}/bin/
${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/mongod
${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/mongos
${INSTALL_DATA} ${WRKSRC}/rpm/mongod.conf ${STAGEDIR}${PREFIX}/etc/mongodb.conf.sample
${MKDIR} ${STAGEDIR}${DOCSDIR}
.for doc in LICENSE-Community.txt distsrc/MPL-2 distsrc/README distsrc/THIRD-PARTY-NOTICES
${INSTALL_DATA} ${WRKSRC}/${doc} ${STAGEDIR}${DOCSDIR}/
.endfor
${INSTALL_MAN} ${WRKSRC}/debian/mongod.1 ${STAGEDIR}${PREFIX}/share/man/man1/
${INSTALL_MAN} ${WRKSRC}/debian/mongos.1 ${STAGEDIR}${PREFIX}/share/man/man1/
${INSTALL_MAN} ${WRKSRC}/debian/mongodb-parameters.5 ${STAGEDIR}${PREFIX}/share/man/man5/
do-test:
${SH} ${FILESDIR}/make.test.sh "${STAGEDIR}${PREFIX}/bin"
.include <bsd.port.post.mk>