Gentoo Archives: gentoo-commits

From: Alessandro Barbieri <lssndrbarbieri@×××××.com>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/proj/guru:dev commit in: eclass/
Date: Wed, 29 Sep 2021 13:08:33
Message-Id: 1632920907.cdfa791730db5da61da7bb4df88f8fede81e7711.Alessandro-Barbieri@gentoo
1 commit: cdfa791730db5da61da7bb4df88f8fede81e7711
2 Author: Alessandro Barbieri <lssndrbarbieri <AT> gmail <DOT> com>
3 AuthorDate: Wed Sep 29 13:05:40 2021 +0000
4 Commit: Alessandro Barbieri <lssndrbarbieri <AT> gmail <DOT> com>
5 CommitDate: Wed Sep 29 13:08:27 2021 +0000
6 URL: https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=cdfa7917
7
8 node.eclass: new eclass
9
10 Signed-off-by: Alessandro Barbieri <lssndrbarbieri <AT> gmail.com>
11
12 eclass/node.eclass | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++
13 1 file changed, 135 insertions(+)
14
15 diff --git a/eclass/node.eclass b/eclass/node.eclass
16 new file mode 100644
17 index 000000000..aeff2f3c7
18 --- /dev/null
19 +++ b/eclass/node.eclass
20 @@ -0,0 +1,135 @@
21 +# Copyright 1999-2021 Gentoo Authors
22 +# Distributed under the terms of the GNU General Public License v2
23 +
24 +# @ECLASS: node.eclass
25 +# @MAINTAINER: Alessandro Barbieri
26 +# @AUTHOR:
27 +# Alessandro Barbieri
28 +# msirabella
29 +# @BLURB: Eclass used to create and maintain node based packages
30 +# @DESCRIPTION: Node eclass for nodejs' based packages
31 +
32 +EXPORT_FUNCTIONS src_prepare src_compile src_install src_test src_configure
33 +
34 +SLOT="0"
35 +PN_LEFT="${PN%%+*}"
36 +PN_RIGHT="${PN#*+}"
37 +NODEJS_DEPEND="net-libs/nodejs"
38 +NODEJS_RDEPEND="${NODEJS_DEPEND}"
39 +NODEJS_BDEPEND="
40 + app-misc/jq
41 + net-misc/rsync
42 +
43 + net-libs/nodejs[npm]
44 +"
45 +# || ( net-libs/nodejs[npm] dev-node/npm )
46 +
47 +DEPEND="${NODEJS_DEPEND}"
48 +RDEPEND="${NODEJS_RDEPEND}"
49 +BDEPEND="${NODEJS_BDEPEND}"
50 +
51 +NODE_MODULE_PREFIX="${T}/prefix"
52 +NPM="npm"
53 +#NPM_FLAGS=""
54 +
55 +case "${PN}" in
56 + *+*)
57 + SRC_URI="mirror://npm/@${PN_LEFT}/${PN_RIGHT}/-/${PN_RIGHT}-${PV}.tgz -> ${P}.tgz"
58 + ;;
59 +
60 + *)
61 + SRC_URI="mirror://npm/${PN}/-/${P}.tgz"
62 + ;;
63 +esac
64 +case "${PN}" in
65 + *types+*)
66 + S="${WORKDIR}/${PN_RIGHT}"
67 + ;;
68 +
69 + *)
70 + S="${WORKDIR}/package"
71 + ;;
72 +esac
73 +
74 +node_src_prepare() {
75 + #remove version constraints on dependencies
76 + jq 'if .dependencies? then .dependencies[] = "*" else . end' package.json > package.json.temp || die
77 + mv package.json.temp package.json || die
78 + jq 'if .devDependencies? then .devDependencies[] = "*" else . end' package.json > package.json.temp || die
79 + mv package.json.temp package.json || die
80 +
81 + #here we trick npm into believing there are no dependencies so it will not try to fetch them
82 + jq 'with_entries(if .key == "dependencies" then .key = "deps" else . end)' package.json > package.json.temp || die
83 + mv package.json.temp package.json || die
84 + jq 'with_entries(if .key == "devDependencies" then .key = "devDeps" else . end)' package.json > package.json.temp || die
85 + mv package.json.temp package.json || die
86 +
87 + # are those useful?
88 + rm -fv npm-shrinkwrap.json package-lock.json yarn.lock pnpm-lock.yaml || die
89 +
90 + #delete some trash
91 + find . -iname 'code-of-conduct*' -maxdepth 1 -exec rm -rv "{}" \; || die
92 + find . -iname 'code_of_conduct*' -maxdepth 1 -exec rm -rv "{}" \; || die
93 + find . -iname 'contributing*' -maxdepth 1 -exec rm -rv "{}" \; || die
94 + find . -iname 'contribution*' -maxdepth 1 -exec rm -rv "{}" \; || die
95 + find . -iname 'dockerfile*' -maxdepth 1 -exec rm -rv "{}" \; || die
96 + find . -iname 'issue_template*' -maxdepth 1 -exec rm -rv "{}" \; || die
97 + find . -iname 'license*' -maxdepth 1 -exec rm -rv "{}" \; || die
98 + find . -iname 'licence*' -maxdepth 1 -exec rm -rv "{}" \; || die
99 + find . -iname 'pull_request_template*' -maxdepth 1 -exec rm -rv "{}" \; || die
100 +
101 + default
102 +}
103 +
104 +node_src_configure() {
105 + export PATH="${PATH}:/opt/node-debian/usr/bin"
106 + #path to the modules
107 + export NODE_PATH="/usr/$(get_libdir)/node_modules:/opt/node-debian/usr/share/nodejs"
108 + export npm_config_prefix="${NODE_MODULE_PREFIX}"
109 + #path to the headers needed by node-gyp
110 + export npm_config_nodedir="/usr/include/node"
111 +# export npm_config_tmp="${T}"
112 +
113 + in_iuse test || export NODE_ENV="production"
114 +
115 + "${NPM}" config set offline true || die
116 + "${NPM}" config set audit false || die
117 + "${NPM}" config set fund false || die
118 +}
119 +
120 +node_src_compile() {
121 + "${NPM}" install ${NPM_FLAGS} --global || die
122 +}
123 +
124 +node_src_install() {
125 + #restore original package.json
126 + jq 'with_entries(if .key == "deps" then .key = "dependencies" else . end)' package.json > package.json.temp || die
127 + mv package.json.temp package.json || die
128 + jq 'with_entries(if .key == "devDeps" then .key = "devDependencies" else . end)' package.json > package.json.temp || die
129 + mv package.json.temp package.json || die
130 +
131 + #should I delete all the dotfiles?
132 + rm -rvf $(find . -iname ".[!.]*") || die
133 +
134 + #install some files in the docdir
135 + find . -iname "authors*" -maxdepth 1 -exec dodoc "{}" \; -exec rm "{}" \; || die
136 + find . -iname "changelog*" -maxdepth 1 -exec dodoc "{}" \; -exec rm "{}" \; || die
137 + find . -iname "changes*" -maxdepth 1 -exec dodoc "{}" \; -exec rm "{}" \; || die
138 + find . -iname "copyright*" -maxdepth 1 -exec dodoc "{}" \; -exec rm "{}" \; || die
139 + find . -iname "history*" -maxdepth 1 -exec dodoc "{}" \; -exec rm "{}" \; || die
140 + find . -iname "notice*" -maxdepth 1 -exec dodoc "{}" \; -exec rm "{}" \; || die
141 + find . -iname "readme*" -maxdepth 1 -exec dodoc "{}" \; -exec rm "{}" \; || die
142 + find . -iname "security*" -maxdepth 1 -exec dodoc "{}" \; -exec rm "{}" \; || die
143 +
144 + #copy files instead of symlinks
145 + rsync -aLAX "${NODE_MODULE_PREFIX}/" "${ED}/usr" --exclude /bin || die
146 +
147 + if [ -d "${NODE_MODULE_PREFIX}/bin" ] ; then
148 + #keep the symlinks
149 + rsync -aAX "${NODE_MODULE_PREFIX}/bin/" "${ED}/usr/bin" || die
150 + fi
151 +}
152 +
153 +node_src_test() {
154 + npm test || die
155 +}