summaryrefslogtreecommitdiff
path: root/ports-mgmt/portmk
diff options
context:
space:
mode:
authorMark Linimon <linimon@FreeBSD.org>2007-09-25 19:18:07 +0000
committerMark Linimon <linimon@FreeBSD.org>2007-09-25 19:18:07 +0000
commit487e1ed07ae212848f9e33e3f944cb001744b443 (patch)
treee86eedd1a88ae59e6923e0e68d0000ae064df2ee /ports-mgmt/portmk
parentUpdate to 0.30. (diff)
Add a test to detect ports that do not not set USE_PERL5 (or derivatives),
PERL_CONFIGURE, PERL_MODBUILD, or the upcoming WANT_PERL. This patch is currently being tested on the cluster.
Notes
Notes: svn path=/head/; revision=200107
Diffstat (limited to 'ports-mgmt/portmk')
-rw-r--r--ports-mgmt/portmk/Mk/bsd.perl.mk270
1 files changed, 270 insertions, 0 deletions
diff --git a/ports-mgmt/portmk/Mk/bsd.perl.mk b/ports-mgmt/portmk/Mk/bsd.perl.mk
new file mode 100644
index 000000000000..16871cccad07
--- /dev/null
+++ b/ports-mgmt/portmk/Mk/bsd.perl.mk
@@ -0,0 +1,270 @@
+#-*- 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(PERL_VERSION)
+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)