diff options
Diffstat (limited to 'databases/compass/Makefile')
-rw-r--r-- | databases/compass/Makefile | 515 |
1 files changed, 515 insertions, 0 deletions
diff --git a/databases/compass/Makefile b/databases/compass/Makefile new file mode 100644 index 000000000000..f1b6c0e01fad --- /dev/null +++ b/databases/compass/Makefile @@ -0,0 +1,515 @@ +PORTNAME= compass +DISTVERSIONPREFIX= v +DISTVERSION= 1.43.0 +PORTREVISION= 3 +CATEGORIES= databases +MASTER_SITES= https://cloud.mongodb.com/static/font/:fonts \ + https://registry.npmjs.org/fs-xattr/-/:fs_xattr \ + https://registry.npmjs.org/kerberos/-/:kerberos \ + https://registry.npmjs.org/mongodb-client-encryption/-/:mongoclienc \ + https://registry.npmjs.org/os-dns-native/-/:dns +DISTFILES= EuclidCircularA-Semibold-WebXL.woff2:fonts \ + EuclidCircularA-Semibold-WebXL.woff:fonts \ + EuclidCircularA-SemiboldItalic-WebXL.woff2:fonts \ + EuclidCircularA-SemiboldItalic-WebXL.woff:fonts \ + EuclidCircularA-Medium-WebXL.woff2:fonts \ + EuclidCircularA-Medium-WebXL.woff:fonts \ + EuclidCircularA-MediumItalic-WebXL.woff2:fonts \ + EuclidCircularA-MediumItalic-WebXL.woff:fonts \ + EuclidCircularA-Regular-WebXL.woff2:fonts \ + EuclidCircularA-Regular-WebXL.woff:fonts \ + EuclidCircularA-RegularItalic-WebXL.woff2:fonts \ + EuclidCircularA-RegularItalic-WebXL.woff:fonts \ + fs-xattr-${NPM_FSXATTR_VER}.tgz:fs_xattr \ + kerberos-${NPM_KERBEROS_VER}.tgz:kerberos \ + mongodb-client-encryption-${MONGO_CLIENC_VER}.tgz:mongoclienc \ + os-dns-native-${NPM_OSDNSNATIVE_VER}.tgz:dns +DIST_SUBDIR= ${PORTNAME} +EXTRACT_ONLY= ${DISTFILE_DEFAULT} + +MAINTAINER= hiroo.ono+freebsd@gmail.com +COMMENT= The GUI for MongoDB +WWW= https://www.mongodb.com/products/compass/ + +LICENSE= SSPLv1 +LICENSE_NAME= Server Side Public License +LICENSE_FILE= ${WRKSRC}/LICENSE +LICENSE_PERMS= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept + +DISTCACHEFILES= ${DISTCACHEFILE_npm} \ + ${DISTCACHEFILE_gyp} \ + ${DISTCACHEFILE_yarn} \ + ${DISTCACHEFILE_cargo} +DISTCACHEFILE_npm= ${DISTDIR}/${DIST_SUBDIR}/dotnpm-${DISTVERSION}.tar.xz +DISTCACHEFILE_gyp= ${DISTDIR}/${DIST_SUBDIR}/dotgyp-${DISTVERSION}.tar.xz +DISTCACHEFILE_yarn= ${DISTDIR}/${DIST_SUBDIR}/dotyarn-${DISTVERSION}.tar.xz +DISTCACHEFILE_cargo= ${DISTDIR}/${DIST_SUBDIR}/dotcargo-${DISTVERSION}.tar.xz +APPMODFILE= ${WRKDIR}/compass_node_modules.tar + +ONLY_FOR_ARCHS= aarch64 amd64 +USES= gettext-runtime gl gnome iconv jpeg nodejs:env python:build \ + xorg +USE_GL= gbm gl +USE_GNOME= atk cairo gdkpixbuf2 glib20 gtk30 libxml2 libxslt pango +USE_XORG= x11 xcb xcomposite xdamage xext xfixes xi xrandr xrender xtst +USE_LDCONFIG= ${DATADIR} + +USE_GITHUB= yes +GH_TUPLE= mongodb-js:compass:${DISTVERSIONPREFIX}${DISTVERSION} \ + mongodb-js:reflux-state-mixin:e050454cb3be029c3e7fd2ee6a08111e4d15161f:reflux \ + mongodb-js:zstd:${DISTVERSIONPREFIX}${MONGO_ZSTD_VER}:zstd \ + napi-rs:napi-rs:@napi-rs/cli@${NPM_NAPI_VER}:napi + +FETCH_DEPENDS= npm-node${NODEJS_VERSION}>0:www/npm-node${NODEJS_VERSION} \ + yarn-node${NODEJS_VERSION}>0:www/yarn-node${NODEJS_VERSION} \ + cargo:lang/rust +# Do not use USES=cmake, because compass itself does not build with cmake. +# The npm module it depends on uses cmake to build. +BUILD_DEPENDS= electron${ELECTRON_VER_MAJOR}:devel/electron${ELECTRON_VER_MAJOR} \ + npm-node${NODEJS_VERSION}>0:www/npm-node${NODEJS_VERSION} \ + yarn-node${NODEJS_VERSION}>0:www/yarn-node${NODEJS_VERSION} \ + cmake:devel/cmake-core \ + cargo:lang/rust \ + pkg-config:devel/pkgconf \ + zip:archivers/zip +LIB_DEPENDS= libmongocrypt.so:databases/libmongocrypt \ + libatk-bridge-2.0.so:accessibility/at-spi2-core \ + libatspi.so:accessibility/at-spi2-core \ + libFLAC.so:audio/flac \ + libopus.so:audio/opus \ + libdbus-1.so:devel/dbus \ + libicuuc.so:devel/icu \ + libepoll-shim.so:devel/libepoll-shim \ + libevent.so:devel/libevent \ + libffi.so:devel/libffi \ + libnotify.so:devel/libnotify \ + libpci.so:devel/libpci \ + libnspr4.so:devel/nspr \ + libre2.so:devel/re2 \ + libdrm.so:graphics/libdrm \ + libpng.so:graphics/png \ + libwayland-client.so:graphics/wayland \ + libwebp.so:graphics/webp \ + libdav1d.so:multimedia/dav1d \ + libva.so:multimedia/libva \ + libopenh264.so:multimedia/openh264 \ + libharfbuzz.so:print/harfbuzz \ + libsecret-1.so:security/libsecret \ + libnss3.so:security/nss \ + libexpat.so:textproc/expat2 \ + libxkbcommon.so:x11/libxkbcommon \ + libxshmfence.so:x11/libxshmfence \ + libfontconfig.so:x11-fonts/fontconfig +TEST_DEPENDS= Xvfb:x11-servers/xorg-server@xvfb +ALSA_LIB_DEPENDS= libasound.so:audio/alsa-lib +CUPS_LIB_DEPENDS= libcups.so:print/cups +PIPEWIRE_LIB_DEPENDS= libpipewire-0.3.so:multimedia/pipewire +PULSEAUDIO_LIB_DEPENDS= libpulse.so:audio/pulseaudio +SNDIO_PREVENTS= ALSA PULSEAUDIO +SNDIO_LIB_DEPENDS= libsndio.so:audio/sndio + +PORTDOCS= AUTHORS \ + CODE_OF_CONDUCT.md \ + CONTRIBUTING.md \ + README.md \ + THIRD-PARTY-NOTICES.md + +# Options have to be in accord with electron29. +OPTIONS_DEFINE= DOCS CUPS PIPEWIRE +OPTIONS_DEFAULT= DOCS CUPS PIPEWIRE SNDIO GSSAPI_BASE +OPTIONS_GROUP= AUDIO +OPTIONS_GROUP_AUDIO= ALSA PULSEAUDIO SNDIO +OPTIONS_SINGLE= GSSAPI +OPTIONS_SINGLE_GSSAPI= GSSAPI_BASE GSSAPI_HEIMDAL GSSAPI_MIT +GSSAPI_BASE_USES= gssapi +GSSAPI_HEIMDAL_USES= gssapi:heimdal +GSSAPI_MIT_USES= gssapi:mit + +PATCH_STRIP= -p1 + +CXXFLAGS+= -DNODE_API_EXPERIMENTAL \ + -DNODE_API_EXPERIMENTAL_NOGC_ENV_OPT_OUT +MAKE_ENV+= ${PATH_ENV} +MAKE_ENV+= HOME=${WRKDIR} +MAKE_ENV+= ELECTRON_SKIP_BINARY_DOWNLOAD=1 +.if defined(QUIET) +MAKE_ENV+= QUIET=yes +.else +MAKE_ENV+= DEBUG=true +.endif +PATH_ENV= PATH=$${PATH}:${WRKSRC}/node_modules/.bin +PATH_ENV_zstd= PATH=$${PATH}:${MONGO_ZSTD_DIR}/node_modules/.bin +TEST_ENV+= HOME=${WRKDIR} +TEST_ENV+= PATH=$${PATH}:${WRKSRC}/node_modules/.bin +HADRON_ENV+= PATH=$${PATH}:${WRKSRC}/node_modules/.bin +HADRON_ENV+= HADRON_SKIP_INSTALLER=true +HADRON_ENV+= ELECTRON_SKIP_BINARY_DOWNLOAD=1 +HADRON_ENV+= APPMOD=${APPMODFILE} +HADRON_ENV+= DEBUG=hadron* + +ELECTRON_DIR= ${.CURDIR}/../../devel/electron29 +.include "${ELECTRON_DIR}/Makefile.version" +ELECTRON_DOWNLOAD_URL= https://github.com/electron/electron/releases/download/v${ELECTRON_VER} +ELECTRON_DOWNLOAD_URL_HASH!= /sbin/sha256 -q -s ${ELECTRON_DOWNLOAD_URL} +.if defined(ARCH) && ${ARCH} == amd64 +ELECTRON_ARCH= x64 +NAPI_TARGET= x86_64-unknown-freebsd +.elif defined(ARCH) && ${ARCH} == arm64 +ELECTRON_ARCH= arm64 +NAPI_TARGET= aarch64-unknown-freebsd +.endif + +MONGO_CLIENC_VER= 6.0.0 +MONGO_ZSTD_VER= 1.0.0 +NPM_FSXATTR_VER= 0.3.1 +NPM_KERBEROS_VER= 2.1.0 +NPM_NAPI_VER= 2.9.0 +COMPASS_DIR= ${WRKSRC}/packages/compass +MONGO_ZSTD_DIR= ${WRKDIR}/zstd-${MONGO_ZSTD_VER} +NODE_MODULES_DIR= ${WRKSRC}/node_modules +NPM_NAPI_DIR= ${WRKDIR}/napi-rs--napi-rs-cli-${NPM_NAPI_VER} +DISTTMP_DIR= ${WRKDIR}/dist-tmp + +NPM_OSDNSNATIVE_VER= 1.2.1 + +post-fetch: ${DISTCACHEFILES} + +${DISTCACHEFILE_npm}: + # Cache npm modules to avoid network connection at later stages + cd ${WRKDIR} && ${SETENV} ${MAKE_ENV} npm cache add \ + $$(cat ${FILESDIR}/package-*.list) + + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/${DISTFILE_DEFAULT} -C ${WRKDIR} + ${MKDIR} ${NODE_MODULES_DIR} + ${REINPLACE_CMD} -E ' \ + s,^( *"electron"): *"[0-9~^].*"(.*)$$,\1: "${ELECTRON_VER}"\2,; \ + ' ${WRKSRC}/package-lock.json + cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} npm --ignore-scripts -- install + cd ${WRKDIR} && ${SETENV} ${MAKE_ENV} npm cache add \ + electron@${ELECTRON_VER} \ + $$(npm view electron@${ELECTRON_VER:C/\.[^\.]*$//} version | \ + ${TAIL} -1 | ${SED} -E 's, .*,,') + cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} npm --ignore-scripts -- install \ + electron@~${ELECTRON_VER} + + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/fs-xattr-${NPM_FSXATTR_VER}.tgz \ + -C ${WRKDIR} + ${MKDIR} ${WRKDIR}/package/node_modules + cd ${WRKDIR}/package && ${SETENV} ${MAKE_ENV} \ + PATH=${PATH}:${WRKDIR}/package/node_modules/.bin \ + npm --ignore-scripts install node-gyp-cache@0.2.1 + ${RM} -rd ${WRKDIR}/package + + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/mongodb-client-encryption-${MONGO_CLIENC_VER}.tgz \ + -C ${WRKDIR} + ${MKDIR} ${WRKDIR}/package/node_modules + cd ${WRKDIR}/package && ${SETENV} ${MAKE_ENV} \ + PATH=${PATH}:${WRKDIR}/package/node_modules/.bin \ + npm --ignore-scripts install + ${RM} -rd ${WRKDIR}/package + + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/os-dns-native-${NPM_OSDNSNATIVE_VER}.tgz \ + -C ${WRKDIR} + ${MKDIR} ${WRKDIR}/package/node_modules + cd ${WRKDIR}/package && ${SETENV} ${MAKE_ENV} \ + PATH=${PATH}:${WRKDIR}/package/node_modules/.bin \ + npm --ignore-scripts install + ${RM} -rd ${WRKDIR}/package + + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/${DISTFILE_zstd} -C ${WRKDIR} + ${MKDIR} ${MONGO_ZSTD_DIR}/node_modules + cd ${MONGO_ZSTD_DIR} && \ + ${PATCH} -p1 < ${FILESDIR}/mongodb-js-zstd.patch + cd ${MONGO_ZSTD_DIR} && \ + ${SETENV} ${MAKE_ENV} ${PATH_ENV_zstd} \ + npm --ignore-scripts -- install + ${RM} -rd ${MONGO_ZSTD_DIR} + + # Without npm cache verify, installing + # mongodb-tools@https://codeload... fails. + # if npm cache verify fails by 'too many open files', + # set MAX_FILES_compass=16384 in poudriere.conf. + cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} npm cache verify + + # Back up npm cache + cd ${WRKDIR} && ${TAR} cJf ${DISTCACHEFILE_npm} .npm + +${DISTCACHEFILE_gyp}: + # To prepare cache cached by node-gyp-cache when rebuilding + # fs-xattr, mongodb-client-encryption and os-dns-native, + # install node-gyp-cache and do + # npm exec node-gyp-cache rebuild for fs-xattr, + # npm run install for mongodb-client-encryption and + # npm run install for os-dns-native + # which is OK to fail here (because of python absent). + ${ECHO} "node_gyp = node-gyp-cache" >> ${WRKDIR}/.npmrc + + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/fs-xattr-${NPM_FSXATTR_VER}.tgz \ + -C ${WRKDIR} + ${MKDIR} ${WRKDIR}/package/node_modules + cd ${WRKDIR}/package && ${SETENV} ${MAKE_ENV} \ + PATH=${PATH}:${WRKDIR}/package/node_modules/.bin \ + npm install node-gyp-cache@0.2.1 + -cd ${WRKDIR}/package && ${SETENV} ${MAKE_ENV} \ + PATH=${PATH}:${WRKDIR}/package/node_modules/.bin \ + npm exec node-gyp-cache rebuild + ${RM} -rd ${WRKDIR}/package /tmp/work + + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/mongodb-client-encryption-${MONGO_CLIENC_VER}.tgz \ + -C ${WRKDIR} + ${MKDIR} ${WRKDIR}/package/node_modules + cd ${WRKDIR}/package && ${SETENV} ${MAKE_ENV} \ + PATH=${PATH}:${WRKDIR}/package/node_modules/.bin \ + npm install node-gyp-cache@0.2.1 + -cd ${WRKDIR}/package && ${SETENV} ${MAKE_ENV} \ + PATH=${PATH}:${WRKDIR}/package/node_modules/.bin \ + npm run install + ${RM} -rd ${WRKDIR}/package /tmp/work + + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/os-dns-native-${NPM_OSDNSNATIVE_VER}.tgz \ + -C ${WRKDIR} + ${MKDIR} ${WRKDIR}/package/node_modules + cd ${WRKDIR}/package && ${SETENV} ${MAKE_ENV} \ + PATH=${PATH}:${WRKDIR}/package/node_modules/.bin \ + npm install node-gyp-cache@0.2.1 + -cd ${WRKDIR}/package && ${SETENV} ${MAKE_ENV} \ + PATH=${PATH}:${WRKDIR}/package/node_modules/.bin \ + npm run install + + # Back up node-gyp-cache cache + cd ${WRKDIR} && ${TAR} cJf ${DISTCACHEFILE_gyp} .cache + +${DISTCACHEFILE_yarn}: + # Do yarn install to cache node modules for napi-rs-cli. + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/${DISTFILE_napi} -C ${WRKDIR} + ${MKDIR} ${NPM_NAPI_DIR}/node_modules + cd ${NPM_NAPI_DIR} && ${PATCH} -p1 < ${FILESDIR}/napi-cli.patch + cd ${NPM_NAPI_DIR} && ${SETENV} ${MAKE_ENV} yarn install + + # Back up yarn cache + cd ${NPM_NAPI_DIR} && ${TAR} cJf ${DISTCACHEFILE_yarn} .yarn + +${DISTCACHEFILE_cargo}: + # Cache cargo crates for zstd. + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/${DISTFILE_zstd} -C ${WRKDIR} + cd ${MONGO_ZSTD_DIR} && ${SETENV} ${MAKE_ENV} \ + cargo fetch + # Back up cargo cache + cd ${WRKDIR} && ${TAR} cJf ${DISTCACHEFILE_cargo} .cargo + +post-extract: + # Restore npm and node-gyp-cache cache + ${TAR} xf ${DISTCACHEFILE_npm} -C ${WRKDIR} + ${TAR} xf ${DISTCACHEFILE_gyp} -C ${WRKDIR} + ${TAR} xf ${DISTCACHEFILE_cargo} -C ${WRKDIR} + + # Fonts + -${MKDIR} ${WRKSRC}/packages/compass/src/app/fonts + for font in ${DISTDIR}/${DIST_SUBDIR}/*.woff*; do \ + ${INSTALL_DATA} $${font} \ + ${WRKSRC}/packages/compass/src/app/fonts; \ + done + +pre-build: + # Prepare kerberos + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/kerberos-${NPM_KERBEROS_VER}.tgz \ + -C ${WRKDIR} + cd ${WRKDIR}/package && ${PATCH} -p1 < ${FILESDIR}/kerberos.patch +. if empty(PORT_OPTIONS:MGSSAPI_MIT) + cd ${WRKDIR}/package && ${PATCH} -p1 < ${FILESDIR}/kerberos-heimdal.patch +. endif + ${FIND} ${WRKDIR}/package -name \*.orig -or -name \*.bak -delete + cd ${WRKDIR} && ${SETENV} ${MAKE_ENV} npm pack file:${WRKDIR}/package + ${RM} -rd ${WRKDIR}/package + + # Prepare mongodb-client-encryption + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/mongodb-client-encryption-${MONGO_CLIENC_VER}.tgz \ + -C ${WRKDIR} + cd ${WRKDIR}/package && ${PATCH} -p1 < ${FILESDIR}/mongodb-client-encryption.patch + ${REINPLACE_CMD} -E \ + 's|^(.*\.include_dir.*)$$|\1 "/usr/include", "${PREFIX}/include"|' \ + ${WRKDIR}/package/binding.gyp + ${REINPLACE_CMD} -E \ + "s|^( *').*(lib.*-static.*\.a)('.*)$$|\1${PREFIX}/lib/\2\3|" \ + ${WRKDIR}/package/binding.gyp + ${REINPLACE_CMD} -E \ + -e 's|("chai"): "\^4\.3\.7"|\1: "^4.0.0"|' \ + -e 's|("eslint"): "\^8\.46\.0"|\1: "^8.0.0"|' \ + -e 's|("@typescript-eslint\/parser"): "\^6\.3\.0"|\1: "^6.0.0"|' \ + ${WRKDIR}/package/package.json + ${FIND} ${WRKDIR}/package -name \*.orig -or -name \*.bak -delete + ${MKDIR} ${WRKDIR}/package/node_modules + cd ${WRKDIR}/package && ${SETENV} ${MAKE_ENV} \ + PATH=${PATH}:${WRKDIR}/package/node_modules/.bin \ + npm --offline -- install node-gyp-cache@0.2.1 + ${ECHO} "node_gyp = node-gyp-cache" >> ${WRKDIR}/.npmrc + cd ${WRKDIR}/package && ${SETENV} ${MAKE_ENV} \ + PATH=${PATH}:${WRKDIR}/package/node_modules/.bin \ + node-gyp rebuild --python=${PYTHON_CMD} + cd ${WRKDIR} && ${SETENV} ${MAKE_ENV} npm pack file:${WRKDIR}/package + ${RM} -rd ${WRKDIR}/package + + # Prepare fs-xattr + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/fs-xattr-${NPM_FSXATTR_VER}.tgz \ + -C ${WRKDIR} + cd ${WRKDIR}/package && ${PATCH} -p1 < ${FILESDIR}/fs-xattr.patch + ${CP} ${FILESDIR}/xattr.h ${WRKDIR}/package/src + ${CP} ${FILESDIR}/xattr_api.c ${WRKDIR}/package/src + ${MKDIR} ${WRKDIR}/package/node_modules + cd ${WRKDIR}/package && ${SETENV} ${MAKE_ENV} \ + PATH=${PATH}:${WRKDIR}/package/node_modules/.bin \ + npm --offline -- install node-gyp-cache@0.2.1 + # ${ECHO} "node_gyp = node-gyp-cache" >> ${WRKDIR}/.npmrc + cd ${WRKDIR}/package && ${SETENV} ${MAKE_ENV} \ + PATH=${PATH}:${WRKDIR}/package/node_modules/.bin \ + npm exec node-gyp-cache rebuild --python=${PYTHON_CMD} + ${FIND} ${WRKDIR}/package -name \*.orig -or -name \*.bak -delete + cd ${WRKDIR} && ${SETENV} ${MAKE_ENV} npm pack file:${WRKDIR}/package + ${RM} -rd ${WRKDIR}/package + + # Prepare os-dns-native + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/os-dns-native-${NPM_OSDNSNATIVE_VER}.tgz \ + -C ${WRKDIR} + cd ${WRKDIR} && ${PATCH} -p0 < ${FILESDIR}/os-dns-native.patch + ${MKDIR} ${WRKDIR}/package/node_modules + cd ${WRKDIR}/package && ${SETENV} ${MAKE_ENV} \ + PATH=${PATH}:${WRKDIR}/package/node_modules/.bin \ + npm --offline -- install node-gyp-cache@0.2.1 + ${ECHO} "node-gyp = node-gyp-cache" >> ${WRKDIR}/.npmrc + cd ${WRKDIR}/package && ${SETENV} ${MAKE_ENV} \ + PATH=${PATH}:${WRKDIR}/package/node_modules/.bin \ + npm run install + ${FIND} ${WRKDIR}/package -name \*.orig -or -name \*.bak -delete + cd ${WRKDIR} && ${SETENV} ${MAKE_ENV} npm pack file:${WRKDIR}/package + ${RM} -rd ${WRKDIR}/package + + # Prepare napi-rs-cli (for mongodb-js-zstd) + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/${DISTFILE_napi} -C ${WRKDIR} + ${TAR} xf ${DISTCACHEFILE_yarn} -C ${NPM_NAPI_DIR} + ${MKDIR} ${NPM_NAPI_DIR}/node_modules + cd ${NPM_NAPI_DIR} && ${PATCH} -p1 < ${FILESDIR}/napi-cli.patch + cd ${NPM_NAPI_DIR} && ${SETENV} ${MAKE_ENV} yarn install + cd ${NPM_NAPI_DIR} && ${SETENV} ${MAKE_ENV} \ + PATH=$${PATH}:${NPM_NAPI_DIR}/node_modules/.bin npm run build + ${FIND} ${NPM_NAPI_DIR} -name \*.orig -or -name \*.bak -delete + cd ${WRKDIR} && ${SETENV} ${MAKE_ENV} npm pack file:${NPM_NAPI_DIR}/cli + + # Prepare mongodb-js-zstd. + ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/${DISTFILE_zstd} -C ${WRKDIR} + + # Install node_modules for zstd. + ${MKDIR} ${MONGO_ZSTD_DIR}/node_modules + cd ${MONGO_ZSTD_DIR} && \ + ${PATCH} -p1 < ${FILESDIR}/mongodb-js-zstd.patch + cd ${MONGO_ZSTD_DIR} && \ + ${SETENV} ${MAKE_ENV} ${PATH_ENV_zstd} \ + npm --offline -- install \ + ${WRKDIR}/napi-rs-cli-${NPM_NAPI_VER}.tgz + cd ${MONGO_ZSTD_DIR} && \ + ${SETENV} ${MAKE_ENV} ${PATH_ENV_zstd} CARGO_NET_OFFLINE=true \ + napi build --platform --release --target ${NAPI_TARGET} && \ + ${SETENV} ${MAKE_ENV} ${PATH_ENV_zstd} ${INSTALL_LIB} \ + zstd.freebsd-${ELECTRON_ARCH}.node npm/freebsd-${ELECTRON_ARCH}/ + ${FIND} ${MONGO_ZSTD_DIR} -name \*.orig -or -name \*.bak -delete + cd ${WRKDIR} && ${SETENV} ${MAKE_ENV} npm pack file:${MONGO_ZSTD_DIR} + cd ${WRKDIR} && ${SETENV} ${MAKE_ENV} npm pack \ + file:${MONGO_ZSTD_DIR}/npm/freebsd-${ELECTRON_ARCH} + + # Replace "git+ssh:" and "github:" entry with "file:" + # to exported tarballs. + ${REINPLACE_CMD} -E ' \ + s,"(resolved|from|version)": "git\+ssh:.*/reflux-state-mixin\.git.*","\1": "file://${DISTDIR}/${DIST_SUBDIR}/${DISTFILE_reflux}",; \ + s,"(reflux-state-mixin|resolved|from)": "(.+@)?github:mongodb-js/reflux-state-mixin(.[0-9a-f]+)?","\1": "file://${DISTDIR}/${DIST_SUBDIR}/${DISTFILE_reflux}",; \ + ' ${WRKSRC}/package-lock.json + + for pjson in $$(find ${WRKSRC} -name package.json -print); do \ + ${REINPLACE_CMD} -E ' \ + s,"(reflux-state-mixin)": "github:mongodb-js/reflux-state-mixin","\1": "file://${DISTDIR}/${DIST_SUBDIR}/${DISTFILE_reflux}",; \ + ' $${pjson}; done + + # Install node modules + ${MKDIR} ${NODE_MODULES_DIR} + cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} npm install --offline \ + ${DISTDIR}/${DIST_SUBDIR}/${DISTFILE_reflux} \ + ${WRKDIR}/fs-xattr-${NPM_FSXATTR_VER}.tgz \ + ${WRKDIR}/kerberos-${NPM_KERBEROS_VER}.tgz \ + ${WRKDIR}/napi-rs-cli-${NPM_NAPI_VER}.tgz \ + ${WRKDIR}/mongodb-js-zstd-*.tgz \ + ${WRKDIR}/mongodb-client-encryption-${MONGO_CLIENC_VER}.tgz \ + ${WRKDIR}/os-dns-native-${NPM_OSDNSNATIVE_VER}.tgz + + # Install electron without build. + cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \ + npm --offline --omit-dev --ignore-scripts -- install \ + electron@${ELECTRON_VER} + + # Install node modules for production (APPMOD) + ${MKDIR} ${DISTTMP_DIR}/node_modules + cd ${DISTTMP_DIR} && ${SETENV} ${MAKE_ENV} \ + npm --offline --omit-dev -- install \ + ${WRKDIR}/kerberos-${NPM_KERBEROS_VER}.tgz \ + ${WRKDIR}/mongodb-client-encryption-${MONGO_CLIENC_VER}.tgz + -${RM} ${APPMODFILE} + ${TAR} -cf ${APPMODFILE} --exclude python3 \ + -C ${DISTTMP_DIR} node_modules + +do-build: + # Set up download zip file for electron-packager + cd ${WRKSRC}/node_modules/electron-packager/src && \ + ${PATCH} -p1 < ${FILESDIR}/electron-packager.patch + cd ${LOCALBASE}/share/electron${ELECTRON_VER_MAJOR} && \ + zip -q -r ${WRKDIR}/electron-v${ELECTRON_VER}-freebsd-${ELECTRON_ARCH}.zip . + + # Install electron + ${CP} -R ${LOCALBASE}/share/electron${ELECTRON_VER_MAJOR} \ + ${NODE_MODULES_DIR}/electron/dist + ${ECHO} "electron" > ${NODE_MODULES_DIR}/electron/path.txt + + # Build MongoDB Compass + cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} lerna run bootstrap --stream + cd ${WRKSRC} && ${SETENV} ${HADRON_ENV} npm run package-compass + +do-install: + # Install MongoDB Compass + -${MKDIR} ${STAGEDIR}${PREFIX}/share/pixmaps + ${INSTALL_DATA} ${WRKSRC}/packages/compass/app-icons/linux/mongodb-compass.png \ + ${STAGEDIR}${PREFIX}/share/pixmaps/ + -${MKDIR} ${STAGEDIR}${DESKTOPDIR} + ${INSTALL_DATA} ${FILESDIR}/mongodb-compass.desktop \ + ${STAGEDIR}${DESKTOPDIR}/ + -${MKDIR} ${STAGEDIR}${DATADIR} + cd ${COMPASS_DIR}/dist/MongoDB* && ${TAR} cf - . | \ + ${TAR} xf - -C ${STAGEDIR}${DATADIR} +.for f in chromedriver mksnapshot v8_context_snapshot_generator + ${RM} ${STAGEDIR}${DATADIR}/${f} +.endfor + ${RM} -r ${STAGEDIR}${DATADIR}/gen + ${RM} -r ${STAGEDIR}${DATADIR}/node_headers + ${RLN} ${STAGEDIR}${DATADIR}/MongoDB* \ + ${STAGEDIR}${PREFIX}/bin/${PORTNAME} + ${FIND} ${STAGEDIR}${DATADIR} -name \*.node -exec ${STRIP_CMD} {} \; + + # Install documents +do-install-DOCS-on: + -${MKDIR} ${STAGEDIR}${DOCSDIR} +.for f in ${PORTDOCS} + ${INSTALL_MAN} ${WRKSRC}/${f} ${STAGEDIR}${DOCSDIR} +.endfor + +post-stage: + cd ${STAGEDIR}${PREFIX} && \ + ${FIND} ${DATADIR_REL}/resources/app.asar.unpacked/build \ + -type f -o -type l > ${WRKDIR}/PLIST.unpacked + cd ${WRKDIR} && ${SED} -i -e "/PLIST.unpacked/r PLIST.unpacked" ${TMPPLIST} + +do-test: + cd ${WRKSRC}/packages/compass && \ + ${SETENV} ${TEST_ENV} \ + xvfb-maybe electron-mocha --no-sandbox "./src/main/*.spec.*" + +post-clean: +.for file in ${DISTCACHEFILES} compass_node_modules.tar + ${RM} ${DISTDIR}/${DIST_SUBDIR}/${file} +.endfor + +.include <bsd.port.mk> |