mirror of
https://git.freebsd.org/ports.git
synced 2026-06-02 11:08:52 +00:00
Mk/Uses: Add electron.mk and companion scripts
electron.mk and companion scripts for making it easier to port Electron-based applications. The electron.mk addresses the following obstacles in porting: - Need to adapt to different node package managers used in a project (npm, yarn, and pnpm) Different package managers have different commands and options. With electron.mk, porters don't have to worry about those differences using USE_ELECTRON=npm feature. - Need to create an archive of necessary node modules and host the file somewhere online An Electron-based project usually needs to install node modules using "npm install" command during the build phase. We can't allow this because "npm install" involves network access. So we had to pre-generate an archive of necessary node modules and host it somewhere online. electron.mk eliminates the necessity by locally generating the archive of the node modules on-the-fly at a host building the port during the fetch phase. - Need to adapt to different package builders used (electron-builder, electron-packager, and electron-forge) Different package builders have different commands and options. With electron.mk, porters don't have to worry about those differences using USE_ELECTRON=build feature. PR: 291321 Reviewed by: arrowd Approved by: portmgr (implicit) Differential Revision: https://reviews.freebsd.org/D54005
This commit is contained in:
@@ -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'
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user