|
| 1 | +PORTNAME= perl |
| 2 | +DISTVERSION= ${PERL_VERSION}-RC2 # TODO: set EXPIRATION_DATE when .0 is released and remove .r from version.mk |
| 3 | +PORTREVISION= 2 |
| 4 | +CATEGORIES= lang devel perl5 |
| 5 | +MASTER_SITES= CPAN/../../src/5.0 |
| 6 | +DIST_SUBDIR= perl |
| 7 | + |
| 8 | +MAINTAINER= mat@FreeBSD.org |
| 9 | +COMMENT= Practical Extraction and Report Language |
| 10 | +WWW= https://www.perl.org/ |
| 11 | + |
| 12 | +LICENSE= ART10 GPLv1+ |
| 13 | +LICENSE_COMB= dual |
| 14 | +LICENSE_FILE_ART10= ${WRKSRC}/Artistic |
| 15 | +LICENSE_FILE_GPLv1+ = ${WRKSRC}/Copying |
| 16 | + |
| 17 | +# Uncomment when the default Perl is switched to 5.40 |
| 18 | +#DEPRECATED= Support end three years after .0 release, please upgrade to a more recent version of Perl |
| 19 | +#EXPIRATION_DATE=<Release date of .0 + 3 years> |
| 20 | + |
| 21 | +USES= cpe tar:xz |
| 22 | + |
| 23 | +# Give a hint of where libperl.so can be found. |
| 24 | +USE_LDCONFIG= ${PREFIX}/${_ARCH_LIB}/CORE |
| 25 | + |
| 26 | +TEST_TARGET= test_harness |
| 27 | +TEST_ENV= ${MAKE_ENV} \ |
| 28 | + LD_LIBRARY_PATH=${WRKSRC} \ |
| 29 | + TEST_JOBS=${MAKE_JOBS_NUMBER} |
| 30 | + |
| 31 | +PORTSCOUT= limit:^${PERL_VER}. |
| 32 | + |
| 33 | +HAS_CONFIGURE= yes |
| 34 | +CONFIGURE_SCRIPT= Configure |
| 35 | +CONFIGURE_ARGS= -Darchlib=${PREFIX}/${_ARCH_LIB} \ |
| 36 | + -Dcc="${CC}" \ |
| 37 | + -Dcf_by=${MAINTAINER:C,@.*,,} \ |
| 38 | + -Dcf_email=${MAINTAINER} \ |
| 39 | + -Dcf_time="`${STAT} -t \"%a %b %d %T %Z %Y\" -f %Sm ${_DISTDIR}/${DISTNAME}${EXTRACT_SUFX}`" \ |
| 40 | + -Dinc_version_list=none \ |
| 41 | + -Dlibperl=libperl.so.${PERL_VERSION} \ |
| 42 | + -Dman1dir=${PREFIX}/${PERLMANPREFIX_REL}/man/man1 \ |
| 43 | + -Dman3dir=${PREFIX}/${PERLMANPREFIX_REL}/man/man3 \ |
| 44 | + -Dprefix=${PREFIX} \ |
| 45 | + -Dprivlib=${PREFIX}/${_PRIV_LIB} \ |
| 46 | + -Dscriptdir=${PREFIX}/bin \ |
| 47 | + -Dsitearch=${SITE_ARCH} \ |
| 48 | + -Dsitelib=${SITE_PERL} \ |
| 49 | + -Dsiteman1dir=${SITE_MAN1} \ |
| 50 | + -Dsiteman3dir=${SITE_MAN3} \ |
| 51 | + -Dusenm=n \ |
| 52 | + -Duseshrplib \ |
| 53 | + -sde \ |
| 54 | + -Ui_iconv \ |
| 55 | + -Ui_malloc \ |
| 56 | + -Uinstallusrbinperl |
| 57 | +# Keep the following two in sync. |
| 58 | +# lddlflags is used for all .so linking |
| 59 | +# shrpldflags is used for libperl.so, so remove all the extra bits inherited from lddlflags. |
| 60 | +CONFIGURE_ARGS+= -Alddlflags='-L${WRKSRC} -L${PREFIX}/${_ARCH_LIB}/CORE -lperl' \ |
| 61 | + -Dshrpldflags='$$(LDDLFLAGS:N-L${WRKSRC}:N-L${PREFIX}/${_ARCH_LIB}/CORE:N-lperl) -Wl,-soname,$$(LIBPERL:R)' |
| 62 | + |
| 63 | +# When built from a git repository, newvers.sh can put a = in the version. |
| 64 | +CONFIGURE_ENV= UNAME_v="$$(uname -v | sed 'y/=/ /')" |
| 65 | + |
| 66 | +SUB_FILES= perl-man.conf |
| 67 | + |
| 68 | +INSTALL_TARGET= install-strip |
| 69 | + |
| 70 | +.if defined(PERL_VENDOR_PREFIX) |
| 71 | +CONFIGURE_ARGS+= -Dvendorarch=${PERL_VENDOR_PREFIX}/${_ARCH_LIB} \ |
| 72 | + -Dvendorbin=${PERL_VENDOR_PREFIX}/bin \ |
| 73 | + -Dvendorlib=${PERL_VENDOR_PREFIX}/${_PRIV_LIB} \ |
| 74 | + -Dvendorman1dir=${PERL_VENDOR_PREFIX}/man/man1 \ |
| 75 | + -Dvendorman3dir=${PERL_VENDOR_PREFIX}/${_PRIV_LIB}/man/man3 \ |
| 76 | + -Dvendorprefix=${PERL_VENDOR_PREFIX} |
| 77 | +.endif |
| 78 | + |
| 79 | +# http://perl5.git.perl.org/perl.git/commit/b83080de5c4254 |
| 80 | +# PERLIOBUF_DEFAULT_BUFSIZ size in bytes (default: 8192 bytes) |
| 81 | +.if defined(PERLIOBUF_DEFAULT_BUFSIZ) |
| 82 | +CONFIGURE_ARGS+= -Accflags=-DPERLIOBUF_DEFAULT_BUFSIZ=${PERLIOBUF_DEFAULT_BUFSIZ} |
| 83 | +.endif |
| 84 | + |
| 85 | +PLIST_SUB= ARCH_LIB=${_ARCH_LIB} \ |
| 86 | + MAN1=${PERLMANPREFIX_REL}/man/man1 \ |
| 87 | + MAN3=${PERLMANPREFIX_REL}/man/man3 \ |
| 88 | + PERL_ARCH=${PERL_ARCH} \ |
| 89 | + PERL_ARCH_regex=[[:<:]]${PERL_ARCH}[[:>:]] \ |
| 90 | + PERL_VER=${PERL_VER} \ |
| 91 | + PERL_VERSION=${PERL_VERSION} \ |
| 92 | + PERLMANPREFIX=${PERLMANPREFIX_REL} \ |
| 93 | + PERLMANPREFIX_regex=${PERLMANPREFIX_REL}[[:>:]] \ |
| 94 | + PKGNAMESUFFIX=${PKGNAMESUFFIX} \ |
| 95 | + PRIV_LIB=${_PRIV_LIB} \ |
| 96 | + SITE_ARCH=${SITE_ARCH_REL} \ |
| 97 | + SITE_PERL=${SITE_PERL_REL} \ |
| 98 | + SITEMANPREFIX=${SITE_MAN_PREFIX} |
| 99 | + |
| 100 | +SUB_LIST= PERL_ARCH=${PERL_ARCH} \ |
| 101 | + PERL_VER=${PERL_VER} \ |
| 102 | + PERL_VERSION=${PERL_VERSION} \ |
| 103 | + PERLMANPREFIX=${PERLMANPREFIX_REL} \ |
| 104 | + PRIV_LIB=${_PRIV_LIB} \ |
| 105 | + SITE_PERL=${SITE_PERL_REL} \ |
| 106 | + SITEMANPREFIX=${SITE_MAN_PREFIX} |
| 107 | + |
| 108 | +.include "version.mk" |
| 109 | +PERL_VER?= ${PERL_VERSION:C/\.[0-9]+$//} |
| 110 | +PERL_ARCH= mach |
| 111 | +SITE_PERL_REL?= lib/perl5/site_perl |
| 112 | +SITE_PERL?= ${PREFIX}/${SITE_PERL_REL} |
| 113 | +SITE_ARCH_REL?= ${SITE_PERL_REL}/${PERL_ARCH}/${PERL_VER} |
| 114 | +SITE_ARCH?= ${PREFIX}/${SITE_ARCH_REL} |
| 115 | +SITE_MAN_PREFIX= ${SITE_PERL_REL} |
| 116 | +SITE_MAN3_REL?= ${SITE_MAN_PREFIX}/man/man3 |
| 117 | +SITE_MAN3?= ${PREFIX}/${SITE_MAN3_REL} |
| 118 | +SITE_MAN1_REL?= ${SITE_MAN_PREFIX}/man/man1 |
| 119 | +SITE_MAN1?= ${PREFIX}/${SITE_MAN1_REL} |
| 120 | + |
| 121 | +_PRIV_LIB= lib/perl5/${PERL_VER} |
| 122 | +_ARCH_LIB= ${_PRIV_LIB}/${PERL_ARCH} |
| 123 | + |
| 124 | +PERLMANPREFIX_REL= ${_PRIV_LIB}/perl |
| 125 | +PERLMANPREFIX= ${PREFIX}/${PERLMANPREFIX_REL} |
| 126 | +MANDIRS= ${PERLMANPREFIX}/man |
| 127 | + |
| 128 | +OPTIONS_DEFINE= DEBUG DOT_INC DTRACE GDBM MULTIPLICITY PERL_64BITINT \ |
| 129 | + PERL_MALLOC SITECUSTOMIZE THREADS |
| 130 | +OPTIONS_DEFAULT= DTRACE MULTIPLICITY PERL_64BITINT THREADS |
| 131 | + |
| 132 | +.if !exists(/usr/sbin/dtrace) |
| 133 | +OPTIONS_EXCLUDE= DTRACE |
| 134 | +.endif |
| 135 | +.for a in aarch64 arm armv6 armv7 \ |
| 136 | + mips mips64 mips64el mips64elhf mips64hf mipsel mipselhf mipshf mipsn32 \ |
| 137 | + riscv64 riscv64sf sparc64 |
| 138 | +OPTIONS_EXCLUDE_${a}= DTRACE |
| 139 | +.endfor |
| 140 | +OPTIONS_SUB= yes |
| 141 | + |
| 142 | +DOT_INC_DESC= Add '.' to @INC (unsafe) |
| 143 | +GDBM_DESC= GDBM_File extension |
| 144 | +MULTIPLICITY_DESC= Use multiplicity |
| 145 | +PERL_64BITINT_DESC= Use 64 bit integers (on i386) |
| 146 | +PERL_MALLOC_DESC= Use Perl malloc |
| 147 | +SITECUSTOMIZE_DESC= Run-time customization of @INC |
| 148 | +THREADS_DESC= Build threaded perl |
| 149 | + |
| 150 | +DEBUG_CONFIGURE_ON= -DDEBUGGING \ |
| 151 | + -Doptimize="-g" |
| 152 | +DEBUG_CONFIGURE_OFF= -Doptimize="${CFLAGS}" |
| 153 | +DOT_INC_CONFIGURE_ON= -Ddefault_inc_excludes_dot=n |
| 154 | +DTRACE_CONFIGURE_ON= -Dusedtrace |
| 155 | +DTRACE_CONFIGURE_OFF= -Uusedtrace |
| 156 | +GDBM_CONFIGURE_ON= -Di_gdbm |
| 157 | +GDBM_CONFIGURE_OFF= -Ui_gdbm |
| 158 | +GDBM_LIB_DEPENDS= libgdbm.so:databases/gdbm |
| 159 | +MULTIPLICITY_CONFIGURE_ON= -Dusemultiplicity=y |
| 160 | +MULTIPLICITY_CONFIGURE_OFF= -Dusemultiplicity=n |
| 161 | +PERL_64BITINT_CONFIGURE_ON= -Duse64bitint |
| 162 | +PERL_MALLOC_CONFIGURE_ON= -Dusemymalloc=y |
| 163 | +PERL_MALLOC_CONFIGURE_OFF= -Dusemymalloc=n |
| 164 | +SITECUSTOMIZE_CONFIGURE_ON= -Dusesitecustomize |
| 165 | +THREADS_CONFIGURE_ON= -Dusethreads=y |
| 166 | +THREADS_CONFIGURE_OFF= -Dusethreads=n |
| 167 | + |
| 168 | +# Why this is required is explained in: |
| 169 | +# https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=227356#c5 |
| 170 | +_PERL5_DEFAULT_FILE= /tmp/PERL5_DEFAULT |
| 171 | + |
| 172 | +# Get the default version, and possibly, overwrite it. |
| 173 | +.include <bsd.port.options.mk> |
| 174 | +.sinclude "${_PERL5_DEFAULT_FILE}" |
| 175 | + |
| 176 | +# if this port is default due PERL5_DEFAULT |
| 177 | +# change PKGNAME to reflect this |
| 178 | +.if ${PERL_VER} == ${PERL5_DEFAULT} |
| 179 | +PKGNAMESUFFIX= 5 |
| 180 | +IAMDEFAULTPERL= yes |
| 181 | +.else |
| 182 | +# make PKGNAME unique among other lang/perl5.x |
| 183 | +PKGNAMESUFFIX= ${PERL_VER} |
| 184 | +.endif |
| 185 | + |
| 186 | +# Am I building the default Perl ? |
| 187 | +.if defined(IAMDEFAULTPERL) |
| 188 | +PLIST_SUB+= BINSUFFIX="" \ |
| 189 | + DEFAULT="" |
| 190 | +.else |
| 191 | +BINSUFFIX= ${PERL_VERSION} |
| 192 | +PLIST_SUB+= BINSUFFIX=${PERL_VERSION} \ |
| 193 | + DEFAULT="@comment " |
| 194 | +CONFIGURE_ARGS+= -Dversiononly |
| 195 | +.endif |
| 196 | + |
| 197 | +.if !defined(IAMDEFAULTPERL) |
| 198 | +pre-everything:: |
| 199 | + @${ECHO_MSG} "##################################################" |
| 200 | + @${ECHO_MSG} "" |
| 201 | + @${ECHO_MSG} " This is *NOT* the DEFAULT perl version" |
| 202 | + @${ECHO_MSG} "" |
| 203 | + @${ECHO_MSG} "It will *NOT* install ${PREFIX}/bin/perl" |
| 204 | + @${ECHO_MSG} "" |
| 205 | + @${ECHO_MSG} "It will *ONLY* install ${PREFIX}/bin/perl${PERL_VERSION}" |
| 206 | + @${ECHO_MSG} "" |
| 207 | + @${ECHO_MSG} "The default Perl version currently is ${PERL5_DEFAULT}." |
| 208 | + @${ECHO_MSG} "" |
| 209 | + @${ECHO_MSG} "If you want to use this version as the default," |
| 210 | + @${ECHO_MSG} "stop the build now, add this line to your" |
| 211 | + @${ECHO_MSG} "/etc/make.conf, and then restart the build." |
| 212 | + @${ECHO_MSG} "" |
| 213 | + @${ECHO_MSG} "DEFAULT_VERSIONS+=perl5=${PERL_VER}" |
| 214 | + @${ECHO_MSG} "" |
| 215 | + @${ECHO_MSG} "##################################################" |
| 216 | +. if !(defined(PACKAGE_BUILDING) || defined(BATCH)) |
| 217 | + @sleep 30 |
| 218 | +. endif |
| 219 | +.endif |
| 220 | + |
| 221 | +# Put a symlink to the future libperl.so.x.yy so that -lperl works. |
| 222 | +# Also, save PERL5_DEFAULT in case someone is not using the default Perl |
| 223 | +# version whilst not having set DEFAULT_VERSIONS=perl5=blah. While upgrading, |
| 224 | +# portmaster/portupgrade will remove the installed Perl version, and it will |
| 225 | +# remove any way to guess what the default Perl version is needed. |
| 226 | +post-extract: |
| 227 | + ${LN} -s libperl.so.${PERL_VERSION} ${WRKSRC}/libperl.so |
| 228 | + ${LN} -s libperl.so.${PERL_VERSION} ${WRKSRC}/libperl.so.${PERL_VER} |
| 229 | +.if !defined(PACKAGE_BUILDING) |
| 230 | + @${ECHO_CMD} "PERL5_DEFAULT=${PERL5_DEFAULT}" > ${_PERL5_DEFAULT_FILE} |
| 231 | +.endif |
| 232 | + |
| 233 | +.if !defined(PACKAGE_BUILDING) |
| 234 | +post-clean: |
| 235 | + @${RM} ${_PERL5_DEFAULT_FILE} |
| 236 | +.endif |
| 237 | + |
| 238 | +post-patch: |
| 239 | +.if ${LOCALBASE} != /usr/local |
| 240 | + ${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|g' \ |
| 241 | + ${WRKSRC}/Configure ${WRKSRC}/hints/freebsd.sh |
| 242 | +.endif |
| 243 | +.if !defined(IAMDEFAULTPERL) |
| 244 | + ${REINPLACE_CMD} -e '/do_installprivlib = 0 if .versiononly/d; \ |
| 245 | + /^if.*nopods.*versiononly || /s/.*/if (1) {/' \ |
| 246 | + ${WRKSRC}/installperl |
| 247 | +.endif |
| 248 | + |
| 249 | +post-install: |
| 250 | + @${REINPLACE_CMD} -e '/^lddlflags/s|-L${WRKSRC} ||' \ |
| 251 | + ${STAGEDIR}${PREFIX}/${_ARCH_LIB}/Config_heavy.pl |
| 252 | + @${TOUCH} -r ${STAGEDIR}${PREFIX}/${_ARCH_LIB}/Config_heavy.pl.bak ${STAGEDIR}${PREFIX}/${_ARCH_LIB}/Config_heavy.pl |
| 253 | + @${RM} ${STAGEDIR}${PREFIX}/${_ARCH_LIB}/Config_heavy.pl.bak |
| 254 | +.if ${CC} == /nxb-bin/usr/bin/cc |
| 255 | + @${REINPLACE_CMD} -e 's=/nxb-bin==' \ |
| 256 | + ${STAGEDIR}${PREFIX}/${_ARCH_LIB}/Config.pm ${STAGEDIR}${PREFIX}/${_ARCH_LIB}/Config_heavy.pl |
| 257 | +# Restore Config.pm's timestamp so that Perl's build system does not think it |
| 258 | +# needs to rebuild everything. |
| 259 | + @${TOUCH} -r ${STAGEDIR}${PREFIX}/${_ARCH_LIB}/Config.pm.bak ${STAGEDIR}${PREFIX}/${_ARCH_LIB}/Config.pm |
| 260 | + @${TOUCH} -r ${STAGEDIR}${PREFIX}/${_ARCH_LIB}/Config_heavy.pl.bak ${STAGEDIR}${PREFIX}/${_ARCH_LIB}/Config_heavy.pl |
| 261 | + @${RM} ${STAGEDIR}${PREFIX}/${_ARCH_LIB}/Config.pm.bak ${STAGEDIR}${PREFIX}/${_ARCH_LIB}/Config_heavy.pl.bak |
| 262 | +.endif |
| 263 | + |
| 264 | + ${MKDIR} ${STAGEDIR}${SITE_MAN1} ${STAGEDIR}${SITE_MAN3} |
| 265 | + ${MKDIR} ${STAGEDIR}${SITE_ARCH}/auto |
| 266 | + ${MKDIR} ${STAGEDIR}${SITE_PERL}/auto |
| 267 | +.if defined(IAMDEFAULTPERL) |
| 268 | + ${LN} -sf perl ${STAGEDIR}${PREFIX}/bin/perl${PERL_VERSION} |
| 269 | +.endif |
| 270 | + ${LN} -sf libperl.so.${PERL_VERSION} ${STAGEDIR}${PREFIX}/${_ARCH_LIB}/CORE/libperl.so |
| 271 | + ${LN} -sf libperl.so.${PERL_VERSION} ${STAGEDIR}${PREFIX}/${_ARCH_LIB}/CORE/libperl.so.${PERL_VER} |
| 272 | + ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/perl${PERL_VERSION} |
| 273 | + ${MKDIR} ${STAGEDIR}${SITE_ARCH}/machine |
| 274 | + ${MKDIR} ${STAGEDIR}${SITE_ARCH}/sys |
| 275 | +# h2ph needs perl, but perl is not installed, it's only |
| 276 | +# staged, so, use the one in WRKDIR |
| 277 | + (cd /usr/include && ${SETENV} LD_LIBRARY_PATH=${WRKSRC} \ |
| 278 | + ${WRKSRC}/perl -I ${WRKSRC}/lib ${STAGEDIR}${PREFIX}/bin/h2ph${BINSUFFIX} \ |
| 279 | + -d ${STAGEDIR}${SITE_ARCH} *.h machine/*.h sys/*.h >/dev/null) |
| 280 | + @${FIND} ${STAGEDIR}${SITE_ARCH} -name '*.ph' | sed -e 's|${STAGEDIR}||' >> ${TMPPLIST} |
| 281 | + ${FIND} ${STAGEDIR} -name '*.so*' -type f | while read f; \ |
| 282 | + do \ |
| 283 | + ${CHMOD} 644 $$f; \ |
| 284 | + ${STRIP_CMD} $$f; \ |
| 285 | + ${CHMOD} 444 $$f; \ |
| 286 | + done |
| 287 | + ${INSTALL_DATA} ${WRKDIR}/perl-man.conf ${STAGEDIR}${PREFIX}/etc/man.d/perl${PKGNAMESUFFIX}.conf |
| 288 | + |
| 289 | +.include <bsd.port.mk> |
0 commit comments