diff options
Diffstat (limited to 'Mk')
| -rw-r--r-- | Mk/Scripts/electron-create-mtree.sh | 34 | ||||
| -rw-r--r-- | Mk/Scripts/electron-normalize-permissions.awk | 30 | ||||
| -rw-r--r-- | Mk/Uses/autoreconf.mk | 4 | ||||
| -rw-r--r-- | Mk/Uses/cargo.mk | 2 | ||||
| -rw-r--r-- | Mk/Uses/electron.mk | 819 | ||||
| -rw-r--r-- | Mk/Uses/gettext-runtime.mk | 6 | ||||
| -rw-r--r-- | Mk/Uses/gettext-tools.mk | 4 | ||||
| -rw-r--r-- | Mk/Uses/go.mk | 28 | ||||
| -rw-r--r-- | Mk/Uses/java.mk | 2 | ||||
| -rw-r--r-- | Mk/Uses/kde.mk | 8 | ||||
| -rw-r--r-- | Mk/Uses/linux.mk | 7 | ||||
| -rw-r--r-- | Mk/Uses/pyqt.mk | 22 | ||||
| -rw-r--r-- | Mk/Uses/qt.mk | 8 | ||||
| -rw-r--r-- | Mk/Uses/samba.mk | 15 | ||||
| -rw-r--r-- | Mk/Uses/xlibre-cat.mk | 221 | ||||
| -rw-r--r-- | Mk/Uses/xlibre.mk | 69 | ||||
| -rw-r--r-- | Mk/bsd.default-versions.mk | 4 | ||||
| -rw-r--r-- | Mk/bsd.gecko.mk | 2 |
18 files changed, 1237 insertions, 48 deletions
diff --git a/Mk/Scripts/electron-create-mtree.sh b/Mk/Scripts/electron-create-mtree.sh new file mode 100644 index 000000000000..6e213f0d5b23 --- /dev/null +++ b/Mk/Scripts/electron-create-mtree.sh @@ -0,0 +1,34 @@ +#!/bin/sh +# +# MAINTAINER: tagattie@FreeBSD.org + +PATH=/bin:/usr/bin:/usr/sbin + +set -e +set -o pipefail + +[ -n "${DEBUG_MK_SCRIPTS}" -o -n "${DEBUG_MK_SCRIPTS_ELECTRON_CREATE_MTREE}" ] && set -x + +PREFETCH_TIMESTAMP=61171200 # 1971-12-10 00:00:00 GMT + +set -u + +usage() { + cat <<EOF + Usage: ${0##*/} dirname +EOF + exit 1 +} + +if [ $# -ne 1 ]; then + usage +fi + +mtree -cbnSp "$1" | mtree -C | \ +awk -f "${SCRIPTSDIR}/electron-normalize-permissions.awk" | \ +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|^\.|$1|" \ + -e "s|^${WRKDIR}/||" \ + -e '1d' diff --git a/Mk/Scripts/electron-normalize-permissions.awk b/Mk/Scripts/electron-normalize-permissions.awk new file mode 100644 index 000000000000..876f6c4fb684 --- /dev/null +++ b/Mk/Scripts/electron-normalize-permissions.awk @@ -0,0 +1,30 @@ +# MAINTAINER: tagattie@FreeBSD.org + +function oct2dec(octstr, i, c, val) { + val = 0 + for (i = 1; i <= length(octstr); i++) { + c = substr(octstr, i, 1) + if (c < "0" || c > "7") { + break + } + val = val * 8 + (c - "0") + } + return val +} + +{ + if (match($0, /mode=[0-7]+/)) { + mode_str = substr($0, RSTART+5, RLENGTH-5) + mode = oct2dec(mode_str) + exec_bits = 73 # 0o111 + special_bits = 3584 # 0o7000 + special = and(mode, special_bits) + if (and(mode, exec_bits) != 0) { + newmode = or(special, 493) # 0o755 + } else { + newmode = or(special, 420) # 0o644 + } + sub(/mode=[0-7]+/, "mode=" sprintf("%04o", newmode)) + } + print +} diff --git a/Mk/Uses/autoreconf.mk b/Mk/Uses/autoreconf.mk index 781f58dc20b5..608027f599ff 100644 --- a/Mk/Uses/autoreconf.mk +++ b/Mk/Uses/autoreconf.mk @@ -89,10 +89,10 @@ _AUTORECONF= 2.69 BUILD_DEPENDS+= autoconf2.69>=2.69:devel/autoconf2.69 . else _AUTORECONF= 2.72 -BUILD_DEPENDS+= autoconf>=${_AUTORECONF}:devel/autoconf +BUILD_DEPENDS+= autoconf>=2.72_1:devel/autoconf . endif -BUILD_DEPENDS+= automake>=1.17:devel/automake +BUILD_DEPENDS+= automake>=1.18.1:devel/automake . if defined(libtool_ARGS) && empty(libtool_ARGS:Mbuild) BUILD_DEPENDS+= libtoolize:devel/libtool diff --git a/Mk/Uses/cargo.mk b/Mk/Uses/cargo.mk index a92ba1e13c3b..f8d45da664a4 100644 --- a/Mk/Uses/cargo.mk +++ b/Mk/Uses/cargo.mk @@ -109,7 +109,7 @@ WRKSRC_crate_${_crate}= ${WRKDIR}/${_wrksrc} CARGO_BUILDDEP?= yes . if ${CARGO_BUILDDEP:tl} == "yes" -BUILD_DEPENDS+= ${RUST_DEFAULT}>=1.91.0:lang/${RUST_DEFAULT} +BUILD_DEPENDS+= ${RUST_DEFAULT}>=1.92.0:lang/${RUST_DEFAULT} . elif ${CARGO_BUILDDEP:tl} == "any-version" BUILD_DEPENDS+= ${RUST_DEFAULT}>=0:lang/${RUST_DEFAULT} . endif diff --git a/Mk/Uses/electron.mk b/Mk/Uses/electron.mk new file mode 100644 index 000000000000..cfd4c4037e26 --- /dev/null +++ b/Mk/Uses/electron.mk @@ -0,0 +1,819 @@ +# Provides support for Electron-based ports +# +# Feature: electron +# Usage: USES=electron:<version>[,ARGS] +# Valid ARGS: <version>, build, run, test, env +# +# <version>: A specific major version of Electron the port is based on. +# The port must specify exactly a single major version. +# build: Electron is needed at build time. Adds it to BUILD_DEPENDS. +# run: Electron is needed at run time. Adds it to RUN_DEPENDS. +# test: Electron is needed at test time. Adds it to TEST_DEPENDS. +# env: Electron is not needed at any of build, run, or test time. +# However, the port needs USE_ELECTRON features. +# +# NOTE 1: {build, run, test} and env are mutually exclusive. If the port +# specifies both of them, env takes precedence. +# +# NOTE 2: If the port specifies none of build, run or test, we assume the port +# requires all those dependencies. +# +# Variables, which may be set by the port: +# +# USE_ELECTRON: A list of additional features and functionalities to +# enable. Supported features are: +# +# npm: A node package manager the port uses. +# Supported package managers are: +# +# npm: The port uses NPM as package manager. +# yarn1: The port uses Yarn (v1) as package manager. +# yarn2: The port uses Yarn (v2 or v3) as package manager. +# yarn4: The port uses Yarn (v4+) as package manager. +# pnpm: The port uses PNPM as package manager. +# +# NOTE: The port must specify exactly a single package manager. +# Multiple package managers cannot be specified. +# +# Other valid arguments are: +# +# fetch, extract, build, run, and test, +# +# each of which corresponds to respective dependency. If the port +# does not specify any of those dependencies, we assume only +# build time dependency is required. +# +# appbuilder: An app-builder version the port uses. Supported +# arguments are: +# +# release: The port uses released version of app-builder and add +# devel/app-builder to BUILD_DEPENDS. +# devel: The port uses development version of app-builder and add +# devel/app-builder-devel to BUILD_DEPENDS. +# +# NOTE: If the port specifies none of those arguments, we assume +# release has been specified. +# +# prefetch: Downloads node modules the port uses according to the +# pre-stored package.json (and package-lock.json, +# yarn.lock, or pnpm-lock.yaml depending on the node +# package manager used) in PKGJSONSDIR. Downloaded node +# modules are archived into a single tarball as one of +# the DISTFILES. +# +# NOTE 1: If the source directory of the port has other relevant +# files than package.json and lockfile, the relevant files must +# also be copied into PKGJSONSDIR. (Examples of relevant files +# includes .npmrc, .yarnrc, and pnpm-workspace.yaml.) +# +# NOTE 2: If the source directory of the port contains multiple +# package.json's and/or lockfiles, all files needed for generating +# node modules archive must be copied into PKGJSONSDIR with +# directory hierarchy preserved. +# +# extract: Installs the prefetched node modules into the port's +# working source directory. +# +# rebuild: Rebuilds native node modules against nodejs or electron. +# Supported arguments are: +# +# nodejs: Rebuilds native node modules against the version of +# nodejs installed before pre-build phase so that nodejs +# can execute the native modules during build. +# electron: Rebuilds native node modules against the version of +# electron the port uses before do-build phase so that +# the native modules can be executed with electron on run +# time. +# +# NOTE: If the port specifies none of those arguments, we assume +# only electron has been specified. +# +# build: Prepares an electron application in a distributable +# format using the specified package builder as an +# argument. Supported arguments are: +# +# builder: Uses electron-builder for packaging. +# forge: Uses electron-forge for packaging. +# packager: Uses electron-packager for packaging. +# +# NOTE: The port must specify exactly a single argument. Multiple +# package builders cannot be specified. +# +# NPM_VER: A version of node package manager the port uses. If yarn +# 2 or later, or pnpm is used for the package manager, the +# framework requires the variable to be set so that it can +# bootstrap the correct version of package manager. +# +# It is usually specified as the key "packageManager" in +# package.json and the framework tries to automatically +# detect the version. Auto-detection can be overridden by +# manually specifying the value in Makefile. +# +# UPSTREAM_ELECTRON_VER: +# UPSTREAM_CHROMEDRIVER_VER: +# UPSTREAM_MKSNAPSHOT_VER: +# Electron, chromedriver, and mksnapshot versions the port +# depends on. Those versions are usually specified in +# either package-lock.json, yarn.lock, or pnpm-lock.yaml +# file in the port's source directory. +# +# The build process tries to automatically detect those +# versions so the port does not usually have to specify +# the values. Auto-detection can be overridden by manually +# specifying the values in Makefile. +# +# The build process will generate a zip archive and a +# checksum file of electron/chromedriver/mksnapshot to +# prevent the build phase from trying to download binary +# distribution files from GitHub. +# +# ELECTRON_MAKE_FLAGS: Additional command-line flags to pass to the specified +# package builder when build feature is used. The default +# flags are defined in this file. +# +# MAINTAINER: tagattie@FreeBSD.org + +.if !defined(_INCLUDE_USES_ELECTRON_MK) +_INCLUDE_USES_ELECTRON_MK= yes + +# Electron uses Node.js (actually a node package manager) for build +.include "${USESDIR}/nodejs.mk" + +_VALID_ELECTRON_VERSIONS= 36 37 38 39 +_VALID_ELECTRON_FEATURES= npm appbuilder prefetch extract rebuild build +_VALID_ELECTRON_FEATURES_NPM= npm yarn1 yarn2 yarn4 pnpm +_VALID_ELECTRON_FEATURES_APPBUILDER=release devel +_VALID_ELECTRON_FEATURES_REBUILD=nodejs electron +_VALID_ELECTRON_FEATURES_BUILD= builder forge packager + +_ELECTRON_CMD_BASE= electron +_ELECTRON_PORT_BASE= devel/electron +_ELECTRON_DOWNLOAD_URL_BASE= https://github.com/electron/electron/releases/download +_NODEJS_PKGNAME= node${NODEJS_VERSION} +_NODEJS_PORT= www/node${NODEJS_VERSION} + +# Process USES=electron[:ARGS] +# Detect build, run, test, or env dependency +_ELECTRON_ARGS= ${electron_ARGS:S/,/ /g} +. if ${_ELECTRON_ARGS:Mbuild} +_ELECTRON_BUILD_DEP= yes +_ELECTRON_ARGS:= ${_ELECTRON_ARGS:Nbuild} +. endif +. if ${_ELECTRON_ARGS:Mrun} +_ELECTRON_RUN_DEP= yes +_ELECTRON_ARGS:= ${_ELECTRON_ARGS:Nrun} +. endif +. if ${_ELECTRON_ARGS:Mtest} +_ELECTRON_TEST_DEP= yes +_ELECTRON_ARGS:= ${_ELECTRON_ARGS:Ntest} +. endif +. if ${_ELECTRON_ARGS:Menv} +_ELECTRON_NO_DEP= yes +_ELECTRON_ARGS:= ${_ELECTRON_ARGS:Nenv} +. endif +# If no dependencies are specified, assume build, run, and test are required +. if !defined(_ELECTRON_BUILD_DEP) && !defined(_ELECTRON_RUN_DEP) && \ + !defined(_ELECTRON_TEST_DEP) && !defined(_ELECTRON_NO_DEP) +_ELECTRON_BUILD_DEP= yes +_ELECTRON_RUN_DEP= yes +_ELECTRON_TEST_DEP= yes +. endif +# Now _ELECTRON_ARGS should contain a single major version unless env is set +. if !defined(_ELECTRON_NO_DEP) +. if ${_VALID_ELECTRON_VERSIONS:M${_ELECTRON_ARGS}} +_ELECTRON_VERSION= ${_ELECTRON_ARGS} +_ELECTRON_PORTDIR= ${_ELECTRON_PORT_BASE}${_ELECTRON_VERSION} +. include "${PORTSDIR}/${_ELECTRON_PORTDIR}/Makefile.version" +. elif empty(_ELECTRON_ARGS) +IGNORE= does not specify a major version of electron with USES=electron +. else +IGNORE= specifies unknown USES=electron arguments: ${_ELECTRON_ARGS} +. endif +. endif + +# Detect features used with USE_ELECTRON +. for var in ${USE_ELECTRON} +. if empty(_VALID_ELECTRON_FEATURES:M${var:C/\:.*//}) +_INVALID_ELECTRON_FEATURES+= ${var} +. endif +. endfor +. if !empty(_INVALID_ELECTRON_FEATURES) +IGNORE= uses unknown USE_ELECTRON features: ${_INVALID_ELECTRON_FEATURES} +. endif +# Make each individual feature available as _ELECTRON_FEATURE_<FEATURENAME> +. for var in ${USE_ELECTRON} +_ELECTRON_FEATURE_${var:C/\:.*//:tu}= ${var} +. endfor +. if !defined(_ELECTRON_FEATURE_NPM) +IGNORE= does not specify a single node package manager with USE_ELECTRON=npm +. endif + +# Process USE_ELECTRON=npm[:ARGS] +# Detect fetch, extract, build, run, or test dependency +_NODEJS_NPM?= +. if defined(_ELECTRON_FEATURE_NPM) +_ELECTRON_FEATURE_NPM:= ${_ELECTRON_FEATURE_NPM:S/,/ /g} +. if ${_ELECTRON_FEATURE_NPM:Mfetch} +_ELECTRON_FEATURE_NPM_FETCH= yes +_ELECTRON_FEATURE_NPM:= ${_ELECTRON_FEATURE_NPM:Nfetch} +. endif +. if ${_ELECTRON_FEATURE_NPM:Mextract} +_ELECTRON_FEATURE_NPM_EXTRACT= yes +_ELECTRON_FEATURE_NPM:= ${_ELECTRON_FEATURE_NPM:Nextract} +. endif +. if ${_ELECTRON_FEATURE_NPM:Mbuild} +_ELECTRON_FEATURE_NPM_BUILD= yes +_ELECTRON_FEATURE_NPM:= ${_ELECTRON_FEATURE_NPM:Nbuild} +. endif +. if ${_ELECTRON_FEATURE_NPM:Mrun} +_ELECTRON_FEATURE_NPM_RUN= yes +_ELECTRON_FEATURE_NPM:= ${_ELECTRON_FEATURE_NPM:Nrun} +. endif +. if ${_ELECTRON_FEATURE_NPM:Mtest} +_ELECTRON_FEATURE_NPM_TEST= yes +_ELECTRON_FEATURE_NPM:= ${_ELECTRON_FEATURE_NPM:Ntest} +. endif +# If no dependencies are specified, we assume only build dep is required +. if !defined(_ELECTRON_FEATURE_NPM_FETCH) && !defined(_ELECTRON_FEATURE_NPM_EXTRACT) && \ + !defined(_ELECTRON_FEATURE_NPM_BUILD) && !defined(_ELECTRON_FEATURE_NPM_RUN) && \ + !defined(_ELECTRON_FEATURE_NPM_TEST) +_ELECTRON_FEATURE_NPM_BUILD= yes +. endif +# Now _ELECTRON_FEATURE_NPM should contain a single package manager +. if ${_VALID_ELECTRON_FEATURES_NPM:M${_ELECTRON_FEATURE_NPM:C/^[^\:]*(\:|\$)//}} +_NODEJS_NPM= ${_ELECTRON_FEATURE_NPM:C/^[^\:]*(\:|\$)//} +. if ${_NODEJS_NPM} == npm +_NPM_PKGNAME= ${_NODEJS_NPM}${NODEJS_SUFFIX} +_NPM_PORTDIR= www/${_NODEJS_NPM}${NODEJS_SUFFIX} +. elif ${_NODEJS_NPM} == yarn1 +_NPM_PKGNAME= yarn${NODEJS_SUFFIX} +_NPM_PORTDIR= www/yarn${NODEJS_SUFFIX} +. endif +. elif empty(_ELECTRON_FEATURES_NPM) +IGNORE= does not specify a single node package manager with USE_ELECTRON=npm +. else +IGNORE= specifies unknown USE_ELECTRON=npm arguments: ${_ELECTRON_FEATURE_NPM} +. endif +. endif + +# Process USE_ELECTRON=appbuilder[:ARGS] +# Detect stable or devel argument of appbuilder feature +. if defined(_ELECTRON_FEATURE_APPBUILDER) +_ELECTRON_FEATURE_APPBUILDER:= ${_ELECTRON_FEATURE_APPBUILDER:C/^[^\:]*(\:|\$)//} +. if ${_ELECTRON_FEATURE_APPBUILDER:Mrelease} +_ELECTRON_FEATURE_APPBUILDER_RELEASE= yes +_ELECTRON_FEATURE_APPBUILDER:= ${_ELECTRON_FEATURE_APPBUILDER:Nrelease} +. endif +. if ${_ELECTRON_FEATURE_APPBUILDER:Mdevel} +_ELECTRON_FEATURE_APPBUILDER_DEVEL= yes +_ELECTRON_FEATURE_APPBUILDER:= ${_ELECTRON_FEATURE_APPBUILDER:Ndevel} +. endif +# If no arguments are specified, we assume release is specified +. if !defined(_ELECTRON_FEATURE_APPBUILDER_RELEASE) && \ + !defined(_ELECTRON_FEATURE_APPBUILDER_DEVEL) +_ELECTRON_FEATURE_APPBUILDER_RELEASE= yes +. endif +. if !empty(_ELECTRON_FEATURE_APPBUILDER) +IGNORE= specifies unknown USE_ELECTRON=appbuilder arguments: ${_ELECTRON_FEATURE_APPBUILDER} +. endif +. endif + +# Process USE_ELECTRON=rebuild[:ARGS] +# Detect nodejs or electron argument of rebuild feature +. if defined(_ELECTRON_FEATURE_REBUILD) +_ELECTRON_FEATURE_REBUILD:= ${_ELECTRON_FEATURE_REBUILD:C/^[^\:]*(\:|\$)//:S/,/ /g} +. if ${_ELECTRON_FEATURE_REBUILD:Mnodejs} +_ELECTRON_FEATURE_REBUILD_NODEJS= yes +_ELECTRON_FEATURE_REBUILD:= ${_ELECTRON_FEATURE_REBUILD:Nnodejs} +. endif +. if ${_ELECTRON_FEATURE_REBUILD:Melectron} +_ELECTRON_FEATURE_REBUILD_ELECTRON= yes +_ELECTRON_FEATURE_REBUILD:= ${_ELECTRON_FEATURE_REBUILD:Nelectron} +. endif +# If no arguments are specified, we assume electron is specified +. if !defined(_ELECTRON_FEATURE_REBUILD_NODEJS) && \ + !defined(_ELECTRON_FEATURE_REBUILD_ELECTRON) +_ELECTRON_FEATURE_REBUILD_ELECTRON= yes +. endif +. if !empty(_ELECTRON_FEATURE_REBUILD) +IGNORE= specifies unknown USE_ELECTRON=rebuild arguments: ${_ELECTRON_FEATURE_REBUILD} +. endif +. endif + +# Process USE_ELECTRON=build:ARG +# Detect builder used with USE_ELECTRON=builder +. if defined(_ELECTRON_FEATURE_BUILD) +. if ${_VALID_ELECTRON_FEATURES_BUILD:M${_ELECTRON_FEATURE_BUILD:C/^[^\:]*(\:|\$)//}} +_ELECTRON_FEATURE_BUILD:= ${_ELECTRON_FEATURE_BUILD:C/^[^\:]*(\:|\$)//} +. else +IGNORE= specifies unknown USE_ELECTRON=build arguments: ${_ELECTRON_FEATURE_BUILD} +. endif +. endif + +# Setup dependencies +. for stage in BUILD RUN TEST +. if defined(_ELECTRON_${stage}_DEP) && ${_ELECTRON_${stage}_DEP} == yes +${stage}_DEPENDS+= ${_ELECTRON_CMD_BASE}${ELECTRON_VER_MAJOR}:${_ELECTRON_PORTDIR} +. endif +. endfor +. for stage in FETCH EXTRACT BUILD RUN TEST +. if defined(_ELECTRON_FEATURE_NPM_${stage}) && ${_ELECTRON_FEATURE_NPM_${stage}} == yes +. if ${_NODEJS_NPM} == npm || ${_NODEJS_NPM} == yarn1 +${stage}_DEPENDS+= ${_NPM_PKGNAME}>0:${_NPM_PORTDIR} +. elif ${_NODEJS_NPM} == yarn2 || ${_NODEJS_NPM} == yarn4 || ${_NODEJS_NPM} == pnpm +${stage}_DEPENDS+= ${_NODEJS_PKGNAME}>0:${_NODEJS_PORT} +. endif +. endif +. endfor +. if defined(_ELECTRON_FEATURE_APPBUILDER_RELEASE) && ${_ELECTRON_FEATURE_APPBUILDER_RELEASE} == yes +BUILD_DEPENDS+= app-builder:devel/app-builder +. elif defined(_ELECTRON_FEATURE_APPBUILDER_DEVEL) && ${_ELECTRON_FEATURE_APPBUILDER_DEVEL} == yes +BUILD_DEPENDS+= app-builder:devel/app-builder-devel +. endif + +# Define variables related to node package manager +NPM_FETCH_FLAGS?= +NPM_EXTRACT_FLAGS?= +NPM_EXEC_FLAGS?= +NPM_REBUILD_FLAGS?= + +NPM_PKGFILE?= package.json +. if ${_NODEJS_NPM} == npm +NPM_LOCKFILE?= package-lock.json +NPM_MODULE_CACHE?= node_modules +NPM_CMDNAME?= npm +NPM_CACHE_SETUP_CMD?= ${DO_NADA} +NPM_FETCH_CMD?= ${NPM_CMDNAME} ci +NPM_FETCH_FLAGS+= --ignore-scripts --no-progress --no-audit --no-fund --no-update-notifier --loglevel=error +NPM_EXEC_CMD?= ${NPM_CMDNAME} exec +NPM_EXEC_FLAGS+= --no-update-notifier +NPM_REBUILD_CMD?= ${NPM_CMDNAME} rebuild +NPM_REBUILD_FLAGS+= --no-update-notifier +. elif ${_NODEJS_NPM:Myarn*} +NPM_LOCKFILE?= yarn.lock +NPM_MODULE_CACHE?= yarn-offline-cache +NPM_CMDNAME?= yarn +NPM_FETCH_CMD?= ${NPM_CMDNAME} install +NPM_EXTRACT_CMD?= ${NPM_CMDNAME} install +NPM_EXEC_CMD?= ${NPM_CMDNAME} exec +. if ${_NODEJS_NPM} == yarn1 +NPM_CACHE_SETUP_CMD?= ${ECHO_CMD} 'yarn-offline-mirror "./${NPM_MODULE_CACHE}"' >> .yarnrc +NPM_FETCH_FLAGS+= --frozen-lockfile --ignore-scripts --silent +NPM_EXTRACT_FLAGS+= ${NPM_FETCH_FLAGS} --offline +. elif ${_NODEJS_NPM} == yarn2 +NPM_CACHE_SETUP_CMD?= ${NPM_CMDNAME} config set cacheFolder "./${NPM_MODULE_CACHE}" +NPM_FETCH_FLAGS+= --immutable --mode=skip-build --silent +NPM_EXTRACT_SETUP_CMD?= ${SH} -c "${NPM_CMDNAME} config set enableNetwork false; \ + ${NPM_CMDNAME} config set enableInlineBuilds true" +NPM_EXTRACT_FLAGS+= ${NPM_FETCH_FLAGS} --immutable-cache +NPM_REBUILD_CMD?= ${NPM_CMDNAME} rebuild +. elif ${_NODEJS_NPM} == yarn4 +NPM_CACHE_SETUP_CMD?= ${SH} -c "${NPM_CMDNAME} config set enableGlobalCache false; \ + ${NPM_CMDNAME} config set cacheFolder \"./${NPM_MODULE_CACHE}\"" +NPM_FETCH_FLAGS+= --immutable --mode=skip-build --silent +NPM_EXTRACT_SETUP_CMD?= ${SH} -c "${NPM_CMDNAME} config set enableNetwork false; \ + ${NPM_CMDNAME} config set enableInlineBuilds true" +NPM_EXTRACT_FLAGS+= ${NPM_FETCH_FLAGS} --immutable-cache +NPM_REBUILD_CMD?= ${NPM_CMDNAME} rebuild +. endif +. elif ${_NODEJS_NPM} == pnpm +NPM_LOCKFILE?= pnpm-lock.yaml +NPM_MODULE_CACHE?= node_modules +NPM_CMDNAME?= pnpm +NPM_CACHE_SETUP_CMD?= ${NPM_CMDNAME} set extendNodePath false +NPM_FETCH_CMD?= ${NPM_CMDNAME} install +NPM_FETCH_FLAGS+= --frozen-lockfile --ignore-scripts --loglevel=error +NPM_EXEC_CMD?= ${NPM_CMDNAME} exec +NPM_REBUILD_CMD?= ${NPM_CMDNAME} rebuild +. endif + +# Define user-accessible variables +JQ_CMD?= ${LOCALBASE}/bin/jq +YQ_CMD?= ${LOCALBASE}/bin/yq +APP_BUILDER_CMD?= ${LOCALBASE}/bin/app-builder + +ELECTRON_ARCH= ${ARCH:S/aarch64/arm64/:S/amd64/x64/:S/i386/ia32/} + +PKGJSONSDIR?= ${FILESDIR}/packagejsons +NPM_VER?= +NPM_EXTRACT_WRKSRC?= ${WRKSRC} +NPM_REBUILD_WRKSRC_NODEJS?= ${WRKSRC} +NPM_REBUILD_WRKSRC_ELECTRON?= ${WRKSRC} + +# Check existence of package.json +_EXISTS_NPM_PKGFILE?= +. if exists(${PKGJSONSDIR}/${NPM_PKGFILE}) +_EXISTS_NPM_PKGFILE= 1 +. endif + +# If yarn 2+ or pnpm is used, we need to know the version of node package +# manager. It is usually specified as the key "packageManager", so try to +# automatically detect the version. +. if ${_NODEJS_NPM} == yarn2 || ${_NODEJS_NPM} == yarn4 || ${_NODEJS_NPM} == pnpm +. if ${_EXISTS_NPM_PKGFILE} == 1 && empty(NPM_VER) +NPM_VER!= ${GREP} packageManager ${PKGJSONSDIR}/${NPM_PKGFILE} | \ + ${AWK} -F ':' '{print $$NF}' | \ + ${SED} -e 's/[",]//g' | \ + ${CUT} -f 2 -d '@' | \ + ${CUT} -f 1 -d '+' +. endif +. if empty(NPM_VER) +IGNORE= does not specity version of ${NPM_CMDNAME} used for prefetching node modules +. endif + +_USES_fetch+= 490:electron-fetch-node-package-manager + +DISTFILES+= ${NPM_CMDNAME}-${NPM_VER}.tgz:prefetch +FETCH_DEPENDS+= ${_NODEJS_PKGNAME}>0:${_NODEJS_PORT} + +electron-fetch-node-package-manager: + @${ECHO_MSG} "===> Fetching and setting up ${NPM_CMDNAME} version ${NPM_VER}" + @${MKDIR} ${DISTDIR}/${DIST_SUBDIR} ${WRKDIR}/.bin + @${SETENV} ${MAKE_ENV} corepack enable --install-directory ${WRKDIR}/.bin + @if [ ! -f ${DISTDIR}/${DIST_SUBDIR}/${NPM_CMDNAME}-${NPM_VER}.tgz ]; then \ + cd ${WRKDIR} && \ + ${SETENV} ${MAKE_ENV} corepack pack ${NPM_CMDNAME}@${NPM_VER} && \ + ${TAR} -xzf corepack.tgz && \ + ${SETENV} SCRIPTSDIR=${SCRIPTSDIR} WRKDIR=${WRKDIR} \ + ${SH} ${SCRIPTSDIR}/electron-create-mtree.sh ${NPM_CMDNAME} > \ + ${NPM_CMDNAME}.mtree && \ + ${SETENV} LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 \ + ${TAR} -cz --options 'gzip:!timestamp' \ + -f ${DISTDIR}/${DIST_SUBDIR}/${NPM_CMDNAME}-${NPM_VER}.tgz @${NPM_CMDNAME}.mtree; \ + fi + @${SETENV} ${MAKE_ENV} corepack install -g ${DISTDIR}/${DIST_SUBDIR}/${NPM_CMDNAME}-${NPM_VER}.tgz +. endif + +# When prefetch feature is used, downloads node modules the port uses according +# to the pre-stored package.json. +. if defined(_ELECTRON_FEATURE_PREFETCH) +. if empty(_EXISTS_NPM_PKGFILE) +IGNORE= does not store ${NPM_PKGFILE} in ${PKGJSONSDIR} for prefetching node modules +. endif + +_USES_fetch+= 491:electron-fetch-node-modules \ + 492:electron-archive-node-modules + +_DISTFILE_prefetch= ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${DISTVERSION}-node-modules${EXTRACT_SUFX} +DISTFILES+= ${_DISTFILE_prefetch}:prefetch + +. if ${_NODEJS_NPM} == npm || ${_NODEJS_NPM} == yarn1 +FETCH_DEPENDS+= ${_NPM_PKGNAME}>0:${_NPM_PORTDIR} +. elif ${_NODEJS_NPM} == pnpm +FETCH_DEPENDS+= ${YQ_CMD}:textproc/yq +. endif + +electron-fetch-node-modules: + @${MKDIR} ${DISTDIR}/${DIST_SUBDIR} + @if [ ! -f ${DISTDIR}/${DIST_SUBDIR}/${_DISTFILE_prefetch} ]; then \ + ${ECHO_MSG} "===> Setting up node modules cache directory"; \ + ${MKDIR} ${WRKDIR}/node-modules-cache; \ + ${TAR} -cf - -C ${PKGJSONSDIR} . | ${TAR} -xf - -C ${WRKDIR}/node-modules-cache; \ + cd ${WRKDIR}/node-modules-cache && ${SETENV} ${MAKE_ENV} ${NPM_CACHE_SETUP_CMD}; \ + ${ECHO_MSG} "===> Prefetching node modules"; \ + for dir in `${FIND} ${WRKDIR}/node-modules-cache -type f -name ${NPM_LOCKFILE} -exec ${DIRNAME} {} ';'`; do \ + cd $${dir} && \ + ${SETENV} ${MAKE_ENV} ${NPM_FETCH_CMD} ${NPM_FETCH_FLAGS}; \ + ${RM} $${dir}/${NPM_MODULE_CACHE}/.gitignore; \ + if [ -f $${dir}/${NPM_MODULE_CACHE}/.modules.yaml ]; then \ + ${YQ_CMD} -yi 'del(.prunedAt, .storeDir)' \ + $${dir}/${NPM_MODULE_CACHE}/.modules.yaml; \ + fi; \ + ${RM} $${dir}/${NPM_MODULE_CACHE}/.pnpm-workspace-state*.json; \ + done; \ + fi + +electron-archive-node-modules: +. if ${_NODEJS_NPM} == npm || ${_NODEJS_NPM} == pnpm + @if [ -d ${WRKDIR}/node-modules-cache ]; then \ + ${ECHO_MSG} "===> Archiving prefetched node modules"; \ + for dir in `${FIND} -s ${WRKDIR}/node-modules-cache -type d -name ${NPM_MODULE_CACHE} -print | \ + ${GREP} -ve '${NPM_MODULE_CACHE}/.*/${NPM_MODULE_CACHE}'`; do \ + ${SETENV} SCRIPTSDIR=${SCRIPTSDIR} WRKDIR=${WRKDIR} \ + ${SH} ${SCRIPTSDIR}/electron-create-mtree.sh $${dir} >> \ + ${WRKDIR}/node-modules-cache.mtree; \ + done; \ + ${SETENV} LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 \ + ${TAR} -cz --options 'gzip:!timestamp' \ + -f ${DISTDIR}/${DIST_SUBDIR}/${_DISTFILE_prefetch} \ + -C ${WRKDIR} @node-modules-cache.mtree; \ + if [ ${TMPDIR} != ${WRKDIR} ]; then \ + ${RM} -r ${WRKDIR}; \ + fi; \ + fi +. elif ${_NODEJS_NPM:Myarn*} + @if [ -d ${WRKDIR}/node-modules-cache ]; then \ + ${ECHO_MSG} "===> Archiving prefetched node modules"; \ + cd ${WRKDIR}/node-modules-cache && \ + ${SETENV} SCRIPTSDIR=${SCRIPTSDIR} WRKDIR=${WRKDIR} \ + ${SH} ${SCRIPTSDIR}/electron-create-mtree.sh ${NPM_MODULE_CACHE} > \ + node-modules-cache.mtree && \ + ${SETENV} LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 \ + ${TAR} -cz --options 'gzip:!timestamp' \ + -f ${DISTDIR}/${DIST_SUBDIR}/${_DISTFILE_prefetch} @node-modules-cache.mtree; \ + if [ ${TMPDIR} != ${WRKDIR} ]; then \ + ${RM} -r ${WRKDIR}; \ + fi; \ + fi +. endif +. endif # _FEATURE_ELECTRON_PREFETCH + +# When extract feature is used, installs the prefetched node modules into the +# port's working source directory. +. if defined(_ELECTRON_FEATURE_EXTRACT) +_USES_extract+= 600:electron-extract-node-package-manager \ + 601:electron-copy-package-file \ + 602:electron-install-node-modules + +. if ${_NODEJS_NPM} == yarn1 +EXTRACT_DEPENDS+= ${_NPM_PKGNAME}>0:${_NPM_PORTDIR} +. elif ${_NODEJS_NPM} == yarn2 || ${_NODEJS_NPM} == yarn4 || ${_NODEJS_NPM} == pnpm +EXTRACT_DEPENDS+= ${_NODEJS_PKGNAME}>0:${_NODEJS_PORT} +. endif + +electron-extract-node-package-manager: +. if ${_NODEJS_NPM} == yarn2 || ${_NODEJS_NPM} == yarn4 || ${_NODEJS_NPM} == pnpm + @${ECHO_MSG} "===> Setting up ${NPM_CMDNAME} version ${NPM_VER}" + @${MKDIR} ${WRKDIR}/.bin + @${SETENV} ${MAKE_ENV} corepack enable --install-directory ${WRKDIR}/.bin + @${SETENV} ${MAKE_ENV} corepack install -g ${DISTDIR}/${DIST_SUBDIR}/${NPM_CMDNAME}-${NPM_VER}.tgz +. else + @${DO_NADA} +. endif + +electron-copy-package-file: +. if ${_EXISTS_NPM_PKGFILE} == 1 + @${ECHO_MSG} "===> Copying ${NPM_PKGFILE} and ${NPM_LOCKFILE} to ${NPM_EXTRACT_WRKSRC}" + @for f in `${FIND} ${PKGJSONSDIR} -type f \( -name ${NPM_PKGFILE} -o -name ${NPM_LOCKFILE} \) -print | ${SED} -e 's|${PKGJSONSDIR}/||'`; do \ + ${MKDIR} -p `${DIRNAME} ${NPM_EXTRACT_WRKSRC}/$${f}`; \ + if [ -f ${NPM_EXTRACT_WRKSRC}/$${f} ]; then \ + ${MV} -f ${NPM_EXTRACT_WRKSRC}/$${f} ${NPM_EXTRACT_WRKSRC}/$${f}.bak; \ + fi; \ + ${CP} ${PKGJSONSDIR}/$${f} ${NPM_EXTRACT_WRKSRC}/$${f}; \ + done +. endif + +electron-install-node-modules: +. if ${_NODEJS_NPM} == npm || ${_NODEJS_NPM} == pnpm + @${ECHO_MSG} "===> Moving prefetched node modules to ${NPM_EXTRACT_WRKSRC}" + @if [ -d ${EXTRACT_WRKDIR}/node-modules-cache ]; then \ + for dir in `${FIND} -s ${EXTRACT_WRKDIR}/node-modules-cache -type d -name ${NPM_MODULE_CACHE} -print | \ + ${GREP} -ve '${NPM_MODULE_CACHE}/.*/${NPM_MODULE_CACHE}'`; do \ + ${MV} $${dir} `${ECHO_CMD} $${dir} | sed -e 's|${EXTRACT_WRKDIR}/node-modules-cache|${NPM_EXTRACT_WRKSRC}|'`; \ + done; \ + fi +. elif ${_NODEJS_NPM:Myarn*} + @${ECHO_MSG} "===> Installing node modules from prefetched cache" + @if [ -d ${EXTRACT_WRKDIR}/${NPM_MODULE_CACHE} ]; then \ + ${MV} ${EXTRACT_WRKDIR}/${NPM_MODULE_CACHE} ${NPM_EXTRACT_WRKSRC}; \ + fi + @cd ${NPM_EXTRACT_WRKSRC} && ${SETENV} ${MAKE_ENV} ${NPM_CACHE_SETUP_CMD} +. if defined(NPM_EXTRACT_SETUP_CMD) && !empty(NPM_EXTRACT_SETUP_CMD) + @${ECHO_MSG} "===> Setting up ${NPM_CMDNAME} command options" + @cd ${NPM_EXTRACT_WRKSRC} && ${SETENV} ${MAKE_ENV} ${NPM_EXTRACT_SETUP_CMD} +. endif + @if [ -d ${PKGJSONSDIR} ]; then \ + cd ${PKGJSONSDIR} && \ + for dir in `${FIND} . -type f -name ${NPM_LOCKFILE} -exec ${DIRNAME} {} ';'`; do \ + cd ${NPM_EXTRACT_WRKSRC}/$${dir} && \ + ${SETENV} ${MAKE_ENV} ${NPM_EXTRACT_CMD} ${NPM_EXTRACT_FLAGS}; \ + done; \ + else \ + cd ${NPM_EXTRACT_WRKSRC} && \ + ${SETENV} ${MAKE_ENV} ${NPM_EXTRACT_CMD} ${NPM_EXTRACT_FLAGS}; \ + fi +. endif +. endif # _ELECTRON_FEATURE_EXTRACT + +# Always generate distribution zip files from installed electron package +# directory. This is necessary to prevent the build phase from downloading +# binary distribution files from GitHub. +_USES_build+= 290:electron-generate-electron-zip + +BUILD_DEPENDS+= zip:archivers/zip +. if ${_NODEJS_NPM} == npm +BUILD_DEPENDS+= ${JQ_CMD}:textproc/jq +. elif ${_NODEJS_NPM} == yarn2 || ${_NODEJS_NPM} == yarn4 || ${_NODEJS_NPM} == pnpm +BUILD_DEPENDS+= ${YQ_CMD}:textproc/yq +. endif + +. if !defined(UPSTREAM_ELECTRON_VER) +. if ${_EXISTS_NPM_PKGFILE} == 1 +. if ${_NODEJS_NPM} == npm && exists(${JQ_CMD}) +UPSTREAM_ELECTRON_VER!= ${JQ_CMD} -r \ + '.packages | \ + to_entries | \ + map(if(.key | test("electron$$")) then .value.version else empty end) | \ + .[]' ${PKGJSONSDIR}/${NPM_LOCKFILE} | \ + ${SORT} -n | \ + ${TAIL} -n 1 +. elif ${_NODEJS_NPM} == yarn1 +UPSTREAM_ELECTRON_VER!= ${GREP} -e 'resolved.*/electron/' ${PKGJSONSDIR}/${NPM_LOCKFILE} | \ + ${AWK} -F- '{print $$NF}' | \ + ${SED} -E 's/\.[a-z]+.*$$//' | \ + ${SORT} -n | \ + ${TAIL} -n 1 +. elif (${_NODEJS_NPM} == yarn2 || ${_NODEJS_NPM} == yarn4) && exists(${YQ_CMD}) +UPSTREAM_ELECTRON_VER!= ${YQ_CMD} -r \ + '. | \ + to_entries | \ + map(if(.key | test("^electron@")) then .value.version else empty end) | \ + .[]' ${PKGJSONSDIR}/${NPM_LOCKFILE} | \ + ${SORT} -n | \ + ${TAIL} -n 1 +. elif ${_NODEJS_NPM} == pnpm && exists(${YQ_CMD}) +UPSTREAM_ELECTRON_VER!= ${YQ_CMD} -r \ + '.packages | \ + to_entries | \ + map(if(.key | test("^electron@")) then .key else empty end) | \ + .[]' ${PKGJSONSDIR}/${NPM_LOCKFILE} | \ + ${CUT} -f 2 -d '@' | \ + ${SORT} -n | \ + ${TAIL} -n 1 +. endif +. endif +. endif +ELECTRON_DOWNLOAD_URL= ${_ELECTRON_DOWNLOAD_URL_BASE}/v${UPSTREAM_ELECTRON_VER} +ELECTRON_DOWNLOAD_URL_HASH!= ${SHA256} -q -s ${ELECTRON_DOWNLOAD_URL} +ELECTRON_DOWNLOAD_CACHE_DIR= .cache/electron/${ELECTRON_DOWNLOAD_URL_HASH} + +. if !defined(UPSTREAM_CHROMEDRIVER_VER) +. if ${_EXISTS_NPM_PKGFILE} == 1 +UPSTREAM_CHROMEDRIVER_VER!= ${GREP} -e 'resolved.*/electron-chromedriver/' ${PKGJSONSDIR}/${NPM_LOCKFILE} | \ + ${HEAD} -n 1 | ${AWK} -F- '{print $$NF}' | ${SED} -E 's/\.[a-z]+.*$$//' +. endif +. endif +CHROMEDRIVER_DOWNLOAD_URL= ${_ELECTRON_DOWNLOAD_URL_BASE}/v${UPSTREAM_CHROMEDRIVER_VER} +CHROMEDRIVER_DOWNLOAD_URL_HASH!=${SHA256} -q -s ${CHROMEDRIVER_DOWNLOAD_URL} +CHROMEDRIVER_DOWNLOAD_CACHE_DIR=.cache/electron/${CHROMEDRIVER_DOWNLOAD_URL_HASH} + +. if !defined(UPSTREAM_MKSNAPSHOT_VER) +. if ${_EXISTS_NPM_PKGFILE} == 1 +UPSTREAM_MKSNAPSHOT_VER!= ${GREP} -e 'resolved.*/electron-mksnapshot/' ${PKGJSONSDIR}/${NPM_LOCKFILE} | \ + ${HEAD} -n 1 | ${AWK} -F- '{print $$NF}' | ${SED} -E 's/\.[a-z]+.*$$//' +. endif +. endif +MKSNAPSHOT_DOWNLOAD_URL= ${_ELECTRON_DOWNLOAD_URL_BASE}/v${UPSTREAM_MKSNAPSHOT_VER} +MKSNAPSHOT_DOWNLOAD_URL_HASH!= ${SHA256} -q -s ${MKSNAPSHOT_DOWNLOAD_URL} +MKSNAPSHOT_DOWNLOAD_CACHE_DIR= .cache/electron/${MKSNAPSHOT_DOWNLOAD_URL_HASH} + +electron-generate-electron-zip: + @if [ -d ${LOCALBASE}/share/electron${ELECTRON_VER_MAJOR} ]; then \ + ${ECHO_MSG} "===> Preparing distribution files of electron/chromedriver/mksnapshot"; \ + ${RM} -r ${WRKDIR}/electron-dist; \ + ${MKDIR} ${WRKDIR}/electron-dist; \ + ${TAR} -cf - -C ${LOCALBASE}/share/electron${ELECTRON_VER_MAJOR} . | \ + ${TAR} -xf - -C ${WRKDIR}/electron-dist; \ + cd ${WRKDIR}/electron-dist && \ + ${FIND} . -type f -perm ${BINMODE} -exec ${CHMOD} 755 {} ';'; \ + ${MKDIR} ${WRKDIR}/${ELECTRON_DOWNLOAD_CACHE_DIR}; \ + cd ${WRKDIR}/electron-dist && \ + zip -q -r ${WRKDIR}/${ELECTRON_DOWNLOAD_CACHE_DIR}/electron-v${UPSTREAM_ELECTRON_VER}-linux-${ELECTRON_ARCH}.zip .; \ + cd ${WRKDIR}/${ELECTRON_DOWNLOAD_CACHE_DIR} && \ + ${SHA256} -r *.zip | \ + ${SED} -e 's/ / */' > SHASUMS256.txt-${UPSTREAM_ELECTRON_VER}; \ + cd ${WRKDIR}/${ELECTRON_DOWNLOAD_CACHE_DIR} && \ + ${SHA256} -r *.zip | \ + ${SED} -e 's/ / */' > SHASUMS256.txt; \ + fi +. if defined(UPSTREAM_CHROMEDRIVER_VER) && !empty(UPSTREAM_CHROMEDRIVER_VER) + @if [ -d ${LOCALBASE}/share/electron${ELECTRON_VER_MAJOR} ]; then \ + ${MKDIR} ${WRKDIR}/${CHROMEDRIVER_DOWNLOAD_CACHE_DIR}; \ + cd ${WRKDIR}/electron-dist && \ + zip -q -r ${WRKDIR}/${CHROMEDRIVER_DOWNLOAD_CACHE_DIR}/chromedriver-v${UPSTREAM_CHROMEDRIVER_VER}-freebsd-${ELECTRON_ARCH}.zip .; \ + cd ${WRKDIR}/${CHROMEDRIVER_DOWNLOAD_CACHE_DIR} && \ + ${SHA256} -r *.zip | \ + ${SED} -e 's/ / */' > SHASUMS256.txt-${UPSTREAM_CHROMEDRIVER_VER}; \ + cd ${WRKDIR}/${CHROMEDRIVER_DOWNLOAD_CACHE_DIR} && \ + ${SHA256} -r *.zip | \ + ${SED} -e 's/ / */' > SHASUMS256.txt; \ + fi +. endif +. if defined(UPSTREAM_MKSNAPSHOT_VER) && !empty(UPSTREAM_MKSNAPSHOT_VER) + @if [ -d ${LOCALBASE}/share/electron${ELECTRON_VER_MAJOR} ]; then \ + ${MKDIR} ${WRKDIR}/${MKSNAPSHOT_DOWNLOAD_CACHE_DIR}; \ + cd ${WRKDIR}/electron-dist && \ + zip -q -r ${WRKDIR}/${MKSNAPSHOT_DOWNLOAD_CACHE_DIR}/mksnapshot-v${UPSTREAM_MKSNAPSHOT_VER}-freebsd-${ELECTRON_ARCH}.zip .; \ + cd ${WRKDIR}/${MKSNAPSHOT_DOWNLOAD_CACHE_DIR} && \ + ${SHA256} -r *.zip | \ + ${SED} -e 's/ / */' > SHASUMS256.txt-${UPSTREAM_MKSNAPSHOT_VER}; \ + cd ${WRKDIR}/${MKSNAPSHOT_DOWNLOAD_CACHE_DIR} && \ + ${SHA256} -r *.zip | \ + ${SED} -e 's/ / */' > SHASUMS256.txt; \ + fi +. endif + +# When rebuild feature is used, rebuilds native node modules against nodejs or +# electron. +. if defined(_ELECTRON_FEATURE_REBUILD) +_USES_build+= 291:electron-rebuild-native-node-modules-for-node \ + 490:electron-rebuild-native-node-modules-for-electron + +. if ${_NODEJS_NPM} == npm || ${_NODEJS_NPM} == yarn1 +BUILD_DEPENDS+= ${_NPM_PKGNAME}>0:${_NPM_PORTDIR} +. elif ${_NODEJS_NPM} == yarn2 || ${_NODEJS_NPM} == yarn4 || ${_NODEJS_NPM} == pnpm +BUILD_DEPENDS+= ${_NODEJS_PKGNAME}>0:${_NODEJS_PORT} +. endif +. if ${_NODEJS_NPM} == yarn1 +# jq is needed for detecting native node modules needing build +BUILD_DEPENDS+= ${JQ_CMD}:textproc/jq +# npm is needed for executing "npm rebuild" command +BUILD_DEPENDS+= npm${NODEJS_SUFFIX}>0:www/npm${NODEJS_SUFFIX} +. endif + +electron-rebuild-native-node-modules-for-node: +. if defined(_ELECTRON_FEATURE_REBUILD_NODEJS) && \ + ${_ELECTRON_FEATURE_REBUILD_NODEJS} == yes + @${ECHO_MSG} "===> Rebuilding native node modules for nodejs" +. if ${_NODEJS_NPM} == yarn1 + @cd ${NPM_REBUILD_WRKSRC_NODEJS} && \ + ${SETENV} ${MAKE_ENV} ${NODEJS_REBUILD_ENV} npm rebuild +. else + @cd ${NPM_REBUILD_WRKSRC_NODEJS} && \ + ${SETENV} ${MAKE_ENV} ${NODEJS_REBUILD_ENV} ${NPM_CMDNAME} rebuild +. endif +. else + @${DO_NADA} +. endif + +electron-rebuild-native-node-modules-for-electron: +. if defined(_ELECTRON_FEATURE_REBUILD_ELECTRON) && \ + ${_ELECTRON_FEATURE_REBUILD_ELECTRON} == yes +. if ${_NODEJS_NPM} == pnpm + @for dir in `${APP_BUILDER_CMD} node-dep-tree --dir ${NPM_REBUILD_WRKSRC_ELECTRON} | ${JQ_CMD} -r '.[] | { dir: .dir, name: .deps[].name } | .dir + "/" + .name'`; do \ + for subdir in `${FIND} $${dir} -type f -name binding.gyp -exec ${DIRNAME} {} ';' 2> /dev/null`; do \ + cd $${subdir} && \ + ${ECHO_MSG} "===> Rebuilding native node modules for electron in $${subdir}" && \ + ${SETENV} ${MAKE_ENV} ${ELECTRON_REBUILD_ENV} ${NPM_REBUILD_CMD} ${NPM_REBUILD_FLAGS}; \ + done \ + done +. else + @for dir in `${APP_BUILDER_CMD} node-dep-tree --dir ${NPM_REBUILD_WRKSRC_ELECTRON} | ${JQ_CMD} -r '.[] | { dir: .dir, name: .deps[].name } | .dir + "/" + .name'`; do \ + for subdir in `${FIND} $${dir} -type f -name binding.gyp -exec ${DIRNAME} {} ';' 2> /dev/null`; do \ + cd $${subdir} && \ + ${ECHO_MSG} "===> Rebuilding native node modules for electron in $${subdir}" && \ + ${SETENV} ${MAKE_ENV} ${ELECTRON_REBUILD_ENV} ${NPM_EXEC_CMD} ${NPM_EXEC_FLAGS} node-gyp rebuild; \ + done \ + done +. endif +. else + @${DO_NADA} +. endif +. endif # _ELECTRON_FEATURE_REBUILD + +_USES_build+= 499:clean-up-backup-files + +clean-up-backup-files: + @${ECHO_MSG} "===> Cleaning up backup files in ${WRKSRC}" + @${FIND} ${WRKSRC} -type f \( -name '*.bak' -o -name '*.orig' \) -delete + +# When build feature is used, prepares an electron application in a +# distributable format using the specified package builder. +. if defined(_ELECTRON_FEATURE_BUILD) +ELECTRON_MAKE_FLAGS?= + +. if ${_ELECTRON_FEATURE_BUILD} == builder +ELECTRON_MAKE_CMD?= ${NPM_EXEC_CMD} ${NPM_EXEC_FLAGS} electron-builder +ELECTRON_MAKE_FLAGS+= --linux \ + --dir \ + --publish never \ + --config.npmRebuild=false \ + --config.electronVersion=${ELECTRON_VER} \ + --config.electronDist=${WRKDIR}/electron-dist +DO_MAKE_BUILD= ${SETENV} ${MAKE_ENV} ${ELECTRON_MAKE_CMD} ${ELECTRON_MAKE_FLAGS} +ELECTRON_BUILDER_APP_OUT_DIR= linux-${ARCH:S/aarch64/arm64-/:S/amd64//:S/i386/ia32-/}unpacked +. elif ${_ELECTRON_FEATURE_BUILD} == packager +ELECTRON_MAKE_CMD?= ${NPM_EXEC_CMD} ${NPM_EXEC_FLAGS} electron-packager +ELECTRON_MAKE_FLAGS+= --platform=linux \ + --no-download \ + --electron-version=${ELECTRON_VER} \ + --electron-zip-dir=${WRKDIR}/${ELECTRON_DOWNLOAD_CACHE_DIR} \ + --prune \ + --overwrite +DO_MAKE_BUILD= ${SETENV} ${MAKE_ENV} ${ELECTRON_MAKE_CMD} . ${ELECTRON_MAKE_FLAGS} +. elif ${_ELECTRON_FEATURE_BUILD} == forge +ELECTRON_MAKE_CMD?= ${NPM_EXEC_CMD} ${NPM_EXEC_FLAGS} electron-forge package +ELECTRON_MAKE_FLAGS+= --platform=linux +DO_MAKE_BUILD= ${SETENV} ${MAKE_ENV} ${ELECTRON_MAKE_CMD} ${ELECTRON_MAKE_FLAGS} +. endif +. if ${_NODEJS_NPM} == npm || ${_NODEJS_NPM} == yarn1 +ELECTRON_MAKE_CMD+= -- +. endif +ALL_TARGET= # empty +. endif + +NODEJS_REBUILD_ENV+= npm_config_nodedir=${LOCALBASE} +ELECTRON_REBUILD_ENV+= npm_config_runtime=electron +ELECTRON_REBUILD_ENV+= npm_config_target=${ELECTRON_VER} +ELECTRON_REBUILD_ENV+= npm_config_nodedir=${LOCALBASE}/share/electron${ELECTRON_VER_MAJOR}/node_headers + +MAKE_ENV+= ELECTRON_OVERRIDE_DIST_PATH=${WRKDIR}/electron-dist +MAKE_ENV+= ELECTRON_SKIP_BINARY_DOWNLOAD=1 # don't download electron binary distribution +MAKE_ENV+= PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 # don't download browser for playwright +MAKE_ENV+= PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 # don't download chromium for puppeteer +MAKE_ENV+= SASS_FORCE_BUILD=true # always rebuild native node-sass module +MAKE_ENV+= USE_SYSTEM_APP_BUILDER=true # always use system app-builder for electron-builder +MAKE_ENV+= npm_config_build_from_source=true +SUB_LIST+= ELECTRON_VER_MAJOR=${ELECTRON_VER_MAJOR} + +.endif # _INCLUDE_USES_ELECTRON_MK diff --git a/Mk/Uses/gettext-runtime.mk b/Mk/Uses/gettext-runtime.mk index 1d0f0b8900b9..1dd435df643e 100644 --- a/Mk/Uses/gettext-runtime.mk +++ b/Mk/Uses/gettext-runtime.mk @@ -14,14 +14,14 @@ gettext-runtime_ARGS= lib . endif . if ${gettext-runtime_ARGS:Mlib} -BUILD_DEPENDS+= gettext-runtime>=0.22_1:devel/gettext-runtime +BUILD_DEPENDS+= gettext-runtime>=0.26:devel/gettext-runtime LIB_DEPENDS+= libintl.so:devel/gettext-runtime . endif . if ${gettext-runtime_ARGS:Mbuild} -BUILD_DEPENDS+= gettext-runtime>=0.22_1:devel/gettext-runtime +BUILD_DEPENDS+= gettext-runtime>=0.26:devel/gettext-runtime . endif . if ${gettext-runtime_ARGS:Mrun} -RUN_DEPENDS+= gettext-runtime>=0.22_1:devel/gettext-runtime +RUN_DEPENDS+= gettext-runtime>=0.26:devel/gettext-runtime . endif .endif diff --git a/Mk/Uses/gettext-tools.mk b/Mk/Uses/gettext-tools.mk index 948a505ed8b9..a59241b30ffc 100644 --- a/Mk/Uses/gettext-tools.mk +++ b/Mk/Uses/gettext-tools.mk @@ -14,10 +14,10 @@ gettext-tools_ARGS= build . endif . if ${gettext-tools_ARGS:Mbuild} -BUILD_DEPENDS+= msgfmt:devel/gettext-tools +BUILD_DEPENDS+= gettext-tools>=0.26:devel/gettext-tools . endif . if ${gettext-tools_ARGS:Mrun} -RUN_DEPENDS+= msgfmt:devel/gettext-tools +RUN_DEPENDS+= gettext-tools>=0.26:devel/gettext-tools . endif .endif diff --git a/Mk/Uses/go.mk b/Mk/Uses/go.mk index 872546e6fd01..3d34f15508cd 100644 --- a/Mk/Uses/go.mk +++ b/Mk/Uses/go.mk @@ -3,10 +3,11 @@ # # Feature: go # Usage: USES=go -# Valid ARGS: (none), N.NN, N.NN-devel, modules, no_targets, run +# Valid ARGS: (none), N.NN+, N.NN, modules, no_targets, run # # (none) Setup GOPATH and build in GOPATH mode using default Go version. -# N.NN Specify Go version +# N.NN+ Specify minimum Go version +# N.NN Specify exact Go version (should be avoided) # modules If the upstream uses Go modules, this can be set to build # in modules-aware mode. # no_targets Indicates that Go is needed at build time as a part of @@ -83,19 +84,30 @@ _INCLUDE_USES_GO_MK= yes # When adding a version, please keep the comment in # Mk/bsd.default-versions.mk in sync. -GO_VALID_VERSIONS= 1.20 1.21 1.22 1.23 1.24 1.25 1.26-devel +GO_VALID_VERSIONS= 1.20 1.21 1.22 1.23 1.24 1.25 # Check arguments sanity -. if !empty(go_ARGS:N[1-9].[0-9][0-9]:N*-devel:Nmodules:Nno_targets:Nrun) -IGNORE= USES=go has invalid arguments: ${go_ARGS:N[1-9].[0-9][0-9]:N*-devel:Nmodules:Nno_targets:Nrun} +. if !empty(go_ARGS:N[1-9].[0-9][0-9]+:N[1-9].[0-9][0-9]:Nmodules:Nno_targets:Nrun) +IGNORE= USES=go has invalid arguments: ${go_ARGS:N[1-9].[0-9][0-9]+:N[1-9].[0-9][0-9]:Nmodules:Nno_targets:Nrun} . endif # Parse Go version -GO_VERSION= ${go_ARGS:Nmodules:Nno_targets:Nrun:C/^$/${GO_DEFAULT}/} -. if empty(GO_VALID_VERSIONS:M${GO_VERSION}) +. if !empty(go_ARGS:M*+) +GO_MIN_VERSION= ${go_ARGS:M*+:S/+//} +. for version in ${GO_VALID_VERSIONS:[-1..1]} +. if empty(GO_VERSION) +. if ${version} == ${GO_DEFAULT} || ${version} == ${GO_MIN_VERSION} +GO_VERSION:= ${version} +. endif +. endif +. endfor +. else +GO_VERSION:= ${go_ARGS:Nmodules:Nno_targets:Nrun:C/^$/${GO_DEFAULT}/} +. if empty(GO_VALID_VERSIONS:M${GO_VERSION}) IGNORE?= USES=go has invalid version number: ${GO_VERSION} +. endif . endif -GO_SUFFIX= ${GO_VERSION:S/.//:C/.*-devel/-devel/} +GO_SUFFIX= ${GO_VERSION:S/.//} GO_PORT= lang/go${GO_SUFFIX} # Settable variables diff --git a/Mk/Uses/java.mk b/Mk/Uses/java.mk index ff5d35556f0c..396c422ca526 100644 --- a/Mk/Uses/java.mk +++ b/Mk/Uses/java.mk @@ -201,7 +201,7 @@ SUB_LIST+= JAVA_OS="${JAVA_OS}" . endif # The complete list of Java versions, os and vendors supported. -__JAVA_VERSION_LIST= 8 11 17 18 19 20 21 22 23 24 +__JAVA_VERSION_LIST= 8 11 17 18 19 20 21 22 23 24 25 _JAVA_VERSION_LIST= ${__JAVA_VERSION_LIST} ${__JAVA_VERSION_LIST:S/$/+/} _JAVA_OS_LIST= native linux _JAVA_VENDOR_LIST= openjdk oracle diff --git a/Mk/Uses/kde.mk b/Mk/Uses/kde.mk index bb5b4663efc6..9072b81d1d13 100644 --- a/Mk/Uses/kde.mk +++ b/Mk/Uses/kde.mk @@ -91,7 +91,7 @@ KDE_PLASMA5_VERSION?= 5.27.12 KDE_PLASMA5_BRANCH?= stable # Current KDE Plasma desktop. -KDE_PLASMA6_VERSION?= 6.5.3 +KDE_PLASMA6_VERSION?= 6.5.4 KDE_PLASMA6_BRANCH?= stable # Legacy KDE frameworks (Qt5 based). @@ -99,13 +99,13 @@ KDE_FRAMEWORKS5_VERSION?= 5.116.0 KDE_FRAMEWORKS5_BRANCH?= stable # Current KDE Frameworks (Qt6 based). -KDE_FRAMEWORKS6_VERSION?= 6.20.0 +KDE_FRAMEWORKS6_VERSION?= 6.21.0 KDE_FRAMEWORKS6_BRANCH?= stable # Current KDE applications. Update _${PORTNAME}_PROJECT_VERSION for the following ports: # devel/kdevelop, games/libkdegames, games/libkmahjongg, graphics/kgraphviewer -KDE_APPLICATIONS6_VERSION?= 25.08.3 -KDE_APPLICATIONS6_SHLIB_VER?= 6.5.3 +KDE_APPLICATIONS6_VERSION?= 25.12.0 +KDE_APPLICATIONS6_SHLIB_VER?= 6.6.0 # G as in KDE Gear, and as in "don't make the variable name longer than required". KDE_APPLICATIONS6_SHLIB_G_VER?= ${KDE_APPLICATIONS6_VERSION} KDE_APPLICATIONS6_BRANCH?= stable diff --git a/Mk/Uses/linux.mk b/Mk/Uses/linux.mk index 99aa62704195..929310a2e744 100644 --- a/Mk/Uses/linux.mk +++ b/Mk/Uses/linux.mk @@ -37,7 +37,7 @@ linux_ARGS= ${LINUX_DEFAULT} . if ${linux_ARGS} == c7 LINUX_DIST_VER?= 7.9.2009 . elif ${linux_ARGS} == rl9 -LINUX_DIST_VER?= 9.6 +LINUX_DIST_VER?= 9.7 . else ERROR+= "Invalid Linux distribution: ${linux_ARGS}" . endif @@ -246,9 +246,12 @@ MASTER_SITES= ${MASTER_SITE_ROCKY_LINUX} MASTER_SITE_SUBDIR= ${LINUX_DIST_VER}/BaseOS/aarch64/os/Packages/:DEFAULT,aarch64 \ ${LINUX_DIST_VER}/AppStream/aarch64/os/Packages/:DEFAULT,aarch64 \ ${LINUX_DIST_VER}/BaseOS/x86_64/os/Packages/:DEFAULT,amd64 \ + ${LINUX_DIST_VER}/CRB/aarch64/os/Packages/:DEFAULT,aarch64 \ ${LINUX_DIST_VER}/AppStream/x86_64/os/Packages/:DEFAULT,amd64 \ + ${LINUX_DIST_VER}/CRB/x86_64/os/Packages/:DEFAULT,amd64 \ ${LINUX_DIST_VER}/BaseOS/source/tree/Packages/:SOURCE \ - ${LINUX_DIST_VER}/AppStream/source/tree/Packages/:SOURCE + ${LINUX_DIST_VER}/AppStream/source/tree/Packages/:SOURCE \ + ${LINUX_DIST_VER}/CRB/source/tree/Packages/:SOURCE . endif DIST_SUBDIR?= rocky . endif # ${linux_ARGS} == * diff --git a/Mk/Uses/pyqt.mk b/Mk/Uses/pyqt.mk index 54fff0299196..880221be3b56 100644 --- a/Mk/Uses/pyqt.mk +++ b/Mk/Uses/pyqt.mk @@ -108,12 +108,12 @@ MASTER_SITES_PYQTWEBENGINE= ${MASTER_SITES_PYQT${_PYQT_VERSION}WEBENGINE} # below, should have a suitable epoch appended to the version. # Qt version-agnostic components -PYQTBUILDER_VERSION= 1.19.0 +PYQTBUILDER_VERSION= 1.19.1 QSCI2_VERSION= 2.14.1 -SIP_VERSION= 6.13.1 # ,1 +SIP_VERSION= 6.15.1 # ,1 # Qt 5 components -PYQT5SIP_VERSION= 12.17.0 +PYQT5SIP_VERSION= 12.17.2 PYQT5_VERSION= 5.15.11 PYQT53D_VERSION= 5.15.7 PYQT5CHARTS_VERSION= 5.15.7 @@ -122,14 +122,14 @@ PYQT5NETWORKAUTH_VERSION= 5.15.6 PYQT5WEBENGINE_VERSION= 5.15.7 # Qt 6 components -PYQT6SIP_VERSION= 13.10.2 -PYQT6_VERSION= 6.9.1 -PYQT63D_VERSION= 6.9.0 -PYQT6CHARTS_VERSION= 6.9.0 -PYQT6DATAVIS3D_VERSION= 6.9.0 -PYQT6GRAPHS_VERSION= 6.9.0 -PYQT6NETWORKAUTH_VERSION= 6.9.0 -PYQT6WEBENGINE_VERSION= 6.9.0 +PYQT6SIP_VERSION= 13.10.3 +PYQT6_VERSION= 6.10.1 +PYQT63D_VERSION= 6.10.0 +PYQT6CHARTS_VERSION= 6.10.0 +PYQT6DATAVIS3D_VERSION= 6.10.0 +PYQT6GRAPHS_VERSION= 6.10.0 +PYQT6NETWORKAUTH_VERSION= 6.10.0 +PYQT6WEBENGINE_VERSION= 6.10.0 # Qt version-agnostic components PYQTBUILDER_DISTNAME= pyqt_builder-${PYQTBUILDER_VERSION} diff --git a/Mk/Uses/qt.mk b/Mk/Uses/qt.mk index db50d8de38ac..dfd593589aba 100644 --- a/Mk/Uses/qt.mk +++ b/Mk/Uses/qt.mk @@ -23,8 +23,8 @@ _QT_MK_INCLUDED= qt.mk # Qt versions currently supported by the framework. _QT_SUPPORTED?= 5 6 QT5_VERSION?= 5.15.18 -QT6_VERSION?= 6.9.3 -PYSIDE6_VERSION?= 6.9.3 +QT6_VERSION?= 6.10.1 +PYSIDE6_VERSION?= 6.10.1 # Support for intermediate Qt6 releases. This partially defines # _QT6_MASTER_SITE_SUBDIR and would probably be better in qt-dist.mk, @@ -257,7 +257,7 @@ qt-languageserver_PORT= devel/${_QT_RELNAME}-languageserver qt-languageserver_PATH= ${LOCALBASE}/${QT_LIBDIR_REL}/libQt6LanguageServer.a qt-lottie_PORT= graphics/${_QT_RELNAME}-lottie -qt-lottie_LIB= libQt${_QT_LIBVER}Bodymovin.so +qt-lottie_LIB= libQt${_QT_LIBVER}Lottie.so qt-linguist_PORT= devel/${_QT_RELNAME}-linguist qt-linguist_PATH= ${LOCALBASE}/${QT_BINDIR_REL}/linguist @@ -407,7 +407,7 @@ qt-virtualkeyboard_PORT= x11-toolkits/${_QT_RELNAME}-virtualkeyboard qt-virtualkeyboard_PATH= ${LOCALBASE}/${QT_PLUGINDIR_REL}/platforminputcontexts/libqtvirtualkeyboardplugin.so qt-wayland_PORT= graphics/${_QT_RELNAME}-wayland -qt-wayland_LIB= libQt${_QT_LIBVER}WaylandClient.so +qt-wayland_LIB= libQt${_QT_LIBVER}WaylandCompositor.so qt-webchannel_PORT= www/${_QT_RELNAME}-webchannel qt-webchannel_LIB= libQt${_QT_LIBVER}WebChannel.so diff --git a/Mk/Uses/samba.mk b/Mk/Uses/samba.mk index ca41232a6e6f..c9e5094fb289 100644 --- a/Mk/Uses/samba.mk +++ b/Mk/Uses/samba.mk @@ -18,7 +18,9 @@ samba_ARGS= build run IGNORE= USES=samba has invalid arguments: ${samba_ARGS:Nbuild:Nenv:Nlib:Nself:Nrun} . endif -. if ${SAMBA_DEFAULT} != 4.16 && ${SAMBA_DEFAULT} != 4.19 && ${SAMBA_DEFAULT} != 4.20 && ${SAMBA_DEFAULT} != 4.22 +_SAMBA_VALID_VERSIONS= 4.16 4.19 4.20 4.22 4.23 + +. if ${_SAMBA_VALID_VERSIONS:M${SAMBA_DEFAULT}} == "" IGNORE= Invalid version of samba: ${SAMBA_DEFAULT} . endif @@ -32,16 +34,11 @@ _SAMBA_BASE= ${PREFIX} . endif ### Directories -SAMBA_LDB_MODULESDIR_416= ${LOCALBASE}/lib/shared-modules/ldb -SAMBA_LDB_MODULESDIR_419= ${LOCALBASE}/lib/shared-modules/ldb -SAMBA_LDB_MODULESDIR_420= ${LOCALBASE}/lib/shared-modules/ldb -SAMBA_LDB_MODULESDIR_422= ${SAMBA_MODULESDIR}/ldb - SAMBA_INCLUDEDIR= ${_SAMBA_BASE}/include/samba4 SAMBA_LIBDIR= ${_SAMBA_BASE}/lib/samba4 SAMBA_MODULESDIR= ${SAMBA_LIBDIR}/modules SAMBA_IDMAP_MODULESDIR= ${SAMBA_MODULESDIR}/idmap -SAMBA_LDB_MODULESDIR= ${SAMBA_LDB_MODULESDIR_${SAMBA_SUFFIX}} +SAMBA_LDB_MODULESDIR= ${_SAMBA_BASE}/lib/shared-modules/ldb ### Port names SAMBA_PORT_416= net/samba416 @@ -63,6 +60,10 @@ SAMBA_PORT_422= net/samba422 SAMBA_TALLOC_PORT_422= devel/talloc243 SAMBA_TDB_PORT_422= databases/tdb1413 SAMBA_TEVENT_PORT_422= devel/tevent017 +SAMBA_PORT_423= net/samba423 +SAMBA_TALLOC_PORT_423= devel/talloc243 +SAMBA_TDB_PORT_423= databases/tdb1 +SAMBA_TEVENT_PORT_423= devel/tevent017 SAMBA_PORT= ${SAMBA_PORT_${SAMBA_SUFFIX}} # Only define SAMBA_LDB_PORT if SAMBA_LDB_PORT_${SAMBA_SUFFIX} is set. Samba diff --git a/Mk/Uses/xlibre-cat.mk b/Mk/Uses/xlibre-cat.mk new file mode 100644 index 000000000000..ef130bed4e1a --- /dev/null +++ b/Mk/Uses/xlibre-cat.mk @@ -0,0 +1,221 @@ +# XLibre ports categories and other things needed to build XLibre ports. +# This is intended only for ports of XLibre and related applications. +# +# Use USES=xlibre and USE_XLIBRE to depend on various XLibre components. +# +# Feature: xlibre-cat +# Usage: USES=xlibre-cat:category[,buildsystem] +# +# category is one of: +# * driver depends on xorgproto at least +# +# Bleow are the old freedesktop.org categories and their comments +# XLibre only hosts the driver category and the xserver, these +# categoryes are disabled now, but kept in a commented state for +# if they be added to XLibre in the future. +# +# * app Installs applications, no shared libraries. +# * data Installs only data. +# * doc no particular notes +# * font don't install .pc file +# * lib various dependencies, install .pc file, needs +# pathfix +# * proto install .pc file, needs pathfix, most only needed at +# build time. +# * util no particular notes +# +# These categories has to match upstream categories. Don't invent +# your own. +# +# builsystem is one of: +# * autotools (default) +# * meson (experimental) +# +# +# +#.MAINTAINER: b-aazbsd@proton.me + +.if !defined(_INCLUDE_USES_XLIBRE_CAT_MK) +_INCLUDE_USES_XLIBRE_CAT_MK=yes + +#_XLIBRE_CATEGORIES= app data doc driver font lib proto util +_XLIBRE_CATEGORIES= driver server +_XLIBRE_BUILDSYSTEMS= autotools meson + +_XLIBRE_CAT= # empty +_XLIBRE_BUILDSYS= # empty + +. if empty(xlibre-cat_ARGS) +IGNORE= no arguments specified to xlibre-cat +. endif + +. for _arg in ${xlibre-cat_ARGS} +. if ${_XLIBRE_CATEGORIES:M${_arg}} +. if empty(_XLIBRE_CAT) +_XLIBRE_CAT= ${_arg} +. else +IGNORE= multipe xlibre categories specified via xlibre-cat:${xlibre-cat_ARGS:ts,} +. endif +. elif ${_XLIBRE_BUILDSYSTEMS:M${_arg}} +. if empty(_XLIBRE_BUILDSYS) +_XLIBRE_BUILDSYS= ${_arg} +. else +IGNORE= multipe xlibre build systems specified via xlibre-cat:${xlibre-cat_ARGS:ts,} +. endif +. else +IGNORE= unknown argument specified via xlibre-cat:${xlibre-cat_ARGS:ts,} +. endif +. endfor + +. if ${_XLIBRE_CAT} == server +. if ${_XLIBRE_BUILDSYS} == autotools +IGNORE= autotools build systems specified for the servers via xlibre-cat:${xlibre-cat_ARGS:ts,}, they only support meson. +. endif +_XLIBRE_BUILDSYS= meson +. endif + +# Default to the autotools build system +. if empty(_XLIBRE_BUILDSYS) +_XLIBRE_BUILDSYS= autotools +. endif + +# Default variables, common to all new modular xorg ports. +. if empty(USES:Mtar) +EXTRACT_SUFX?= .tar.bz2 +. endif + +DIST_SUBDIR= xlibre/${_XLIBRE_CAT} +# Do not set the DIST_SUBDIR to xlibre for XLibre flavors of 3rd party ports. +. if !empty(PKGNAMEPREFIX) && ${PKGNAMEPREFIX} == xlibre- && ${_XLIBRE_CAT} == driver +DIST_SUBDIR= xorg/${_XLIBRE_CAT} +. endif + +. if ${_XLIBRE_BUILDSYS} == meson +.include "${USESDIR}/meson.mk" +. elif ${_XLIBRE_BUILDSYS} == autotools +GNU_CONFIGURE= yes +. else +# This should not happen +IGNORE= unknown build system specified via xlibre-cat:${xlibre-cat_ARGS:ts,} +. endif + +# Set up things for fetching from XLibre GitHub. +# This can be overridden using normal GH_* macros in the ports Makefile. +# We make a best guess for GH_PROJECT. +USE_GITHUB?= yes +GH_ACCOUNT?= X11Libre + +# Do not set the GitHub upstream for XLibre flavors of 3rd party ports. +. if empty(PKGNAMEPREFIX) || ${PKGNAMEPREFIX} != xlibre- +. if ${_XLIBRE_CAT} == driver +# Removes the xlibre- suffix from the PORTNAME +GH_PROJECT?= ${PORTNAME:tl:C/xlibre-//} +GH_TAGNAME?= ${PORTNAME}-${PORTVERSION} +. elif ${_XLIBRE_CAT} == server +GH_PROJECT?= xserver +GH_TAGNAME?= xlibre-xserver-${PORTVERSION} +. else +GH_PROJECT?= ${PORTNAME:tl} +. endif +. endif + +. if ${_XLIBRE_BUILDSYS} == meson +# Set up meson stuff here +. else +# Things from GitHub doesn't come with pre-generated configure, add dependency +# on autoreconf and run it, if we're using autotools. +.include "${USESDIR}/autoreconf.mk" +. endif + +# +# All xlibre ports needs pkgconfig to build, but some ports look for pkgconfig +# and then continue the build. +# +.include "${USESDIR}/pkgconfig.mk" + +# +# All xlibre ports need xorg-macros except for the server. +# +. if ${PORTNAME} != xorg-macros && ${_XLIBRE_CAT} != server +USE_XLIBRE+= xlibre-macros +. endif + +#. if ${_XLIBRE_CAT} == app +# Nothing at the moment +# +#. elif ${_XLIBRE_CAT} == data +# Nothing at the moment. +# +#. elif ${_XLIBRE_CAT} == driver + +. if ${_XLIBRE_CAT} == driver +.include "../../x11-servers/xlibre-server/Makefile.version" +MODULEDIR=lib/xorg/modules/xlibre-${XLIBRE_MJR_VER} +USE_XLIBRE+= xlibre-server +USE_XORG+= xi xorgproto +CFLAGS+= -Werror=uninitialized +. if ${_XLIBRE_BUILDSYS} == meson +# Put special stuff for meson here +. else +CONFIGURE_ENV+= PKG_CONFIG_PATH=${PREFIX}/libdata/pkgconfig/ \ + DRIVER_MAN_SUFFIX=4x DRIVER_MAN_DIR='$$(mandir)/man4' +AUTORECONF_ARGS+= -I ${PREFIX}/share/aclocal +libtool_ARGS?= # empty +.include "${USESDIR}/libtool.mk" +INSTALL_TARGET= install-strip +. endif + +. elif ${_XLIBRE_CAT} == server +# For common flags across servers. + +# XLibre does not (yet) host any category other than drivers and the server so +# there is no need to check for them. + +#. elif ${_XLIBRE_CAT} == font +#FONTNAME?= ${PORTNAME:C/.*-//g:S/type/Type/:S/ttf/TTF/:S/speedo/Speedo/} +#. if ${_XLIBRE_BUILDSYS} == meson +# Put special stuff for meson here +#. else +#CONFIGURE_ARGS+= --with-fontrootdir=${PREFIX}/share/fonts +#CONFIGURE_ENV+= FONTROOTDIR=${PREFIX}/share/fonts +#. endif +#. if !defined(NOFONT) +#.include "${USESDIR}/fonts.mk" +#BUILD_DEPENDS+= mkfontscale>=0:x11-fonts/mkfontscale \ +# bdftopcf:x11-fonts/bdftopcf +#PLIST_FILES+= "@comment ${FONTSDIR}/fonts.dir" \ +# "@comment ${FONTSDIR}/fonts.scale" +#. endif +# +#. elif ${_XLIBRE_CAT} == lib +#CFLAGS+= -Werror=uninitialized +#.include "${USESDIR}/pathfix.mk" +#. if ${_XLIBRE_BUILDSYS} == meson +# put meson stuff here +#. else +#libtool_ARGS?= # empty +#.include "${USESDIR}/libtool.mk" +#USE_LDCONFIG= yes +#CONFIGURE_ARGS+=--enable-malloc0returnsnull +#. endif +# +#. elif ${_XLIBRE_CAT} == proto +#.include "${USESDIR}/pathfix.mk" +# + +. endif # ${_XLIBRE_CAT} == <category> + +# We only need to include xorg.mk if we want USE_XORG modules +# USES+=xorg does not provide any functionality, it just silences an error +# message about USES=xorg not being set +. if defined(USE_XORG) && !empty(USE_XORG) +USES+= xorg +.include "${USESDIR}/xorg.mk" +. endif + +. if defined(USE_XLIBRE) && !empty(USE_XLIBRE) +USES+= xlibre +.include "${USESDIR}/xlibre.mk" +. endif + +.endif diff --git a/Mk/Uses/xlibre.mk b/Mk/Uses/xlibre.mk new file mode 100644 index 000000000000..3f8949a8a88c --- /dev/null +++ b/Mk/Uses/xlibre.mk @@ -0,0 +1,69 @@ +# Originally from xorg.mk +# +# Feature: xlibre +# Usage: USES=xlibre +# USE_XLIBRE=<component> +# +# Not specifying USE_XLIBRE with USES=xlibre is an error. +# +# Components can be found in the XLIBRE_MODULES list below. +# +# +# If you feel something is missing from the list, please let us know. +# +# MAINTAINER: b-aazbsd@proton.me + +.if !defined(_INCLUDE_USES_XLIBRE_MK) +_INCLUDE_USES_XLIBRE_MK= yes +_USES_POST+= xlibre +.endif + +# Set up things after bsd.port.post.mk. +# This way ports can add things to USE_XLIBRE even after bsd.port.pre.mk is +# included. +.if defined(_POSTMKINCLUDED) && !defined(_INCLUDE_USES_XLIBRE_POST_MK) +_INCLUDE_USES_XLIBRE_POST_MK= yes + +. if !empty(xlibre_ARGS) +IGNORE= USES=xlibre takes no arguments +. endif + +. if !defined(USE_XLIBRE) +IGNORE= need to specify xlibre modules with USE_XLIBRE +. endif + +# List of xlibre modules +XLIBRE_MODULES= xlibre-server \ + xlibre-macros + +# Register all xlibre .pc files here. +# foo_LIB_PC_DEPENDS means it should go to BUILD_DEPENDS *and* RUN_DEPENDS. +xlibre-server_LIB_PC_DEPENDS= ${PREFIX}/libdata/pkgconfig/xorg-server.pc:x11-servers/xlibre-server +xlibre-server_CONFLICTS= xorg-server +xlibre-macros_BUILD_DEPENDS= ${PREFIX}/libdata/pkgconfig/xorg-macros.pc:devel/xorg-macros + +# Add explicit X options to avoid problems with false positives in configure +. if defined(GNU_CONFIGURE) +CONFIGURE_ARGS+=--x-libraries=${PREFIX}/lib --x-includes=${PREFIX}/include +. endif + +. for _module in ${USE_XLIBRE:M*\:both:C/\:.*//g} +. if ${XLIBRE_MODULES:M${_module}} == "" +IGNORE= requires unknown xlibre module (${_module}) +. endif +RUN_DEPENDS+= ${${_module}_BUILD_DEPENDS} +. endfor + +. for _module in ${USE_XLIBRE:C/\:both$//g} +. if ${XLIBRE_MODULES:M${_module}} == "" +IGNORE= requires unknown xlibre module (${_module}) +. endif +LIB_PC_DEPENDS+=${${_module}_LIB_PC_DEPENDS} +BUILD_DEPENDS+= ${${_module}_BUILD_DEPENDS} +CONFLICTS+= ${${_module}_CONFLICTS} +. endfor + +RUN_DEPENDS+= ${LIB_PC_DEPENDS} +BUILD_DEPENDS+= ${LIB_PC_DEPENDS} + +.endif diff --git a/Mk/bsd.default-versions.mk b/Mk/bsd.default-versions.mk index 0a2adc2a359c..70410f8c4de9 100644 --- a/Mk/bsd.default-versions.mk +++ b/Mk/bsd.default-versions.mk @@ -58,7 +58,7 @@ FPC_DEFAULT?= 3.2.3 . endif # Possible values: 12, 13, 14, 15, 16 # (Any other version is completely unsupported and not meant for general use.) -GCC_DEFAULT?= 13 +GCC_DEFAULT?= 14 # Possible values: 10 GHOSTSCRIPT_DEFAULT?= 10 # Possible values: mesa-libs, mesa-devel @@ -148,7 +148,7 @@ PYTHON2_DEFAULT?= 2.7 RUBY_DEFAULT?= 3.3 # Possible values: rust, rust-nightly RUST_DEFAULT?= rust -# Possible values: 4.16, 4.19, 4.20, 4.22 +# Possible values: 4.16, 4.19, 4.20, 4.22, 4.23 SAMBA_DEFAULT?= 4.16 # When updating this, please also update the same list in ssl.mk and the checks # for USES=ssl in qa.sh! diff --git a/Mk/bsd.gecko.mk b/Mk/bsd.gecko.mk index e193f2e71858..7e69f5c27b25 100644 --- a/Mk/bsd.gecko.mk +++ b/Mk/bsd.gecko.mk @@ -77,7 +77,7 @@ ELF_FEATURES+= +wxneeded:dist/bin/${MOZILLA} +wxneeded:dist/bin/${MOZILLA}-bin BUNDLE_LIBS= yes BUILD_DEPENDS+= rust-cbindgen>=0.29.1:devel/rust-cbindgen \ - ${RUST_DEFAULT}>=1.91.0:lang/${RUST_DEFAULT} + ${RUST_DEFAULT}>=1.92.0:lang/${RUST_DEFAULT} LIB_DEPENDS+= libdrm.so:graphics/libdrm RUN_DEPENDS+= ${LOCALBASE}/lib/libpci.so:devel/libpci LIB_DEPENDS+= libepoll-shim.so:devel/libepoll-shim |
