1PORTNAME=	nginx
2PORTVERSION=	${NGINX_VERSION}
3.include "version.mk"
4PORTEPOCH=	3
5CATEGORIES=	www
6MASTER_SITES=	https://nginx.org/download/ \
7		FREEBSD_LOCAL/joneum
8DISTFILES=	${DISTNAME}${EXTRACT_SUFX}
9
10MAINTAINER?=	ports@MidnightBSD.org
11COMMENT?=	Robust and small WWW server
12WWW=		https://nginx.com/
13
14LICENSE=	bsd2
15LICENSE_FILE=	${WRKSRC}/LICENSE
16
17CONFLICTS_INSTALL=	nginx-devel
18
19PORTSCOUT=	limit:^1\.30\.[0-9]*
20
21USES=		cpe
22
23CPE_VENDOR=	f5
24CPE_PRODUCT=	nginx
25USE_GITHUB=	nodefault
26
27NGINX_VARDIR?=	/var
28NGINX_LOGDIR?=	${NGINX_VARDIR}/log/nginx
29NGINX_RUNDIR?=	${NGINX_VARDIR}/run
30NGINX_TMPDIR?=	${NGINX_VARDIR}/tmp/nginx
31HTTP_PORT?=	80
32
33NGINX_ACCESSLOG?=	${NGINX_LOGDIR}/access.log
34NGINX_ERRORLOG?=	${NGINX_LOGDIR}/error.log
35
36CONFLICTS?=	nginx-devel-1.* \
37		nginx-full-1.* \
38		nginx-lite-1.* \
39		nginx-naxsi-1.*
40USE_RC_SUBR?=	nginx
41SUB_FILES?=	pkg-message
42SUB_LIST+=	WWWOWN=${WWWOWN} \
43		WWWGRP=${WWWGRP} \
44		NGINX_RUNDIR=${NGINX_RUNDIR} \
45		NGINX_TMPDIR=${NGINX_TMPDIR} \
46		PREFIX=${PREFIX}
47
48HAS_CONFIGURE=	yes
49CONFIGURE_ARGS+=--prefix=${ETCDIR} \
50		--with-cc-opt="-I ${LOCALBASE}/include" \
51		--conf-path=${ETCDIR}/nginx.conf \
52		--sbin-path=${PREFIX}/sbin/nginx \
53		--pid-path=${NGINX_RUNDIR}/nginx.pid \
54		--error-log-path=${NGINX_ERRORLOG} \
55		--user=${WWWOWN} --group=${WWWGRP} \
56		--with-compat \
57		--with-pcre
58ALL_TARGET=
59
60PLIST_SUB+=	NGINX_TMPDIR=${NGINX_TMPDIR} NGINX_LOGDIR=${NGINX_LOGDIR} WWWOWN=${WWWOWN} WWWGRP=${WWWGRP}
61
62USERS?=	${WWWOWN}
63GROUPS?=${WWWGRP}
64
65NO_OPTIONS_SORT=	yes
66
67OPTIONS_GROUP=	HTTPGRP MAILGRP STREAMGRP
68# Modules that are part of the base nginx distribution
69OPTIONS_GROUP_HTTPGRP=	GOOGLE_PERFTOOLS HTTP HTTP_ADDITION HTTP_AUTH_REQ \
70	HTTP_CACHE HTTP_DAV HTTP_DEGRADATION HTTP_FLV HTTP_GUNZIP_FILTER \
71	HTTP_GZIP_STATIC HTTP_IMAGE_FILTER HTTP_MP4 HTTP_PERL \
72	HTTP_RANDOM_INDEX HTTP_REALIP HTTP_SECURE_LINK HTTP_SLICE HTTP_SSL \
73	HTTP_STATUS HTTP_SUB HTTP_XSLT HTTPV2 HTTPV3 HTTPV3_BORING HTTPV3_LSSL
74
75OPTIONS_GROUP_MAILGRP=	MAIL MAIL_IMAP MAIL_POP3 MAIL_SMTP MAIL_SSL
76
77OPTIONS_GROUP_STREAMGRP=	STREAM STREAM_REALIP STREAM_SSL \
78	STREAM_SSL_PREREAD
79
80OPTIONS_DEFINE=		DEBUG DEBUGLOG DSO FILE_AIO IPV6 NJS NJS_XML OTEL THREADS WWW
81OPTIONS_DEFAULT?=	DSO FILE_AIO HTTP HTTP_ADDITION HTTP_AUTH_REQ HTTP_CACHE \
82		HTTP_DAV HTTP_FLV HTTP_GUNZIP_FILTER HTTP_GZIP_STATIC HTTP_MP4 \
83		HTTP_RANDOM_INDEX HTTP_REALIP HTTP_SECURE_LINK HTTP_SLICE HTTP_SSL \
84		HTTP_STATUS HTTP_SUB HTTPV2 HTTPV3 MAIL MAIL_SSL STREAM \
85		STREAM_REALIP STREAM_SSL STREAM_SSL_PREREAD THREADS WWW
86
87LIB_DEPENDS+=	libpcre2-8.so:devel/pcre2
88
89OPTIONS_RADIO+=		GSSAPI
90OPTIONS_RADIO_GSSAPI=	GSSAPI_HEIMDAL GSSAPI_MIT
91GSSAPI_HEIMDAL_USES=	gssapi:heimdal,flags
92GSSAPI_MIT_USES=	gssapi:mit
93
94OPTIONS_SUB=	yes
95
96.include "Makefile.options.desc"
97
98.for opt in ${OPTIONS_GROUP_MAILGRP:NMAIL}
99${opt}_IMPLIES=	MAIL
100.endfor
101
102.for opt in ${OPTIONS_GROUP_HTTPGRP:NHTTP} WWW
103${opt}_IMPLIES=	HTTP
104.endfor
105
106.for opt in ${OPTIONS_GROUP_STREAMGRP:NSTREAM}
107${opt}_IMPLIES=	STREAM
108.endfor
109
110GSSAPI_HEIMDAL_IMPLIES=	HTTP_AUTH_KRB5
111GSSAPI_MIT_IMPLIES=	HTTP_AUTH_KRB5
112
113# If the target is makesum, make sure that every distfile is fetched.
114.if ${.TARGETS:Mmakesum}
115OPTIONS_DEFAULT=	${OPTIONS_DEFINE} ${OPTIONS_GROUP_HTTPGRP} \
116	${OPTIONS_GROUP_MAILGRP} ${OPTIONS_GROUP_STREAMGRP} \
117	${OPTIONS_GROUP_THIRDPARTYGRP}
118.endif
119
120# Non-module options handling
121DEBUG_CFLAGS=		-g
122DEBUG_VARS=		STRIP=#do not strip if nginx with debug information
123DEBUGLOG_CONFIGURE_ON=	--with-debug
124DSO_CONFIGURE_ON=	--modules-path=${MODULESDIR}
125DSO_VARS=		MODULESDIR=${PREFIX}/libexec/${PORTNAME}
126FILE_AIO_CONFIGURE_ON=	--with-file-aio
127IPV6_CONFIGURE_OFF=	--with-cc-opt="-DNGX_HAVE_INET6=0 -I ${LOCALBASE}/include"
128THREADS_CONFIGURE_ON=	--with-threads
129
130# Bundled modules
131GOOGLE_PERFTOOLS_LIB_DEPENDS=	libprofiler.so:devel/google-perftools
132GOOGLE_PERFTOOLS_CONFIGURE_ON=	--with-google_perftools_module
133HTTP_CONFIGURE_ON=		--http-client-body-temp-path=${NGINX_TMPDIR}/client_body_temp \
134				--http-fastcgi-temp-path=${NGINX_TMPDIR}/fastcgi_temp \
135				--http-proxy-temp-path=${NGINX_TMPDIR}/proxy_temp \
136				--http-scgi-temp-path=${NGINX_TMPDIR}/scgi_temp \
137				--http-uwsgi-temp-path=${NGINX_TMPDIR}/uwsgi_temp \
138				--http-log-path=${NGINX_ACCESSLOG}
139HTTP_CONFIGURE_OFF=		--without-http
140HTTP_ADDITION_CONFIGURE_ON=	--with-http_addition_module
141HTTP_AUTH_REQ_CONFIGURE_ON=	--with-http_auth_request_module
142HTTP_CACHE_CONFIGURE_OFF=	--without-http-cache
143HTTP_DAV_CONFIGURE_ON=		--with-http_dav_module
144HTTP_DEGRADATION_CONFIGURE_ON=	--with-http_degradation_module
145HTTP_FLV_CONFIGURE_ON=		--with-http_flv_module
146HTTP_GZIP_STATIC_CONFIGURE_ON=	--with-http_gzip_static_module
147HTTP_GUNZIP_FILTER_CONFIGURE_ON=--with-http_gunzip_module
148HTTP_IMAGE_FILTER_LIB_DEPENDS=	libgd.so:graphics/gd
149HTTP_IMAGE_FILTER_VARS=		DSO_BASEMODS+=http_image_filter_module
150HTTP_MP4_CONFIGURE_ON=		--with-http_mp4_module
151HTTP_PERL_CATEGORIES=		perl5
152HTTP_PERL_USES=			perl5
153# Fix build failure on clang >= 12
154HTTP_PERL_CFLAGS=		-Wno-compound-token-split-by-macro
155HTTP_PERL_VARS=			DSO_BASEMODS+=http_perl_module
156HTTP_RANDOM_INDEX_CONFIGURE_ON=	--with-http_random_index_module
157HTTP_REALIP_CONFIGURE_ON=	--with-http_realip_module
158HTTP_SECURE_LINK_CONFIGURE_ON=	--with-http_secure_link_module
159HTTP_SLICE_CONFIGURE_ON=	--with-http_slice_module
160HTTP_SSL_CONFIGURE_ON=		--with-http_ssl_module
161HTTP_SSL_USES=			ssl
162HTTP_STATUS_CONFIGURE_ON=	--with-http_stub_status_module
163HTTP_SUB_CONFIGURE_ON=		--with-http_sub_module
164HTTP_XSLT_CONFIGURE_ON=		--with-http_xslt_module
165HTTP_XSLT_LIB_DEPENDS=		libxml2.so:textproc/libxml2 \
166				libxslt.so:textproc/libxslt
167HTTP_XSLT_VARS=			DSO_BASEMODS+=http_xslt_module
168HTTPV2_IMPLIES=			HTTP_SSL
169HTTPV2_CONFIGURE_ON=		--with-http_v2_module
170HTTPV3_CONFIGURE_ON=		--with-http_v3_module
171HTTPV3_BORING_BUILD_DEPENDS=	${LOCALBASE}/bin/bssl:security/boringssl
172HTTPV3_BORING_RUN_DEPENDS=	${LOCALBASE}/bin/bssl:security/boringssl
173HTTPV3_BORING_IMPLIES=		HTTPV3
174HTTPV3_BORING_PREVENTS=		HTTPV3_LSSL
175HTTPV3_LSSL_BUILD_DEPENDS=	${LOCALBASE}/include/tls.h:security/libressl-devel
176HTTPV3_LSSL_RUN_DEPENDS=	${LOCALBASE}/include/tls.h:security/libressl-devel
177HTTPV3_LSSL_IMPLIES=		HTTPV3
178HTTPV3_LSSL_PREVENTS=		HTTPV3_BORING
179MAIL_VARS=			DSO_BASEMODS+=mail
180MAIL_IMAP_CONFIGURE_OFF=	--without-mail_imap_module
181MAIL_POP3_CONFIGURE_OFF=	--without-mail_pop3_module
182MAIL_SMTP_CONFIGURE_OFF=	--without-mail_smtp_module
183MAIL_SSL_USES=			ssl
184MAIL_SSL_CONFIGURE_ON=		--with-mail_ssl_module
185STREAM_VARS=			DSO_BASEMODS+=stream
186STREAM_CONFIGURE_ON=		--with-stream
187STREAM_REALIP_CONFIGURE_ON=	--with-stream_realip_module
188STREAM_SSL_USES=		ssl
189STREAM_SSL_CONFIGURE_ON=	--with-stream_ssl_module
190STREAM_SSL_PREREAD_CONFIGURE_ON=--with-stream_ssl_preread_module
191
192### External modules
193.include "Makefile.extmod"
194
195.include <bsd.port.pre.mk>
196
197.if ${PORT_OPTIONS:MDSO}
198_addbasemod=	=dynamic
199_addextmod=	add-dynamic-module
200.else
201_addextmod=	add-module
202.endif
203
204.for mod in ${DSO_BASEMODS}
205CONFIGURE_ARGS+=	--with-${mod}${_addbasemod}
206.endfor
207
208# Some modules depend on other being there before, for example, devel_kit needs
209# to be there before a few other.
210.for mod in ${FIRST_DSO_EXTMODS}
211CONFIGURE_ARGS+=	--${_addextmod}=${WRKSRC_${mod}}${${mod:tu}_SUBDIR}
212.endfor
213
214.for mod in ${DSO_EXTMODS}
215CONFIGURE_ARGS+=	--${_addextmod}=${WRKSRC_${mod}}${${mod:tu}_SUBDIR}
216.endfor
217# For non-GitHub hosted modules
218.for moddir in ${DSO_EXTDIRS}
219CONFIGURE_ARGS+=	--${_addextmod}=${WRKDIR}/${moddir}
220.endfor
221
222.if empty(PORT_OPTIONS:MHTTP) && empty(PORT_OPTIONS:MMAIL)
223IGNORE=		requires at least HTTP or MAIL to \
224		be defined.  Please do 'make config' again
225.endif
226
227.if ${PORT_OPTIONS:MHTTP_AUTH_KRB5} && (empty(PORT_OPTIONS:MGSSAPI_HEIMDAL) && empty(PORT_OPTIONS:MGSSAPI_MIT))
228IGNORE=		required at least GSSAPI_HEIMDAL or \
229		GSSAPI_MIT to be defined. Please do \
230		'make config' again
231.endif
232
233.if ${PORT_OPTIONS:MPASSENGER} && empty(PORT_OPTIONS:MDEBUG)
234CONFIGURE_ENV+=	OPTIMIZE="yes"
235CFLAGS+=	-DNDEBUG
236.endif
237
238.if ${PORT_OPTIONS:MPASSENGER}
239CONFIGURE_ENV+=	EXTRA_PRE_CXXFLAGS="-std=c++14"
240.endif
241
242.if empty(PORT_OPTIONS:MMODSECURITY3) && empty(PORT_OPTIONS:MPASSENGER)
243CONFIGURE_ARGS+=	--with-ld-opt="-L ${LOCALBASE}/lib"
244.else
245CONFIGURE_ARGS+=	--with-ld-opt="-L ${LOCALBASE}/lib -lpcre"
246LIB_DEPENDS+=		libpcre.so:devel/pcre
247.endif
248
249.if ${PORT_OPTIONS:MNJS} && empty(PORT_OPTIONS:MNJS_XML)
250CONFIGURE_ENV+=		NJS_LIBXSLT=NO
251NJS_CONFIGURE_ARGS=	--no-libxml2
252.endif
253
254pre-everything::
255	@${ECHO_MSG}
256.if ${PORT_OPTIONS:MHTTP_UPSTREAM_FAIR}
257	@${ECHO_MSG} "Enable http_ssl module to build upstream_fair with SSL support"
258.endif
259.if ${PORT_OPTIONS:MPASSENGER}
260	@${ECHO_MSG} "This port install Passenger module only"
261.endif
262	@${ECHO_MSG}
263
264post-extract-NAXSI-on:
265	@${RMDIR} ${WRKSRC_naxsi}/naxsi_src/libinjection
266	@${LN} -s ${WRKSRC_libinjection} ${WRKSRC_naxsi}/naxsi_src/libinjection
267
268post-patch:
269	@${REINPLACE_CMD} 's!%%HTTP_PORT%%!${HTTP_PORT}!; \
270		s!%%PREFIX%%!${PREFIX}!; \
271		s!%%NGINX_ERRORLOG%%!${NGINX_ERRORLOG}!' \
272		${WRKSRC}/conf/nginx.conf
273
274post-patch-BROTLI-on:
275	@${REINPLACE_CMD} 's!%%PREFIX%%!${LOCALBASE}!g' ${WRKSRC_brotli}/filter/config
276
277post-patch-DRIZZLE-on:
278	@${REINPLACE_CMD} 's!%%PREFIX%%!${LOCALBASE}!g' ${WRKSRC_drizzle}/config
279
280post-patch-FASTDFS-on:
281	@${REINPLACE_CMD} \
282		's!%%PREFIX%%!${PREFIX}!g;s!%%LOCALBASE%%!${LOCALBASE}!g' \
283		${WRKSRC_fastdfs}/src/config
284
285post-patch-GRIDFS-on:
286	@${REINPLACE_CMD} 's!\/usr!${LOCALBASE}!g' \
287		${WRKSRC_gridfs}/nginx-gridfs/config
288
289post-patch-HTTP_AUTH_KRB5-on:
290	@${REINPLACE_CMD} 's!%%GSSAPILIBS%%!${GSSAPILIBS}!g; \
291		s!%%GSSAPIINCDIR%%!${GSSAPIINCDIR}!g; \
292		s!%%GSSAPILIBDIR%%!${GSSAPILIBDIR}!g' ${WRKSRC_auth_krb5}/config
293
294post-patch-HTTP_TARANTOOL-on:
295	@${REINPLACE_CMD} 's!%%PREFIX%%!${LOCALBASE}!g' ${WRKSRC_nginx_tarantool}/config
296
297post-patch-ICONV-on:
298	@${REINPLACE_CMD} 's!%%PREFIX%%!${LOCALBASE}!g' ${WRKSRC_iconv}/config
299
300post-patch-PASSENGER-on:
301	@${REINPLACE_CMD} \
302		'168,170s!true!false!' \
303		${WRKSRC_PASSENGER}/build/basics.rb
304	@${REINPLACE_CMD} \
305		's!-I/usr/include/libev!!; \
306		s!-lev!!; \
307		s!-Iext/libev!!; \
308		s!-I/usr/include/libeio!!; \
309		s!-leio!!; \
310		s!-Iext/libeio!!' \
311		${WRKSRC_PASSENGER}/build/common_library.rb
312
313post-patch-POSTGRES-on:
314	@${REINPLACE_CMD} 's!%%PREFIX%%!${LOCALBASE}!g' ${WRKSRC_postgres}/config
315
316post-patch-SFLOW-on:
317	@${REINPLACE_CMD} \
318		's!%%PREFIX%%!${LOCALBASE}!g' \
319		${WRKSRC_sflow}/ngx_http_sflow_config.h
320
321pre-configure-SMALL_LIGHT-on:
322	( cd ${WRKSRC_small_light} && ./setup )
323
324do-configure-NJS-on:
325	( cd ${WRKSRC_njs} && ${SETENV} ${CONFIGURE_ENV} ${CONFIGURE_CMD} ${NJS_CONFIGURE_ARGS} )
326
327.if !target(do-install)
328do-install:
329	${MKDIR} ${ETCDIR}
330	${MKDIR} ${NGINX_TMPDIR}
331	${MKDIR} ${NGINX_LOGDIR}
332	${INSTALL_PROGRAM} ${WRKSRC}/objs/nginx ${PREFIX}/sbin
333.for i in koi-utf koi-win win-utf
334	${INSTALL_DATA} ${WRKSRC}/conf/${i} ${ETCDIR}
335.endfor
336.for i in fastcgi_params mime.types scgi_params uwsgi_params
337	${INSTALL_DATA} ${WRKSRC}/conf/${i} ${ETCDIR}/${i}-dist
338.endfor
339
340do-install-HTTP_PERL-on:
341	${MKDIR} ${PREFIX}/${SITE_ARCH_REL}/auto/nginx
342	${INSTALL_PROGRAM} ${WRKSRC}/objs/src/http/modules/perl/blib/arch/auto/nginx/nginx.so \
343		${PREFIX}/${SITE_ARCH_REL}/auto/nginx
344	${INSTALL_DATA} ${WRKSRC}/objs/src/http/modules/perl/blib/lib/nginx.pm \
345		${PREFIX}/${SITE_ARCH_REL}/
346
347# Install dynamic modules
348do-install-DSO-on:
349	${MKDIR} ${FAKE_DESTDIR}${MODULESDIR}
350	(cd ${WRKSRC}/objs/ && ${FIND} . -name '*.so' -maxdepth 1 -type f \
351		-exec ${INSTALL_PROGRAM} {} ${FAKE_DESTDIR}${MODULESDIR} \;)
352
353do-install-LINK-on:
354	${INSTALL_DATA} ${WRKSRC_link}/src/ngx_link_func_module.h ${PREFIX}/include
355
356do-install-NAXSI-on:
357	${INSTALL_DATA} \
358	${WRKDIR}/naxsi-${NAXSI_NGINX_VER}/naxsi_rules/naxsi_core.rules \
359	${ETCDIR}
360.endif
361
362.if !target(post-install)
363post-install:
364	${MKDIR} ${PREFIX}/share/vim/vimfiles
365	cd ${WRKSRC}/contrib/vim && ${COPYTREE_SHARE} . ${PREFIX}/share/vim/vimfiles
366	${INSTALL_MAN} ${WRKSRC}/objs/nginx.8 ${PREFIX}/share/man/man8
367	${CAT} ${WRKSRC}/conf/nginx.conf >> ${ETCDIR}/nginx.conf-dist
368
369post-install-WWW-on:
370	${MKDIR} ${FAKE_DESTDIR}${TRUE_PREFIX}/www/nginx-dist
371	(cd ${WRKSRC}/html && ${COPYTREE_SHARE} . ${FAKE_DESTDIR}${TRUE_PREFIX}/www/nginx-dist && \
372	${TOUCH} ${FAKE_DESTDIR}${TRUE_PREFIX}/www/nginx-dist/EXAMPLE_DIRECTORY-DONT_ADD_OR_TOUCH_ANYTHING)
373.endif
374
375.include <bsd.port.post.mk>
376