/[packages]/updates/8/nodejs/current/SPECS/nodejs.spec
ViewVC logotype

Contents of /updates/8/nodejs/current/SPECS/nodejs.spec

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1755217 - (show annotations) (download)
Tue Nov 9 07:50:27 2021 UTC (2 years, 5 months ago) by neoclust
File size: 19011 byte(s)
SILENT: Remove python3 check
1 # This package is synced with Fedora.
2
3 # This package is tricky since it requires a working nodejs to build nodejs
4 # This causes problems if a broken nodejs gets into the repo
5
6 # To build it from bootstrap
7 # build a version with bootstrap. Change nodejs-tarball.sh to not strip out
8 # the bundled libraries
9 #
10 # Once you have a working bootstrapped version, turn off bootstrap and
11 # build with a nodejs-tarball.sh that strips out the bundled directories
12
13 # bundle dependencies that are not available as Mageia modules
14 # %%{!?_with_bootstrap: %%global bootstrap 1}
15 # use bcond for building modules
16 %bcond_without bootstrap
17
18 %{?!_pkgdocdir:%global _pkgdocdir %{_docdir}/%{name}-%{version}}
19
20 # increment both of these together
21 %define rel 1
22 %global v8_release 1
23
24 # == Node.js Version ==
25 # Note: Mageia should only ship LTS versions of Node.js (currently expected
26 # to be major versions with even numbers). The odd-numbered versions are new
27 # feature releases that are only supported for nine months, which is shorter
28 # than a Mageia release lifecycle.
29 %global nodejs_epoch 1
30 %global nodejs_major 14
31 %global nodejs_minor 18
32 %global nodejs_patch 1
33 %global nodejs_abi %{nodejs_major}.%{nodejs_minor}
34 %global nodejs_soversion 83
35 %global nodejs_version %{nodejs_major}.%{nodejs_minor}.%{nodejs_patch}
36 %global nodejs_release %{rel}
37
38 # == Bundled Dependency Versions ==
39 # v8 - from deps/v8/include/v8-version.h
40 # Epoch is set to ensure clean upgrades from the old v8 package
41 %global v8_epoch 2
42 %global v8_major 8
43 %global v8_minor 4
44 %global v8_build 371
45 %global v8_patch 23
46 # V8 presently breaks ABI at least every x.y release while never bumping SONAME
47 %global v8_abi %{v8_major}.%{v8_minor}
48 %global v8_version %{v8_major}.%{v8_minor}.%{v8_build}.%{v8_patch}
49
50 # c-ares - from deps/cares/include/ares_version.h
51 # https://github.com/nodejs/node/pull/9332
52 %global c_ares_major 1
53 %global c_ares_minor 17
54 %global c_ares_patch 2
55 %global c_ares_version %{c_ares_major}.%{c_ares_minor}.%{c_ares_patch}
56
57 # llhttp - from deps/llhttp/include/llhttp.h
58 %global llhttp_major 2
59 %global llhttp_minor 1
60 %global llhttp_patch 2
61 %global llhttp_version %{llhttp_major}.%{llhttp_minor}.%{llhttp_patch}
62
63 # libuv - from deps/uv/include/uv/version.h
64 %global libuv_major 1
65 %global libuv_minor 39
66 %global libuv_patch 0
67 %global libuv_version %{libuv_major}.%{libuv_minor}.%{libuv_patch}
68
69 # nghttp2 - from deps/nghttp2/lib/includes/nghttp2/nghttp2ver.h
70 %global nghttp2_major 1
71 %global nghttp2_minor 41
72 %global nghttp2_patch 0
73 %global nghttp2_version %{nghttp2_major}.%{nghttp2_minor}.%{nghttp2_patch}
74
75 # ICU - from tools/icu/current_ver.dep
76 %global icu_major 67
77 %global icu_minor 1
78 %global icu_version %{icu_major}.%{icu_minor}
79
80 # uvwasi - from deps/uvwasi/include/uvwasi.h
81 %global uvwasi_major 0
82 %global uvwasi_minor 0
83 %global uvwasi_patch 11
84 %global uvwasi_version %{uvwasi_major}.%{uvwasi_minor}.%{uvwasi_patch}
85
86 # histogram_c - assumed from timestamps
87 %global histogram_major 0
88 %global histogram_minor 9
89 %global histogram_patch 7
90 %global histogram_version %{histogram_major}.%{histogram_minor}.%{histogram_patch}
91
92
93 #%if 0%{?mageia} >= 7
94 #%global icu_flag system-icu
95 #%else
96 %global icu_flag small-icu
97 #%endif
98
99
100 # punycode - from lib/punycode.js
101 # Note: this was merged into the mainline since 0.6.x
102 # Note: this will be unmerged in an upcoming major release
103 %global punycode_major 2
104 %global punycode_minor 1
105 %global punycode_patch 0
106 %global punycode_version %{punycode_major}.%{punycode_minor}.%{punycode_patch}
107
108 # npm - from deps/npm/package.json
109 %global npm_epoch 1
110 %global npm_major 6
111 %global npm_minor 14
112 %global npm_patch 15
113 %global npm_version %{npm_major}.%{npm_minor}.%{npm_patch}
114
115 # In order to avoid needing to keep incrementing the release version for the
116 # main package forever, we will just construct one for npm that is guaranteed
117 # to increment safely. Changing this can only be done during an update when the
118 # base npm version number is increasing.
119 %global npm_release %{nodejs_epoch}.%{nodejs_major}.%{nodejs_minor}.%{nodejs_patch}.%{nodejs_release}
120
121
122 Name: nodejs
123 Epoch: %{nodejs_epoch}
124 Version: %{nodejs_version}
125 Release: %mkrel %{nodejs_release}
126 Summary: JavaScript runtime
127 License: MIT and ASL 2.0 and ISC and BSD
128 Group: Development/Other
129 URL: https://nodejs.org/
130
131 # ExclusiveArch: %{nodejs_arches}
132
133 # nodejs bundles openssl, but we use the system version in Mageia
134 # because openssl contains prohibited code, we remove openssl completely from
135 # the tarball, using the script in Source100
136
137 Source0: node-v%{nodejs_version}-stripped.tar.xz
138 Source100: %{name}-tarball.sh
139
140 # The native module Requires generator remains in the nodejs SRPM, so it knows
141 # the nodejs and v8 versions. The remainder has migrated to the
142 # nodejs-packaging SRPM.
143 Source7: nodejs_native.attr
144
145 # Disable running gyp on bundled deps we don't use
146 Patch1: 0001-Disable-running-gyp-on-shared-deps.patch
147 Patch3: 0002-Install-both-binaries-and-use-libdir.patch
148
149 #
150 # Security patches
151 # Patches P100 -> ...
152 #
153
154 BuildRequires: python3-devel
155 BuildRequires: zlib-devel
156 BuildRequires: brotli-devel
157 BuildRequires: gcc >= 4.9.4
158 BuildRequires: gcc-c++ >= 4.9.4
159 BuildRequires: chrpath
160 BuildRequires: libatomic-devel
161
162 #%if ! 0%%{?bootstrap}
163 %if %{with bootstrap}
164 Provides: bundled(libuv) = %{libuv_version}
165 Provides: bundled(nghttp2) = %{nghttp2_version}
166 %else
167 BuildRequires: nodejs-packaging
168 BuildRequires: systemtap
169 BuildRequires: http-parser-devel >= 2.9.2
170 BuildRequires: libuv-devel >= %{libuv_version}
171 BuildRequires: pkgconfig(libnghttp2) >= %{nghttp2_version}
172 %endif
173
174 BuildRequires: libicu-devel >= 63.1
175 BuildRequires: openssl-devel >= 1.1.1c
176
177 # we need the system certificate store
178 Requires: ca-certificates
179
180 Requires: nodejs-libs = %mkrel %{epoch}:%{nodejs_version}-%{nodejs_release}
181
182
183 #we need ABI virtual provides where SONAMEs aren't enough/not present so deps
184 #break when binary compatibility is broken
185 Provides: nodejs(abi) = %{nodejs_abi}
186 Provides: nodejs(abi%{nodejs_major}) = %{nodejs_abi}
187 Provides: nodejs(v8-abi) = %{v8_abi}
188 Provides: nodejs(v8-abi%{v8_major}) = %{v8_abi}
189
190 #this corresponds to the "engine" requirement in package.json
191 Provides: nodejs(engine) = %{nodejs_version}
192
193 # Node.js currently has a conflict with the 'node' package in Mageia
194 # The ham-radio group has agreed to rename their binary for us, but
195 # in the meantime, we're setting an explicit Conflicts: here
196 Conflicts: node <= 0.3.2-12
197
198 # The punycode module was absorbed into the standard library in v0.6.
199 # It still exists as a seperate package for the benefit of users of older
200 # versions. Since we've never shipped anything older than v0.10 in Mageia,
201 # we don't need the seperate nodejs-punycode package, so we Provide it here so
202 # dependent packages don't need to override the dependency generator.
203 # See also: RHBZ#11511811
204 # UPDATE: punycode will be deprecated and so we should unbundle it in Node v8
205 # and use upstream module instead
206 # https://github.com/nodejs/node/commit/29e49fc286080215031a81effbd59eac092fff2f
207 Provides: nodejs-punycode = %{punycode_version}
208 Provides: npm(punycode) = %{punycode_version}
209
210
211 # Node.js has forked c-ares from upstream in an incompatible way, so we need
212 # to carry the bundled version internally.
213 # See https://github.com/nodejs/node/commit/766d063e0578c0f7758c3a965c971763f43fec85
214 Provides: bundled(c-ares) = %{c_ares_version}
215
216 # Node.js is closely tied to the version of v8 that is used with it. It makes
217 # sense to use the bundled version because upstream consistently breaks ABI
218 # even in point releases. Node.js upstream has now removed the ability to build
219 # against a shared system version entirely.
220 # See https://github.com/nodejs/node/commit/d726a177ed59c37cf5306983ed00ecd858cfbbef
221 Provides: bundled(v8) = %{v8_version}
222
223 # Node.js is bound to a specific version of ICU which may not match the OS
224 # We cannot pin the OS to this version of ICU because every update includes
225 # an ABI-break, so we'll use the bundled copy.
226 Provides: bundled(icu) = %{icu_version}
227
228 # Upstream added new dependencies, but so far they are not available in Fedora
229 # or there's no option to built it as a shared dependency, so we bundle them
230 Provides: bundled(uvwasi) = %{uvwasi_version}
231 Provides: bundled(histogram) = %{histogram_version}
232
233 # Make sure we keep NPM up to date when we update Node.js
234 Requires: npm = %mkrel %{npm_epoch}:%{npm_version}-%{npm_release}
235
236 %description
237 Node.js is a platform built on Chrome's JavaScript runtime
238 for easily building fast, scalable network applications.
239 Node.js uses an event-driven, non-blocking I/O model that
240 makes it lightweight and efficient, perfect for data-intensive
241 real-time applications that run across distributed devices.
242
243 %package devel
244 Summary: JavaScript runtime - development headers
245 Group: Development/Other
246 Requires: %{name} = %mkrel %{epoch}:%{nodejs_version}-%{nodejs_release}
247 Requires: openssl-devel
248 Requires: zlib-devel
249 Requires: nodejs-packaging
250
251 #%if ! 0%%{?bootstrap}
252 %if %{with bootstrap}
253 # deps are bundled
254 %else
255 Requires: http-parser-devel
256 Requires: libuv-devel
257 %endif
258
259 %description devel
260 Development headers for the Node.js JavaScript runtime.
261
262 %package libs
263 Summary: Node.js and v8 libraries
264
265 # Compatibility for obsolete v8 package
266 %if 0%{?__isa_bits} == 64
267 Provides: libv8.so.%{v8_major}()(64bit)
268 Provides: libv8_libbase.so.%{v8_major}()(64bit)
269 Provides: libv8_libplatform.so.%{v8_major}()(64bit)
270 %else # 32-bits
271 Provides: libv8.so.%{v8_major}
272 Provides: libv8_libbase.so.%{v8_major}
273 Provides: libv8_libplatform.so.%{v8_major}
274 %endif
275
276 Provides: v8 = %mkrel %{v8_epoch}:%{v8_version}-%{nodejs_release}
277 Provides: v8 = %mkrel %{v8_epoch}:%{v8_version}-%{nodejs_release}
278 Obsoletes: v8 < 1:6.7.17-10
279
280 %description libs
281 Libraries to support Node.js and provide stable v8 interfaces.
282
283 %package -n v8-devel
284 Summary: v8 - development headers
285 Epoch: %{v8_epoch}
286 Version: %mkrel %{v8_version}
287 Release: %mkrel %{v8_release}
288 Requires: %{name}-devel = %mkrel %{nodejs_epoch}:%{nodejs_version}-%{nodejs_release}
289
290 %description -n v8-devel
291 Development headers for the v8 runtime.
292
293 %package -n npm
294 Summary: Node.js Package Manager
295 Epoch: %{npm_epoch}
296 Version: %{npm_version}
297 Release: %mkrel %{npm_release}
298
299 # We used to ship npm separately, but it is so tightly integrated with Node.js
300 # (and expected to be present on all Node.js systems) that we ship it bundled
301 # now.
302 Obsoletes: npm < 0:3.5.4-6
303 Provides: npm = %{npm_epoch}:%{npm_version}
304 Requires: nodejs = %mkrel %{epoch}:%{nodejs_version}-%{nodejs_release}
305
306 # Do not add epoch to the virtual NPM provides or it will break
307 # the automatic dependency-generation script.
308 Provides: npm(npm) = %{npm_version}
309
310 %description -n npm
311 npm is a package manager for node.js. You can use it to install and publish
312 your node programs. It manages dependencies and does other cool stuff.
313
314 %package docs
315 Summary: Node.js API documentation
316 Group: Documentation
317 BuildArch: noarch
318
319 # We don't require that the main package be installed to
320 # use the docs, but if it is installed, make sure the
321 # version always matches
322 Conflicts: %{name} > %mkrel %{epoch}:%{nodejs_version}-%{nodejs_release}
323 Conflicts: %{name} < %mkrel %{epoch}:%{nodejs_version}-%{nodejs_release}
324
325 %description docs
326 The API documentation for the Node.js JavaScript runtime.
327
328
329 %prep
330 %autosetup -p1 -n node-v%{nodejs_version}
331
332 # remove bundled dependencies that we aren't building
333 rm -rf deps/zlib
334 rm -rf deps/brotli
335
336 %build
337
338 %ifarch s390 s390x %{arm} %ix86
339 # Decrease debuginfo verbosity to reduce memory consumption during final
340 # library linking
341 %global optflags %(echo %{optflags} | sed 's/-g /-g1 /')
342 %endif
343
344 export CC='%{__cc}'
345 export CXX='%{__cxx}'
346
347 # build with debugging symbols and add defines from libuv (#892601)
348 # Node's v8 breaks with GCC 6 because of incorrect usage of methods on
349 # NULL objects. We need to pass -fno-delete-null-pointer-checks
350 export CFLAGS='%{optflags} \
351 -D_LARGEFILE_SOURCE \
352 -D_FILE_OFFSET_BITS=64 \
353 -DZLIB_CONST \
354 -fno-delete-null-pointer-checks'
355 export CXXFLAGS='%{optflags} \
356 -D_LARGEFILE_SOURCE \
357 -D_FILE_OFFSET_BITS=64 \
358 -DZLIB_CONST \
359 -fno-delete-null-pointer-checks'
360
361 # Explicit new lines in C(XX)FLAGS can break naive build scripts
362 export CFLAGS="$(echo ${CFLAGS} | tr '\n\\' ' ')"
363 export CXXFLAGS="$(echo ${CXXFLAGS} | tr '\n\\' ' ')"
364 export LDFLAGS="%{build_ldflags}"
365
366 #%if ! 0%%{?bootstrap}
367 %if %{with bootstrap}
368 %{__python3} configure.py --prefix=%{_prefix} \
369 --shared \
370 --libdir=%{_lib} \
371 --shared-openssl \
372 --shared-zlib \
373 --shared-brotli \
374 --without-dtrace \
375 --with-intl=small-icu \
376 --debug-nghttp2 \
377 --openssl-use-def-ca-store
378 %else
379 %{__python3} configure.py --prefix=%{_prefix} \
380 --shared \
381 --libdir=%{_lib} \
382 --shared-openssl \
383 --shared-zlib \
384 --shared-brotli \
385 --shared-libuv \
386 --shared-nghttp2 \
387 --with-dtrace \
388 --with-intl=%{icu_flag} \
389 --debug-nghttp2 \
390 --openssl-use-def-ca-store
391 %endif
392
393 %__make BUILDTYPE=Release %{?_smp_mflags}
394
395
396 %install
397 ./tools/install.py install %{buildroot} %{_prefix}
398
399 # Set the binary permissions properly
400 chmod 0755 %{buildroot}/%{_bindir}/node
401 chrpath --delete %{buildroot}%{_bindir}/node
402
403 # Install library symlink
404 ln -s %{_libdir}/libnode.so.%{nodejs_soversion} %{buildroot}%{_libdir}/libnode.so
405
406 # Install v8 compatibility symlinks
407 for header in %{buildroot}%{_includedir}/node/libplatform %{buildroot}%{_includedir}/node/v8*.h; do
408 header=$(basename ${header})
409 ln -s %{_includedir}/node/${header} %{buildroot}%{_includedir}/${header}
410 done
411 for soname in libv8 libv8_libbase libv8_libplatform; do
412 ln -s %{_libdir}/libnode.so.%{nodejs_soversion} %{buildroot}%{_libdir}/${soname}.so
413 ln -s %{_libdir}/libnode.so.%{nodejs_soversion} %{buildroot}%{_libdir}/${soname}.so.%{v8_major}
414 done
415
416 # own the sitelib directory
417 mkdir -p %{buildroot}%{_prefix}/lib/node_modules
418
419 # ensure Requires are added to every native module that match the Provides from
420 # the nodejs build in the buildroot
421 install -Dpm0644 %{SOURCE7} %{buildroot}%{_rpmconfigdir}/fileattrs/nodejs_native.attr
422 cat << EOF > %{buildroot}%{_rpmconfigdir}/nodejs_native.req
423 #!/bin/sh
424 echo 'nodejs(abi%{nodejs_major}) >= %nodejs_abi'
425 echo 'nodejs(v8-abi%{v8_major}) >= %v8_abi'
426 EOF
427 chmod 0755 %{buildroot}%{_rpmconfigdir}/nodejs_native.req
428
429 #install documentation
430 mkdir -p %{buildroot}%{_pkgdocdir}/html
431 cp -pr doc/* %{buildroot}%{_pkgdocdir}/html
432 rm -f %{buildroot}%{_pkgdocdir}/html/nodejs.1
433
434 #node-gyp needs common.gypi too
435 mkdir -p %{buildroot}%{_datadir}/node
436 cp -p common.gypi %{buildroot}%{_datadir}/node
437
438 # Install the GDB init tool into the documentation directory
439 mv %{buildroot}/%{_datadir}/doc/node/gdbinit %{buildroot}/%{_pkgdocdir}/gdbinit
440
441 # install NPM docs to mandir
442 mkdir -p %{buildroot}%{_mandir} \
443 %{buildroot}%{_pkgdocdir}/npm
444
445 cp -pr deps/npm/man/* %{buildroot}%{_mandir}/
446 rm -rf %{buildroot}%{_prefix}/lib/node_modules/npm/man
447 ln -sf %{_mandir} %{buildroot}%{_prefix}/lib/node_modules/npm/man
448
449
450 # Install Gatsby HTML documentation to %{_pkgdocdir}
451 cp -pr deps/npm/docs %{buildroot}%{_pkgdocdir}/npm/
452 rm -rf %{buildroot}%{_prefix}/lib/node_modules/npm/docs
453
454 ln -sf %{_pkgdocdir}/npm %{buildroot}%{_prefix}/lib/node_modules/npm/docs
455
456 # Node tries to install some python files into a documentation directory
457 # (and not the proper one). Remove them for now until we figure out what to
458 # do with them.
459 rm -f %{buildroot}/%{_defaultdocdir}/node/lldb_commands.py \
460 %{buildroot}/%{_defaultdocdir}/node/lldbinit
461
462 # Some NPM bundled deps are executable but should not be. This causes
463 # unnecessary automatic dependencies to be added. Make them not executable.
464 # Skip the npm bin directory or the npm binary will not work.
465 find %{buildroot}%{_prefix}/lib/node_modules/npm \
466 -not -path "%{buildroot}%{_prefix}/lib/node_modules/npm/bin/*" \
467 -executable -type f \
468 -exec chmod -x {} \;
469
470 # The above command is a little overzealous. Add a few permissions back.
471 chmod 0755 %{buildroot}%{_prefix}/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin/node-gyp
472 chmod 0755 %{buildroot}%{_prefix}/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js
473
474
475 %check
476 # Fail the build if the versions don't match
477 LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node -e "require('assert').equal(process.versions.node, '%{nodejs_version}')"
478 LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node -e "require('assert').equal(process.versions.v8.replace(/-node\.\d+$/, ''), '%{v8_version}')"
479 LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node -e "require('assert').equal(process.versions.ares.replace(/-DEV$/, ''), '%{c_ares_version}')"
480
481 # Ensure we have punycode and that the version matches
482 LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node -e "require(\"assert\").equal(require(\"punycode\").version, '%{punycode_version}')"
483
484 # Ensure we have npm and that the version matches
485 NODE_PATH=%{buildroot}%{_prefix}/lib/node_modules:%{buildroot}%{_prefix}/lib/node_modules/npm/node_modules LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}/%{_bindir}/node -e "require(\"assert\").equal(require(\"npm\").version, '%{npm_version}')"
486
487
488 %pretrans -n npm -p <lua>
489 -- Remove all of the symlinks from the bundled npm node_modules directory
490 -- This scriptlet can be removed in Mageia 31
491 base_path = "%{_prefix}/lib/node_modules/npm/node_modules/"
492 d_st = posix.stat(base_path)
493 if d_st then
494 for f in posix.files(base_path) do
495 path = base_path..f
496 st = posix.stat(path)
497 if st and st.type == "link" then
498 os.remove(path)
499 end
500 end
501 end
502
503 %files
504 %{_bindir}/node
505 %dir %{_prefix}/lib/node_modules
506 %dir %{_datadir}/node
507 %dir %{_datadir}/systemtap
508 %dir %{_datadir}/systemtap/tapset
509 %{_datadir}/systemtap/tapset/node.stp
510
511 #%if ! 0%%{?bootstrap}
512 %if %{with bootstrap}
513 # no dtrace
514 %else
515 %dir %{_usr}/lib/dtrace
516 %{_usr}/lib/dtrace/node.d
517 %endif
518
519 %{_rpmconfigdir}/fileattrs/nodejs_native.attr
520 %{_rpmconfigdir}/nodejs_native.req
521 %license LICENSE
522 %doc AUTHORS CHANGELOG.md GOVERNANCE.md README.md
523 %doc %{_mandir}/man1/node.1*
524
525
526 %files devel
527 %{_includedir}/node
528 %{_libdir}/libnode.so
529 %{_datadir}/node/common.gypi
530 %{_pkgdocdir}/gdbinit
531
532
533 %files libs
534 %{_libdir}/libnode.so.%{nodejs_soversion}
535 %{_libdir}/libv8.so.%{v8_major}
536 %{_libdir}/libv8_libbase.so.%{v8_major}
537 %{_libdir}/libv8_libplatform.so.%{v8_major}
538
539
540 %files -n v8-devel
541 %{_includedir}/libplatform
542 %{_includedir}/v8*.h
543 %{_libdir}/libv8.so
544 %{_libdir}/libv8_libbase.so
545 %{_libdir}/libv8_libplatform.so
546
547
548 %files -n npm
549 %{_bindir}/npm
550 %{_bindir}/npx
551 %{_prefix}/lib/node_modules/npm
552 %ghost %{_sysconfdir}/npmrc
553 %ghost %{_sysconfdir}/npmignore
554 %doc %{_mandir}/man*/npm*
555 %doc %{_mandir}/man*/npx*
556 %doc %{_mandir}/man7/semver.7*
557 %doc %{_mandir}/man5/*.5.xz
558 %doc %{_mandir}/man7/*.7.xz
559
560 %files docs
561 %dir %{_pkgdocdir}
562 %{_pkgdocdir}/html
563 %{_pkgdocdir}/npm/docs

  ViewVC Help
Powered by ViewVC 1.1.30