mailarchive of the ptxdist mailing list
 help / color / mirror / Atom feed
* [ptxdist] [PATCH v2 1/3] nodejs: version bump 6.9.5 -> 12.14.1 LTS
@ 2020-01-13 10:18 Björn Esser
  2020-01-13 10:18 ` [ptxdist] [PATCH v2 2/3] host-yarn: New package Björn Esser
  2020-01-13 10:18 ` [ptxdist] [PATCH v2 3/3] nodejs_packages: " Björn Esser
  0 siblings, 2 replies; 3+ messages in thread
From: Björn Esser @ 2020-01-13 10:18 UTC (permalink / raw)
  To: ptxdist; +Cc: Björn Esser

We also need to build a host-nodejs package first, as there
are some tools needed to be executable on the host system
during the intermediate cross-build process.

This package drops support for NPM, as we will be managing
Node.js packages with Yarn, which will be implemented in the
following commits.

The patches that are shipped along with this version of the
package have been taken from the SRPM of the Node.js-package
in Fedora. See:

https://src.fedoraproject.org/rpms/nodejs/c/f0e2a1ed4615?branch=master

Signed-off-by: Björn Esser <b.esser@pengutronix.de>
---
v2: fix configure flags for host-nodejs

 rules/host-nodejs.in   |   2 +
 rules/host-nodejs.make |  41 +++++++-------
 rules/nodejs.in        |  54 +++++-------------
 rules/nodejs.make      | 121 ++++++++++++++---------------------------
 4 files changed, 76 insertions(+), 142 deletions(-)

diff --git a/rules/host-nodejs.in b/rules/host-nodejs.in
index 6ea0dd519..527e7d427 100644
--- a/rules/host-nodejs.in
+++ b/rules/host-nodejs.in
@@ -3,4 +3,6 @@
 config HOST_NODEJS
 	tristate
 	default y if ALLYES
+	select HOST_C_ARES
 	select HOST_OPENSSL
+	select HOST_ZLIB
diff --git a/rules/host-nodejs.make b/rules/host-nodejs.make
index 432cf930c..e26812c25 100644
--- a/rules/host-nodejs.make
+++ b/rules/host-nodejs.make
@@ -1,6 +1,9 @@
 # -*-makefile-*-
 #
 # Copyright (C) 2015 by Michael Grzeschik <mgr@pengutronix.de>
+# Copyright (C) 2019 by Björn Esser <bes@pengutronix.de>
+#
+# See CREDITS for details about who has contributed to this project.
 #
 # For further information about the PTXdist project and license conditions
 # see the README file.
@@ -11,32 +14,27 @@
 #
 HOST_PACKAGES-$(PTXCONF_HOST_NODEJS) += host-nodejs
 
-#
-# Paths and names
-#
-HOST_NODEJS_NPMBOX_VERSION	:= 2.6.1
-HOST_NODEJS_NPMBOX_MD5		:= 2779b99e3427cd49bbf28a236d871028
-HOST_NODEJS_NPMBOX		:= npmbox-$(HOST_NODEJS_NPMBOX_VERSION)
-HOST_NODEJS_NPMBOX_SUFFIX	:= tar.bz2
-HOST_NODEJS_NPMBOX_URL		:= http://www.pengutronix.de/software/ptxdist/temporary-src/$(HOST_NODEJS_NPMBOX).$(HOST_NODEJS_NPMBOX_SUFFIX)
-HOST_NODEJS_NPMBOX_SOURCE	:= $(SRCDIR)/$(HOST_NODEJS_NPMBOX).$(HOST_NODEJS_NPMBOX_SUFFIX)
-$(HOST_NODEJS_NPMBOX_SOURCE)	:= HOST_NODEJS_NPMBOX
-HOST_NODEJS_NPMBOX_DIR		= $(HOST_NODEJS_PKGDIR)
-HOST_NODEJS_NPMBOX_STRIP_LEVEL	:= 0
-
-HOST_NODEJS_SOURCES		+= $(HOST_NODEJS_NPMBOX_SOURCE)
+# Always run the preprocessor locally.
+HOST_NODEJS_COMPILE_ENV	:= \
+	ICECC_REMOTE_CPP=0
 
 # ----------------------------------------------------------------------------
 # Prepare
 # ----------------------------------------------------------------------------
 
-HOST_NODEJS_CONF_TOOL := autoconf
-HOST_NODEJS_CONF_OPT := \
+HOST_NODEJS_CONF_TOOL	:= autoconf
+HOST_NODEJS_CONF_OPT	:= \
 	$(HOST_AUTOCONF) \
 	--prefix=/ \
+	--no-cross-compiling \
 	--dest-os=linux \
+	--without-dtrace \
+	--without-etw \
+	--without-npm \
+	--shared \
 	--shared-openssl \
 	--shared-zlib \
+	--shared-cares \
 	--with-intl=none \
 	--without-snapshot
 
@@ -47,10 +45,13 @@ HOST_NODEJS_CONF_OPT := \
 $(STATEDIR)/host-nodejs.install:
 	@$(call targetinfo)
 	@$(call install, HOST_NODEJS)
-	@sed "1s^.*^#\!/usr/bin/env node^g" \
-		-i $(HOST_NODEJS_PKGDIR)/lib/node_modules/npm/bin/npm-cli.js
-	@$(call extract, HOST_NODEJS_NPMBOX)
-	@$(call world/patchin, HOST_NODEJS_NPMBOX)
+
+#	# Needed to cross-compile for target.
+	@install -pm 0755 $(HOST_NODEJS_DIR)/out/Release/bytecode_builtins_list_generator $(HOST_NODEJS_PKGDIR)/bin/
+	@install -pm 0755 $(HOST_NODEJS_DIR)/out/Release/mkcodecache $(HOST_NODEJS_PKGDIR)/bin/
+	@install -pm 0755 $(HOST_NODEJS_DIR)/out/Release/node_mksnapshot $(HOST_NODEJS_PKGDIR)/bin/
+	@install -pm 0755 $(HOST_NODEJS_DIR)/out/Release/torque $(HOST_NODEJS_PKGDIR)/bin/
+
 	@$(call touch)
 
 # vim: syntax=make
diff --git a/rules/nodejs.in b/rules/nodejs.in
index e4ac11568..6d23f94ef 100644
--- a/rules/nodejs.in
+++ b/rules/nodejs.in
@@ -1,48 +1,20 @@
-## SECTION=staging
-## old section:
-### SECTION=bytecode_engines
+## SECTION=bytecode_engines
 
 menuconfig NODEJS
 	tristate
-	prompt "nodejs                        "
+	prompt "Node.js                       "
 	select HOST_NODEJS
+	select C_ARES
+	select LIBUV
 	select OPENSSL
 	select ZLIB
 	help
-	  evented I/O for V8 javascript
-
-	  Node.js is a platform built on Chrome's JavaScript runtime
-	  for easily building fast, scalable network
-	  applications. Node.js uses an event-driven, non-blocking I/O
-	  model that makes it lightweight and efficient, perfect for
-	  data-intensive real-time applications that run across
-	  distributed devices.
-
-	  STAGING: remove in ptxdist-2020.06.0
-	  Old version that need to be updated. Fails to build with gcc >= 7.x.
-
-
-if NODEJS
-
-config NODEJS_NPM
-	bool
-	prompt "install npm on target"
-
-config NODEJS_MODULE_LIST
-	string
-	prompt "install nodejs packages"
-	help
-	  A list of Node.js packages including version (e.g. express@4.13.0).
-	  'ptxdist make nodejs-get' will download the packages and create a
-	  npmbox file for each package. Note: The packages are stored in
-	  local_src/ and should be part of the BSP. Downloading a package
-	  again may result in different content.
-
-config NODEJS_MODULE_MD5
-	string
-	prompt "nodejs packages md5 sums"
-	help
-	  A md5 sum for each npmbox file of the packages listed in
-	  NODEJS_MODULE_LIST.
-
-endif
+	  Node.js is an open-source, cross-platform, JavaScript runtime
+	  environment that executes JavaScript code outside of a browser.
+	  Node.js lets developers use JavaScript to write command line
+	  tools and for server-side scripting—running scripts server-side
+	  to produce dynamic web page content before the page is sent to
+	  the user's web browser. Consequently, Node.js represents a
+	  "JavaScript everywhere" paradigm, unifying web-application
+	  development around a single programming language, rather than
+	  different languages for server- and client-side scripts.
diff --git a/rules/nodejs.make b/rules/nodejs.make
index 03098b180..63f8299f0 100644
--- a/rules/nodejs.make
+++ b/rules/nodejs.make
@@ -1,6 +1,9 @@
 # -*-makefile-*-
 #
 # Copyright (C) 2015 by Michael Grzeschik <mgr@pengutronix.de>
+# Copyright (C) 2019 by Björn Esser <bes@pengutronix.de>
+#
+# See CREDITS for details about who has contributed to this project.
 #
 # For further information about the PTXdist project and license conditions
 # see the README file.
@@ -16,19 +19,24 @@ endif
 #
 # Paths and names
 #
-NODEJS_VERSION	:= v6.9.5
-NODEJS_MD5	:= a2a820b797fb69ffb259b479c7f5df32
-NODEJS		:= node-$(NODEJS_VERSION)
-NODEJS_SUFFIX	:= tar.gz
-NODEJS_URL	:= http://nodejs.org/dist/$(NODEJS_VERSION)/$(NODEJS).$(NODEJS_SUFFIX)
-NODEJS_SOURCE	:= $(SRCDIR)/$(NODEJS).$(NODEJS_SUFFIX)
-NODEJS_DIR	:= $(BUILDDIR)/$(NODEJS)
-NODEJS_LICENSE	:= unknown
-
-NODEJS_SRCDIR		:= $(PTXDIST_WORKSPACE)/local_src
-NODEJS_MODULE_LIST	:= $(call remove_quotes, $(PTXCONF_NODEJS_MODULE_LIST))
-NODEJS_NPMBOXES		:= $(foreach module,$(NODEJS_MODULE_LIST), \
-	$(addprefix $(NODEJS_SRCDIR)/,$(addsuffix .npmbox,$(module))))
+NODEJS_VERSION		:= v12.14.1
+NODEJS_MD5		:= 1c78a75f5c95321f533ecccca695e814
+NODEJS			:= node-$(NODEJS_VERSION)
+NODEJS_SUFFIX		:= tar.xz
+NODEJS_URL		:= http://nodejs.org/dist/$(NODEJS_VERSION)/$(NODEJS).$(NODEJS_SUFFIX)
+NODEJS_SOURCE		:= $(SRCDIR)/$(NODEJS).$(NODEJS_SUFFIX)
+NODEJS_DIR		:= $(BUILDDIR)/$(NODEJS)
+NODEJS_LICENSE		:= MIT
+NODEJS_LICENSE_FILES	:= \
+        file://LICENSE;md5=be4d5107c64dc3d7c57e3797e1a0674b
+
+NODEJS_HOST_TOOLS	:= \
+	bytecode_builtins_list_generator \
+	gen-regexp-special-case \
+	mkcodecache \
+	mksnapshot \
+	node_mksnapshot \
+	torque
 
 node/env = \
 	$(CROSS_ENV) \
@@ -39,47 +47,6 @@ node/env = \
 	npm_config_nodedir=$(NODEJS_DIR) \
 	$(1)
 
-# remove version number from package string
-define rmversion
-$(shell echo $(1) | sed 's-\<\([^ @]*\)@[^ @]*\>-\1-g')
-endef
-
-# ----------------------------------------------------------------------------
-# Get
-# ----------------------------------------------------------------------------
-
-nodejs-get: $(NODEJS_NPMBOXES)
-PHONY += nodejs-get
-
-$(NODEJS_SRCDIR)/%.npmbox:| $(STATEDIR)/host-nodejs.install.post
-	@$(call targetinfo)
-	mkdir -p $(NODEJS_SRCDIR)
-	cd $(NODEJS_SRCDIR) && \
-		$(call node/env, npmbox $(*) --verbose)
-
-# Map package sources and md5sums for world/check_src
-NODEJS_MODULE_MD5	:= $(call remove_quotes, $(PTXCONF_NODEJS_MODULE_MD5))
-define def_mod
-$(call rmversion,$(1))_SOURCE	:= $(addprefix $(NODEJS_SRCDIR)/,$(addsuffix .npmbox,$(1)))
-$(call rmversion,$(1))_MD5	:= $(firstword $(NODEJS_MODULE_MD5))
-NODEJS_MODULE_MD5 := $(filter-out $(firstword $(NODEJS_MODULE_MD5)),$(NODEJS_MODULE_MD5))
-endef
-$(foreach module,$(NODEJS_MODULE_LIST),$(eval $(call def_mod,$(module))))
-
-$(STATEDIR)/nodejs.get:
-	@$(call targetinfo)
-	@$(call world/get, NODEJS)
-	@$(call world/check_src, NODEJS)
-	@$(foreach npmbox,$(NODEJS_NPMBOXES), \
-		if [ ! -e $(npmbox) ]; then \
-			echo "NodeJS modules must be downloaded with 'ptxdist make nodejs-get'"; \
-			echo ; \
-			exit 1; \
-		fi;)
-	@$(foreach module,$(NODEJS_MODULE_LIST), \
-		$(call world/check_src, $(call rmversion,$(module)))$(ptx/nl))
-	@$(call touch)
-
 # ----------------------------------------------------------------------------
 # Prepare
 # ----------------------------------------------------------------------------
@@ -99,33 +66,37 @@ NODEJS_ARM_FLOAT_ABI = $(shell ptxd_cross_cc_v | sed -n "s/COLLECT_GCC_OPTIONS=.
 NODEJS_ARM_FPU = $(shell ptxd_cross_cc_v | sed -n "s/COLLECT_GCC_OPTIONS=.*'-mfpu=\([^']*\)'.*/\1/p" | tail -n1)
 endif
 
-NODEJS_CONF_TOOL := autoconf
-# Use '=' to delay $(shell ...) calls until this is needed
-NODEJS_CONF_OPT = \
+NODEJS_CONF_OPT := \
 	--prefix=/usr \
 	--dest-cpu=$(NODEJS_ARCH) \
+	--no-cross-compiling \
 	--dest-os=linux \
 	$(call ptx/ifdef,PTXCONF_ARCH_ARM,--with-arm-float-abi=$(NODEJS_ARM_FLOAT_ABI)) \
 	$(call ptx/ifdef,PTXCONF_ARCH_ARM,--with-arm-fpu=$(NODEJS_ARM_FPU)) \
 	--without-dtrace \
-	$(call ptx/ifdef,PTXCONF_NODEJS_NPM,,--without-npm) \
+	--without-etw \
+	--without-npm \
+	--shared \
+	--shared-libuv \
 	--shared-openssl \
 	--shared-zlib \
+	--shared-cares \
 	--with-intl=none \
 	--without-snapshot
 
-# ----------------------------------------------------------------------------
-# Install
-# ----------------------------------------------------------------------------
-
-$(STATEDIR)/nodejs.install:
+$(STATEDIR)/nodejs.prepare:
 	@$(call targetinfo)
-	@$(call install, NODEJS)
-	@$(foreach npmbox, $(NODEJS_NPMBOXES), \
-		cd $(NODEJS_PKGDIR)/usr/lib/ && \
-		$(call node/env, npmunbox -build-from-source $(npmbox))$(ptx/nl))
-	@$(call touch)
 
+#	# Using a patch here isn't enough, as we need absolute paths
+#	# to the pre-built host tool binaries, which are different for
+#	# each individual checkout of a BSP.  -_-
+	$(foreach f,$(NODEJS_HOST_TOOLS), \
+		$(shell sed -i -e "s#<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)$(f)<(EXECUTABLE_SUFFIX)#$(PTXDIST_SYSROOT_HOST)/bin/$(f)#" $(NODEJS_DIR)/node.gyp $(NODEJS_DIR)/tools/v8_gypfiles/v8.gyp) \
+	)
+
+	@$(call world/prepare, NODEJS)
+
+	@$(call touch)
 
 # ----------------------------------------------------------------------------
 # Target-Install
@@ -141,23 +112,11 @@ $(STATEDIR)/nodejs.targetinstall:
 	@$(call install_fixup, nodejs,DESCRIPTION,missing)
 
 	@$(call install_copy, nodejs, 0, 0, 0755, -, /usr/bin/node)
+	@$(call install_lib, nodejs, 0, 0, 0644, libnode)
 
 #	# the place node searches for packages
 	@$(call install_link, nodejs, node_modules, /usr/lib/node)
 
-ifdef PTXCONF_NODEJS_NPM
-	@$(call install_link, nodejs, ../lib/node_modules/npm/bin/npm-cli.js, /usr/bin/npm)
-	@$(call install_tree, nodejs, 0, 0, -, /usr/lib/node_modules/npm/lib/)
-	@$(call install_tree, nodejs, 0, 0, -, /usr/lib/node_modules/npm/bin)
-	@$(call install_tree, nodejs, 0, 0, -, /usr/lib/node_modules/npm/scripts)
-	@$(call install_tree, nodejs, 0, 0, -, /usr/lib/node_modules/npm/node_modules)
-	@$(call install_copy, nodejs, 0, 0, 0644, -, /usr/lib/node_modules/npm/package.json)
-endif
-
-ifneq ($(NODEJS_MODULE_LIST),)
-	@$(foreach module, $(call rmversion, $(NODEJS_MODULE_LIST)), \
-		$(call install_tree, nodejs, 0, 0, -, /usr/lib/node_modules/$(module))$(ptx/nl))
-endif
 	@$(call install_finish, nodejs)
 
 	@$(call touch)
-- 
2.25.0.rc1


_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [ptxdist] [PATCH v2 2/3] host-yarn: New package.
  2020-01-13 10:18 [ptxdist] [PATCH v2 1/3] nodejs: version bump 6.9.5 -> 12.14.1 LTS Björn Esser
@ 2020-01-13 10:18 ` Björn Esser
  2020-01-13 10:18 ` [ptxdist] [PATCH v2 3/3] nodejs_packages: " Björn Esser
  1 sibling, 0 replies; 3+ messages in thread
From: Björn Esser @ 2020-01-13 10:18 UTC (permalink / raw)
  To: ptxdist; +Cc: Björn Esser

Fast, reliable, and secure dependency management for Node.js.

We use Yarn to generate a cache and a lock-file to be able
to install all needed Node.js-packages reproducibly. This
works even in environments without internet-connectivity, as
long as the cache and the lock-file are checked-in into the
version controll system (e.g. git) of the BSP.

Signed-off-by: Björn Esser <b.esser@pengutronix.de>
---
 rules/host-yarn.in   |  6 +++++
 rules/host-yarn.make | 61 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 67 insertions(+)
 create mode 100644 rules/host-yarn.in
 create mode 100644 rules/host-yarn.make

diff --git a/rules/host-yarn.in b/rules/host-yarn.in
new file mode 100644
index 000000000..d98dd6c34
--- /dev/null
+++ b/rules/host-yarn.in
@@ -0,0 +1,6 @@
+## SECTION=hosttools_noprompt
+
+config HOST_YARN
+	tristate
+	default y if ALLYES
+	select HOST_NODEJS
diff --git a/rules/host-yarn.make b/rules/host-yarn.make
new file mode 100644
index 000000000..55a415945
--- /dev/null
+++ b/rules/host-yarn.make
@@ -0,0 +1,61 @@
+# -*-makefile-*-
+#
+# Copyright (C) 2017 by Juergen Borleis <jbe@pengutronix.de>
+#
+# See CREDITS for details about who has contributed to this project.
+#
+# For further information about the PTXdist project and license conditions
+# see the README file.
+#
+# 2019-May-05, Daniel Arnold, Updated to yarn 1.15.2
+# 2020-January-09, Björn Esser, Updated to yarn 1.21.1
+
+#
+# We provide this package
+#
+HOST_PACKAGES-$(PTXCONF_HOST_YARN) += host-yarn
+
+#
+# Paths and names
+#
+HOST_YARN_VERSION	:= 1.21.1
+HOST_YARN_MD5		:= cf49e663e0f56aa15f1740c77354ebe2
+HOST_YARN		:= yarn-$(HOST_YARN_VERSION)
+HOST_YARN_SUFFIX	:= js
+HOST_YARN_URL		:= https://github.com/yarnpkg/yarn/releases/download/v$(HOST_YARN_VERSION)/$(HOST_YARN).$(HOST_YARN_SUFFIX)
+HOST_YARN_SOURCE	:= $(SRCDIR)/$(HOST_YARN).$(HOST_YARN_SUFFIX)
+
+# ----------------------------------------------------------------------------
+# Extract (nothing to be done here)
+# ----------------------------------------------------------------------------
+
+$(STATEDIR)/host-yarn.extract:
+	@$(call targetinfo)
+	@$(call touch)
+
+# ----------------------------------------------------------------------------
+# Prepare (nothing to be done here)
+# ----------------------------------------------------------------------------
+
+$(STATEDIR)/host-yarn.prepare:
+	@$(call targetinfo)
+	@$(call touch)
+
+# ----------------------------------------------------------------------------
+# Compile (nothing to be done here)
+# ----------------------------------------------------------------------------
+
+$(STATEDIR)/host-yarn.compile:
+	@$(call targetinfo)
+	@$(call touch)
+
+# ----------------------------------------------------------------------------
+# Install
+# ----------------------------------------------------------------------------
+
+$(STATEDIR)/host-yarn.install:
+	@$(call targetinfo)
+	@install -pm 0755 $(HOST_YARN_SOURCE) $(PTXDIST_SYSROOT_HOST)/bin/yarn
+	@$(call touch)
+
+# vim: syntax=make
-- 
2.25.0.rc1


_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [ptxdist] [PATCH v2 3/3] nodejs_packages: New package.
  2020-01-13 10:18 [ptxdist] [PATCH v2 1/3] nodejs: version bump 6.9.5 -> 12.14.1 LTS Björn Esser
  2020-01-13 10:18 ` [ptxdist] [PATCH v2 2/3] host-yarn: New package Björn Esser
@ 2020-01-13 10:18 ` Björn Esser
  1 sibling, 0 replies; 3+ messages in thread
From: Björn Esser @ 2020-01-13 10:18 UTC (permalink / raw)
  To: ptxdist; +Cc: Björn Esser

This is a dummy package to specifiy and install the required
Node.js packages for the target system.

The management of the Node.js packages and their dependencies
are handled with Yarn (run through host-nodejs) to maintain
a reprocible offline cache.

The cache is stored in local_src/nodejs_packages, which must
be an existing path inside of the BSP.

Signed-off-by: Björn Esser <b.esser@pengutronix.de>
---
 rules/nodejs_packages.in   | 52 ++++++++++++++++++++++
 rules/nodejs_packages.make | 90 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 142 insertions(+)
 create mode 100644 rules/nodejs_packages.in
 create mode 100644 rules/nodejs_packages.make

diff --git a/rules/nodejs_packages.in b/rules/nodejs_packages.in
new file mode 100644
index 000000000..144fc6c7b
--- /dev/null
+++ b/rules/nodejs_packages.in
@@ -0,0 +1,52 @@
+## SECTION=bytecode_engines
+
+menuconfig NODEJS_PACKAGES
+	tristate
+	select HOST_YARN
+	select NODEJS
+	prompt "Node.js packages (target)     "
+	help
+	  Reproducibly install Node.js packages that will be available
+	  system-wide on the target.
+
+	  You MUST specify at least one Node.js package in the shown
+	  submenu after enabling this option.
+
+
+if NODEJS_PACKAGES
+
+config NODEJS_PACKAGES_LIST
+	string
+	prompt "Node.js packages to install"
+	help
+	  A white-space separated list of Node.js packages including
+	  its version (e.g. express@4.17.x). npm semvers are fully
+	  supported.
+
+	  The packages are managed with Yarn and are guaranteed to be
+	  reproducible and immutable as long as the download location
+	  stays accessible or the download-cache does not get altered.
+
+	  After downloading the packages and creating the package cache,
+	  by building this package the first time after altering the list
+	  of installed packages, it is highly recommended to commit the
+	  path: './local_src/nodejs_packages/' into the git repository
+	  and to lock the package cache.
+
+	  Also the path: './local_src/nodejs_packages/' must exist in the
+	  BSP *before* before building this package.
+
+config NODEJS_PACKAGES_OFFLINE
+	bool
+	prompt "lock package cache for offline / production use"
+	help
+	  This option locks the cache for installing the nodejs
+	  packages and performs their installation during the
+	  build of the BSP without any need for internet connectivity.
+
+	  Checking this option is highly recommended for production use.
+
+	  Do NOT forget to commit the path: './local_src/nodejs_packages/'
+	  into the BSP's git repository!
+
+endif
diff --git a/rules/nodejs_packages.make b/rules/nodejs_packages.make
new file mode 100644
index 000000000..7c044bd5c
--- /dev/null
+++ b/rules/nodejs_packages.make
@@ -0,0 +1,90 @@
+# -*-makefile-*-
+#
+# Copyright (C) 2020 by Bjoern Esser <bes@pengutronix.de>
+#
+# For further information about the PTXdist project and license conditions
+# see the README file.
+#
+
+#
+# We provide this package
+#
+PACKAGES-$(PTXCONF_NODEJS_PACKAGES) += nodejs_packages
+
+#
+# Paths and names
+#
+NODEJS_PACKAGES_VERSION	:= 0.0.1
+NODEJS_PACKAGES		:= nodejs_packages-$(NODEJS_PACKAGES_VERSION)
+NODEJS_PACKAGES_LOCAL	:= local_src/nodejs_packages
+NODEJS_PACKAGES_URL	:= lndir://$(NODEJS_PACKAGES_LOCAL)
+NODEJS_PACKAGES_DIR	:= $(BUILDDIR)/$(NODEJS_PACKAGES)
+NODEJS_PACKAGES_CACHE	:= $(PTXDIST_WORKSPACE)/$(NODEJS_PACKAGES_LOCAL)/yarn_cache
+NODEJS_PACKAGES_LICENSE	:= unknown
+
+NODEJS_PACKAGES_LIST	:= $(call remove_quotes, $(PTXCONF_NODEJS_PACKAGES_LIST))
+
+YARN_LOCK	:= $(PTXDIST_WORKSPACE)/$(NODEJS_PACKAGES_LOCAL)/yarn.lock
+YARN_OPTS	:= \
+	--cwd "$(NODEJS_PACKAGES_DIR)" \
+	--cache-folder "$(NODEJS_PACKAGES_CACHE)" \
+	--link-duplicates \
+	--production=true
+
+ifdef PTXCONF_NODEJS_PACKAGES_OFFLINE
+YARN_OPTS	+= \
+	--frozen-lockfile \
+	--offline
+endif
+
+# ----------------------------------------------------------------------------
+# Compile
+# ----------------------------------------------------------------------------
+
+$(STATEDIR)/nodejs_packages.compile:
+	@$(call targetinfo)
+	mkdir -p $(NODEJS_PACKAGES_CACHE)
+	printf "{ \
+		\"name\": \"nodejs_packages\", \
+		\"version\": \"$(NODEJS_PACKAGES_VERSION)\", \
+		\"license\": \"UNLICENSED\", \
+		\"private\": true \
+	}" > $(NODEJS_PACKAGES_DIR)/package.json
+	if [[ ! -f $(YARN_LOCK) ]]; then \
+		touch $(YARN_LOCK); \
+		ln -fs $(YARN_LOCK) $(NODEJS_PACKAGES_DIR)/yarn.lock; \
+	fi
+	yarn $(YARN_OPTS) add $(NODEJS_PACKAGES_LIST)
+	find $(NODEJS_PACKAGES_CACHE) -type f -name '.yarn-tarball.tgz' -delete
+	@$(call touch)
+
+# ----------------------------------------------------------------------------
+# Install
+# ----------------------------------------------------------------------------
+
+$(STATEDIR)/nodejs_packages.install:
+	@$(call targetinfo)
+	install -dm 0755 $(NODEJS_PACKAGES_PKGDIR)/usr/lib
+	cp -pr $(NODEJS_PACKAGES_DIR)/node_modules $(NODEJS_PACKAGES_PKGDIR)/usr/lib
+	@$(call touch)
+
+# ----------------------------------------------------------------------------
+# Target-Install
+# ----------------------------------------------------------------------------
+
+$(STATEDIR)/nodejs_packages.targetinstall:
+	@$(call targetinfo)
+
+	@$(call install_init, nodejs_packages)
+	@$(call install_fixup, nodejs_packages,PRIORITY,optional)
+	@$(call install_fixup, nodejs_packages,SECTION,base)
+	@$(call install_fixup, nodejs_packages,AUTHOR,"Bjoern Esser <bes@pengutronix.de>")
+	@$(call install_fixup, nodejs_packages,DESCRIPTION,missing)
+
+	$(call install_tree, nodejs_packages, 0, 0, -, /usr/lib/node_modules/)
+
+	@$(call install_finish, nodejs_packages)
+
+	@$(call touch)
+
+# vim: syntax=make
-- 
2.25.0.rc1


_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-01-13 10:18 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-13 10:18 [ptxdist] [PATCH v2 1/3] nodejs: version bump 6.9.5 -> 12.14.1 LTS Björn Esser
2020-01-13 10:18 ` [ptxdist] [PATCH v2 2/3] host-yarn: New package Björn Esser
2020-01-13 10:18 ` [ptxdist] [PATCH v2 3/3] nodejs_packages: " Björn Esser

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox