diff --git a/macros.nodejs b/macros.nodejs index 4f14187..94eae4b 100644 --- a/macros.nodejs +++ b/macros.nodejs @@ -1,8 +1,12 @@ # nodejs binary %__nodejs %{_bindir}/node +# currently installed nodejs version +%nodejs_version %(%{__nodejs} -v | sed s/v//) +%_nodejs_major_version %(echo %{nodejs_version} | sed 's#^\\([0-9]\\+\\).*#\\1#') + # nodejs library directory -%nodejs_sitelib %{_prefix}/lib/node_modules +%nodejs_sitelib %{_prefix}/lib/node_modules_%{_nodejs_major_version} #arch specific library directory #for future-proofing only; we don't do multilib diff --git a/nodejs-packaging-bundler b/nodejs-packaging-bundler index 47486a4..943368a 100755 --- a/nodejs-packaging-bundler +++ b/nodejs-packaging-bundler @@ -60,7 +60,7 @@ if [ -f "$TARBALL" ]; then mv ${TARBALL_DIR}/*.tgz . rm -rf ${TARBALL_DIR} else - npm pack ${PACKAGE}@${VERSION} + npm pack ${PACKAGE} fi tar xfz *.tgz cd package @@ -70,10 +70,10 @@ for packagejson in $(find . -type d -name node_modules\* -prune -o -type f -name npm install --omit=dev --omit=optional if [ $? -ge 1 ] ; then echo " ERROR WILL ROBINSON" - rm -rf node_modules + rm -rf node_modules else echo " Successful prod dependencies download" - mv node_modules/ node_modules_prod + mv node_modules/ node_modules_prod fi popd done @@ -102,15 +102,15 @@ for packagejson in $(find . -type d -name node_modules\* -prune -o -type f -name echo " ERROR WILL ROBINSON" else echo " Successful dev dependencies download" - mv node_modules/ node_modules_dev + mv node_modules/ node_modules_dev fi popd done if [ -d node_modules_prod ] ; then - tar cfz ../${PACKAGE_SAFE}-${VERSION}-nm-prod.tgz --sort=name $(find . -type d -name node_modules_prod) + tar cfz ../${PACKAGE_SAFE}-${VERSION}-nm-prod.tgz $(find . -type d -name node_modules_prod) fi if [ -d node_modules_dev ] ; then - tar cfz ../${PACKAGE_SAFE}-${VERSION}-nm-dev.tgz --sort=name $(find . -type d -name node_modules_dev) + tar cfz ../${PACKAGE_SAFE}-${VERSION}-nm-dev.tgz $(find . -type d -name node_modules_dev) fi cd .. cp -v ${PACKAGE_SAFE}-${VERSION}* "${OUTPUT_DIR}" diff --git a/nodejs-packaging.spec b/nodejs-packaging.spec index 2a280db..2553949 100644 --- a/nodejs-packaging.spec +++ b/nodejs-packaging.spec @@ -19,6 +19,8 @@ Source0007: nodejs-symlink-deps Source0008: nodejs.attr Source0009: nodejs.prov Source0010: nodejs.req +Source0011: nodejs_abi.attr +Source0012: nodejs_abi.req Source0111: nodejs-packaging-bundler @@ -27,6 +29,9 @@ Source0101: test.tar.gz BuildRequires: python3 +# Several of the macros require the /usr/bin/node command, so we need to +# ensure that it is present when packaging. +Requires: /usr/bin/node Requires: redhat-rpm-config %description @@ -47,8 +52,10 @@ It generates a bundled license file that gets the licenses in the runtime dependency tarball %prep +pushd %{_topdir}/BUILD cp -da %{_sourcedir}/* . tar xvf test.tar.gz +popd %build @@ -58,8 +65,10 @@ tar xvf test.tar.gz %install install -Dpm0644 macros.nodejs %{buildroot}%{macrosdir}/macros.nodejs install -Dpm0644 nodejs.attr %{buildroot}%{_rpmconfigdir}/fileattrs/nodejs.attr +install -Dpm0644 nodejs_abi.attr %{buildroot}%{_rpmconfigdir}/fileattrs/nodejs_abi.attr install -pm0755 nodejs.prov %{buildroot}%{_rpmconfigdir}/nodejs.prov install -pm0755 nodejs.req %{buildroot}%{_rpmconfigdir}/nodejs.req +install -pm0755 nodejs_abi.req %{buildroot}%{_rpmconfigdir}/nodejs_abi.req install -pm0755 nodejs-symlink-deps %{buildroot}%{_rpmconfigdir}/nodejs-symlink-deps install -pm0755 nodejs-fixdep %{buildroot}%{_rpmconfigdir}/nodejs-fixdep install -pm0755 nodejs-setversion %{buildroot}%{_rpmconfigdir}/nodejs-setversion @@ -83,4 +92,173 @@ install -Dpm0755 nodejs-packaging-bundler %{buildroot}%{_bindir}/nodejs-packagin %changelog -%autochangelog +* Thu Jan 19 2023 Fedora Release Engineering - 2022.10-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Thu Oct 20 2022 Stephen Gallagher - 2022.10-1 +- Move native module building tools here from Node.js +- Add `Requires: /usr/bin/node` + +* Tue Oct 18 2022 Davide Cavalca - 2021.06-7 +- NPM bundler: recursively bundle modules for all packages found + +* Fri Jul 22 2022 Fedora Release Engineering - 2021.06-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Sun May 01 2022 Davide Cavalca - 2021.06-5 +- NPM bundler: optionally use a local tarball instead of npm + +* Thu Jan 20 2022 Stephen Gallagher - 2021.06-4 +- NPM bundler: also find namespaced bundled dependencies + +* Thu Jul 22 2021 Fedora Release Engineering - 2021.06-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Jun 22 2021 Stephen Gallagher - 2021.06-2 +- Fix hard-coded output directory in the bundler + +* Wed Jun 02 2021 Stephen Gallagher - 2021.06-1 +- Update to 2021.06-1 +- bundler: Handle archaic license metadata +- bundler: Warn about bundled dependencies with no license metadata + +* Tue Jan 26 2021 Fedora Release Engineering - 2021.01-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Wed Jan 20 2021 Stephen Gallagher - 2021.01-2 +- nodejs-packaging-bundler improvements to handle uncommon characters + +* Wed Jan 06 2021 Troy Dawson - 2021.01 +- Add nodejs-packaging-bundler and update README.md + +* Fri Sep 18 2020 Stephen Gallagher - 2020.09-1 +- Move to dist-git as the upstream + +* Wed Sep 02 2020 Stephen Gallagher - 25-1 +- Fix incorrect bundled library detection for Requires + +* Tue Sep 01 2020 Stephen Gallagher - 24-1 +- Check node_modules_prod for bundled dependencies + +* Tue Jul 28 2020 Fedora Release Engineering - 23-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Jun 03 2020 Stephen Gallagher - 23-3 +- Drop Requires: nodejs(engine) + +* Wed Jan 29 2020 Fedora Release Engineering - 23-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Oct 31 2019 Tom Hughes - 23-1 +- Ensure nodejs(engine) is required for packages with no dependencies + +* Thu Jul 25 2019 Fedora Release Engineering - 22-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Tue Jul 2 2019 Tom Hughes - 22-1 +- Refactor nodejs.req in more idiomatic Python +- Treat only external dependency links as un-bundled + +* Mon Jun 10 2019 Tom Hughes - 21-1 +- Refactor nodejs.prov in more idiomatic Python + +* Fri Feb 01 2019 Fedora Release Engineering - 20-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Sat Jan 5 2019 Tom Hughes - 20-1 +- Fix handling of ^ dependencies for multiversion modules + +* Thu Jan 3 2019 Tom Hughes - 18-1 +- Handle =, >= and <= dependencies for multiversion modules + +* Fri Jul 13 2018 Fedora Release Engineering - 17-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu May 3 2018 Tom Hughes - 17-1 +- Fix version comparators with a space after the operator + +* Tue May 1 2018 Tom Hughes - 16-1 +- Rewrite nodejs.req to better match npm versioning rules +- Add tests for nodejs.req and nodejs.prov + +* Mon Apr 30 2018 Tom Hughes - 15-1 +- Fix caret dependency ranges + +* Thu Apr 12 2018 Tom Hughes - 14-1 +- Only match top level modules for requires and provides generation + +* Wed Feb 28 2018 Tom Hughes - 13-1 +- Add %%nodejs_setversion macro + +* Fri Feb 23 2018 Tom Hughes - 12-1 +- Port to python 3 + +* Thu Feb 08 2018 Fedora Release Engineering - 11-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Jan 13 2018 Tom Hughes - 11-1 +- nodesjs.req: use boolean with for range dependencies + +* Tue Sep 12 2017 Stephen Gallagher - 10-1 +- Release v10 +- Automatically generate Provides for bundled npm dependencies + +* Thu Jul 27 2017 Fedora Release Engineering - 9-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue Feb 21 2017 Tom Hughes - 9-3 +- switch source URL to pagure + +* Fri Feb 10 2017 Fedora Release Engineering - 9-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Tue Feb 2 2016 Tom Hughes - 9-1 +- nodejs-fixdep: stop --move erroring on missing dependency types + +* Sun Jan 31 2016 Tom Hughes - 8-1 +- nodejs-fixdep: add --move option +- nodejs-symlink-deps: add --optional option +- req: generate suggests for optional dependencies + +* Mon Nov 16 2015 Tom Hughes - 7-5 +- nodejs-symlink-deps: handle caret in versions + +* Wed Jun 17 2015 Fedora Release Engineering - 7-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed Mar 4 2015 Ville Skyttä - 7-3 +- Install macros in %%{_rpmconfidir}/macros.d where available (#1074279) + +* Sat Jun 07 2014 Fedora Release Engineering - 7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Sun May 25 2014 T.C. Hollingsworth - 7-1 +- nodejs-symlink-deps: fix regression preventing multiply versioned modules from + being symlinked correctly + +* Sat May 24 2014 T.C. Hollingsworth - 6-1 +- nodejs-fixdep: use real option parsing +- nodejs-fixdep: support modifying optionalDependencies and devDependencies +- req: support the caret operator +- nodejs-symlink-deps: add --force option +- nodejs-symlink-deps: add --build alias for --check +- nodejs-fixdep: support converting to caret dependencies +- nodejs-fixdep: support non-dictionary dependency properties +- multiver_modules: add nan + +* Mon Jul 29 2013 T.C. Hollingsworth - 4-1 +- handle cases where the symlink target exists gracefully + +* Wed Jul 10 2013 T.C. Hollingsworth - 3-1 +- dependencies and engines can be lists or strings too +- handle unversioned dependencies on multiply versioned modules correctly + (RHBZ#982798) +- restrict to compatible arches + +* Fri Jun 21 2013 T.C. Hollingsworth - 2-1 +- move multiple version list to /usr/share/node +- bump nodejs Requires to 0.10.12 +- add Requires: redhat-rpm-config + +* Thu Jun 13 2013 T.C. Hollingsworth - 1-1 +- initial package diff --git a/nodejs-symlink-deps b/nodejs-symlink-deps index ba525eb..b5e44b3 100755 --- a/nodejs-symlink-deps +++ b/nodejs-symlink-deps @@ -30,8 +30,6 @@ import shutil import sys def symlink(source, dest): - if os.path.sep in dest: - os.makedirs(os.path.dirname(dest), exist_ok=True) try: os.symlink(source, dest) except OSError: diff --git a/nodejs.req b/nodejs.req index 47e94aa..129606b 100755 --- a/nodejs.req +++ b/nodejs.req @@ -633,9 +633,9 @@ def has_only_bundled_dependencies(module_dir_path): for basename in os.listdir(dependency_root_path) ) bundled_dependency_iter = ( - path + os.path.realpath(path) for path in dependency_path_iter - if not os.path.islink(path) or os.path.realpath(path).startswith(module_root_path) + if not os.path.islink(path) or path.startswith(module_root_path) ) return any(bundled_dependency_iter) @@ -659,6 +659,9 @@ def extract_dependencies(metadata_path, optional=False): TypeError: Invalid dependency data type. """ + if has_only_bundled_dependencies(os.path.dirname(metadata_path)): + return # skip + # Read metadata try: with open(metadata_path, mode="r") as metadata_file: @@ -673,9 +676,6 @@ def extract_dependencies(metadata_path, optional=False): except KeyError: # NodeJS engine version unspecified yield rpm_format("nodejs(engine)") - if has_only_bundled_dependencies(os.path.dirname(metadata_path)): - return # skip - # Report listed dependencies kind = "optionalDependencies" if optional else "dependencies" container = metadata.get(kind, {}) diff --git a/nodejs_abi.attr b/nodejs_abi.attr new file mode 100644 index 0000000..d161239 --- /dev/null +++ b/nodejs_abi.attr @@ -0,0 +1,2 @@ +%__nodejs_native_requires %{_rpmconfigdir}/nodejs_abi.req +%__nodejs_native_path ^/usr/lib.*/node_modules/.*\\.node$ diff --git a/nodejs_abi.req b/nodejs_abi.req new file mode 100755 index 0000000..a33a7b5 --- /dev/null +++ b/nodejs_abi.req @@ -0,0 +1,8 @@ +#!/bin/bash + +# Get the ABI version +abi_version=$(/usr/bin/node -p process.versions.modules) + +# Write out the Virtual Requires +echo "nodejs(abi) = ${abi_version}" + diff --git a/sources b/sources index a7170f1..52e9e27 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (test.tar.gz) = 04c1e741caa124c12b1070b6411d1a9fef9b328e15ec274170b7dcd9d26d9a6f9db21d6722ce0b39d0b693f237398065dd127b95a9a6e4947e182db2e3fad6f2 +SHA512 (test.tar.gz) = dfbda67b8741f1ca36bf63b2e842f81ba07381b3d92e75fa7e29f8e456543b4cae55e95785902f31a14ae4d0b7e89161ba04c0c10c2fff617b4ae9607c91e599 diff --git a/test/bundled/nodejs.req.out.exp b/test/bundled/nodejs.req.out.exp index 64d8bb4..8b13789 100644 --- a/test/bundled/nodejs.req.out.exp +++ b/test/bundled/nodejs.req.out.exp @@ -1 +1 @@ -(nodejs(engine) >= 6 with nodejs(engine) < 10) + diff --git a/test/bundled_namespace/nodejs.req.out.exp b/test/bundled_namespace/nodejs.req.out.exp index 64d8bb4..8b13789 100644 --- a/test/bundled_namespace/nodejs.req.out.exp +++ b/test/bundled_namespace/nodejs.req.out.exp @@ -1 +1 @@ -(nodejs(engine) >= 6 with nodejs(engine) < 10) +