diff options
Diffstat (limited to 'meta/classes/npm.bbclass')
| -rw-r--r-- | meta/classes/npm.bbclass | 52 |
1 files changed, 44 insertions, 8 deletions
diff --git a/meta/classes/npm.bbclass b/meta/classes/npm.bbclass index b5db99d2b9..a69bedbb28 100644 --- a/meta/classes/npm.bbclass +++ b/meta/classes/npm.bbclass @@ -1,21 +1,55 @@ DEPENDS_prepend = "nodejs-native " +RDEPENDS_${PN}_prepend = "nodejs " S = "${WORKDIR}/npmpkg" +NPM_INSTALLDIR = "${D}${libdir}/node_modules/${PN}" + +# 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} - npm config set dev false + 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 # Install pkg into ${S} without going to the registry - npm --arch=${TARGET_ARCH} --production --no-registry install + 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() { - mkdir -p ${D}${libdir}/node_modules/${PN}/ - cp -a ${S}/* ${D}${libdir}/node_modules/${PN}/ --no-preserve=ownership + # changing the home directory to the working directory, the .npmrc will + # be created in this directory + export HOME=${WORKDIR} + mkdir -p ${NPM_INSTALLDIR}/ + npm install --prefix ${D}${prefix} -g --arch=${NPM_ARCH} --target_arch=${NPM_ARCH} --production --no-registry + if [ -d ${D}${prefix}/etc ] ; then + # This will be empty + rmdir ${D}${prefix}/etc + fi } python populate_packages_prepend () { @@ -26,16 +60,18 @@ python populate_packages_prepend () { for pkgname in pkgnames: pkgrelpath, pdata = extrapackages[pkgname] pkgpath = '${libdir}/node_modules/${PN}/' + pkgrelpath - expanded_pkgname = d.expand(pkgname) + # 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.encode("utf8")) + 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", "'").encode("utf8")) - d.appendVar('RDEPENDS_%s' % d.getVar('PN', True), ' %s' % ' '.join(pkgnames)) + 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} += " \ |
