buildroot.busybox.net archive mirror
 help / color / mirror / Atom feed
* [Buildroot] [PATCH 0/2] Update host-nodejs and build vuejs from source
@ 2022-09-13 17:40 Thomas Claveirole
  2022-09-13 17:40 ` [Buildroot] [PATCH 1/2] package/nodejs: introduce BR2_PACKAGE_HOST_NODEJS_COREPACK Thomas Claveirole
  2022-09-13 17:40 ` [Buildroot] [PATCH 2/2] package/vuejs: bump to version 3.2.39 Thomas Claveirole
  0 siblings, 2 replies; 10+ messages in thread
From: Thomas Claveirole @ 2022-09-13 17:40 UTC (permalink / raw)
  To: buildroot; +Cc: Thomas Claveirole, Martin Bark, Johan Oudinet, Daniel Price

In order to bump vuejs, I wanted to get rid of the infamous:

VUEJS_SITE = https://registry.npmjs.org/vue/-

in vuejs.mk, and rely instead on host-nodejs to build the JavaScript
library from its source archive on GitHub.  However, it turns out
Vue.js relies on pnpm [1], another package manager...

... Fortunately, Node.js comes with Corepack [2], a transparent
wrapper that takes care of pnpm, but one has to enable it at install
time.  Hence, here is a series of two patches: one to add an option to
host-nodejs to enable and install Corepack, and one to bump vuejs to
its latest version, building it from its official source archive.

[1] https://pnpm.io/
[2] https://nodejs.org/api/corepack.html

Thomas Claveirole (2):
  package/nodejs: introduce BR2_PACKAGE_HOST_NODEJS_COREPACK
  package/vuejs: bump to version 3.2.39

 DEVELOPERS                                    |  1 +
 package/nodejs/Config.in.host                 | 23 ++++++++++++++++---
 package/nodejs/nodejs.mk                      | 21 +++++++++++++----
 ...ode-build-commit-to-v3.2.39-f79c4236.patch | 13 +++++++++++
 package/vuejs/Config.in                       |  4 ++++
 package/vuejs/vuejs.hash                      |  2 +-
 package/vuejs/vuejs.mk                        | 14 +++++++----
 7 files changed, 66 insertions(+), 12 deletions(-)
 create mode 100644 package/vuejs/0001-hardcode-build-commit-to-v3.2.39-f79c4236.patch

--
2.37.2

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

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

* [Buildroot] [PATCH 1/2] package/nodejs: introduce BR2_PACKAGE_HOST_NODEJS_COREPACK
  2022-09-13 17:40 [Buildroot] [PATCH 0/2] Update host-nodejs and build vuejs from source Thomas Claveirole
@ 2022-09-13 17:40 ` Thomas Claveirole
  2022-09-25 19:47   ` Thomas Petazzoni
  2023-04-16 19:48   ` Yann E. MORIN
  2022-09-13 17:40 ` [Buildroot] [PATCH 2/2] package/vuejs: bump to version 3.2.39 Thomas Claveirole
  1 sibling, 2 replies; 10+ messages in thread
From: Thomas Claveirole @ 2022-09-13 17:40 UTC (permalink / raw)
  To: buildroot; +Cc: Thomas Claveirole, Martin Bark, Johan Oudinet, Daniel Price

Corepack is a zero-runtime-dependency Node.js script that acts as a
bridge between Node.js projects and the package managers.  It ships
with Node.js but is disabled by default.

Some JavaScript packages, such as vuejs and vuejs-router can benefit
from having Corepack installed on the host.  Therefore, add an option
to enable Corepack with host-nodejs.

Signed-off-by: Thomas Claveirole <thomas.claveirole@green-communications.fr>
---
 package/nodejs/Config.in.host | 23 ++++++++++++++++++++---
 package/nodejs/nodejs.mk      | 21 +++++++++++++++++----
 2 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/package/nodejs/Config.in.host b/package/nodejs/Config.in.host
index 4ceaf0c73e..316a02d9d6 100644
--- a/package/nodejs/Config.in.host
+++ b/package/nodejs/Config.in.host
@@ -1,3 +1,7 @@
+comment "host nodejs needs a host gcc >= 8"
+	depends on BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS
+	depends on !BR2_HOST_GCC_AT_LEAST_8
+
 config BR2_PACKAGE_HOST_NODEJS
 	bool "host nodejs"
 	depends on BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS
@@ -13,6 +17,19 @@ config BR2_PACKAGE_HOST_NODEJS
 
 	  http://nodejs.org/
 
-comment "host nodejs needs a host gcc >= 8"
-	depends on BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS
-	depends on !BR2_HOST_GCC_AT_LEAST_8
+if BR2_PACKAGE_HOST_NODEJS
+
+config BR2_PACKAGE_HOST_NODEJS_COREPACK
+	bool "Corepack"
+	help
+	  Enable Corepack with host nodejs.
+
+	  Corepack is a zero-runtime-dependency Node.js script that
+	  acts as a bridge between Node.js projects and the package
+	  managers they are intended to be used with during
+	  development. In practical terms, Corepack will let you use
+	  Yarn and pnpm without having to install them - just like
+	  what currently happens with npm, which is shipped by Node.js
+	  by default.
+
+endif
diff --git a/package/nodejs/nodejs.mk b/package/nodejs/nodejs.mk
index 3154dcd7ec..1a95e1351f 100644
--- a/package/nodejs/nodejs.mk
+++ b/package/nodejs/nodejs.mk
@@ -117,6 +117,12 @@ define HOST_NODEJS_BUILD_CMDS
 		$(HOST_NODEJS_MAKE_OPTS)
 endef
 
+ifeq ($(BR2_PACKAGE_HOST_NODEJS_COREPACK),y)
+define HOST_NODEJS_ENABLE_COREPACK
+	$(COREPACK) enable
+endef
+endif
+
 define HOST_NODEJS_INSTALL_CMDS
 	$(HOST_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python3 \
 		$(MAKE) -C $(@D) install \
@@ -125,6 +131,7 @@ define HOST_NODEJS_INSTALL_CMDS
 	$(foreach f,$(NODEJS_HOST_TOOLS), \
 		$(INSTALL) -m755 -D $(@D)/out/Release/$(f) $(HOST_DIR)/bin/$(f)
 	)
+	$(HOST_NODEJS_ENABLE_COREPACK)
 endef
 
 ifeq ($(BR2_i386),y)
@@ -235,8 +242,7 @@ endef
 NODEJS_MODULES_LIST= $(call qstrip,\
 	$(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL))
 
-# Define NPM for other packages to use
-NPM = $(TARGET_CONFIGURE_OPTS) \
+NODEJS_BIN_ENV = $(TARGET_CONFIGURE_OPTS) \
 	LDFLAGS="$(NODEJS_LDFLAGS)" \
 	LD="$(TARGET_CXX)" \
 	npm_config_arch=$(NODEJS_CPU) \
@@ -244,8 +250,15 @@ NPM = $(TARGET_CONFIGURE_OPTS) \
 	npm_config_build_from_source=true \
 	npm_config_nodedir=$(BUILD_DIR)/nodejs-$(NODEJS_VERSION) \
 	npm_config_prefix=$(TARGET_DIR)/usr \
-	npm_config_cache=$(BUILD_DIR)/.npm-cache \
-	$(HOST_DIR)/bin/npm
+	npm_config_cache=$(BUILD_DIR)/.npm-cache
+
+# Define various packaging tools for other packages to use
+NPM = $(NODEJS_BIN_ENV) $(HOST_DIR)/bin/npm
+ifeq ($(BR2_PACKAGE_HOST_NODEJS_COREPACK),y)
+COREPACK = $(NODEJS_BIN_ENV) $(HOST_DIR)/bin/corepack
+PNPM = $(NODEJS_BIN_ENV) $(HOST_DIR)/bin/pnpm
+YARN = $(NODEJS_BIN_ENV) $(HOST_DIR)/bin/yarn
+endif
 
 #
 # We can only call NPM if there's something to install.
-- 
2.37.2

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

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

* [Buildroot] [PATCH 2/2] package/vuejs: bump to version 3.2.39
  2022-09-13 17:40 [Buildroot] [PATCH 0/2] Update host-nodejs and build vuejs from source Thomas Claveirole
  2022-09-13 17:40 ` [Buildroot] [PATCH 1/2] package/nodejs: introduce BR2_PACKAGE_HOST_NODEJS_COREPACK Thomas Claveirole
@ 2022-09-13 17:40 ` Thomas Claveirole
  1 sibling, 0 replies; 10+ messages in thread
From: Thomas Claveirole @ 2022-09-13 17:40 UTC (permalink / raw)
  To: buildroot; +Cc: Thomas Claveirole, Martin Bark, Johan Oudinet, Daniel Price

Signed-off-by: Thomas Claveirole <thomas.claveirole@green-communications.fr>
---
 DEVELOPERS                                         |  1 +
 ...hardcode-build-commit-to-v3.2.39-f79c4236.patch | 13 +++++++++++++
 package/vuejs/Config.in                            |  4 ++++
 package/vuejs/vuejs.hash                           |  2 +-
 package/vuejs/vuejs.mk                             | 14 ++++++++++----
 5 files changed, 29 insertions(+), 5 deletions(-)
 create mode 100644 package/vuejs/0001-hardcode-build-commit-to-v3.2.39-f79c4236.patch

diff --git a/DEVELOPERS b/DEVELOPERS
index a707b0e5e1..fd32716282 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -2818,6 +2818,7 @@ F:	package/x265/
 N:	Thomas Claveirole <thomas.claveirole@green-communications.fr>
 F:	package/fcgiwrap/
 F:	package/openlayers/
+F:	package/vuejs/
 F:	package/vuejs-router/
 
 N:	Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
diff --git a/package/vuejs/0001-hardcode-build-commit-to-v3.2.39-f79c4236.patch b/package/vuejs/0001-hardcode-build-commit-to-v3.2.39-f79c4236.patch
new file mode 100644
index 0000000000..11a84e5c83
--- /dev/null
+++ b/package/vuejs/0001-hardcode-build-commit-to-v3.2.39-f79c4236.patch
@@ -0,0 +1,13 @@
+diff --git a/scripts/build.js b/scripts/build.js
+index efa5d7f0..f577dc61 100644
+--- a/scripts/build.js
++++ b/scripts/build.js
+@@ -31,7 +31,7 @@ const sourceMap = args.sourcemap || args.s
+ const isRelease = args.release
+ const buildTypes = args.t || args.types || isRelease
+ const buildAllMatching = args.all || args.a
+-const commit = execa.sync('git', ['rev-parse', 'HEAD']).stdout.slice(0, 7)
++const commit = "f79c4236"
+ 
+ run()
+ 
diff --git a/package/vuejs/Config.in b/package/vuejs/Config.in
index 6456d288f9..5413de0a01 100644
--- a/package/vuejs/Config.in
+++ b/package/vuejs/Config.in
@@ -1,5 +1,9 @@
 config BR2_PACKAGE_VUEJS
 	bool "vuejs"
+	depends on BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS # host-nodejs
+	depends on BR2_HOST_GCC_AT_LEAST_8 # host-nodejs
+	select BR2_PACKAGE_HOST_NODEJS
+	select BR2_PACKAGE_HOST_NODEJS_COREPACK
 	help
 	  VueJS web application framework.
 
diff --git a/package/vuejs/vuejs.hash b/package/vuejs/vuejs.hash
index c53364e97d..5218cce0b2 100644
--- a/package/vuejs/vuejs.hash
+++ b/package/vuejs/vuejs.hash
@@ -1,3 +1,3 @@
 # Locally computed
-sha256  042033a2a8e6d45f750924953f03c34058d5afd9cc1571fbaf1827eaf04f6943  vue-3.2.33.tgz
+sha256  de7ce8e2493ac8f78f7cc0c31a4c7c3874ca9392bfa38dfb1ef5471e65adde31  vuejs-3.2.39.tar.gz
 sha256  1bb85cc9b13b81ef41c81c51866172fc345e0503c86726a6755b796590b70175  LICENSE
diff --git a/package/vuejs/vuejs.mk b/package/vuejs/vuejs.mk
index d544124bbc..3e80d5519b 100644
--- a/package/vuejs/vuejs.mk
+++ b/package/vuejs/vuejs.mk
@@ -4,15 +4,21 @@
 #
 ################################################################################
 
-VUEJS_VERSION = 3.2.33
-VUEJS_SOURCE = vue-$(VUEJS_VERSION).tgz
-VUEJS_SITE = https://registry.npmjs.org/vue/-
+VUEJS_VERSION = 3.2.39
+VUEJS_SITE = $(call github,vuejs,core,v$(VUEJS_VERSION))
 VUEJS_LICENSE = MIT
 VUEJS_LICENSE_FILES = LICENSE
 
+VUEJS_DEPENDENCIES = host-nodejs
+
+# See https://github.com/vuejs/core/blob/main/.github/contributing.md#development-setup
+define VUEJS_BUILD_CMDS
+	cd $(@D) && $(PNPM) install && $(NPM) run build -- vue -f global
+endef
+
 # Install .prod.js as .js
 define VUEJS_INSTALL_TARGET_CMDS
-	$(INSTALL) -m 644 -D $(@D)/dist/vue.global.prod.js \
+	$(INSTALL) -m 644 -D $(@D)/packages/vue/dist/vue.global.prod.js \
 		$(TARGET_DIR)/var/www/vue.js
 endef
 
-- 
2.37.2

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

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

* Re: [Buildroot] [PATCH 1/2] package/nodejs: introduce BR2_PACKAGE_HOST_NODEJS_COREPACK
  2022-09-13 17:40 ` [Buildroot] [PATCH 1/2] package/nodejs: introduce BR2_PACKAGE_HOST_NODEJS_COREPACK Thomas Claveirole
@ 2022-09-25 19:47   ` Thomas Petazzoni
  2022-09-25 19:53     ` Thomas Petazzoni
  2023-04-16 19:48   ` Yann E. MORIN
  1 sibling, 1 reply; 10+ messages in thread
From: Thomas Petazzoni @ 2022-09-25 19:47 UTC (permalink / raw)
  To: Thomas Claveirole; +Cc: Daniel Price, Martin Bark, Johan Oudinet, buildroot

On Tue, 13 Sep 2022 19:40:38 +0200
Thomas Claveirole <thomas.claveirole@green-communications.fr> wrote:

> +ifeq ($(BR2_PACKAGE_HOST_NODEJS_COREPACK),y)
> +define HOST_NODEJS_ENABLE_COREPACK
> +	$(COREPACK) enable
> +endef
> +endif

Could you explain in a bit more details what this "corepack enable"
actually does?

Indeed, I was documenting myself a little bit on pnpm, and
https://pnpm.io/installation says that "corepack enable" will
"automatically install pnpm on your system".

So is "corepack enable" download extra stuff? If so, it's not great at
all to have this executed as part of the installation step of a
package. Or is pnpm shipped as part of nodejs, and that simply installs
it?

Thanks!

Thomas
-- 
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

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

* Re: [Buildroot] [PATCH 1/2] package/nodejs: introduce BR2_PACKAGE_HOST_NODEJS_COREPACK
  2022-09-25 19:47   ` Thomas Petazzoni
@ 2022-09-25 19:53     ` Thomas Petazzoni
  2022-09-26  9:04       ` Thomas Claveirole
  0 siblings, 1 reply; 10+ messages in thread
From: Thomas Petazzoni @ 2022-09-25 19:53 UTC (permalink / raw)
  To: Thomas Claveirole; +Cc: Daniel Price, Martin Bark, Johan Oudinet, buildroot

On Sun, 25 Sep 2022 21:47:00 +0200
Thomas Petazzoni <thomas.petazzoni@bootlin.com> wrote:

> So is "corepack enable" download extra stuff? If so, it's not great at
> all to have this executed as part of the installation step of a
> package. Or is pnpm shipped as part of nodejs, and that simply installs
> it?

Replying to myself: "corepack enable" does not download stuff. I tried
in a Docker container with no network access, and it did this work,
which apparently consists in just creating a bunch of symlinks.

So that sounds good.

Thomas
-- 
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

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

* Re: [Buildroot] [PATCH 1/2] package/nodejs: introduce BR2_PACKAGE_HOST_NODEJS_COREPACK
  2022-09-25 19:53     ` Thomas Petazzoni
@ 2022-09-26  9:04       ` Thomas Claveirole
  2022-09-26 10:01         ` Thomas Petazzoni
  0 siblings, 1 reply; 10+ messages in thread
From: Thomas Claveirole @ 2022-09-26  9:04 UTC (permalink / raw)
  To: Thomas Petazzoni; +Cc: Daniel Price, Martin Bark, Johan Oudinet, buildroot


[-- Attachment #1.1: Type: text/plain, Size: 1090 bytes --]

> Replying to myself: "corepack enable" does not download stuff. [...]

It sounds good indeed.  To be honest, all this Node packaging gets a bit over 
my head and I am not sure how it works exactly (the whole JavaScript packaging 
ecosystem just looks crazy to me).  I usually just use compiled JavaScript 
files and almost never compile them myself.

I thought that using host-nodejs to compile JavaScript packages was a new 
Buildroot policy, but apparently according to [1] and [2] we prefer to stick 
to precompiled JavaScript files?  If so, I will send a v2 patch for the vuejs 
package (... when I find some time.)

[1] https://lore.kernel.org/buildroot/20220919114617.67d80b53@windsurf/
[2] https://lore.kernel.org/buildroot/20220924170516.4a0323dc@windsurf/

(As for my opinion, should it have any relevance: I also prefer that Buildroot 
relies on pre-compiled files, at least as long as it cannot do some vendoring 
for Node packages.  Downloading stuff outside of Buildroot's download system 
is quite annoying.)

-- 
Thomas Claveirole <thomas.claveirole@green-communications.fr>

[-- Attachment #1.2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

[-- Attachment #2: Type: text/plain, Size: 150 bytes --]

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

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

* Re: [Buildroot] [PATCH 1/2] package/nodejs: introduce BR2_PACKAGE_HOST_NODEJS_COREPACK
  2022-09-26  9:04       ` Thomas Claveirole
@ 2022-09-26 10:01         ` Thomas Petazzoni
  2022-09-26 10:17           ` Johan Oudinet
  0 siblings, 1 reply; 10+ messages in thread
From: Thomas Petazzoni @ 2022-09-26 10:01 UTC (permalink / raw)
  To: Thomas Claveirole; +Cc: Daniel Price, Martin Bark, Johan Oudinet, buildroot

Hello Thomas,

On Mon, 26 Sep 2022 11:04:38 +0200
Thomas Claveirole <thomas.claveirole@green-communications.fr> wrote:

> > Replying to myself: "corepack enable" does not download stuff. [...]  
> 
> It sounds good indeed.  To be honest, all this Node packaging gets a bit over 
> my head and I am not sure how it works exactly (the whole JavaScript packaging 
> ecosystem just looks crazy to me).

You're not the only one with the same feeling :-)

> I thought that using host-nodejs to compile JavaScript packages was a new 
> Buildroot policy, but apparently according to [1] and [2] we prefer to stick 
> to precompiled JavaScript files?  If so, I will send a v2 patch for the vuejs 
> package (... when I find some time.)
> 
> [1] https://lore.kernel.org/buildroot/20220919114617.67d80b53@windsurf/
> [2] https://lore.kernel.org/buildroot/20220924170516.4a0323dc@windsurf/
> 
> (As for my opinion, should it have any relevance: I also prefer that Buildroot 
> relies on pre-compiled files, at least as long as it cannot do some vendoring 
> for Node packages.  Downloading stuff outside of Buildroot's download system 
> is quite annoying.)

So, as explained in
https://lore.kernel.org/buildroot/20220919114617.67d80b53@windsurf/
(which you pointed above), if we want to build from source these JS
stuff, we need two things:

 - Be able to use a pre-built NodeJS on the host, because adding a
   dependency on building host-nodejs from source is really too heavy
   to build just a few JS files. I have submitted yesterday a RFC patch
   series that implements this.

 - Be able to vendor JS dependencies. I already started working on it,
   and it does work with npm, but my test package (forge) only
   provides a package.json to describe dependencies, so they are not
   locked and therefore not reproducible. However, it looks like many
   other packages, including vuejs, provide a pnpm-lock.yaml, which
   apparently allow a reproducible fetching of dependencies. Which is
   why I got into what pnpm is, and how to install it, and got to your
   corepack-related patch :-)

Thomas
-- 
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

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

* Re: [Buildroot] [PATCH 1/2] package/nodejs: introduce BR2_PACKAGE_HOST_NODEJS_COREPACK
  2022-09-26 10:01         ` Thomas Petazzoni
@ 2022-09-26 10:17           ` Johan Oudinet
  2022-09-26 10:24             ` Thomas Petazzoni
  0 siblings, 1 reply; 10+ messages in thread
From: Johan Oudinet @ 2022-09-26 10:17 UTC (permalink / raw)
  To: Thomas Petazzoni; +Cc: Daniel Price, Thomas Claveirole, Martin Bark, buildroot

Hi Thomas, All,

On Mon, Sep 26, 2022 at 12:01 PM Thomas Petazzoni
<thomas.petazzoni@bootlin.com> wrote:
>  - Be able to vendor JS dependencies. I already started working on it,
>    and it does work with npm, but my test package (forge) only
>    provides a package.json to describe dependencies, so they are not
>    locked and therefore not reproducible.

That's a good point. I'll report this issue to forge developers. Every
npm packages should have a package-lock.json file in their repository.

-- 
Johan
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

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

* Re: [Buildroot] [PATCH 1/2] package/nodejs: introduce BR2_PACKAGE_HOST_NODEJS_COREPACK
  2022-09-26 10:17           ` Johan Oudinet
@ 2022-09-26 10:24             ` Thomas Petazzoni
  0 siblings, 0 replies; 10+ messages in thread
From: Thomas Petazzoni @ 2022-09-26 10:24 UTC (permalink / raw)
  To: Johan Oudinet; +Cc: Daniel Price, Thomas Claveirole, Martin Bark, buildroot

On Mon, 26 Sep 2022 12:17:04 +0200
Johan Oudinet <johan.oudinet@gmail.com> wrote:

> That's a good point. I'll report this issue to forge developers. Every
> npm packages should have a package-lock.json file in their repository.

See https://github.com/digitalbazaar/forge/issues/1005.

Best regards,

Thomas
-- 
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

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

* Re: [Buildroot] [PATCH 1/2] package/nodejs: introduce BR2_PACKAGE_HOST_NODEJS_COREPACK
  2022-09-13 17:40 ` [Buildroot] [PATCH 1/2] package/nodejs: introduce BR2_PACKAGE_HOST_NODEJS_COREPACK Thomas Claveirole
  2022-09-25 19:47   ` Thomas Petazzoni
@ 2023-04-16 19:48   ` Yann E. MORIN
  1 sibling, 0 replies; 10+ messages in thread
From: Yann E. MORIN @ 2023-04-16 19:48 UTC (permalink / raw)
  To: Thomas Claveirole; +Cc: Daniel Price, Martin Bark, Johan Oudinet, buildroot

Thomas C., All,

On 2022-09-13 19:40 +0200, Thomas Claveirole spake thusly:
> Corepack is a zero-runtime-dependency Node.js script that acts as a
> bridge between Node.js projects and the package managers.  It ships
> with Node.js but is disabled by default.
> 
> Some JavaScript packages, such as vuejs and vuejs-router can benefit
> from having Corepack installed on the host.  Therefore, add an option
> to enable Corepack with host-nodejs.
> 
> Signed-off-by: Thomas Claveirole <thomas.claveirole@green-communications.fr>

My understanding of the thread, is that  this patch was introduced to be
able to build vuejs, which you bumped in the following patch.

Yet, the consensus was that we could bump vuejs and use the pre-compiled
variant, instead of needing to build host-nodejs.

However, nothing prevents us from merging the corepack feature, and
still update to the precompiled vuejs anyway.

Given the feedback from Thomas P. in the thread, I understand that
corepack is indeed working as expected, and is not actually requiring
download during the host-nodejs build itself (using it may trigger
download in the package that calls it, but that's another issue).

So, for those who perfer to always build from source at the expense of
build time (like I am), having corepack will be a useful addition.

Applied to master, thanks.

Regards,
Yann E. MORIN.

> ---
>  package/nodejs/Config.in.host | 23 ++++++++++++++++++++---
>  package/nodejs/nodejs.mk      | 21 +++++++++++++++++----
>  2 files changed, 37 insertions(+), 7 deletions(-)
> 
> diff --git a/package/nodejs/Config.in.host b/package/nodejs/Config.in.host
> index 4ceaf0c73e..316a02d9d6 100644
> --- a/package/nodejs/Config.in.host
> +++ b/package/nodejs/Config.in.host
> @@ -1,3 +1,7 @@
> +comment "host nodejs needs a host gcc >= 8"
> +	depends on BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS
> +	depends on !BR2_HOST_GCC_AT_LEAST_8
> +
>  config BR2_PACKAGE_HOST_NODEJS
>  	bool "host nodejs"
>  	depends on BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS
> @@ -13,6 +17,19 @@ config BR2_PACKAGE_HOST_NODEJS
>  
>  	  http://nodejs.org/
>  
> -comment "host nodejs needs a host gcc >= 8"
> -	depends on BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS
> -	depends on !BR2_HOST_GCC_AT_LEAST_8
> +if BR2_PACKAGE_HOST_NODEJS
> +
> +config BR2_PACKAGE_HOST_NODEJS_COREPACK
> +	bool "Corepack"
> +	help
> +	  Enable Corepack with host nodejs.
> +
> +	  Corepack is a zero-runtime-dependency Node.js script that
> +	  acts as a bridge between Node.js projects and the package
> +	  managers they are intended to be used with during
> +	  development. In practical terms, Corepack will let you use
> +	  Yarn and pnpm without having to install them - just like
> +	  what currently happens with npm, which is shipped by Node.js
> +	  by default.
> +
> +endif
> diff --git a/package/nodejs/nodejs.mk b/package/nodejs/nodejs.mk
> index 3154dcd7ec..1a95e1351f 100644
> --- a/package/nodejs/nodejs.mk
> +++ b/package/nodejs/nodejs.mk
> @@ -117,6 +117,12 @@ define HOST_NODEJS_BUILD_CMDS
>  		$(HOST_NODEJS_MAKE_OPTS)
>  endef
>  
> +ifeq ($(BR2_PACKAGE_HOST_NODEJS_COREPACK),y)
> +define HOST_NODEJS_ENABLE_COREPACK
> +	$(COREPACK) enable
> +endef
> +endif
> +
>  define HOST_NODEJS_INSTALL_CMDS
>  	$(HOST_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python3 \
>  		$(MAKE) -C $(@D) install \
> @@ -125,6 +131,7 @@ define HOST_NODEJS_INSTALL_CMDS
>  	$(foreach f,$(NODEJS_HOST_TOOLS), \
>  		$(INSTALL) -m755 -D $(@D)/out/Release/$(f) $(HOST_DIR)/bin/$(f)
>  	)
> +	$(HOST_NODEJS_ENABLE_COREPACK)
>  endef
>  
>  ifeq ($(BR2_i386),y)
> @@ -235,8 +242,7 @@ endef
>  NODEJS_MODULES_LIST= $(call qstrip,\
>  	$(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL))
>  
> -# Define NPM for other packages to use
> -NPM = $(TARGET_CONFIGURE_OPTS) \
> +NODEJS_BIN_ENV = $(TARGET_CONFIGURE_OPTS) \
>  	LDFLAGS="$(NODEJS_LDFLAGS)" \
>  	LD="$(TARGET_CXX)" \
>  	npm_config_arch=$(NODEJS_CPU) \
> @@ -244,8 +250,15 @@ NPM = $(TARGET_CONFIGURE_OPTS) \
>  	npm_config_build_from_source=true \
>  	npm_config_nodedir=$(BUILD_DIR)/nodejs-$(NODEJS_VERSION) \
>  	npm_config_prefix=$(TARGET_DIR)/usr \
> -	npm_config_cache=$(BUILD_DIR)/.npm-cache \
> -	$(HOST_DIR)/bin/npm
> +	npm_config_cache=$(BUILD_DIR)/.npm-cache
> +
> +# Define various packaging tools for other packages to use
> +NPM = $(NODEJS_BIN_ENV) $(HOST_DIR)/bin/npm
> +ifeq ($(BR2_PACKAGE_HOST_NODEJS_COREPACK),y)
> +COREPACK = $(NODEJS_BIN_ENV) $(HOST_DIR)/bin/corepack
> +PNPM = $(NODEJS_BIN_ENV) $(HOST_DIR)/bin/pnpm
> +YARN = $(NODEJS_BIN_ENV) $(HOST_DIR)/bin/yarn
> +endif
>  
>  #
>  # We can only call NPM if there's something to install.
> -- 
> 2.37.2
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

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

end of thread, other threads:[~2023-04-16 19:48 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-13 17:40 [Buildroot] [PATCH 0/2] Update host-nodejs and build vuejs from source Thomas Claveirole
2022-09-13 17:40 ` [Buildroot] [PATCH 1/2] package/nodejs: introduce BR2_PACKAGE_HOST_NODEJS_COREPACK Thomas Claveirole
2022-09-25 19:47   ` Thomas Petazzoni
2022-09-25 19:53     ` Thomas Petazzoni
2022-09-26  9:04       ` Thomas Claveirole
2022-09-26 10:01         ` Thomas Petazzoni
2022-09-26 10:17           ` Johan Oudinet
2022-09-26 10:24             ` Thomas Petazzoni
2023-04-16 19:48   ` Yann E. MORIN
2022-09-13 17:40 ` [Buildroot] [PATCH 2/2] package/vuejs: bump to version 3.2.39 Thomas Claveirole

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).