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