| DEPENDS_prepend = "nodejs-native " |
| RDEPENDS_${PN}_prepend = "nodejs " |
| S = "${WORKDIR}/npmpkg" |
| |
| def node_pkgname(d): |
| bpn = d.getVar('BPN') |
| if bpn.startswith("node-"): |
| return bpn[5:] |
| return bpn |
| |
| NPMPN ?= "${@node_pkgname(d)}" |
| |
| NPM_INSTALLDIR = "${libdir}/node_modules/${NPMPN}" |
| |
| # function maps arch names to npm arch names |
| def npm_oe_arch_map(target_arch, d): |
| import re |
| if re.match('p(pc|owerpc)(|64)', target_arch): return 'ppc' |
| elif re.match('i.86$', target_arch): return 'ia32' |
| elif re.match('x86_64$', target_arch): return 'x64' |
| elif re.match('arm64$', target_arch): return 'arm' |
| return target_arch |
| |
| NPM_ARCH ?= "${@npm_oe_arch_map(d.getVar('TARGET_ARCH'), d)}" |
| NPM_INSTALL_DEV ?= "0" |
| |
| npm_do_compile() { |
| # Copy in any additionally fetched modules |
| if [ -d ${WORKDIR}/node_modules ] ; then |
| cp -a ${WORKDIR}/node_modules ${S}/ |
| fi |
| # changing the home directory to the working directory, the .npmrc will |
| # be created in this directory |
| export HOME=${WORKDIR} |
| if [ "${NPM_INSTALL_DEV}" = "1" ]; then |
| npm config set dev true |
| else |
| npm config set dev false |
| fi |
| npm set cache ${WORKDIR}/npm_cache |
| # clear cache before every build |
| npm cache clear --force |
| # Install pkg into ${S} without going to the registry |
| if [ "${NPM_INSTALL_DEV}" = "1" ]; then |
| npm --arch=${NPM_ARCH} --target_arch=${NPM_ARCH} --no-registry install |
| else |
| npm --arch=${NPM_ARCH} --target_arch=${NPM_ARCH} --production --no-registry install |
| fi |
| } |
| |
| npm_do_install() { |
| # changing the home directory to the working directory, the .npmrc will |
| # be created in this directory |
| export HOME=${WORKDIR} |
| mkdir -p ${D}${libdir}/node_modules |
| local NPM_PACKFILE=$(npm pack .) |
| npm install --prefix ${D}${prefix} -g --arch=${NPM_ARCH} --target_arch=${NPM_ARCH} --production --no-registry ${NPM_PACKFILE} |
| ln -fs node_modules ${D}${libdir}/node |
| find ${D}${NPM_INSTALLDIR} -type f \( -name "*.a" -o -name "*.d" -o -name "*.o" \) -delete |
| if [ -d ${D}${prefix}/etc ] ; then |
| # This will be empty |
| rmdir ${D}${prefix}/etc |
| fi |
| } |
| |
| python populate_packages_prepend () { |
| instdir = d.expand('${D}${NPM_INSTALLDIR}') |
| extrapackages = oe.package.npm_split_package_dirs(instdir) |
| pkgnames = extrapackages.keys() |
| d.prependVar('PACKAGES', '%s ' % ' '.join(pkgnames)) |
| for pkgname in pkgnames: |
| pkgrelpath, pdata = extrapackages[pkgname] |
| pkgpath = '${NPM_INSTALLDIR}/' + pkgrelpath |
| # package names can't have underscores but npm packages sometimes use them |
| oe_pkg_name = pkgname.replace('_', '-') |
| expanded_pkgname = d.expand(oe_pkg_name) |
| d.setVar('FILES_%s' % expanded_pkgname, pkgpath) |
| if pdata: |
| version = pdata.get('version', None) |
| if version: |
| d.setVar('PKGV_%s' % expanded_pkgname, version) |
| description = pdata.get('description', None) |
| if description: |
| d.setVar('SUMMARY_%s' % expanded_pkgname, description.replace(u"\u2018", "'").replace(u"\u2019", "'")) |
| d.appendVar('RDEPENDS_%s' % d.getVar('PN'), ' %s' % ' '.join(pkgnames).replace('_', '-')) |
| } |
| |
| FILES_${PN} += " \ |
| ${bindir} \ |
| ${libdir}/node \ |
| ${NPM_INSTALLDIR} \ |
| " |
| |
| EXPORT_FUNCTIONS do_compile do_install |