View | Details | Raw Unified | Return to bug 204577 | Differences between
and this patch

Collapse All | Expand All

(-)Mk2/bsd.node.mk (+139 lines)
Line 0 Link Here
1
# $FreeBSD$
2
#
3
# handle node projects
4
#
5
# Feature:	NODE
6
# Usage:	USE_NODE=yes
7
#
8
# MAINTAINER: portmgr@FreeBSD.org
9
10
.if !defined(_INCLUDE_USES_NODE_MK)
11
_INCLUDE_USES_NODE_MK=	yes
12
13
## XXX pending https://github.com/npm/npm/issues/10406
14
NO_CHECKSUM=		yes
15
16
FETCH_DEPENDS=	npm:${PORTSDIR}/www/npm
17
BUILD_DEPENDS=	npm:${PORTSDIR}/www/npm
18
RUN_DEPENDS=	node:${PORTSDIR}/www/node
19
20
.if defined(NODE_MODULES)
21
FETCH_DEPENDS+=	jq:${PORTSDIR}/textproc/jq
22
JQ_CMD=		${LOCALBASE}/bin/jq
23
.endif
24
25
.if defined(NODE_GH_ACCOUNT)
26
.  if ! defined(NODE_GH_PROJECT)
27
NODE_GH_PROJECT=	${PORTNAME}
28
.  endif
29
.  if ! defined(NODE_GH_TAGNAME)
30
NODE_GH_TAGNAME=	${DISTVERSIONFULL}
31
.  endif
32
_NODE_PROJECT_FILE=	${NODE_GH_ACCOUNT}-${NODE_GH_PROJECT}-${NODE_GH_TAGNAME}-node-project.tar.gz
33
_NODE_DIST_FILE=	${NODE_GH_PROJECT}-${NODE_GH_TAGNAME}.tar.gz
34
_NODE_DIR=		${NODE_GH_PROJECT}-${NODE_GH_TAGNAME}
35
_NODE_GH_URL=		https://codeload.github.com/${NODE_GH_ACCOUNT}/${NODE_GH_PROJECT}/tar.gz/${NODE_GH_TAGNAME}?dummy=/${_NODE_PROJECT_FILE}
36
.endif
37
38
# commands
39
NPM_CMD=		${LOCALBASE}/bin/npm
40
NODE_CMD=		${LOCALBASE}/bin/node
41
42
# variables
43
NPM_ENV+=		C=cc CXX=c++
44
NPM_FETCH_ARGS=		--loglevel warn --ignore-scripts
45
NPM_SHRINKWRAP_ARGS=	--dev
46
SHRINKWRAP_FILE=	${FILESDIR}/npm-shrinkwrap.json
47
NODE_INSTALL_BASE=	${LOCALBASE}/share/node-projects
48
NODE_INSTALL_DIR=	${NODE_INSTALL_BASE}/${NODE_GH_ACCOUNT}-${NODE_GH_PROJECT}
49
_NODE_MASTER_SITE_BACKUP_URLS= ${MASTER_SITE_BACKUP}${_NODE_DIST_FILE}
50
.if defined(NODE_SRCDIR)
51
_NODE_DO_CD=node_modules/${NODE_SUBDIR}
52
.else
53
_NODE_DO_CD=.
54
.endif
55
56
makeshrinkwrap: do-fetch
57
	@cd ${_DISTDIR}; \
58
	${TAR} xzf ${_NODE_DIST_FILE} && \
59
	cd ${_NODE_DIR} && \
60
	cd ${_NODE_DO_CD} && \
61
	${NPM_CMD} shrinkwrap ${NPM_SHRINKWRAP_ARGS} && \
62
	${CP} npm-shrinkwrap.json ${SHRINKWRAP_FILE} && \
63
	cd ${_DISTDIR} && \
64
	${RM} -r ${_NODE_DIR}
65
66
do-fetch:
67
	@${MKDIR} ${_DISTDIR}
68
	@cd ${_DISTDIR}; \
69
		force_fetch=false; \
70
		for afile in ${FORCE_FETCH}; do \
71
			afile=$${afile##*/}; \
72
			if [ "x$$afile" = "x${_NODE_DIST_FILE}" ]; then \
73
				force_fetch=true; \
74
			fi; \
75
		done; \
76
		if [ ! -f ${_NODE_DIST_FILE} -o "$$force_fetch" = "true" ]; then \
77
		        ${RM} -rf ${_NODE_PROJECT_FILE} ${_NODE_DIR} ${_NODE_DIST_FILE}; \
78
		        for url in ${_NODE_MASTER_SITE_BACKUP_URLS}; do \
79
		          if ${ECHO_MSG} "=> Attempting to fetch ${PORTNAME} from the master backup site" && \
80
		             ${SETENV} ${FETCH_ENV} ${FETCH_CMD} ${FETCH_BEFORE_ARGS} $${url} ${FETCH_AFTER_ARGS}; then \
81
		             return 0; \
82
		        fi; \
83
		        done; \
84
		        for url in ${_NODE_GH_URL}; do \
85
		          if ${ECHO_MSG} "=> Attempting to fetch ${PORTNAME} from github" && \
86
		             ${SETENV} ${FETCH_ENV} ${FETCH_CMD} ${FETCH_BEFORE_ARGS} $${url} ${FETCH_AFTER_ARGS} && \
87
		             ${ECHO_MSG} "=> Extracting node project source" && \
88
		             ${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} ${_NODE_PROJECT_FILE} ${EXTRACT_AFTER_ARGS} && \
89
		             ${RM} ${_NODE_PROJECT_FILE} && \
90
		             ${ECHO_MSG} "=> Preparing the node project" && \
91
		             cd ${_NODE_DIR} && \
92
		             ([ -z "${NODE_SRCDIR}" ] || \
93
		                (${MKDIR} node_modules && \
94
		                 ${MV} ${NODE_SRCDIR} node_modules/${NODE_SUBDIR} \
95
		                ) \
96
		             ) && cd ${_NODE_DO_CD} && \
97
		             for m in ${NODE_MODULES}; do \
98
		               ${ECHO} $${m} | ${SED} -E "s/^([[:alnum:]]+):([[:digit:].]+)/{\"dependencies\":{\"\1\":\"\2\"}}/" > package-delta.json && \
99
		               ${JQ_CMD} -s '.[0] * .[1]' package.json package-delta.json > package-new.json && \
100
		               ${MV} package-new.json package.json && \
101
		               ${RM} package-delta.json; \
102
		             done && \
103
		             ([ -f "${SHRINKWRAP_FILE}" ] || ${ECHO} "Warning: no shrinkwrap file, you need to run 'make makeshrinkwrap' >&2") && \
104
		             ([ ! -f "${SHRINKWRAP_FILE}" ] || \
105
		              ${CP} ${SHRINKWRAP_FILE} npm-shrinkwrap.json) && \
106
		             ${ECHO_MSG} "=> Downloading the project dependencies" && \
107
		             ${NPM_ENV} ${NPM_CMD} install ${NPM_FETCH_ARGS} && \
108
		             cd ${_DISTDIR} && \
109
		             ${FIND} ${_NODE_DIR} -and -exec ${TOUCH} -h -d 1970-01-01T00:00:00Z {} + && \
110
		             ${FIND} ${_NODE_DIR} -print0 | sort -z | \
111
		                  ${TAR} czf ${_NODE_DIST_FILE} --options gzip:!timestamp --no-recursion --null -T - && \
112
		             ${RM} -rf ${_NODE_DIR}; then \
113
		             return 0; \
114
		        fi; \
115
		        done; \
116
		        ${ECHO_MSG} "=> Fetch failed for ${PORTNAME}"; \
117
		        exit 1; \
118
		fi;
119
120
do-build:
121
	@cd ${WRKSRC} && \
122
		cd ${_NODE_DO_CD} && \
123
		${NPM_ENV} ${NPM_CMD} rebuild ${NPM_BUILD_ARGS}
124
125
do-install:
126
	@${ECHO} "=> Staging ${PKGNAME}"
127
	@${MKDIR} ${STAGEDIR}${NODE_INSTALL_BASE}
128
	@${CP} -r ${WRKSRC} ${STAGEDIR}${NODE_INSTALL_DIR}
129
	@${RM} `${FIND} ${STAGEDIR}${NODE_INSTALL_DIR} -name Makefile`
130
	@${RM} `${FIND} ${STAGEDIR}${NODE_INSTALL_DIR} -name "*.bat"`
131
	@${RM} `${FIND} ${STAGEDIR}${NODE_INSTALL_DIR} -name "*.log"`
132
	@${RM} `${FIND} ${STAGEDIR}${NODE_INSTALL_DIR} -name "*.orig"`
133
	@${RM} `${FIND} ${STAGEDIR}${NODE_INSTALL_DIR} -name "*.bak"`
134
	@${RM} `${FIND} ${STAGEDIR}${NODE_INSTALL_DIR} -name ".git*"`
135
	@${RM} `${FIND} ${STAGEDIR}${NODE_INSTALL_DIR} -name npm-shrinkwrap.json`
136
	@${STRIP_CMD} `${FIND} ${STAGEDIR}${NODE_INSTALL_DIR} -name "*.o"`
137
	@${STRIP_CMD} `${FIND} ${STAGEDIR}${NODE_INSTALL_DIR} -name "*.node"`
138
139
.endif

Return to bug 204577