%_rpm_build_nodejsdir	%_datadir/rpm-build-nodejs
%nodejs_arches	x86_64 aarch64 loongarch64 riscv64 mipsel
# nodejs binary
%__nodejs %{_bindir}/node

# nodejs library directory
%nodejs_sitelib %{_prefix}/lib/node_modules

#arch specific library directory
#for future-proofing only; we don't do multilib
%nodejs_sitearch %{nodejs_sitelib}

# currently installed nodejs version
%nodejs_version %(%{__nodejs} -v | sed -e-e  "s/v//")

# symlink dependencies so `npm link` works
# this should be run in every module's %%install section
# pass --check to work in the current directory instead of the buildroot
# pass --no-devdeps to ignore devDependencies when --check is used
%nodejs_symlink_deps %{_rpm_build_nodejsdir}/nodejs-symlink-deps %{nodejs_sitelib}

# patch package.json to fix a dependency
# see `man npm-json` for details on writing dependencies for package.json files
# e.g. `%%nodejs_fixdep frobber` makes any version of frobber do
#      `%%nodejs_fixdep frobber '>1.0'` requires frobber > 1.0
#      `%%nodejs_fixdep -r frobber removes the frobber dep
%nodejs_fixdep %{_rpm_build_nodejsdir}/nodejs-fixdep

# patch package.json to set the package version
# e.g. `%%nodejs_setversion 1.2.3` 
%nodejs_setversion %{_rpm_build_nodejsdir}/nodejs-setversion

# macro to filter unwanted provides from Node.js binary native modules
%nodejs_default_filter %add_findprov_skiplist %{nodejs_sitearch}/*.node

# no-op macro to allow spec compatibility with EPEL
%nodejs_find_provides_and_requires %{nil}


%npm_build() \
   if [[ -f "binding.gyp" ]]; then \
      sed "s/\\('cflags': \\[ \\).*\\( \\].*\\)/\\1'-O2', '-fpic'\\2/" -i binding.gyp \
      node-gyp configure \
      node-gyp build --release \
   fi \
%{nil}

%npm_test() \
    npm test \
%{nil}

# use after npm_install
%npm_prune() \
    cd %buildroot/%nodejs_sitelib/%{?pname:%pname}%{?node_module:%node_module}/ \
    [ -s package.json ] && npm prune --production \
    rm -rfv __tests__ test tests doc docs examples \
    find -type d -name test | xargs rm -rfv \
%{nil}

%npm_install()  \
   set +x \
   mkdir -p %buildroot%nodejs_sitelib/%pname \
   ignorelist="$(cat .npmignore | sed "s/^\\///") $(cat .gitignore | sed "s/^\\///") .npmignore .gitignore .travis.yml .github/" \
   find . | while read f; do \
      ignore=$(for l in $ignorelist; do [[ "$f" =~ "./$l" ]] && echo $f; done; true) \
      if [ -z "$ignore" -a -f "$f" ]; then \
         echo "Installing $f -> %buildroot%nodejs_sitelib/%pname/$(dirname "$f")/" \
         mkdir -p "%buildroot%nodejs_sitelib/%pname/$(dirname "$f")/" \
         cp -p "$f" "%buildroot%nodejs_sitelib/%pname/$(dirname "$f")/" \
      fi \
   done \
   [ -d ./build/Release ] && find ./build/Release/ -maxdepth 1 -name *.node | while read f; do \
      mkdir -p "%buildroot%nodejs_sitelib/%pname/$(dirname "$f")/" \
      cp -p "$f" "%buildroot%nodejs_sitelib/%pname/$(dirname "$f")/" \
   done \
   set -x \
%{nil}
# Macros to call tap in %%check
# in case we want to pass options to tap later on, e.g. to increase the timeout
%__tap /usr/bin/tap
%tap %{__tap}
# Node.js native platform arch for npm optional dependencies
# Used by esbuild, rollup, etc. for platform-specific binaries
