summaryrefslogtreecommitdiff
path: root/www/node16/Makefile
blob: 689c238837ecd0340f67c7189efe34723d7552cd (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
PORTNAME=	node
DISTVERSIONPREFIX=	v
DISTVERSION=	16.20.1
PORTREVISION?=	2
CATEGORIES=	www
MASTER_SITES=	https://nodejs.org/dist/v${DISTVERSION}/
PKGNAMESUFFIX=	16

MAINTAINER=	otis@FreeBSD.org
COMMENT=	V8 JavaScript for client and server
WWW=		https://nodejs.org/

LICENSE=	MIT
LICENSE_FILE=	${WRKSRC}/LICENSE

DEPRECATED=	Upstream EOL reaches on 2023-09-11
EXPIRATION_DATE=	2023-09-30

ONLY_FOR_ARCHS=	aarch64 amd64 armv6 armv7 i386 powerpc64 powerpc64le

BUILD_DEPENDS+=	brotli>=1.0.9,1:archivers/brotli \
		c-ares>=1.17.2:dns/c-ares \
		libnghttp2>=1.45.1:www/libnghttp2 \
		libuv>=1.42.0:devel/libuv \
		objdump:devel/binutils
LIB_DEPENDS+=	libbrotlidec.so:archivers/brotli \
		libcares.so:dns/c-ares \
		libnghttp2.so:www/libnghttp2 \
		libuv.so:devel/libuv

USES=		compiler:c++11-lib gmake localbase pkgconfig python:build \
		shebangfix

BROKEN_SSL=	libressl libressl-devel
BROKEN_SSL_REASON=	node.js ${PORTVERSION:R:R}.x LTS requires OpenSSL 1.1.x or the BUNDLED_SSL option enabled

SHEBANG_FILES=	deps/v8/third_party/inspector_protocol/*.py deps/v8/tools/*.py \
		tools/*.py tools/inspector_protocol/*.py

HAS_CONFIGURE=	yes
CONFIGURE_ARGS=	--prefix=${PREFIX_RELDEST} \
		--shared-brotli \
		--shared-cares \
		--shared-libuv \
		--shared-nghttp2 \
		--shared-zlib \
		--without-npm
CONFIGURE_ENV+=	CC_host="${CCACHE_BIN} ${CC}" \
		CFLAGS_host="${CFLAGS}" \
		CXX_host="${CCACHE_BIN} ${CXX}" \
		CXXFLAGS_host="${CXXFLAGS}" \
		LINK_host=${CXX} \
		LDFLAGS_host="${LDFLAGS}"
MAKE_ARGS+=	CC.host="${CCACHE_BIN} ${CC}" \
		CFLAGS.host="${CFLAGS}" \
		CXX.host="${CCACHE_BIN} ${CXX}" \
		CXXFLAGS.host="${CXXFLAGS}" \
		LINK.host=${CXX} \
		LDFLAGS.host="${LDFLAGS}"

CONFLICTS_INSTALL=	node[0-9][0-9]

REINPLACE_ARGS=	-i ''
PORTSCOUT=	limit:^16\.

OPTIONS_DEFINE=		BUNDLED_SSL COREPACK DOCS DTRACE NLS
OPTIONS_DEFAULT=	COREPACK DTRACE

.if !exists(/usr/sbin/dtrace)
OPTIONS_EXCLUDE+=	DTRACE
.endif

OPTIONS_EXCLUDE_aarch64=	DTRACE
# dt_modtext:/usr/src/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c(820): arm not implemented
OPTIONS_EXCLUDE_armv6=	DTRACE
OPTIONS_EXCLUDE_armv7=	DTRACE
OPTIONS_EXCLUDE_powerpc64=	DTRACE
OPTIONS_EXCLUDE_powerpc64le=	DTRACE

OPTIONS_SUB=	yes

BUNDLED_SSL_DESC=	Use node.js's bundled OpenSSL implementation
COREPACK_DESC=		Build and install corepack package manager

BUNDLED_SSL_RUN_DEPENDS_OFF=	ca_root_nss>=0:security/ca_root_nss
BUNDLED_SSL_USES_OFF=		ssl
BUNDLED_SSL_CONFIGURE_OFF=	--openssl-use-def-ca-store \
				--shared-openssl

COREPACK_CONFIGURE_OFF=	--without-corepack

DTRACE_CONFIGURE_ON=	--with-dtrace

NLS_BUILD_DEPENDS=	icu>=69.1:devel/icu
NLS_LIB_DEPENDS=	libicui18n.so:devel/icu
NLS_CONFIGURE_ON=	--with-intl=system-icu

PREFIX_RELDEST=	${PREFIX:S,^${DESTDIR},,}

.include <bsd.port.pre.mk>

.if (defined(PPC_ABI) && ${PPC_ABI} == ELFv2) || ${ARCH} == powerpc64le
EXTRA_PATCHES=	${PATCHDIR}/extra-patch-common.gypi
.endif

.if ${ARCH} == armv6 || ${ARCH} == armv7
EXTRA_PATCHES=	${PATCHDIR}/extra-patch-tools_v8__gypfiles_v8.gyp
.endif

.if ${PORT_OPTIONS:MBUNDLED_SSL} && ${ARCH} != amd64
CONFIGURE_ARGS+=	--openssl-no-asm
.endif

.if ${COMPILER_TYPE} == clang && ${COMPILER_VERSION} >= 160
CXXFLAGS+=	-Wno-error=enum-constexpr-conversion
.endif

post-patch:
	@${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|' \
		${WRKSRC}/tools/v8_gypfiles/v8.gyp

post-configure:
# Post-process Makefile and *.mk files created by node-gyp and remove
# all occurrences of -I${LOCALBASE}/include. C*FLAGS include this
# before all -I../deps/* for bundled code. This can cause build
# breakages if the dependency is installed in ${LOCALBASE}. The
# USES+=localbase # above will ensure that we pick up includes for real
# external dependencies.
	${FIND} ${WRKSRC}/out -type f -print0 \
		| ${XARGS} -0 ${REINPLACE_CMD} -e "s|-I${LOCALBASE}/include||g"

post-install:
	${RM} -rf ${STAGEDIR}${PREFIX}/share/systemtap
	${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/node

post-install-DTRACE-on:
	${MKDIR} ${STAGEDIR}${PREFIX}/lib/dtrace
	${INSTALL_DATA} ${WRKSRC}/out/Release/node.d ${STAGEDIR}${PREFIX}/lib/dtrace

.include <bsd.port.post.mk>