diff options
author | Baptiste Daroussin <bapt@FreeBSD.org> | 2013-07-31 06:29:25 +0000 |
---|---|---|
committer | Baptiste Daroussin <bapt@FreeBSD.org> | 2013-07-31 06:29:25 +0000 |
commit | 27b567757310607163051d7033b249ba4a7c5f6a (patch) | |
tree | eb9090da45036005d8736f877aa6c5042f5ab5ba /Mk | |
parent | - Fix parallel (-jX) builds, remove jobs unsafe mark (diff) |
New USES= perl5
Deprecate and replaces bsd.perl.mk, it adds more consistency:
only USE_PERL5 is needed to define all expected behaviour.
USE_PERL5 accept the following arguments:
Version: like 5.14+
- configure (formerly PERL_CONFIGURE=yes)
- run (formerly USE_PERL5_RUN=yes)
- build (formerly USE_PERL5_BUILD=yes)
- patch (only use perl as a patch dependency)
- extract (only use perl as an extract dependency)
- modbuild (formerly PERL_MODBUILD)
It has the new
P5MAN{1,2,3,4,5,6,7,8} macros equivalent to MAN{1,....} but depending on the perl path.
Reviewed by: az
Thanks to: az
Notes
Notes:
svn path=/head/; revision=324004
Diffstat (limited to 'Mk')
-rw-r--r-- | Mk/Uses/perl5.mk | 231 | ||||
-rw-r--r-- | Mk/bsd.perl.mk | 4 |
2 files changed, 235 insertions, 0 deletions
diff --git a/Mk/Uses/perl5.mk b/Mk/Uses/perl5.mk new file mode 100644 index 000000000000..1eca0fc8071e --- /dev/null +++ b/Mk/Uses/perl5.mk @@ -0,0 +1,231 @@ +# $FreeBSD$ +# +# Provide support to use perl5 +# +# MAINTAINER: perl@FreeBSD.org +# +# PERL5 - Set to full path of perl5, either in the system or +# installed from a port. +# PERL - Set to full path of perl5, either in the system or +# installed from a port, but without the version number. +# Use this if you need to replace "#!" lines in scripts. +# PERL_VERSION - Full version of perl5 (see below for current value). +# +# PERL_VER - Short version of perl5 (major.minor without patchlevel) +# +# PERL_LEVEL - Perl version as an integer of the form MNNNPP, where +# M is major version, N is minor version, and P is +# the patch level. E.g., PERL_VERSION=5.14.2 would give +# a PERL_LEVEL of 501402. This can be used in comparisons +# to determine if the version of perl is high enough, +# whether a particular dependency is needed, etc. +# PERL_ARCH - Directory name of architecture dependent libraries +# (value: mach). +# PERL_PORT - Name of the perl port that is installed +# (value: perl5.14) +# SITE_PERL - Directory name where site specific perl packages go. +# This value is added to PLIST_SUB. +# USE_PERL5 - If set, this port uses perl5 in one or more of the extract, +# patch, build, install or run phases + +.if !defined(_INCLUDE_USES_PERL5_MK) +_INCLUDE_USES_PERL5_MK= yes + +.if defined(perl5_ARGS) +IGNORE= Incorrect 'USES+=perl5:${perl5_ARGS}' perl5 takes no arguments +.endif + +USE_PERL5?= run build + +.if exists(${LOCALBASE}/bin/perl5) +.sinclude "${LOCALBASE}/etc/perl5_version" +.if !defined(PERL_VERSION) +PERL_VERSION!= perl -e 'printf "%vd\n", $$^V;' +.endif +.else +PERL_VERSION?= 5.14.4 +.endif + +PERL_VER?= ${PERL_VERSION:C/\.[0-9]+$//} + +.if !defined(PERL_LEVEL) && defined(PERL_VERSION) +perl_major= ${PERL_VERSION:C|^([1-9]+).*|\1|} +_perl_minor= 00${PERL_VERSION:C|^([1-9]+)\.([0-9]+).*|\2|} +perl_minor= ${_perl_minor:C|^.*(...)|\1|} +.if ${perl_minor} >= 100 +perl_minor= ${PERL_VERSION:C|^([1-9]+)\.([0-9][0-9][0-9]).*|\2|} +perl_patch= ${PERL_VERSION:C|^.*(..)|\1|} +.else # ${perl_minor} < 100 +_perl_patch= 0${PERL_VERSION:C|^([1-9]+)\.([0-9]+)\.*|0|} +perl_patch= ${_perl_patch:C|^.*(..)|\1|} +.endif # ${perl_minor} < 100 +PERL_LEVEL= ${perl_major}${perl_minor}${perl_patch} +.else +PERL_LEVEL=0 +.endif # !defined(PERL_LEVEL) && defined(PERL_VERSION) + +PERL_ARCH?= mach + +# there must always be a default to prevent dependency failures such +# as "ports/lang: not found" +.if ${PERL_LEVEL} >= 501600 +PERL_PORT?= perl5.16 +.elif ${PERL_LEVEL} >= 501400 +PERL_PORT?= perl5.14 +.else # ${PERL_LEVEL} < 501400 +PERL_PORT?= perl5.12 +.endif + +SITE_PERL_REL?= lib/perl5/site_perl/${PERL_VER} +SITE_PERL?= ${LOCALBASE}/${SITE_PERL_REL} + +PERL5= ${LOCALBASE}/bin/perl${PERL_VERSION} +PERL= ${LOCALBASE}/bin/perl + +# Define the want perl first if defined +.if ${USE_PERL5:M5*} +want_perl_sign= ${USE_PERL5:M5*:C|^[0-9.]+||} +want_perl_ver= ${USE_PERL5:M5*:S|${want_perl_sign}$||} +want_perl_major= ${want_perl_ver:C|\..*||} +_want_perl_minor= ${want_perl_ver:S|^${want_perl_major}||:S|^.||:C|\..*||} +_want_perl_patch= ${want_perl_ver:S|^${want_perl_major}||:S|^.${_want_perl_minor}||:S|^.||:C|\..*||} +want_perl_minor= ${_want_perl_minor:S|^|000|:C|.*(...)|\1|} +want_perl_patch= ${_want_perl_patch:S|^|00|:C|.*(..)|\1|} +USE_PERL5_LEVEL= ${want_perl_major}${want_perl_minor}${want_perl_patch} +.endif + +# All but version +_USE_PERL5= ${USE_PERL5:N5*} + +# Mask unspecified components. E.g. this way "5" will match any "5.x.x". +.if empty(_want_perl_minor) +masked_PERL_LEVEL= ${PERL_LEVEL:C|(.....)$|00000|} +.elif empty(_want_perl_patch) +masked_PERL_LEVEL= ${PERL_LEVEL:C|(..)$|00|} +.else +masked_PERL_LEVEL= ${PERL_LEVEL} +.endif + +.if defined(want_perl_sign) +.if ${want_perl_sign} == "+" +.if ${USE_PERL5_LEVEL} > ${masked_PERL_LEVEL} +USE_PERL5_REASON?= requires Perl ${want_perl_ver} or later, install lang/perl${want_perl_major}.${want_perl_minor:C|^0||} and try again +IGNORE= ${USE_PERL5_REASON} +.endif # ${USE_PERL5_LEVEL} > ${masked_PERL_LEVEL} +.elif ${want_perl_sign} == "" +.if ${USE_PERL5_LEVEL} != ${masked_PERL_LEVEL} +USE_PERL5_REASON?= requires Perl ${want_perl_ver} exactly +IGNORE= ${USE_PERL5_REASON} +.endif # ${USE_PERL5_LEVEL} != ${masked_PERL_LEVEL} +.elif ${want_perl_sign} == "-" +.if ${USE_PERL5_LEVEL} <= ${masked_PERL_LEVEL} +USE_PERL5_REASON?= requires a Perl version earlier than ${want_perl_ver} +IGNORE= ${USE_PERL5_REASON} +.endif # ${USE_PERL5_LEVEL} <= ${masked_PERL_LEVEL} +.else # wrong suffix +IGNORE= improper use of USE_PERL5 +.endif +.endif + +_USES_POST+= perl5 +.endif + +.if defined(_POSTMKINCLUDED) && !defined(_INCLUDE_USES_PERL5_POST_MK) +_INCLUDE_USES_PERL5_POST_MK= yes + +PLIST_SUB+= PERL_VERSION=${PERL_VERSION} \ + PERL_VER=${PERL_VER} \ + PERL_ARCH=${PERL_ARCH} \ + SITE_PERL=${SITE_PERL_REL} + +# handle perl5 specific manpages +.for sect in 1 2 3 4 5 6 7 8 9 +.if defined(P5MAN${sect}) +_MANPAGES+= ${P5MAN${sect}:S%^%${PREFIX}/lib/perl5/${PERL_VER}/man/man${sect}/%} +.endif +.endfor + +.if ${_USE_PERL5:Mmodbuild} +_USE_PERL5+= configure +CONFIGURE_SCRIPT?= Build.PL +.if ${PORTNAME} != Module-Build +BUILD_DEPENDS+= ${SITE_PERL}/Module/Build.pm:${PORTSDIR}/devel/p5-Module-Build +.endif +ALL_TARGET?= +PL_BUILD?= Build +CONFIGURE_ARGS+= \ + create_packlist=0 \ + install_path=lib="${PREFIX}/${SITE_PERL_REL}" \ + install_path=arch="${PREFIX}/${SITE_PERL_REL}/${PERL_ARCH}" \ + install_path=script="${PREFIX}/bin" \ + install_path=bin="${PREFIX}/bin" \ + install_path=libdoc="${MAN3PREFIX}/man/man3" \ + install_path=bindoc="${MAN1PREFIX}/man/man1" +.elif ${_USE_PERL5:Mconfigure} +CONFIGURE_ARGS+= INSTALLDIRS="site" +.endif # modbuild + +.if ${_USE_PERL5:Mconfigure} +_USE_PERL5+= build run +# Disable AutoInstall from attempting to install from CPAN directly in +# the case of missing dependencies. This causes the build to loop on +# the build cluster asking for interactive input. +CONFIGURE_ENV+= PERL_EXTUTILS_AUTOINSTALL="--skipdeps" +.if defined(BATCH) && !defined(IS_INTERACTIVE) +CONFIGURE_ENV+= PERL_MM_USE_DEFAULT="YES" +.endif # defined(BATCH) && !defined(IS_INTERACTIVE) +.endif # configure + +.if ${_USE_PERL5:Mextract} +EXTRACT_DEPENDS+= ${PERL5}:${PORTSDIR}/lang/${PERL_PORT} +.endif + +.if ${_USE_PERL5:Mpatch} +PATCH_DEPENDS+= ${PERL5}:${PORTSDIR}/lang/${PERL_PORT} +.endif + +.if ${_USE_PERL5:Mbuild} +BUILD_DEPENDS+= ${PERL5}:${PORTSDIR}/lang/${PERL_PORT} +.endif + +.if ${_USE_PERL5:Mrun} +RUN_DEPENDS+= ${PERL5}:${PORTSDIR}/lang/${PERL_PORT} +.endif + +.if ${_USE_PERL5:Mconfigure} +CONFIGURE_ARGS+= CC="${CC}" CCFLAGS="${CFLAGS}" PREFIX="${PREFIX}" \ + INSTALLPRIVLIB="${PREFIX}/lib" INSTALLARCHLIB="${PREFIX}/lib" +CONFIGURE_SCRIPT?= Makefile.PL +MAN3PREFIX?= ${PREFIX}/lib/perl5/${PERL_VER} +.undef HAS_CONFIGURE + +.if !target(do-configure) +do-configure: + @if [ -f ${SCRIPTDIR}/configure ]; then \ + cd ${.CURDIR} && ${SETENV} ${SCRIPTS_ENV} ${SH} \ + ${SCRIPTDIR}/configure; \ + fi + @cd ${CONFIGURE_WRKSRC} && \ + ${SETENV} ${CONFIGURE_ENV} \ + ${PERL5} ./${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS} +.if !${_USE_PERL5:Mmodbuild} + @cd ${CONFIGURE_WRKSRC} && \ + ${PERL5} -pi -e 's/ doc_(perl|site|\$$\(INSTALLDIRS\))_install$$//' Makefile +.endif # ! modbuild +.endif # !target(do-configure) +.endif # configure + +.if ${_USE_PERL5:Mmodbuild} +.if !target(do-build) +do-build: + @(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${ALL_TARGET}) +.endif # !target(do-build) + +.if !${USES:Mgmake} +.if !target(do-install) +do-install: + @(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${INSTALL_TARGET}) +.endif # !target(do-install) +.endif # ! USES=gmake +.endif # modbuild +.endif # defined(_POSTMKINCLUDED) diff --git a/Mk/bsd.perl.mk b/Mk/bsd.perl.mk index 65f3fb34d40e..89d13fac3954 100644 --- a/Mk/bsd.perl.mk +++ b/Mk/bsd.perl.mk @@ -3,6 +3,8 @@ # # $FreeBSD$ # +# /!\ THIS FILE IS DEPRECATED PLEASE CONFIGURE USING USES=perl5 /!\ +# # bsd.perl.mk - Support for Perl-based ports. # # Created by: Gabor Kovesdan <gabor@FreeBSD.org> @@ -43,6 +45,7 @@ # USE_PERL5_RUN - If set, this port uses perl5 for running. # # PERL_MODBUILD - Use Module::Build to configure, build and install port. +.if !defined(USES) || !${USES:Mperl5} .if !defined(_POSTMKINCLUDED) && !defined(Perl_Pre_Include) @@ -231,3 +234,4 @@ do-install: .endif # !defined(USE_GMAKE) .endif # defined(PERL_MODBUILD) .endif # defined(_POSTMKINCLUDED) && !defined(Perl_Post_Include) +.endif |