aboutsummaryrefslogtreecommitdiff
blob: a0f7271a9aa5b99d5d7786a6e601bb3e557726bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# $Header: $

# @ECLASS: npm.eclass
# @MAINTAINER:
# Samuel Bernardo <samuelbernardo.mail@gmail.com>
# @BLURB: Eclass for NodeJS packages available through the npm registry.
# @DESCRIPTION:
# This eclass contains various functions that may be useful when dealing with
# packages from the npm registry, for NodeJS.
# Requires EAPI=2 or later.

case ${EAPI} in
    2|3|4|5|6|7) : ;;
    *)     die "npm.eclass: unsupported EAPI=${EAPI:-0}" ;;
esac

inherit multilib

# @ECLASS-VARIABLE: NPM_MODULE
# @DESCRIPTION:
# Name of the resulting NodeJS/npm module. 
# The Default value for NPM_MODULE is ${PN}
#
# Example: NPM_MODULE="${MY_PN}"
if [[ -z $NPM_MODULE ]]; then
	NPM_MODULE="${PN}"
fi

# @ECLASS-VARIABLE: NPM_FILES
# @INTERNAL
# @DESCRIPTION:
# Files and directories that usually come in a standard NodeJS/npm module.
NPM_FILES="index.js lib package.json ${NPM_MODULE}.js"

# @ECLASS-VARIABLE: NPM_DOCS
# @DESCRIPTION:
# Document files that come in a NodeJS/npm module, outside of the usual docs
# list of README*, ChangeLog AUTHORS* etc. These are only installed if 'doc' is
# in ${USE}
# NPM_DOCS="README* LICENSE HISTORY*"

# @ECLASS-VARIABLE: NPM_EXTRA_FILES
# @DESCRIPTION:
# If additional dist files are present in the NodeJS/npm module that are not
# listed in NPM_FILES, then this is the place to put them in.
# Can be either files, or directories.
# Example: NPM_EXTRA_FILES="rigger.js modules"

# @ECLASS-VARIABLE: NPM_BIN
# @DESCRIPTION:
# If there is files that must be included in /usr/bin listed in NPM_FILES or
# NPM_EXTRA_FILES, then this is the place to put them in.
# Only files are expected.
# Example: NPM_BIN="bin/grunt"

# @ECLASS-VARIABLE: NPM_PN_URI
# @DESCRIPTION:
# Name of the package at the npm registry. 
# The Default value for NPM_PN_URI is ${PN}
#
# Example: NPM_PN_URI="${MY_PN}"
if [[ -z $NPM_PN_URI ]]; then
	NPM_PN_URI="${PN}"
fi

# @ECLASS-VARIABLE: NPM_GROUP_URI
# @DESCRIPTION:
# Name of the group at the npm registry. 
# The Default value for NPM_GROUP_URI is ${NPM_PN_URI}
#
# Example: NPM_GROUP_URI="${MY_PN}"
if [[ -z $NPM_GROUP_URI ]]; then
	NPM_GROUP_URI="${NPM_PN_URI}"
fi

HOMEPAGE="https://www.npmjs.org/package/${NPM_PN_URI}"
SRC_URI="http://registry.npmjs.org/${NPM_GROUP_URI}/-/${NPM_PN_URI}-${PV}.tgz"

# @FUNCTION: npm-src_unpack
# @DESCRIPTION:
# Default src_unpack function for NodeJS/npm packages. This funtions unpacks
# the source code, then renames the 'package' dir to ${S}.

npm_src_unpack() {
    unpack "${A}"
    mv "${WORKDIR}/package" ${S}
}

# @FUNCTION: npm-src_compile
# @DESCRIPTION:
# This function does nothing.
npm_src_compile() {
    true
}

# @FUNCTION: npm-src_install
# @DESCRIPTION:
# This function installs the NodeJS/npm module to an appropriate location, also
# taking care of NPM_FILES, NPM_EXTRA_FILES, NPM_DOCS

npm_src_install() {
    local npm_files="${NPM_FILES} ${NPM_EXTRA_FILES}"
    local node_modules="${D}/usr/$(get_libdir)/node_modules/${NPM_MODULE}"

    mkdir -p ${node_modules} || die "Could not create DEST folder"

    for f in ${npm_files}
    do
        if [[ -e "${S}/$f" ]]; then
            cp -r "${S}/$f" ${node_modules}
        fi
    done

	# Install docs usually found in NodeJS/NPM packages.
	local f
	for f in README* HISTORY* ChangeLog AUTHORS NEWS TODO CHANGES \
			THANKS BUGS FAQ CREDITS CHANGELOG*; do
		if [[ -s ${f} ]]; then
			dodoc "${f}"
		fi
	done
    
    if has doc ${USE}; then
        local npm_docs="${NPM_DOCS}"

        for f in $npm_docs
        do
            if [[ -e "${S}/$f" ]]; then
                dodoc -r "${S}/$f"
            fi
        done
    fi

    if [[ ! -z $NPM_BIN ]]; then
	local npm_bin="${NPM_BIN}"

	for f in $npm_bin
	do
	    if [[ -f "${S}/bin/$f" ]]; then
		dobin "${S}/bin/$f"
	    fi
        done
    fi
}

EXPORT_FUNCTIONS src_unpack src_compile src_install