summaryrefslogblamecommitdiff
path: root/Mk/bsd.perl.mk
blob: 408fbccfadc9f7f60b243a57f90593bb1ea6a265 (plain) (tree)










































































                                                                                         

                                                                                           





































                                                                                       























































                                                                                                          














                                                                
                                                                                   


                                                                                                    





















                                                                                      


                                                                      
                                                      




















                                                                                     


                           
                                                                           
             



























                                                                                                        
#-*- mode: makefile; tab-width: 4; -*-
# ex:ts=4
#
# $FreeBSD$
#
# bsd.perl.mk - Support for Perl-based ports.
#
# Created by: Gabor Kovesdan <gabor@FreeBSD.org>
#
# For FreeBSD committers:
# Please send all suggested changes to the maintainer instead of committing
# them to CVS yourself.
#
# 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 (see below for current value).
# 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.6.1 would give
#				  a PERL_LEVEL of 500601. 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: ${ARCH}-freebsd).
# PERL_PORT		- Name of the perl port that is installed
#				  (value: perl5)
# SITE_PERL		- Directory name where site specific perl packages go.
#				  This value is added to PLIST_SUB.
# USE_PERL5		- If your port needs a specific version of Perl, you
#				  can easily specify that with this knob.  If
#				  you need a certain minimal version, but don't
#				  care if about the upperversion, just put the
#				  + sign behind the version.  If you want to
#				  specify a latest version your port can be used
#				  with, suffix the version number with a - sign.
#				  Exact version can also be specified if you just
#				  set USE_PERL5 to the desired version.  If you
#				  just set USE_PERL5 to "yes", Perl will be
#				  pulled in as a dependency but no version check
#				  is done.
# USE_PERL5_REASON
#				- Along with USE_PERL5, you can set a specific reason,
#				  why a given version is required.
#
# Examples:
# 	USE_PERL5=	yes	# port requires any version of Perl5 to build.
# 	USE_PERL5=	5.6.0+	# port requires at least Perl 5.6.0 to build.
#	USE_PERL5=	5.8.2	# port is only usable with Perl 5.8.2.
#	USE_PERL5=	5.8.6-	# port is only usbale with Perl 5.8.6 or prior.
#
# This line along with a properly set USE_PERL5 will give the user a reason,
# why the specific ports cannot be installed into the given environment.
#
#	USE_PERL5_REASON=	this module is already part of your Perl version
#
# PERL_CONFIGURE
#				- Configure using Perl's MakeMaker.  Implies USE_PERL5.
#				  The version requirement can be specified here,
#				  as well.
# USE_PERL5_BUILD
#				- If set, this port uses perl5 in one or more of the
#				  extract, patch, build or install phases.
#				  The version requirement can be specified here,
#				  as well.
# USE_PERL5_RUN	- If set, this port uses perl5 for running.  The
#			 	  version requirement can be specified here,
#				  as well.
# PERL_MODBUILD	- Use Module::Build to configure, build and install
#				  port.  The version requirement can be specified
#				  here, as well.
#
# WANT_PERL5	- Set this is your port conditionally depends on Perl.
#				  This MUST appear before the inclusion of bsd.port.pre.mk.

.if !defined(_POSTMKINCLUDED) && !defined(Perl_Pre_Include)

Perl_Pre_Include=			bsd.perl.mk
PERL_Include_MAINTAINER=	perl@FreeBSD.org

# XXX to remain undefined until all ports that require Perl are fixed
# to set one of the conditionals that force the inclusion of bsd.perl.mk
.if defined(_PERL_REFACTORING_COMPLETE)

PERL_VERSION?=	5.8.8
PERL_VER?=		5.8.8

.if !defined(PERL_LEVEL) && defined(PERL_VERSION)
perl_major=		${PERL_VERSION:C|\..*||}
_perl_minor=	${PERL_VERSION:S|^${perl_major}||:S|^.||:C|\..*||}
_perl_patch=	${PERL_VERSION:S|^${perl_major}||:S|^.${_perl_minor}||:S|^.||:C|\..*||}
perl_minor=		${_perl_minor:S|^|000|:C|.*(...)|\1|}
perl_patch=		${_perl_patch:S|^|00|:C|.*(..)|\1|}
PERL_LEVEL=		${perl_major}${perl_minor}${perl_patch}
.else
PERL_LEVEL=		0
.endif # !defined(PERL_LEVEL) && defined(PERL_VERSION)

PERL_ARCH?=		mach

.if ${PERL_LEVEL} >= 500800
PERL_PORT?=	perl5.8
.else # ${PERL_LEVEL} < 500800
PERL_PORT?=	perl5
.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

.endif  # defined(_PERL_REFACTORING_COMPLETE)

# Decide where to look for the version string
.ifdef USE_PERL5
USE_PERL5_STRING=	${USE_PERL5}
.elifdef USE_PERL5_BUILD
USE_PERL5_STRING=	${USE_PERL5_BUILD}
.elifdef USE_PERL5_RUN
USE_PERL5_STRING=	${USE_PERL5_RUN}
.elifdef PERL_MODBUILD
USE_PERL5_STRING=	${PERL_MODBUILD}
.elifdef PERL_CONFIGURE
USE_PERL5_STRING=	${PERL_CONFIGURE}
.else
USE_PERL5_STRING=	yes  # currently unreachable
.endif

.if ${USE_PERL5_STRING:L} != "yes"
want_perl_sign=		${USE_PERL5_STRING:C|^[0-9.]+||}
want_perl_ver=		${USE_PERL5_STRING: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}

# 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 ${want_perl_sign} == "+"
.if ${USE_PERL5_LEVEL} > ${masked_PERL_LEVEL}
USE_PERL5_REASON?=	requires Perl ${want_perl_ver} or later, install lang/perl5.8 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 #${USE_PERL5_STRING:L} != "yes"

.endif # !defined(_POSTMKINCLUDED) && !defined(Perl_Pre_Include)

.if defined(_POSTMKINCLUDED) && !defined(Perl_Post_Include)

Perl_Post_Include=		bsd.perl.mk

.if defined(_PERL_REFACTORING_COMPLETE)

PLIST_SUB+=	PERL_VERSION=${PERL_VERSION} \
			PERL_VER=${PERL_VER} \
			PERL_ARCH=${PERL_ARCH} \
			SITE_PERL=${SITE_PERL_REL}

.endif  # defined(_PERL_REFACTORING_COMPLETE)

.if !defined(PERL) || !defined(PERL5) || !defined(PERL_PORT) || !defined(SITE_PERL)
IGNORE=		missing define for WANT_PERL, USE_PERL5, or similar before bsd.port.pre.mk inclusion
.endif

.if defined(PERL_MODBUILD)
PERL_CONFIGURE=		yes
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 defined(PERL_CONFIGURE)
CONFIGURE_ARGS+=	INSTALLDIRS="site"
.endif # defined(PERL_MODBUILD)

.if defined(PERL_CONFIGURE)
USE_PERL5=	yes
# 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 # defined(PERL_CONFIGURE)

.if defined(USE_PERL5) || defined(USE_PERL5_BUILD)
EXTRACT_DEPENDS+=	${PERL5}:${PORTSDIR}/lang/${PERL_PORT}
PATCH_DEPENDS+=		${PERL5}:${PORTSDIR}/lang/${PERL_PORT}
BUILD_DEPENDS+=		${PERL5}:${PORTSDIR}/lang/${PERL_PORT}
.endif
.if defined(USE_PERL5) || defined(USE_PERL5_RUN)
RUN_DEPENDS+=		${PERL5}:${PORTSDIR}/lang/${PERL_PORT}
.endif

.if defined(PERL_CONFIGURE)
CONFIGURE_ARGS+=	CC="${CC}" CCFLAGS="${CFLAGS}" PREFIX="${PREFIX}" \
			INSTALLPRIVLIB="${PREFIX}/lib" INSTALLARCHLIB="${PREFIX}/lib"
CONFIGURE_SCRIPT?=	Makefile.PL
MAN3PREFIX?=		${PREFIX}/lib/perl5/${PERL_VERSION}
.undef HAS_CONFIGURE
.endif # defined(PERL_CONFIGURE)

.if defined(PERL_CONFIGURE)
.if !target(do-configure)
# XXX MCL had to duplicate the first block; implies more refactoring needed
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 !defined(PERL_MODBUILD)
	@cd ${CONFIGURE_WRKSRC} && \
		${PERL5} -pi -e 's/ doc_(perl|site|\$$\(INSTALLDIRS\))_install$$//' Makefile
.endif # !defined(PERL_MODBUILD)
.endif # !target(do-configure)
.endif # defined(PERL_CONFIGURE)

.if defined(PERL_MODBUILD)
.if !target(do-build)
do-build:
	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${ALL_TARGET})
.endif # !target(do-build)

.if !defined(USE_GMAKE)
.if !target(do-install)
do-install:
	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${INSTALL_TARGET})
.endif # !target(do-install)
.endif # !defined(USE_GMAKE)
.endif # defined(PERL_MODBUILD)
.endif # defined(_POSTMKINCLUDED) && !defined(Perl_Post_Include)