148d55cd07024c65938e09dee4db7725276da586
[packages/nodejs.git] / nodejs.spec
1 # TODO
2 # - unpackaged files
3 #   /usr/share/doc/node/gdbinit
4
5 # Conditional build:
6 %bcond_without  system_brotli   # system brotli
7 %bcond_without  system_uv       # system uv
8 %bcond_with     http_parser     # system http-parser and llhttp
9
10 %define         _enable_debug_packages  0
11
12 # NOTES:
13 # - https://nodejs.org/en/download/releases/
14
15 # NODE_MODULE_VERSION refers to the ABI (application binary interface) version
16 # number of Node.js, used to determine which versions of Node.js compiled C++
17 # add-on binaries can be loaded in to without needing to be re-compiled. It
18 # used to be stored as hex value in earlier versions, but is now represented as
19 # an integer.
20 %define         node_module_version     83
21 Summary:        Asynchronous JavaScript Engine
22 Summary(pl.UTF-8):      Asynchroniczny silnik JavaScriptu
23 Name:           nodejs
24 # 14.x LTS - https://github.com/nodejs/Release
25 # Active start: 2020-10-27
26 # Maintenance start: October 2020
27 # Maintenance end: April 2023
28 Version:        14.15.5
29 Release:        1
30 License:        BSD and MIT and Apache v2.0 and GPL v3
31 Group:          Development/Languages
32 Source0:        https://nodejs.org/dist/v%{version}/node-v%{version}.tar.gz
33 # Source0-md5:  12c059975256114cbe983292c20ae26a
34
35 # force node to use /usr/lib/node as the systemwide module directory
36 Patch2:         %{name}-libpath.patch
37 # use /usr/lib64/node as an arch-specific module dir when appropriate
38 Patch3:         %{name}-lib64path.patch
39 Patch4:         0001-Disable-running-gyp-on-shared-deps.patch
40 Patch5:         0002-Install-both-binaries-and-use-libdir.patch
41 URL:            https://nodejs.org/
42 BuildRequires:  c-ares-devel >= 1.16.1
43 BuildRequires:  gcc >= 6:6.3
44 %if %{with http_parser}
45 BuildRequires:  http-parser-devel >= 2.9.3
46 BuildRequires:  llhttp-devel >= 2.1.3
47 %endif
48 %{?with_system_brotli:BuildRequires:    libbrotli-devel >= 1.0.9}
49 BuildRequires:  libicu-devel >= 67
50 BuildRequires:  libstdc++-devel >= 6:4.8
51 %{?with_system_uv:BuildRequires:        libuv-devel >= 1.38.1}
52 BuildRequires:  nghttp2-devel >= 1.41.0
53 BuildRequires:  openssl-devel >= 1.0.1
54 BuildRequires:  pkgconfig
55 BuildRequires:  python3
56 BuildRequires:  python3-modules
57 BuildRequires:  rpm >= 4.4.9-56
58 BuildRequires:  rpmbuild(macros) >= 1.752
59 BuildRequires:  sed >= 4.0
60 BuildRequires:  zlib-devel >= 1.2.11
61 Requires:       c-ares >= 1.16.1
62 Requires:       ca-certificates
63 %{?with_http_parser:Requires:   http-parser >= 2.9.3}
64 %{?with_system_brotli:Requires: libbrotli >= 1.0.9}
65 %{?with_system_uv:Requires:     libuv >= 1.38.1}
66 Requires:       nghttp2-libs >= 1.41.0
67 Requires:       zlib >= 1.2.11
68 Provides:       nodejs(engine) = %{version}
69 Provides:       nodejs(module-version) = %{node_module_version}
70 Obsoletes:      nodejs-waf
71 ExclusiveArch:  %{ix86} %{x8664} %{arm} aarch64
72 BuildRoot:      %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
73
74 %define         sover   %(echo %{version} | cut -d. -f2)
75 # add macro, so adapter won't replace it back literal
76 %define         doc_ver %{version}
77
78 %description
79 Node.js is a platform built on Chrome's JavaScript runtime for easily
80 building fast, scalable network applications. Node.js uses an
81 event-driven, non-blocking I/O model that makes it lightweight and
82 efficient, perfect for data-intensive real-time applications that run
83 across distributed devices.
84
85 %description -l pl.UTF-8
86 Node.js to platforma zbudowana w opacriu o silnik JavaScriptu
87 przeglądarki Chrome, służąca do tworzenia szybkich, skalowalnych
88 aplikacji sieciowych. Node.js wykorzystuje nieblokujący model
89 wejścia/wyjścia sterowany zdarzeniami, dzięki czemu jest lekki i
90 wydajny, dobrze nadający się do aplikacji przetwarzających duże
91 ilości danych w czasie rzeczywistym, uruchamianych na rozproszonych
92 urządzeniach.
93
94 %package devel
95 Summary:        Development headers for nodejs
96 Summary(pl.UTF-8):      Pliki nagłówkowe nodejs
97 Group:          Development/Libraries
98 Requires:       %{name} = %{version}-%{release}
99 Requires:       gcc
100 %{?with_http_parser:Requires:   http-parser-devel >= 2.9.3}
101 Requires:       libstdc++-devel
102 %{?with_system_uv:Requires:     libuv-devel >= 1.38.1}
103 Requires:       openssl-devel
104 Requires:       zlib-devel >= 1.2.11
105
106 %description devel
107 Development headers for nodejs.
108
109 %description devel -l pl.UTF-8
110 Pliki nagłówkowe nodejs.
111
112 %package doc
113 Summary:        Documentation for Node.js engine
114 Summary(pl.UTF-8):      Dokumentacja silnika Node.js
115 Group:          Documentation
116 URL:            https://nodejs.org/dist/v%{doc_ver}/docs/api
117 %{?noarchpackage}
118
119 %description doc
120 Node.js is a server-side JavaScript environment that uses an
121 asynchronous event-driven model. Node's goal is to provide an easy way
122 to build scalable network programs.
123
124 This package contains the documentation for Node.js.
125
126 %description doc -l pl.UTF-8
127 Node.js to serwerowe środowisko JavaScriptu wykorzystujące
128 asynchroniczny model sterowany zdarzeniami. Celem Node jest
129 zapewnienie łatwego sposobu tworzenia skalowalnych programów
130 sieciowych.
131
132 Ten pakiet zawiera dokumentację Node.js.
133
134 %package -n systemtap-nodejs
135 Summary:        systemtap/dtrace probes for Node.js
136 Summary(pl.UTF-8):      Sondy systemtap/dtrace dla Node.js
137 Group:          Development/Tools
138 Requires:       %{name} = %{version}-%{release}
139 Requires:       systemtap-client
140
141 %description -n systemtap-nodejs
142 systemtap/dtrace probes for Node.js.
143
144 %description -n systemtap-nodejs -l pl.UTF-8
145 Sondy systemtap/dtrace dla Node.js.
146
147 %prep
148 %setup -q -n node-v%{version}
149 %if "%{_lib}" == "lib64"
150 %patch3 -p1
151 %else
152 %patch2 -p1
153 %endif
154 %patch4 -p1
155 %patch5 -p1
156
157 grep -r '#!.*env python' -l . | xargs %{__sed} -i -e '1 s,#!.*env python,#!%{__python3},'
158
159 %{?with_system_brotli:%{__rm} -r deps/brotli}
160 %{__rm} -r deps/cares
161 %if %{with http_parser}
162 %{__rm} -r deps/http_parser
163 %{__rm} -r deps/llhttp
164 %endif
165 %{__rm} -r deps/icu-small
166 %{__rm} -r deps/nghttp2
167 %{__rm} -r deps/npm
168 %{__rm} -r deps/openssl
169 %{?with_system_uv:%{__rm} -r deps/uv}
170 %{__rm} -r deps/zlib
171
172 %build
173 ver=$(awk '/#define NODE_MODULE_VERSION/{print $3}' src/node_version.h)
174 test "$ver" = "%{node_module_version}"
175
176 # CC used only to detect if CC is clang, not used for compiling
177 CC="%{__cc}" \
178 CXX="%{__cxx}" \
179 GYP_DEFINES="soname_version=%{sover}" \
180 ./configure \
181         --prefix=%{_prefix} \
182         --libdir=%{_lib} \
183         --openssl-use-def-ca-store \
184         --shared \
185         %{?with_system_brotli:--shared-brotli} \
186         --shared-cares \
187         %{?with_http_parser:--shared-http-parser} \
188         %{?with_system_uv:--shared-libuv} \
189         --shared-nghttp2 \
190         --shared-openssl \
191         --shared-zlib \
192         --with-intl=system-icu \
193         --without-dtrace \
194         --without-npm
195
196 # add LFS defines from libuv (RHBZ#892601)
197 # CXXFLAGS must be exported, as it is needed for make, not gyp
198 CXXFLAGS="%{rpmcxxflags} -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -fPIC" \
199 LDFLAGS="%{rpmldflags}" \
200 %{__make} -C out \
201         BUILDTYPE=Release \
202         V=1
203
204 %install
205 rm -rf $RPM_BUILD_ROOT
206
207 %{__python3} tools/install.py install "$RPM_BUILD_ROOT" "%{_prefix}"
208
209 ln -s libnode.so.%{node_module_version} $RPM_BUILD_ROOT%{_libdir}/libnode.so
210
211 echo '.so man1/node.1' > $RPM_BUILD_ROOT%{_mandir}/man1/nodejs.1
212
213 install -d $RPM_BUILD_ROOT%{_includedir}/node
214 cp -p src/*.h $RPM_BUILD_ROOT%{_includedir}/node
215
216 # install for node-gyp
217 install -d $RPM_BUILD_ROOT%{_usrsrc}/%{name}
218 cp -p common.gypi $RPM_BUILD_ROOT%{_usrsrc}/%{name}
219 ln -s %{_includedir}/node $RPM_BUILD_ROOT%{_usrsrc}/%{name}/src
220
221 # for compat of fedora derivered scripts (shebangs)
222 ln -s node $RPM_BUILD_ROOT%{_bindir}/nodejs
223
224 # globally installed node modules (noarch)
225 install -d $RPM_BUILD_ROOT%{_prefix}/lib/node_modules
226
227 # default searchpaths
228 install -d $RPM_BUILD_ROOT{%{_libdir},%{_prefix}/lib}/node
229
230 # create pkgconfig
231 install -d $RPM_BUILD_ROOT%{_pkgconfigdir}
232 cat <<'EOF' > $RPM_BUILD_ROOT%{_pkgconfigdir}/%{name}.pc
233 version=%{version}
234 prefix=%{_prefix}
235 libdir=${prefix}/%{_lib}
236 includedir=${prefix}/include/node
237
238 Name: nodejs
239 Description: Evented I/O for V8 JavaScript.
240 Version: ${version}
241 Cflags: -I${includedir}
242 EOF
243
244 # install documentation
245 install -d $RPM_BUILD_ROOT%{_docdir}/%{name}-doc-%{version}
246 cp -a doc/api/* $RPM_BUILD_ROOT%{_docdir}/%{name}-doc-%{version}
247 %{__rm} $RPM_BUILD_ROOT%{_docdir}/%{name}-doc-%{version}/*.md
248 %{__rm} $RPM_BUILD_ROOT%{_docdir}/%{name}-doc-%{version}/*.json
249
250 %clean
251 rm -rf $RPM_BUILD_ROOT
252
253 %post   -p /sbin/ldconfig
254 %postun -p /sbin/ldconfig
255
256 %files
257 %defattr(644,root,root,755)
258 %doc AUTHORS CHANGELOG.md LICENSE README.md SECURITY.md
259 %attr(755,root,root) %{_bindir}/node
260 %attr(755,root,root) %{_bindir}/nodejs
261 %attr(755,root,root) %{_libdir}/libnode.so.%{node_module_version}
262 %if "%{_lib}" != "lib"
263 %dir %{_libdir}/node
264 %endif
265 %dir %{_prefix}/lib/node
266 %dir %{_prefix}/lib/node_modules
267 %{_mandir}/man1/node.1*
268 %{_mandir}/man1/nodejs.1*
269
270 %files devel
271 %defattr(644,root,root,755)
272 %attr(755,root,root) %{_libdir}/libnode.so
273 %{_includedir}/node
274 %{_pkgconfigdir}/nodejs.pc
275 %{_usrsrc}/%{name}
276
277 %files doc
278 %defattr(644,root,root,755)
279 %doc %{_docdir}/%{name}-doc-%{version}
280
281 %files -n systemtap-nodejs
282 %defattr(644,root,root,755)
283 %{_datadir}/systemtap/tapset/node.stp
This page took 0.062466 seconds and 2 git commands to generate.