1PORTNAME?= postgresql 2DISTVERSION?= 13.21 3# PORTREVISION must be ?= otherwise, all slave ports get this PORTREVISION and 4# not their own. Probably best to keep it at ?=0 when reset here too. 5PORTREVISION?= 1 6CATEGORIES?= databases 7MASTER_SITES= PGSQL/source/v${DISTVERSION} 8PKGNAMESUFFIX?= ${PORTVERSION:R}${COMPONENT} 9 10MAINTAINER?= ports@MidnightBSD.org 11COMMENT?= PostgreSQL is the most advanced open-source database available anywhere 12 13LICENSE= pgsql 14 15.if ${DISTVERSION:C/([0-9]*).*/\1/} >= 10 16CONFLICTS+= ${PORTNAME}9* ${PORTNAME}1[^${PORTVERSION:R:C/.*([0-9]$)/\\1/}]* 17.else 18CONFLICTS+= ${PORTNAME}9[^${PORTVERSION:R:E}]* ${PORTNAME}1[0-9]* 19.endif 20 21WRKSRC= ${WRKDIR}/postgresql-${DISTVERSION} 22DIST_SUBDIR= postgresql 23 24OPTIONS_SUB= yes 25 26PKGINSTALL?= ${PKGDIR}/pkg-install${COMPONENT} 27USES+= tar:bzip2 cpe 28.if !defined(NO_BUILD) 29USES+= gmake 30GNU_CONFIGURE= yes 31.endif 32 33PG_USER?= postgres 34PG_GROUP?= postgres 35PG_UID?= 770 36 37LDFLAGS+= -L${LOCALBASE}/lib 38INCLUDES+= -I${LOCALBASE}/include 39CONFIGURE_ARGS+=--with-libraries=${PREFIX}/lib \ 40 --with-includes=${PREFIX}/include \ 41 --enable-thread-safety \ 42 --with-template=freebsd 43CONFIGURE_ENV+= INCLUDES="${INCLUDES}" \ 44 PTHREAD_LIBS="-lpthread" \ 45 LDFLAGS_SL="${LDFLAGS_SL}" 46LDFLAGS+= -lpthread 47MAKE_ENV= MAKELEVEL=0 48 49PLIST= ${PKGDIR}/pkg-plist${COMPONENT} 50 51INSTALL_DIRS?= src/common src/timezone src/backend \ 52 src/backend/utils/mb/conversion_procs \ 53 src/backend/snowball src/backend/replication/libpqwalreceiver \ 54 src/backend/replication/pgoutput \ 55 src/bin/initdb src/bin/pg_ctl \ 56 src/bin/pg_archivecleanup src/bin/pg_basebackup \ 57 src/bin/pg_checksums \ 58 src/bin/pg_controldata src/bin/pg_resetwal src/pl \ 59 src/bin/pg_rewind \ 60 src/bin/pg_test_fsync src/bin/pg_test_timing \ 61 src/bin/pg_waldump src/bin/pg_upgrade 62 63BUILD_DIRS?= src/port ${INSTALL_DIRS} 64INSTALL_TARGET?=install-strip 65 66.if !defined(CLIENT_ONLY) && !defined(SLAVE_ONLY) 67SERVER_ONLY= yes 68COMPONENT= -server 69USE_RC_SUBR= postgresql 70USES+= pgsql:${DISTVERSION:C/([0-9]\.?[0-9]).*/\1/g} 71USERS= ${PG_USER} 72GROUPS= ${PG_GROUP} 73SUB_FILES+= 502.pgsql 74.endif 75 76OPTIONS_SUB= yes 77 78.if defined(CLIENT_ONLY) 79OPTIONS_DEFINE+=LIBEDIT DOCS 80LIBEDIT_DESC= Use non-GPL libedit instead of readline 81.else 82MAKE_ENV+= PATH=${PREFIX}/bin:${PATH} 83CONFIGURE_ENV+= PATH=${PREFIX}/bin:${PATH} 84.endif 85 86.if defined(SERVER_ONLY) 87OPTIONS_DEFINE= DTRACE LDAP INTDATE TZDATA XML DOCS 88LDAP_DESC= Build with LDAP authentication support 89DTRACE_DESC= Build with DTrace probes 90TZDATA_DESC= Use internal timezone database 91XML_DESC= Build with XML data type 92 93DTRACE_CONFIGURE_ENABLE=dtrace 94DTRACE_LDFLAGS= -lelf 95DTRACE_INSTALL_TARGET= install 96 97.if ${DISTVERSION:C/([0-9]*).*/\1/} >= 11 98OPTIONS_DEFINE+= LLVM 99#OPTIONS_DEFAULT+= LLVM 100#BROKEN= llvm support is currently broken 101LLVM_DESC= Build with support for JIT-compiling expressions 102.endif 103 104.if ${DISTVERSION:C/([0-9]*).*/\1/} < 10 105# See http://people.freebsd.org/~girgen/postgresql-icu/README.html for more info 106OPTIONS_DEFINE+= ICU 107ICU_DESC= Use ICU for unicode collation 108.else 109CONFIGURE_ARGS+=--with-icu 110LIB_DEPENDS+= libicudata.so:devel/icu 111USES+= pkgconfig 112.endif 113 114# See http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/76999 for more info 115# (requires dump/restore if modified.) 116OPTIONS_DEFINE+= INTDATE 117INTDATE_DESC= Builds with 64-bit date/time type 118OPTIONS_DEFAULT+= INTDATE 119.endif 120 121.if !defined(SLAVE_ONLY) 122OPTIONS_DEFINE+= NLS PAM GSSAPI OPTIMIZED_CFLAGS DEBUG DOCS 123. if ${DISTVERSION:R} == 9.2 || ${DISTVERSION:R} == 9.3 124 OPTIONS_RADIO= KRB5 125 OPTIONS_RADIO_KRB5= MIT_KRB5 HEIMDAL_KRB5 126. endif 127 128KRB5_DESC= Build with kerberos provider support 129NLS_DESC= Use internationalized messages 130PAM_DESC= Build with PAM Support 131MIT_KRB5_DESC= Build with MIT kerberos support 132HEIMDAL_KRB5_DESC= Builds with Heimdal kerberos 133GSSAPI_DESC= Build with GSSAPI support 134OPTIMIZED_CFLAGS_DESC= Builds with compiler optimizations (-O3) 135 136OPTIONS_DEFINE+= SSL 137SSL_DESC= Build with OpenSSL support 138 139OPTIONS_DEFAULT+= SSL 140 141GSSAPI_CONFIGURE_WITH= gssapi 142.endif # !SLAVE_ONLY 143 144.if defined(CLIENT_ONLY) 145LIBEDIT_CONFIGURE_ON+=--with-libedit-preferred 146LIBEDIT_USES= libedit 147LIBEDIT_USES_OFF= readline 148.endif # CLIENT_ONLY 149 150SSL_USES= ssl 151SSL_CONFIGURE_WITH= openssl 152 153PAM_CONFIGURE_WITH= pam 154 155XML_CONFIGURE_WITH= libxml 156XML_LIB_DEPENDS= libxml2.so:textproc/libxml2 157 158TZDATA_CONFIGURE_OFF= --with-system-tzdata=/usr/share/zoneinfo 159 160INTDATE_CONFIGURE_OFF= --disable-integer-datetimes 161 162NLS_CONFIGURE_ENABLE= nls 163NLS_USES= gettext 164 165LDAP_CONFIGURE_WITH= ldap 166LDAP_USE= OPENLDAP=yes 167 168OPTIMIZED_CFLAGS_CFLAGS=-O3 -funroll-loops 169 170DEBUG_CONFIGURE_ENABLE= debug 171 172PLIST_SUB+= PG_USER=${PG_USER} \ 173 PG_USER_regex=\b${PG_USER}\b \ 174 PG_GROUP=${PG_GROUP} \ 175 PG_GROUP_regex=\b${PG_GROUP}\b \ 176 PG_VERSION=13 177SUB_LIST+= PG_GROUP=${PG_GROUP} \ 178 PG_USER=${PG_USER} \ 179 PG_UID=${PG_UID} \ 180 PG_VERSION=13 181 182.include <bsd.mport.options.mk> 183 184.if ${ARCH} == "i386" 185USES+= compiler:gcc-c++11-lib 186.else 187USES+= compiler 188.endif 189 190.if ${DISTVERSION:C/([0-9]*).*/\1/} < 10 191. if ( defined(SERVER_ONLY) && ${PORT_OPTIONS:MICU} ) || make(makesum) 192USES+= autoreconf 193CONFIGURE_ARGS+=--with-icu 194PATCH_SITES+= http://people.freebsd.org/~girgen/postgresql-icu/:icu 195PATCHFILES+= ${ICU_PATCHFILE}:icu 196LIB_DEPENDS+= libicudata.so:devel/icu 197. endif 198.endif # server && version < 10 199 200.if !defined(SLAVE_ONLY) 201 202PATCH_DIST_STRIP=-p1 203 204.if ${PORT_OPTIONS:MGSSAPI} 205.if empty(PORT_OPTIONS:MMIT_KRB5) && empty(PORT_OPTIONS:MHEIMDAL_KRB5) 206# Kerberos libraries will pull the proper GSSAPI library 207# via linker dependencies, but otherwise we must specify 208# it explicitely: ld --as-needed is used for compilation, 209# so configure's -lgssapi_krb5 won't go. 210LDFLAGS+= -lgssapi 211LDFLAGS_SL+= -lgssapi 212.endif 213.endif 214 215. if ${PORT_OPTIONS:MMIT_KRB5} 216. if defined(IGNORE_WITH_SRC_KRB5) && (exists(/usr/lib/libkrb5.so) || exists(/usr/bin/krb5-config)) 217IGNORE= requires that you remove heimdal\'s /usr/bin/krb5-config and /usr/lib/libkrb5.so*, and set NO_KERBEROS=true in /etc/src.conf to build successfully with MIT-KRB 218. else 219CONFIGURE_ARGS+=--with-krb5 220# Allow defining a home built MIT Kerberos by setting KRB5_HOME 221. if defined(KRB5_HOME) && exists(${KRB5_HOME}/lib/libgssapi_krb5.a) && exists(${KRB5_HOME}/bin/krb5-config) 222LIB_DEPENDS+= libkrb5.so.3:security/krb5 223. endif 224. endif 225. endif 226 227. if ${PORT_OPTIONS:MHEIMDAL_KRB5} 228CONFIGURE_ARGS+=--with-krb5 229. endif 230 231.endif # !SLAVE_ONLY 232 233# For testing files in FILESDIR 234.include <bsd.port.pre.mk> 235 236.if ${PORT_OPTIONS:MLLVM} 237CONFIGURE_ARGS+= --with-llvm 238BUILD_DEPENDS+= llvm${PG_LLVM_VERSION}>0:devel/llvm${PG_LLVM_VERSION} 239BUILD_DEPENDS+= llvm-config${PG_LLVM_VERSION}:devel/llvm${PG_LLVM_VERSION} 240RUN_DEPENDS+= llvm-config${PG_LLVM_VERSION}:devel/llvm${PG_LLVM_VERSION} 241CONFIGURE_ENV+= LLVM_CONFIG=${LOCALBASE}/bin/llvm-config${PG_LLVM_VERSION} 242.endif 243 244# sync LLVM to the preferred compiler if possible 245# or else use a lower version compiler that is compatible 246.if ${COMPILER_VERSION} > ${LLVM_DEFAULT} 247# Highest LLVM version in ports: 248. if ${COMPILER_VERSION} <= 11 249PG_LLVM_VERSION=${COMPILER_VERSION} 250PG_COMPILER_VERSION=${COMPILER_VERSION} 251. else 252PG_LLVM_VERSION=11 253PG_COMPILER_VERSION=11 254. endif 255.else 256PG_COMPILER_VERSION=${COMPILER_VERSION} 257PG_LLVM_VERSION=${LLVM_DEFAULT} 258.endif 259 260.if ${DISTVERSION:C/([0-9]*).*/\1/} >= 11 261. if defined(SERVER_ONLY) && ${PORT_OPTIONS:MLLVM} 262INSTALL_DIRS+= src/backend/jit/llvm 263. if ${COMPILER_VERSION} != ${PG_COMPILER_VERSION} 264LLVM_CONFIGURE_ARGS?= CC=${LOCALBASE}/bin/clang${PG_COMPILER_VERSION} 265. endif 266. endif 267.endif 268 269.if defined(SERVER_ONLY) 270pre-build: 271 @${SH} ${PKGINSTALL} ${PORTNAME} PRE-INSTALL 272.endif 273 274.if !defined(NO_BUILD) && !target(do-build) 275 276do-build: 277 @ cd ${WRKSRC}/src/backend && ${SETENV} ${MAKE_ENV} ${FAKE_MAKEENV} ${MAKE_CMD} ${FAKE_MAKEARGS} symlinks 278 @ for dir in ${BUILD_DIRS}; do \ 279 cd ${WRKSRC}/$${dir} && ${SETENV} ${MAKE_ENV} ${FAKE_MAKEENV} ${MAKE_CMD} ${FAKE_MAKEARGS}; \ 280 done 281 282. if exists(${FILESDIR}/pkg-message${COMPONENT}.in) 283SUB_FILES+= pkg-message${COMPONENT} 284PKGMESSAGE= ${WRKSRC}/pkg-message${COMPONENT} 285. endif 286. if exists(${FILESDIR}/pkg-install${COMPONENT}.in) 287SUB_FILES+= pkg-install${COMPONENT} 288. endif 289 290post-patch: 291. if defined(SERVER_ONLY) && ${PORT_OPTIONS:MICU} 292 @${REINPLACE_CMD} \ 293 -e '/m4_PACKAGE_VERSION/s/\[2\.6[0-9]\]/m4_defn([m4_PACKAGE_VERSION])/' \ 294 -e '/icu/s/_57//' \ 295 ${WRKSRC}/configure.in 296. endif 297 298do-install: 299 @for dir in ${INSTALL_DIRS}; do \ 300 cd ${WRKSRC}/$${dir} && \ 301 ${SETENV} ${MAKE_ENV} ${FAKE_MAKEENV} ${MAKE_CMD} ${MAKE_ARGS} ${FAKE_MAKEARGS} ${INSTALL_TARGET}; \ 302 done 303. if defined(SERVER_ONLY) 304 @ ${MKDIR} ${PREFIX}/share/postgresql ;\ 305 ${MKDIR} ${PREFIX}/etc/periodic/daily ;\ 306 ${INSTALL_SCRIPT} ${WRKDIR}/502.pgsql \ 307 ${PREFIX}/etc/periodic/daily 308. endif # SERVER_ONLY 309. if defined(CLIENT_ONLY) 310 @ cd ${WRKSRC}/src && ${SETENV} ${MAKE_ENV} ${FAKE_MAKEENV} ${MAKE_CMD} ${MAKE_ARGS} ${FAKE_MAKEARGS} install-local 311. endif 312 @ if [ -r ${PKGMESSAGE} ]; then \ 313 ${MKDIR} ${DOCSDIR} ;\ 314 ${INSTALL_DATA} ${PKGMESSAGE} ${DOCSDIR}/README${COMPONENT} ;\ 315 fi 316.endif # !NO_BUILD 317 318.if defined(SERVER_ONLY) 319check: 320 @if [ `id -u` != 0 ] ; then \ 321 ${ECHO} "Running postgresql regressions tests" ;\ 322 cd ${WRKSRC}; ${MAKE_CMD} check ;\ 323 else \ 324 ${ECHO} "You cannot run regression tests when postgresql is built as user root." ; \ 325 ${ECHO} "Clean and rebuild the port as a regular user to run the tests." ;\ 326 fi 327.endif 328 329.include <bsd.port.post.mk> 330