Index: head/devel/portmk/Mk/bsd.port.post.mk
===================================================================
--- head/devel/portmk/Mk/bsd.port.post.mk (revision 113826)
+++ head/devel/portmk/Mk/bsd.port.post.mk (revision 113827)
@@ -1,3226 +1,3451 @@
#-*- mode: makefile; tab-width: 4; -*-
# ex:ts=4
#
# $FreeBSD$
#
.if defined(_POSTMKINCLUDED)
check-makefile::
@${ECHO_CMD} "${PKGNAME}: Makefile error: you cannot include bsd.port[.post].mk twice"
@${FALSE}
.endif
_POSTMKINCLUDED= yes
+OPTIONS_DBDIR?= /var/db/options
+OPTIONS_FILE?= ${OPTIONS_DBDIR}/${UNIQUENAME}
+
+.if defined(_OPTIONSNG_READ) && exists(${OPTIONS_FILE})
+.if ${_OPTIONSNG_READ} == "default"
+_ONG_REEXEC= yes
+check-makefile::
+ @${ECHO_MSG} "===> Configuration error, \`make rmconfig' to remove custom options."
+ @${FALSE}
+.else
+.undef _ONG_REEXEC
+.endif
+_ONG_MAKEFLAGS= -f '${OPTIONS_FILE}' -f Makefile
+.else
+.undef _ONG_REEXEC
+_ONG_MAKEFLAGS= -f Makefile
+.endif
+
WRKDIR?= ${WRKDIRPREFIX}${.CURDIR}/work
.if defined(NO_WRKSUBDIR)
WRKSRC?= ${WRKDIR}
.else
WRKSRC?= ${WRKDIR}/${DISTNAME}
.endif
PATCH_WRKSRC?= ${WRKSRC}
CONFIGURE_WRKSRC?= ${WRKSRC}
BUILD_WRKSRC?= ${WRKSRC}
INSTALL_WRKSRC?=${WRKSRC}
+WRKINST?= ${WRKDIR}/.inst
+
+.if defined(DESTDIR)
+check-makefile::
+ @${ECHO_CMD} "${PKGNAME}: DESTDIR is not a user settable variable"
+ @${FALSE}
+.endif
+
+.if defined(CLEANROOM_INSTALL)
+DESTDIR= ${WRKINST}
+.endif
+
PLIST_SUB+= OSREL=${OSREL} PREFIX=%D LOCALBASE=${LOCALBASE} X11BASE=${X11BASE}
.if defined(WITHOUT_CPU_CFLAGS)
.if defined(_CPUCFLAGS)
.if !empty(_CPUCFLAGS)
CFLAGS:= ${CFLAGS:C/${_CPUCFLAGS}//}
.endif
.endif
.endif
.if defined(NOPORTDOCS)
PLIST_SUB+= PORTDOCS="@comment "
.else
PLIST_SUB+= PORTDOCS=""
.endif
CONFIGURE_SHELL?= ${SH}
MAKE_SHELL?= ${SH}
CONFIGURE_ENV+= SHELL=${SH} CONFIG_SHELL=${SH} PORTOBJFORMAT=${PORTOBJFORMAT}
SCRIPTS_ENV+= PORTOBJFORMAT=${PORTOBJFORMAT}
MAKE_ENV+= SHELL=${SH} PORTOBJFORMAT=${PORTOBJFORMAT}
PLIST_SUB+= PORTOBJFORMAT=${PORTOBJFORMAT}
.if defined(MANCOMPRESSED)
.if ${MANCOMPRESSED} != yes && ${MANCOMPRESSED} != no && \
${MANCOMPRESSED} != maybe
check-makevars::
@${ECHO_CMD} "${PKGNAME}: Makefile error: value of MANCOMPRESSED (is \"${MANCOMPRESSED}\") can only be \"yes\", \"no\" or \"maybe\"".
@${FALSE}
.endif
.endif
.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
MANCOMPRESSED?= yes
.else
MANCOMPRESSED?= no
.endif
.if defined(PATCHFILES)
.if ${PATCHFILES:M*.bz2}x != x && defined(BZIP2DEPENDS)
PATCH_DEPENDS+= bzip2:${PORTSDIR}/archivers/bzip2
.endif
.if ${PATCHFILES:M*.zip}x != x && defined(ZIPDEPENDS)
PATCH_DEPENDS+= unzip:${PORTSDIR}/archivers/unzip
.endif
.endif
.if defined(USE_BZIP2) && defined(BZIP2DEPENDS)
EXTRACT_DEPENDS+= bzip2:${PORTSDIR}/archivers/bzip2
.endif
.if defined(USE_ZIP) && defined(ZIPDEPENDS)
EXTRACT_DEPENDS+= unzip:${PORTSDIR}/archivers/unzip
.endif
.if defined(USE_GMAKE)
BUILD_DEPENDS+= gmake:${PORTSDIR}/devel/gmake
CONFIGURE_ENV+= MAKE=${GMAKE}
.endif
.if defined(USE_GCC)
.if ${OSVERSION} < 400012
GCCVERSION= 020702
.endif
.if ${OSVERSION} >= 400012 && ${OSVERSION} < 500035
GCCVERSION= 029500
.endif
.if ${OSVERSION} >= 500035 && ${OSVERSION} < 500039
GCCVERSION= 030100
.endif
.if ${OSVERSION} >= 500039 && ${OSVERSION} < 501103
GCCVERSION= 030200
.endif
.if ${OSVERSION} >= 501103
GCCVERSION= 030301
.endif
.if ${OSVERSION} >= 599999
GCCVERSION= 030400
.endif
.endif
.if defined(USE_GCC)
.if ${USE_GCC} == 2.95 && ( ${OSVERSION} < 400012 || ${OSVERSION} > 500034 )
CC= gcc295
CXX= g++295
BUILD_DEPENDS+= gcc295:${PORTSDIR}/lang/gcc295
GCCVERSION= 029500
.endif
.if ${USE_GCC} == 3.1 && ( ${OSVERSION} < 500035 || ${OSVERSION} > 500038 )
CC= gcc31
CXX= g++31
F77= g77-31
BUILD_DEPENDS+= gcc31:${PORTSDIR}/lang/gcc31
GCCVERSION= 030100
.endif
.if ${USE_GCC} == 3.2 && ${OSVERSION} < 500039
CC= gcc32
CXX= g++32
F77= g77-32
BUILD_DEPENDS+= gcc32:${PORTSDIR}/lang/gcc32
GCCVERSION= 030200
.endif
.if ${USE_GCC} == 3.3 && ${OSVERSION} < 501103
CC= gcc33
CXX= g++33
F77= g77-33
BUILD_DEPENDS+= gcc33:${PORTSDIR}/lang/gcc33
GCCVERSION= 030301
.endif
.if ${USE_GCC} == 3.4 # Not yet available in any OSVERSION
CC= gcc34
CXX= g++34
F77= g77-34
BUILD_DEPENDS+= gcc34:${PORTSDIR}/lang/gcc34
GCCVERSION= 030400
.endif
MAKE_ENV+= CC="${CC}" CXX="${CXX}"
.endif
.if defined(USE_OPENLDAP_VER)
USE_OPENLDAP?= yes
WANT_OPENLDAP_VER= ${USE_OPENLDAP_VER}
.endif
.if defined(USE_OPENLDAP)
.if defined(WANT_OPENLDAP_SASL)
_OPENLDAP_FLAVOUR= -sasl
.else
_OPENLDAP_FLAVOUR=
.endif
.if ${WANT_OPENLDAP_VER} == 22
LIB_DEPENDS+= ldap-2.2.7:${PORTSDIR}/net/openldap22${_OPENLDAP_FLAVOUR}-client
.elif ${WANT_OPENLDAP_VER} == 21
LIB_DEPENDS+= ldap.2:${PORTSDIR}/net/openldap21${_OPENLDAP_FLAVOUR}-client
.else
BROKEN= "unknown OpenLDAP version: ${WANT_OPENLDAP_VER}"
.endif
.endif
.if defined(USE_GETOPT_LONG)
.if ${OSVERSION} < 500041
LIB_DEPENDS+= gnugetopt.1:${PORTSDIR}/devel/libgnugetopt
CPPFLAGS+= -I${LOCALBASE}/include
LDFLAGS+= -L${LOCALBASE}/lib -lgnugetopt
CONFIGURE_ENV+= CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}"
.endif
.endif
.if defined(USE_RC_SUBR)
.if ${OSVERSION} < 500037
RUN_DEPENDS+= ${LOCALBASE}/etc/rc.subr:${PORTSDIR}/sysutils/rc_subr
RC_SUBR= ${LOCALBASE}/etc/rc.subr
.else
RC_SUBR= /etc/rc.subr
.endif
.endif
.if defined(USE_ICONV)
LIB_DEPENDS+= iconv.3:${PORTSDIR}/converters/libiconv
.endif
.if defined(USE_GETTEXT)
. if ${USE_GETTEXT:L} == "yes"
LIB_DEPENDS+= intl:${PORTSDIR}/devel/gettext
. else
LIB_DEPENDS+= intl.${USE_GETTEXT}:${PORTSDIR}/devel/gettext
. endif
.endif
.if defined(USE_LINUX)
RUN_DEPENDS+= ${LINUXBASE}/etc/redhat-release:${PORTSDIR}/emulators/linux_base
.endif
.if defined(USE_MOTIF)
USE_XPM= yes
.if defined(WANT_LESSTIF)
LIB_DEPENDS+= Xm:${PORTSDIR}/x11-toolkits/lesstif
NO_OPENMOTIF= yes
.endif
.if !defined(NO_OPENMOTIF)
LIB_DEPENDS+= Xm.3:${PORTSDIR}/x11-toolkits/open-motif
.endif
.endif
.if defined(USE_FREETYPE)
LIB_DEPENDS+= ttf.4:${PORTSDIR}/print/freetype
.endif
.if ${XFREE86_VERSION} == 3
.if defined(USE_IMAKE)
BUILD_DEPENDS+= imake:${PORTSDIR}/x11/XFree86
.endif
.if defined(USE_XPM)
LIB_DEPENDS+= Xpm.4:${PORTSDIR}/graphics/xpm
.endif
.if defined(USE_GL)
LIB_DEPENDS+= GL.14:${PORTSDIR}/graphics/mesagl
.endif
XAWVER= 6
PKG_IGNORE_DEPENDS?= '^XFree86-3\.'
.else
.if defined(USE_IMAKE)
BUILD_DEPENDS+= ${X11BASE}/lib/X11/config/date.def:${PORTSDIR}/devel/imake-4
RUN_DEPENDS+= mkhtmlindex:${PORTSDIR}/devel/imake-4
.endif
.if defined(USE_XPM) || defined(USE_GL)
USE_XLIB= yes
.endif
XAWVER= 7
PKG_IGNORE_DEPENDS?= 'this_port_does_not_exist'
.endif
PLIST_SUB+= XAWVER=${XAWVER}
.if defined(USE_MESA)
LIB_DEPENDS+= glut.3:${PORTSDIR}/graphics/libglut
.endif
.if defined(USE_BISON)
.if ${OSVERSION} >= 400014
BUILD_DEPENDS+= bison:${PORTSDIR}/devel/bison
.endif
.endif
PLIST_SUB+= PERL_VERSION=${PERL_VERSION} \
PERL_VER=${PERL_VER} \
PERL_ARCH=${PERL_ARCH} \
SITE_PERL=${SITE_PERL_REL}
.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+= \
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"
.endif
.if defined(PERL_CONFIGURE)
USE_PERL5= yes
USE_REINPLACE=yes
.endif
.if ${PERL_LEVEL} >= 500600
.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
.endif
.if defined(USE_MYSQL)
DEFAULT_MYSQL_VER?= 40
# MySQL client version currently supported.
MYSQL323_LIBVER= 10
MYSQL40_LIBVER= 12
MYSQL41_LIBVER= 14
MYSQL50_LIBVER= 14
# Setting/finding MySQL version we want.
.if defined(WANT_MYSQL_VER)
MYSQL_VER= ${WANT_MYSQL_VER}
.elif defined(WITH_MYSQL_VER)
MYSQL_VER= ${WITH_MYSQL_VER}
.elif exists(${LOCALBASE}/bin/mysql)
MYSQL_VER!= ${LOCALBASE}/bin/mysql --version | ${SED} -e 's/.*Distrib \([0-9]\)\.\([0-9]*\).*/\1\2/'
.else
MYSQL_VER= ${DEFAULT_MYSQL_VER}
.endif # WANT_MYSQL_VER
# And now we are checking if we can use it
.if exists(${PORTSDIR}/databases/mysql${MYSQL_VER}-client)
.if defined(BROKEN_WITH_MYSQL)
. for VER in ${BROKEN_WITH_MYSQL}
. if (${MYSQL_VER} == "${VER}")
-BROKEN= "Doesn't work with MySQL version : ${MYSQL_VER} (Doesn't support MySQL ${BROKEN_WITH_MYSQL})"
+IGNORE= "Doesn't work with MySQL version : ${MYSQL_VER} (Doesn't support MySQL ${BROKEN_WITH_MYSQL})"
. endif
. endfor
.endif # BROKEN_WITH_MYSQL
LIB_DEPENDS+= mysqlclient.${MYSQL${MYSQL_VER}_LIBVER}:${PORTSDIR}/databases/mysql${MYSQL_VER}-client
.else
BROKEN= "unknown MySQL version: ${MYSQL_VER}"
.endif # Check for correct libs
.endif # USE_MYSQL
.if defined(USE_XLIB)
.if ${XFREE86_VERSION} == 3
# Don't try to build XFree86-3 even if ALWAYS_BUILD_DEPENDS is defined --
# it's just too big....
.if !defined(ALWAYS_BUILD_DEPENDS)
LIB_DEPENDS+= X11.6:${PORTSDIR}/x11/XFree86
.endif
.else
LIB_DEPENDS+= X11.6:${PORTSDIR}/x11/XFree86-4-libraries
.endif
# Add explicit X options to avoid problems with false positives in configure
.if defined(GNU_CONFIGURE)
CONFIGURE_ARGS+=--x-libraries=${X11BASE}/lib --x-includes=${X11BASE}/include
.endif
.endif
# XXX: (not yet): .if defined(USE_AUTOTOOLS)
.include "${PORTSDIR}/Mk/bsd.autotools.mk"
# XXX: (not yet): .endif
.if defined(WANT_GNOME) || defined(USE_GNOME) || defined(USE_GTK)
.include "${PORTSDIR}/Mk/bsd.gnome.mk"
.endif
.if defined(USE_SDL) || defined(WANT_SDL)
.include "${PORTSDIR}/Mk/bsd.sdl.mk"
.endif
.if defined(USE_PYTHON)
.include "${PORTSDIR}/Mk/bsd.python.mk"
.endif
.if exists(${PORTSDIR}/../Makefile.inc)
.include "${PORTSDIR}/../Makefile.inc"
USE_SUBMAKE= yes
.endif
# Set the default for the installation of Postscript(TM)-
# compatible functionality.
.if !defined(WITHOUT_X11)
.if defined(WITH_GHOSTSCRIPT_AFPL)
.if ${WITH_GHOSTSCRIPT_AFPL} == yes
GHOSTSCRIPT_PORT?= print/ghostscript-afpl
.else
GHOSTSCRIPT_PORT?= print/ghostscript-gnu
.endif
.else
GHOSTSCRIPT_PORT?= print/ghostscript-gnu
.endif
.else
.if defined(WITH_GHOSTSCRIPT_AFPL)
.if ${WITH_GHOSTSCRIPT_AFPL} == yes
GHOSTSCRIPT_PORT?= print/ghostscript-afpl-nox11
.else
GHOSTSCRIPT_PORT?= print/ghostscript-gnu-nox11
.endif
.else
GHOSTSCRIPT_PORT?= print/ghostscript-gnu-nox11
.endif
.endif
# Set up the ghostscript dependencies.
.if defined(USE_GHOSTSCRIPT) || defined(USE_GHOSTSCRIPT_BUILD)
BUILD_DEPENDS+= gs:${PORTSDIR}/${GHOSTSCRIPT_PORT}
.endif
.if defined(USE_GHOSTSCRIPT) || defined(USE_GHOSTSCRIPT_RUN)
RUN_DEPENDS+= gs:${PORTSDIR}/${GHOSTSCRIPT_PORT}
.endif
# Special macro for doing in-place file editing using regexps
.if defined(USE_REINPLACE)
REINPLACE_ARGS?= -i.bak
.if ${OSVERSION} < 460101 || ( ${OSVERSION} >= 500000 && ${OSVERSION} < 500036 )
PATCH_DEPENDS+= ${LOCALBASE}/bin/sed_inplace:${PORTSDIR}/textproc/sed_inplace
REINPLACE_CMD?= ${LOCALBASE}/bin/sed_inplace ${REINPLACE_ARGS}
.else
REINPLACE_CMD?= ${SED} ${REINPLACE_ARGS}
.endif
.endif
# Names of cookies used to skip already completed stages
-EXTRACT_COOKIE?= ${WRKDIR}/.extract_done.${PKGNAME}.${PREFIX:S/\//_/g}
-CONFIGURE_COOKIE?= ${WRKDIR}/.configure_done.${PKGNAME}.${PREFIX:S/\//_/g}
-INSTALL_COOKIE?= ${WRKDIR}/.install_done.${PKGNAME}.${PREFIX:S/\//_/g}
-BUILD_COOKIE?= ${WRKDIR}/.build_done.${PKGNAME}.${PREFIX:S/\//_/g}
-PATCH_COOKIE?= ${WRKDIR}/.patch_done.${PKGNAME}.${PREFIX:S/\//_/g}
-PACKAGE_COOKIE?= ${WRKDIR}/.package_done.${PKGNAME}.${PREFIX:S/\//_/g}
+.for target in extract patch configure build install package
+${target:U}_COOKIE?=${WRKDIR}/.${target}_done.${PKGNAME}.${PREFIX:S/\//_/g}
+.endfor
# How to do nothing. Override if you, for some strange reason, would rather
# do something.
DO_NADA?= ${TRUE}
# Use this as the first operand to always build dependency.
NONEXISTENT?= /nonexistent
# Miscellaneous overridable commands:
GMAKE?= gmake
XMKMF?= xmkmf -a
MKHTMLINDEX?= ${X11BASE}/bin/mkhtmlindex
.if exists(/sbin/md5)
MD5?= /sbin/md5
.elif exists(/bin/md5)
MD5?= /bin/md5
.elif exists(/usr/bin/md5)
MD5?= /usr/bin/md5
.else
MD5?= md5
.endif
MD5_FILE?= ${MASTERDIR}/distinfo
MAKE_FLAGS?= -f
MAKEFILE?= Makefile
-MAKE_ENV+= PREFIX=${PREFIX} LOCALBASE=${LOCALBASE} X11BASE=${X11BASE} MOTIFLIB="${MOTIFLIB}" LIBDIR="${LIBDIR}" CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" MANPREFIX="${MANPREFIX}"
+MAKE_ENV+= PREFIX=${PREFIX} LOCALBASE=${LOCALBASE} X11BASE=${X11BASE} DESTDIR=${DESTDIR} MOTIFLIB="${MOTIFLIB}" LIBDIR="${LIBDIR}" CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" MANPREFIX="${MANPREFIX}"
.if ${OSVERSION} < 500016
PTHREAD_CFLAGS?= -D_THREAD_SAFE
PTHREAD_LIBS?= -pthread
.elif ${OSVERSION} < 502102
PTHREAD_CFLAGS?= -D_THREAD_SAFE
PTHREAD_LIBS?= -lc_r
.else
PTHREAD_CFLAGS?=
PTHREAD_LIBS?= -lpthread
.endif
.if defined(FETCH_USE_CURL) && exists(${LOCALBASE}/bin/curl)
FETCH_CMD?= ${LOCALBASE}/bin/curl --create-dirs -L --max-redirs 1 -C -
.elif defined(FETCH_USE_WGET) && exists(${LOCALBASE}/bin/wget)
FETCH_CMD?= ${LOCALBASE}/bin/wget -c -t 1
.else
FETCH_CMD?= /usr/bin/fetch -ARr
.endif
TOUCH?= /usr/bin/touch
TOUCH_FLAGS?= -f
DISTORIG?= .bak.orig
PATCH?= /usr/bin/patch
PATCH_STRIP?= -p0
PATCH_DIST_STRIP?= -p0
.if defined(PATCH_DEBUG)
PATCH_DEBUG_TMP= yes
PATCH_ARGS?= -d ${PATCH_WRKSRC} -E ${PATCH_STRIP}
PATCH_DIST_ARGS?= -b ${DISTORIG} -d ${PATCH_WRKSRC} -E ${PATCH_DIST_STRIP}
.else
PATCH_DEBUG_TMP= no
PATCH_ARGS?= -d ${PATCH_WRKSRC} --forward --quiet -E ${PATCH_STRIP}
PATCH_DIST_ARGS?= -b ${DISTORIG} -d ${PATCH_WRKSRC} --forward --quiet -E ${PATCH_DIST_STRIP}
.endif
.if defined(BATCH)
PATCH_ARGS+= --batch
PATCH_DIST_ARGS+= --batch
.endif
# Prevent breakage with VERSION_CONTROL=numbered
PATCH_ARGS+= -V simple
.if defined(PATCH_CHECK_ONLY)
PATCH_ARGS+= -C
PATCH_DIST_ARGS+= -C
.endif
.if ${PATCH} == "/usr/bin/patch"
PATCH_ARGS+= -b .orig
PATCH_DIST_ARGS+= -b .orig
.endif
.if exists(/bin/tar)
TAR?= /bin/tar
.else
TAR?= /usr/bin/tar
.endif
# EXTRACT_SUFX is defined in .pre.mk section
.if defined(USE_ZIP)
EXTRACT_CMD?= ${UNZIP_CMD}
EXTRACT_BEFORE_ARGS?= -qo
EXTRACT_AFTER_ARGS?= -d ${WRKDIR}
.else
EXTRACT_BEFORE_ARGS?= -dc
EXTRACT_AFTER_ARGS?= | ${TAR} -xf -
.if defined(USE_BZIP2)
EXTRACT_CMD?= ${BZIP2_CMD}
.else
EXTRACT_CMD?= ${GZIP_CMD}
.endif
.endif
# Figure out where the local mtree file is
.if !defined(MTREE_FILE) && !defined(NO_MTREE)
.if defined(USE_X_PREFIX)
.if ${XFREE86_VERSION} == 3
MTREE_FILE= /etc/mtree/BSD.x11.dist
.else
MTREE_FILE= /etc/mtree/BSD.x11-4.dist
.endif
.else
.if ${PREFIX} == /usr
MTREE_FILE= /etc/mtree/BSD.usr.dist
.else
MTREE_FILE= /etc/mtree/BSD.local.dist
.endif
.endif
.endif
MTREE_CMD?= /usr/sbin/mtree
MTREE_ARGS?= -U ${MTREE_FOLLOWS_SYMLINKS} -f ${MTREE_FILE} -d -e -p
# Determine whether or not we can use rootly owner/group functions.
-.if !defined(UID)
-UID!= ${ID} -u
-.endif
.if ${UID} == 0
_BINOWNGRP= -o ${BINOWN} -g ${BINGRP}
_SHROWNGRP= -o ${SHAREOWN} -g ${SHAREGRP}
_MANOWNGRP= -o ${MANOWN} -g ${MANGRP}
.else
_BINOWNGRP=
_SHROWNGRP=
_MANOWNGRP=
.endif
# A few aliases for *-install targets
INSTALL_PROGRAM= \
${INSTALL} ${COPY} ${STRIP} ${_BINOWNGRP} -m ${BINMODE}
INSTALL_SCRIPT= \
${INSTALL} ${COPY} ${_BINOWNGRP} -m ${BINMODE}
INSTALL_DATA= \
${INSTALL} ${COPY} ${_SHROWNGRP} -m ${SHAREMODE}
INSTALL_MAN= \
${INSTALL} ${COPY} ${_MANOWNGRP} -m ${MANMODE}
INSTALL_MACROS= BSD_INSTALL_PROGRAM="${INSTALL_PROGRAM}" \
BSD_INSTALL_SCRIPT="${INSTALL_SCRIPT}" \
BSD_INSTALL_DATA="${INSTALL_DATA}" \
BSD_INSTALL_MAN="${INSTALL_MAN}"
MAKE_ENV+= ${INSTALL_MACROS}
SCRIPTS_ENV+= ${INSTALL_MACROS}
# The user can override the NO_PACKAGE by specifying this from
# the make command line
.if defined(FORCE_PACKAGE)
.undef NO_PACKAGE
.endif
COMMENTFILE?= ${PKGDIR}/pkg-comment
DESCR?= ${PKGDIR}/pkg-descr
PLIST?= ${PKGDIR}/pkg-plist
PKGINSTALL?= ${PKGDIR}/pkg-install
PKGDEINSTALL?= ${PKGDIR}/pkg-deinstall
PKGREQ?= ${PKGDIR}/pkg-req
PKGMESSAGE?= ${PKGDIR}/pkg-message
TMPPLIST?= ${WRKDIR}/.PLIST.mktmp
.if ${OSVERSION} >= 400000
.for _CATEGORY in ${CATEGORIES}
PKGCATEGORY?= ${_CATEGORY}
.endfor
_PORTDIRNAME= ${.CURDIR:T}
PORTDIRNAME?= ${_PORTDIRNAME}
PKGORIGIN?= ${PKGCATEGORY}/${PORTDIRNAME}
.endif
.if exists(${LOCALBASE}/sbin/pkg_info)
PKG_CMD?= ${LOCALBASE}/sbin/pkg_create
PKG_ADD?= ${LOCALBASE}/sbin/pkg_add
PKG_DELETE?= ${LOCALBASE}/sbin/pkg_delete
PKG_INFO?= ${LOCALBASE}/sbin/pkg_info
PKG_VERSION?= ${LOCALBASE}/sbin/pkg_version
.elif ${OSVERSION} < 460102 && ${PKGORIGIN} != "sysutils/pkg_install"
BUILD_DEPENDS+= ${LOCALBASE}/sbin/pkg_info:${PORTSDIR}/sysutils/pkg_install
PKG_CMD?= ${LOCALBASE}/sbin/pkg_create
PKG_ADD?= ${LOCALBASE}/sbin/pkg_add
PKG_DELETE?= ${LOCALBASE}/sbin/pkg_delete
PKG_INFO?= ${LOCALBASE}/sbin/pkg_info
PKG_VERSION?= ${LOCALBASE}/sbin/pkg_version
.else
PKG_CMD?= /usr/sbin/pkg_create
PKG_ADD?= /usr/sbin/pkg_add
PKG_DELETE?= /usr/sbin/pkg_delete
PKG_INFO?= /usr/sbin/pkg_info
PKG_VERSION?= /usr/sbin/pkg_version
.endif
# Does the pkg_create tool support conflict checking?
# XXX Slow?
.if !defined(PKGINSTALLVER)
PKGINSTALLVER!= ${PKG_INFO} -P 2>/dev/null | ${SED} -e 's/.*: //'
.endif
.if ${PKGINSTALLVER} < 20030417
DISABLE_CONFLICTS= YES
.endif
.if !defined(PKG_ARGS)
-PKG_ARGS= -v -c -${COMMENT:Q} -d ${DESCR} -f ${TMPPLIST} -p ${PREFIX} -P "`cd ${.CURDIR} && ${MAKE} package-depends | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u`" ${EXTRA_PKG_ARGS} $${_LATE_PKG_ARGS}
+PKG_ARGS= -v -c -${COMMENT:Q} -d ${DESCR} -f ${TMPPLIST} -p ${PREFIX} -P "`cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} package-depends | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u`" ${EXTRA_PKG_ARGS} $${_LATE_PKG_ARGS}
.if !defined(NO_MTREE)
PKG_ARGS+= -m ${MTREE_FILE}
.endif
.if defined(PKGORIGIN)
PKG_ARGS+= -o ${PKGORIGIN}
.endif
.if defined(CONFLICTS) && !defined(DISABLE_CONFLICTS)
PKG_ARGS+= -C "${CONFLICTS}"
.endif
+.if defined(DESTDIR)
+PKG_ARGS+= -S "${DESTDIR}"
.endif
+.endif
.if defined(PKG_NOCOMPRESS)
PKG_SUFX?= .tar
.else
.if ${OSVERSION} >= 500039
PKG_SUFX?= .tbz
.else
PKG_SUFX?= .tgz
.endif
.endif
# where pkg_add records its dirty deeds.
PKG_DBDIR?= /var/db/pkg
+_PKG_DBDIR?= ${DESTDIR}${PKG_DBDIR}
MOTIFLIB?= -L${X11BASE}/lib -lXm -lXp
ALL_TARGET?= all
INSTALL_TARGET?= install
# This is a mid-term solution patch while pkg-comment files are
# phased out.
# The final simpler patch will come afterwards
.if !defined(COMMENT)
check-makevars::
@${ECHO_CMD} 'Makefile error: there is no COMMENT variable defined'
@${ECHO_CMD} 'for this port. Please, rectify this.'
@${FALSE}
.else
.if exists(${COMMENTFILE})
check-makevars::
@${ECHO_CMD} 'Makefile error: There is a COMMENTFILE in this port.'
@${ECHO_CMD} 'COMMENTFILEs have been deprecated in'
@${ECHO_CMD} 'favor of COMMENT variables.'
@${ECHO_CMD} 'Please, rectify this.'
@${FALSE}
.endif
.endif
# Popular master sites
.include "${PORTSDIR}/Mk/bsd.sites.mk"
# The primary backup site.
MASTER_SITE_BACKUP?= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/
MASTER_SITE_BACKUP:= ${MASTER_SITE_BACKUP:S^\${DIST_SUBDIR}/^^}
# If the user has MASTER_SITE_FREEBSD set, go to the FreeBSD repository
# for everything, but don't search it twice by appending it to the end.
.if defined(MASTER_SITE_FREEBSD)
_MASTER_SITE_OVERRIDE:= ${MASTER_SITE_BACKUP}
_MASTER_SITE_BACKUP:= # empty
.else
_MASTER_SITE_OVERRIDE= ${MASTER_SITE_OVERRIDE}
_MASTER_SITE_BACKUP= ${MASTER_SITE_BACKUP}
.endif
# Search CDROM first if mounted
.for MOUNTPT in ${CD_MOUNTPTS}
.if exists(${MOUNTPT}/ports/distfiles)
_MASTER_SITE_OVERRIDE:= file:${MOUNTPT}/ports/distfiles/${DIST_SUBDIR}/ ${_MASTER_SITE_OVERRIDE}
.endif
.endfor
DISTFILES?= ${DISTNAME}${EXTRACT_SUFX}
.if !defined(DISTFILES_KEEP_QUOTING)
_DISTFILES= ${DISTFILES:C/:[^:]+$//:C/\\\\(.)/\1/g}
_PATCHFILES= ${PATCHFILES:C/:[^:]+$//:C/\\\\(.)/\1/g}
.else
_DISTFILES= ${DISTFILES:C/:[^:]+$//}
_PATCHFILES= ${PATCHFILES:C/:[^:]+$//}
.endif
#
# Sort the master site list according to the patterns in MASTER_SORT
#
MASTER_SORT?=
MASTER_SORT_REGEX?=
MASTER_SORT_REGEX+= ${MASTER_SORT:S|.|\\.|g:S|^|://[^/]*|:S|$|/|}
MASTER_SORT_AWK= BEGIN { RS = " "; ORS = " "; IGNORECASE = 1 ; gl = "${MASTER_SORT_REGEX:S|\\|\\\\|g}"; }
.for srt in ${MASTER_SORT_REGEX}
MASTER_SORT_AWK+= /${srt:S|/|\\/|g}/ { good["${srt:S|\\|\\\\|g}"] = good["${srt:S|\\|\\\\|g}"] " " $$0 ; next; }
.endfor
MASTER_SORT_AWK+= { rest = rest " " $$0; } END { n=split(gl, gla); for(i=1;i<=n;i++) { print good[gla[i]]; } print rest; }
.if defined(MASTER_SORT_FPING) && exists(${PERL5}) && exists(${LOCALBASE}/sbin/fping)
MASTER_SORT_CMD?= ${PERL5} -w ${PORTSDIR}/devel/portmk/scripts/ranksites-fping.pl
.elif defined(MASTER_SORT_GEOIP) && defined(CC_HOME) && exists(${PERL5}) && exists(${SITE_PERL}/${PERL_ARCH}/Geo/IP.pm)
MASTER_SORT_CMD?= ${PERL5} -w ${PORTSDIR}/devel/portmk/scripts/ranksites-geoip.pl
MASTER_SORT_ENV+= CC_HOME=${CC_HOME}
.endif
# This is what is actually going to be extracted, and is overridable
# by user.
EXTRACT_ONLY?= ${_DISTFILES}
# Documentation
MAINTAINER?= ports@FreeBSD.org
.PHONY: maintainer
.if !target(maintainer)
maintainer:
@${ECHO_CMD} "${MAINTAINER}"
.endif
.PHONY: check-makefile
.if !target(check-makefile)
check-makefile::
@${DO_NADA}
.endif
.PHONY: check-categories
.if !defined(CATEGORIES)
check-categories:
@${ECHO_CMD} "${PKGNAME}: Makefile error: CATEGORIES is mandatory."
@${FALSE}
.else
VALID_CATEGORIES+= accessibility afterstep arabic archivers astro audio \
benchmarks biology cad chinese comms converters databases \
deskutils devel dns editors elisp emulators finance french ftp \
games german gnome graphics haskell hebrew hungarian \
ipv6 irc japanese java kde korean lang linux lisp \
mail math mbone misc multimedia net net-mgmt news \
offix palm parallel pear perl5 picobsd plan9 polish portuguese print \
python ruby russian \
scheme science security shells sysutils \
tcl76 tcl80 tcl81 tcl82 tcl83 tcl84 textproc \
tk42 tk80 tk82 tk83 tk84 tkstep80 \
ukrainian vietnamese windowmaker www \
x11 x11-clocks x11-fm x11-fonts x11-servers x11-themes x11-toolkits \
x11-wm xfce zope
check-categories:
.for cat in ${CATEGORIES}
@if ${ECHO_CMD} ${VALID_CATEGORIES} | ${GREP} -wq ${cat}; then \
${TRUE}; \
else \
${ECHO_CMD} "${PKGNAME}: Makefile error: category ${cat} not in list of valid categories."; \
${FALSE}; \
fi
.endfor
.endif
.PHONY: check-makevars
.if !target(check-makevars)
check-makevars::
@${DO_NADA}
.endif
.PHONY: check-depends
.if !target(check-depends)
check-depends:
@${DO_NADA}
.endif
PKGREPOSITORYSUBDIR?= All
PKGREPOSITORY?= ${PACKAGES}/${PKGREPOSITORYSUBDIR}
.if exists(${PACKAGES})
PKGFILE?= ${PKGREPOSITORY}/${PKGNAME}${PKG_SUFX}
.else
PKGFILE?= ${.CURDIR}/${PKGNAME}${PKG_SUFX}
.endif
# The "latest version" link -- ${PKGNAME} minus everthing after the last '-'
PKGLATESTREPOSITORY?= ${PACKAGES}/Latest
PKGBASE?= ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}
LATEST_LINK?= ${PKGBASE}
PKGLATESTFILE= ${PKGLATESTREPOSITORY}/${LATEST_LINK}${PKG_SUFX}
.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
CONFIGURE_SCRIPT?= configure
CONFIGURE_TARGET?= ${MACHINE_ARCH}-portbld-freebsd${OSREL}
CONFIGURE_LOG?= config.log
# A default message to print if do-configure fails.
CONFIGURE_FAIL_MESSAGE?= "Please report the problem to ${MAINTAINER} [maintainer] and attach the \"${CONFIGURE_WRKSRC}/${CONFIGURE_LOG}\" including the output of the failure of your make command. Also, it might be a good idea to provide an overview of all packages installed on your system (e.g. an \`ls ${PKG_DBDIR}\`)."
.if defined(GNU_CONFIGURE)
# Maximum command line length
.if !defined(CONFIGURE_MAX_CMD_LEN)
.if exists(/sbin/sysctl)
CONFIGURE_MAX_CMD_LEN!= /sbin/sysctl -n kern.argmax
.else
CONFIGURE_MAX_CMD_LEN!= /usr/sbin/sysctl -n kern.argmax
.endif
.endif
CONFIGURE_ARGS+= --prefix=${PREFIX} ${CONFIGURE_TARGET}
CONFIGURE_ENV+= lt_cv_sys_max_cmd_len=${CONFIGURE_MAX_CMD_LEN}
HAS_CONFIGURE= yes
.endif
# Passed to most of script invocations
SCRIPTS_ENV+= CURDIR=${MASTERDIR} DISTDIR=${DISTDIR} \
WRKDIR=${WRKDIR} WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} \
SCRIPTDIR=${SCRIPTDIR} FILESDIR=${FILESDIR} \
PORTSDIR=${PORTSDIR} DEPENDS="${DEPENDS}" \
- PREFIX=${PREFIX} LOCALBASE=${LOCALBASE} X11BASE=${X11BASE}
+ PREFIX=${PREFIX} LOCALBASE=${LOCALBASE} X11BASE=${X11BASE} \
+ DESTDIR=${DESTDIR}
.if defined(BATCH)
SCRIPTS_ENV+= BATCH=yes
.endif
.if ${PREFIX} == /usr
MANPREFIX?= /usr/share
.else
MANPREFIX?= ${PREFIX}
.endif
.for sect in 1 2 3 4 5 6 7 8 9
MAN${sect}PREFIX?= ${MANPREFIX}
.endfor
MANLPREFIX?= ${MANPREFIX}
MANNPREFIX?= ${MANPREFIX}
MANLANG?= "" # english only by default
.if !defined(NOMANCOMPRESS)
MANEXT= .gz
.endif
.if (defined(MLINKS) || defined(_MLINKS_PREPEND)) && !defined(_MLINKS)
__pmlinks!= ${ECHO_CMD} '${MLINKS:S/ / /}' | ${AWK} \
'{ if (NF % 2 != 0) { print "broken"; exit; } \
for (i=1; i<=NF; i++) { \
if ($$i ~ /^-$$/ && i != 1 && i % 2 != 0) \
{ $$i = $$(i-2); printf " " $$i " "; } \
else if ($$i ~ /^[^ ]+\.[1-9ln][^. ]*$$/ || $$i ~ /^\//) \
printf " " $$i " "; \
else \
{ print "broken"; exit; } \
} \
}' | ${SED} -e 's \([^/ ][^ ]*\.\(.\)[^. ]*\) $${MAN\2PREFIX}/$$$$$$$${__lang}/man\2/\1${MANEXT}g' -e 's/ //g' -e 's/MANlPREFIX/MANLPREFIX/g' -e 's/MANnPREFIX/MANNPREFIX/g'
.if ${__pmlinks:Mbroken} == "broken"
check-makevars::
@${ECHO_CMD} "${PKGNAME}: Makefile error: unable to parse MLINKS."
@${FALSE}
.endif
_MLINKS= ${_MLINKS_PREPEND}
# XXX 20040119 This next line should read:
# .for lang in ${MANLANG:S%^%man/%:S%^man/""$%man%}
# but there is currently a bug in make(1) that prevents the double-quote
# substitution from working correctly. Once that problem is addressed,
# and has had a enough time to mature, this hack should be removed.
.for lang in ${MANLANG:S%^%man/%:S%^man/""$%man%:S%^man/"$%man%}
.for ___pmlinks in ${__pmlinks}
.for __lang in ${lang}
_MLINKS+= ${___pmlinks:S// /g}
.endfor
.endfor
.endfor
.endif
_COUNT=0
.for ___tpmlinks in ${_MLINKS}
.if ${_COUNT} == "1"
_TMLINKS+= ${___tpmlinks}
_COUNT=0
.else
_COUNT=1
.endif
.endfor
# XXX 20040119 This next line should read:
# .for manlang in ${MANLANG:S%^%man/%:S%^man/""$%man%}
# but there is currently a bug in make(1) that prevents the double-quote
# substitution from working correctly. Once that problem is addressed,
# and has had a enough time to mature, this hack should be removed.
.for manlang in ${MANLANG:S%^%man/%:S%^man/""$%man%:S%^man/"$%man%}
.for sect in 1 2 3 4 5 6 7 8 9 L N
.if defined(MAN${sect})
_MANPAGES+= ${MAN${sect}:S%^%${MAN${sect}PREFIX}/${manlang}/man${sect:L}/%}
.endif
.endfor
.endfor
.if !defined(_TMLINKS)
_TMLINKS=
.endif
.if defined(_MANPAGES)
.if defined(NOMANCOMPRESS)
__MANPAGES:= ${_MANPAGES:S%^${PREFIX}/%%}
.else
__MANPAGES:= ${_MANPAGES:S%^${PREFIX}/%%:S%$%.gz%}
.endif
.if ${MANCOMPRESSED} == "yes"
_MANPAGES:= ${_MANPAGES:S%$%.gz%}
.endif
.endif
.if ${PREFIX} == /usr
INFO_PATH?= share/info
.else
INFO_PATH?= info
.endif
.if ${XFREE86_VERSION} == 3
XFREE86_HTML_MAN= no
.else
.if defined(USE_IMAKE)
XFREE86_HTML_MAN?= yes
.else
XFREE86_HTML_MAN?= no
.endif
.endif
DOCSDIR?= ${PREFIX}/share/doc/${PORTNAME}
EXAMPLESDIR?= ${PREFIX}/share/examples/${PORTNAME}
DATADIR?= ${PREFIX}/share/${PORTNAME}
PLIST_SUB+= DOCSDIR="${DOCSDIR:S,^${PREFIX}/,,}" \
EXAMPLESDIR="${EXAMPLESDIR:S,^${PREFIX}/,,}" \
DATADIR="${DATADIR:S,^${PREFIX}/,,}"
# Put this as far down as possible so it will catch all PLIST_SUB definitions.
.if defined(INSTALLS_SHLIB)
LDCONFIG_DIRS?= %%PREFIX%%/lib
LDCONFIG_PLIST!= ${ECHO_CMD} ${LDCONFIG_DIRS} | ${SED} ${PLIST_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/}
LDCONFIG_RUNLIST!= ${ECHO_CMD} ${LDCONFIG_PLIST} | ${SED} -e "s!%D!${PREFIX}!g"
.endif
.MAIN: all
################################################################
# Many ways to disable a port.
#
# If we're in BATCH mode and the port is interactive, or we're
# in interactive mode and the port is non-interactive, skip all
# the important targets. The reason we have two modes is that
# one might want to leave a build in BATCH mode running
# overnight, then come back in the morning and do _only_ the
# interactive ones that required your intervention.
#
# Ignore ports that can't be resold if building for a CDROM.
#
# Don't build a port if it's restricted and we don't want to get
# into that.
#
# Don't build a port on an ELF machine if it's broken for ELF.
#
# Don't build a port if it's broken, unless we're running a parallel
# build (in case it's fixed).
#
# Don't build a port if it's forbidden for whatever reason.
#
# Don't build a port if the system is too old.
################################################################
.if ${OSVERSION} < 420000
# You need an upgrade kit or make world newer than this
IGNORE= ": Your system is too old to use this bsd.port.mk. You need a fresh make world or an upgrade kit. Please go to http://www.FreeBSD.org/ports/ or a mirror site and follow the instructions"
.endif
.if defined(ONLY_FOR_ARCHS)
.for __ARCH in ${ONLY_FOR_ARCHS}
.if ${MACHINE_ARCH:M${__ARCH}} != ""
__ARCH_OK?= 1
.endif
.endfor
.else
__ARCH_OK?= 1
.endif
.if defined(NOT_FOR_ARCHS)
.for __NARCH in ${NOT_FOR_ARCHS}
.if ${MACHINE_ARCH:M${__NARCH}} != ""
.undef __ARCH_OK
.endif
.endfor
.endif
.if !defined(__ARCH_OK)
.if defined(ONLY_FOR_ARCHS)
IGNORE= "is only for ${ONLY_FOR_ARCHS},"
.else # defined(NOT_FOR_ARCHS)
IGNORE= "does not run on ${NOT_FOR_ARCHS},"
.endif
IGNORE+= "and you are running ${ARCH}"
.endif
.if !defined(NO_IGNORE)
.if (defined(IS_INTERACTIVE) && defined(BATCH))
IGNORE= "is an interactive port"
.elif (!defined(IS_INTERACTIVE) && defined(INTERACTIVE))
IGNORE= "is not an interactive port"
.elif (defined(NO_CDROM) && defined(FOR_CDROM))
IGNORE= "may not be placed on a CDROM: ${NO_CDROM}"
.elif (defined(RESTRICTED) && defined(NO_RESTRICTED))
IGNORE= "is restricted: ${RESTRICTED}"
.elif defined(BROKEN)
.if !defined(TRYBROKEN)
IGNORE= "is marked as broken: ${BROKEN}"
.endif
.elif defined(FORBIDDEN)
IGNORE= "is forbidden: ${FORBIDDEN}"
.endif
.if (defined(MANUAL_PACKAGE_BUILD) && defined(PACKAGE_BUILDING) && !defined(PARALLEL_PACKAGE_BUILD))
IGNORE= "has to be built manually: ${MANUAL_PACKAGE_BUILD}"
clean:
@${IGNORECMD}
.endif
.if defined(IGNORE)
.if defined(IGNORE_SILENT)
IGNORECMD= ${DO_NADA}
.else
IGNORECMD= ${ECHO_MSG} "===> ${PKGNAME} ${IGNORE}."
.endif
.for target in check-sanity fetch checksum extract patch configure all build install reinstall package
${target}:
@${IGNORECMD}
.if defined(INSTALLS_DEPENDS)
@${FALSE}
.endif
.endfor
.endif
.endif
.if defined(IGNORE) || defined(NO_PACKAGE)
ignorelist: package-name
.else
ignorelist:
@${DO_NADA}
.endif
################################################################
# Clean directories for ftp or CDROM.
################################################################
.if defined(RESTRICTED)
clean-restricted: delete-distfiles delete-package
clean-restricted-list: delete-distfiles-list delete-package-list
RESTRICTED_FILES?= ${_DISTFILES} ${_PATCHFILES}
.else
clean-restricted:
clean-restricted-list:
.endif
.if defined(NO_CDROM)
clean-for-cdrom: delete-distfiles delete-package
clean-for-cdrom-list: delete-distfiles-list delete-package-list
RESTRICTED_FILES?= ${_DISTFILES} ${_PATCHFILES}
.else
clean-for-cdrom:
clean-for-cdrom-list:
.endif
.if defined(ALL_HOOK)
all:
@cd ${.CURDIR} && ${SETENV} CURDIR=${.CURDIR} DISTNAME=${DISTNAME} \
DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} WRKSRC=${WRKSRC} \
PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \
FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \
+ DESTDIR=${DESTDIR} \
DEPENDS="${DEPENDS}" BUILD_DEPENDS="${BUILD_DEPENDS}" \
RUN_DEPENDS="${RUN_DEPENDS}" X11BASE=${X11BASE} \
CONFLICTS="${CONFLICTS}" \
${ALL_HOOK}
.endif
.if !target(all)
all: build
.endif
.if !defined(DEPENDS_TARGET)
.if make(reinstall)
DEPENDS_TARGET= reinstall
.else
DEPENDS_TARGET= install
.endif
.if defined(DEPENDS_CLEAN)
DEPENDS_TARGET+= clean
DEPENDS_ARGS+= NOCLEANDEPENDS=yes
.endif
.else
DEPENDS_ARGS+= FORCE_PKG_REGISTER=yes
.endif
.if defined(DEPENDS)
# pretty much guarantees overwrite of existing installation
.MAKEFLAGS: FORCE_PKG_REGISTER=yes
.endif
################################################################
#
# Do preliminary work to detect if we need to run the config
# target or not.
#
################################################################
-.if (!defined(OPTIONS) || defined(CONFIG_DONE) || \
+.if (defined(_OPTIONSNG_READ) || !defined(OPTIONS) || defined(CONFIG_DONE) || \
defined(PACKAGE_BUILDING) || defined(BATCH) || \
exists(${_OPTIONSFILE}) || exists(${_OPTIONSFILE}.local))
_OPTIONS_OK=yes
.endif
################################################################
# The following are used to create easy dummy targets for
# disabling some bit of default target behavior you don't want.
# They still check to see if the target exists, and if so don't
# do anything, since you might want to set this globally for a
# group of ports in a Makefile.inc, but still be able to
# override from an individual Makefile.
################################################################
# Disable checksum
.if defined(NO_CHECKSUM) && !target(checksum) && defined(_OPTIONS_OK)
checksum: fetch
@${DO_NADA}
.endif
# Disable build
.if defined(NO_BUILD) && !target(build) && defined(_OPTIONS_OK)
build: configure
@${TOUCH} ${TOUCH_FLAGS} ${BUILD_COOKIE}
.endif
# Disable install
.if defined(NO_INSTALL) && !target(install) && defined(_OPTIONS_OK)
install: build
@${TOUCH} ${TOUCH_FLAGS} ${INSTALL_COOKIE}
.endif
# Disable package
.if defined(NO_PACKAGE) && !target(package) && defined(_OPTIONS_OK)
package:
.if defined(IGNORE_SILENT)
@${DO_NADA}
.else
@${ECHO_MSG} "===> ${PKGNAME} may not be packaged: ${NO_PACKAGE}."
.endif
.endif
# Disable describe
.if defined(NO_DESCRIBE) && !target(describe)
describe:
@${DO_NADA}
.endif
################################################################
# More standard targets start here.
#
# These are the body of the build/install framework. If you are
# not happy with the default actions, and you can't solve it by
# adding pre-* or post-* targets/scripts, override these.
################################################################
# Pre-everything
# XXX MCL suggests deprecating this in favor of something
# less likely to be abused by overloading
pre-everything::
@${DO_NADA}
buildanyway-message:
.if defined(TRYBROKEN)
@${ECHO_MSG} "Trying build of ${PKGNAME} even though it is marked BROKEN."
.else
@${DO_NADA}
.endif
options-message:
.if defined(GNOME_OPTION_MSG) && (!defined(PACKAGE_BUILDING) || !defined(BATCH))
@for m in ${GNOME_OPTION_MSG}; do \
${ECHO_MSG} $$m; \
done
.else
@${DO_NADA}
.endif
-.if defined(_OPTIONS_READ)
+.if defined(_OPTIONSNG_READ)
+.if ${_OPTIONSNG_READ} == "default"
+ @${ECHO_MSG} "===> Building with default configuration, \`make config' to customize."
+.else
+ @${ECHO_MSG} "===> Building with saved configuration for ${_OPTIONSNG_READ}, \`make config' to change."
+.endif
+.elif defined(_OPTIONS_READ)
@${ECHO_MSG} "===> Found saved configuration for ${_OPTIONS_READ}"
.if ${OPTIONSFILE} != ${_OPTIONSFILE}
@${ECHO_MSG} "===> *** CAUTION *** Using wrong configuration file ${_OPTIONSFILE}"
.endif
.endif
-
# Warn user about deprecated packages. Advisory only.
.if !target(check-deprecated)
check-deprecated:
.if defined(DEPRECATED)
@${ECHO_MSG} "===> NOTICE:"
@${ECHO_MSG}
@${ECHO_MSG} "This port is deprecated; you may wish to reconsider installing it:"
@${ECHO_MSG}
@${ECHO_MSG} "${DEPRECATED}."
@${ECHO_MSG}
.if defined(EXPIRATION_DATE)
@${ECHO_MSG} "It is scheduled to be removed on or after ${EXPIRATION_DATE}."
@${ECHO_MSG}
.endif
.endif
.endif
# Check if the port is listed in the vulnerability database
.if ${PKGINSTALLVER} < 20040623 || ${OSVERSION} < 420001 || ${OSVERSION} >= 500000 && ${OSVERSION} < 500014
DISABLE_VULNERABILITIES= yes
.endif
AUDITFILE?= /var/db/portaudit/auditfile.tbz
AUDITURL?= http://www.FreeBSD.org/ports
AUDITEXPIRY?= 14
_EXTRACT_AUDITFILE= ${TAR} -jxOf "${AUDITFILE}" auditfile
.PHONY: update-auditfile
update-auditfile:
.if !defined(DISABLE_VULNERABILITIES) && !defined(PACKAGE_BUILDING)
@audit_expired=${TRUE}; \
if [ -f "${AUDITFILE}" ]; then \
audit_created=`${_EXTRACT_AUDITFILE} | \
${SED} -nEe "1s/^#CREATED: *([0-9]{4})-?([0-9]{2})-?([0-9]{2}).*$$/\1\2\3/p"`; \
audit_expiry=`${DATE} -u -v-${AUDITEXPIRY}d "+%Y%m%d"`; \
if [ "$$audit_created" -lt "$$audit_expiry" ]; then \
${ECHO_MSG} ">> Vulnerability database out of date."; \
else \
audit_expired=${FALSE}; \
fi; \
fi; \
if $$audit_expired; then \
if [ ! -w "${AUDITFILE:H}" -a `${ID} -u` != 0 ]; then \
if [ -z "${INSTALL_AS_USER}" ]; then \
${ECHO_MSG} "===> Switching to root credentials to fetch the vulnerability database."; \
- ${SU_CMD} "cd ${.CURDIR} && ${MAKE} ${.TARGET}"; \
+ ${SU_CMD} "cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${.TARGET}"; \
${ECHO_MSG} "===> Returning to user credentials"; \
else \
${ECHO_MSG} "===> Can't fetch the vulnerability database."; \
fi; \
else \
${ECHO_MSG} ">> Fetching vulnerability database from ${AUDITURL}."; \
if [ -f "${AUDITFILE}" ]; then \
${MV} -f "${AUDITFILE}" "${AUDITFILE}.old"; \
else \
${MKDIR} "${AUDITFILE:H}"; \
fi; \
if ${SETENV} ${FETCH_ENV} ${FETCH_CMD} -o "${AUDITFILE}" "${AUDITURL}/${AUDITFILE:T}"; then \
${CHMOD} a+r "${AUDITFILE}"; \
if [ -f "${AUDITFILE}.old" ]; then \
${RM} -f "${AUDITFILE}.old"; \
fi; \
else \
if [ -f "${AUDITFILE}.old" ]; then \
${ECHO_MSG} ">> Failed, using old database."; \
${MV} -f "${AUDITFILE}.old" "${AUDITFILE}"; \
fi; \
fi; \
fi; \
fi
.else
@${DO_NADA}
.endif
.PHONY: check-vulnerable
check-vulnerable: update-auditfile
.if !defined(DISABLE_VULNERABILITIES) && !defined(PACKAGE_BUILDING)
@if [ -r "${AUDITFILE}" ]; then \
if vlist=`${_EXTRACT_AUDITFILE} | ${GREP} -v '^#' | ${PKG_VERSION} -T '${PKGNAME}' -`; then \
${ECHO_MSG} "===> ${PKGNAME} has known vulnerabilities:"; \
${ECHO_MSG} "$$vlist" | ${AWK} -F\| '{ \
print ">> " $$3 "."; \
split($$2, ref, / /); \
for(r in ref) \
print " Reference: <" ref[r] ">" \
}'; \
${ECHO_MSG} ">> Please update your ports tree and try again."; \
exit 1; \
fi; \
else \
${ECHO_MSG} "===> Vulnerability check disabled, database not found."; \
fi
.else
@${ECHO_MSG} "===> Vulnerability check disabled."
.endif
+
+# Next generation options handling
+
+.if exists(${PERL5})
+OPTIONS_CMD?= ${PERL} -w ${PORTSDIR}/devel/portmk/scripts/options.pl
+.else
+OPTIONS_CMD?= eval ${ECHO_CMD} ">> ${PKGNAME}: ${PERL5} requried, please install ${PERL_PORT}."; exit 1
+.endif
+
+OPTIONS_SH?= ${PORTSDIR}/devel/portmk/scripts/options.sh
+
+_OPTIONS_ENV= \
+ CURDIR='${.CURDIR}' \
+ OBJDIR='${.OBJDIR}' \
+ MASTERDIR='${MASTERDIR}' \
+ PKGNAME='${PKGNAME}' \
+ PKGNAMESUFFIX='${PKGNAMESUFFIX}' \
+ OPTIONS_MASTER='${OPTIONS_MASTER}' \
+ OPTIONS_OVERRIDE='${OPTIONS_OVERRIDE}' \
+ OPTIONS_FILE='${OPTIONS_FILE}' \
+ OPTIONS_CMD='${OPTIONS_CMD}'
+
+.PHONY: config
+.PHONY: showconfig
+.PHONY: rmconfig
+.PHONY: menuconfig
+
+.if defined(_OPTIONSNG_READ)
+
+.if !target(config)
+config:
+ @${_OPTIONS_ENV}; \
+ set -- -e; \
+ . '${OPTIONS_SH}'
+.endif
+
+.if !target(menuconfig)
+menuconfig:
+ @${ECHO_MSG} "===> ${PKGNAME}: menuconfig is a reserved target."
+ @${FALSE}
+ @${_OPTIONS_ENV}; \
+ set -- -g; \
+ . '${OPTIONS_SH}'
+.endif
+
+.if !target(rmconfig)
+rmconfig:
+ @${ECHO_MSG} "===> ${PKGNAME}: Reverting to default configuration."
+ @${_OPTIONS_ENV}; \
+ set -- -d; \
+ . '${OPTIONS_SH}'
+.endif
+
+.if !target(showconfig)
+showconfig:
+ @${ECHO_MSG} "===> ${PKGNAME}: menuconfig is a reserved target."
+ @${FALSE}
+ @${_OPTIONS_ENV}; \
+ set -- -l; \
+ . '${OPTIONS_SH}'
+.endif
+
+.elif !defined(OPTIONS)
+
+.if !target(config)
+config:
+ @${ECHO_MSG} "===> ${PKGNAME} has no configurable options."
+.endif
+
+.if !target(menuconfig)
+menuconfig:
+ @${ECHO_MSG} "===> ${PKGNAME} has no configurable options."
+.endif
+
+.if !target(rmconfig)
+rmconfig:
+ @${ECHO_MSG} "===> ${PKGNAME} has no configurable options."
+.endif
+
+.if !target(showconfig)
+showconfig:
+ @${ECHO_MSG} "===> ${PKGNAME} has no configurable options."
+.endif
+
+.else
+
+menuconfig: config
+ @${DO_NADA}
+
+.endif
+
+.PHONY: makeconfig
+.if !target(makeconfig)
+makeconfig:
+ @${_OPTIONS_ENV}; \
+ set -- -c; \
+ . '${OPTIONS_SH}'
+.endif
+
+.PHONY: config-recursive
+.if !target(config-recursive)
+config-recursive:
+ @${ECHO_MSG} "===> ${PKGNAME}: config-recursive is a reserved target."
+ @${FALSE}
+.endif
+
# New style distfile handling
DISTFILES_SH?= ${PORTSDIR}/devel/portmk/scripts/distfiles.sh
DISTINFO_ALGORITHMS?= MD5
VALID_ALGORITHMS= MD5 SHA1 RMD160
MK_FILE?= ${MASTERDIR}/Makefile
.if !defined(DISTFILES_KEEP_QUOTING)
_FETCHDISTFILES_ENV= \
- DISTFILES='${DISTFILES:C/\\\\(.)/\1/g}'; \
- PATCHFILES='${PATCHFILES:C/\\\\(.)/\1/g}'
+ DISTFILES=${DISTFILES:C/\\\\(.)/\1/g:Q}; \
+ PATCHFILES=${PATCHFILES:C/\\\\(.)/\1/g:Q}
.else
_FETCHDISTFILES_ENV= \
- DISTFILES='${DISTFILES}'; \
- PATCHFILES='${PATCHFILES}'
+ DISTFILES=${DISTFILES:Q}; \
+ PATCHFILES=${PATCHFILES:Q}
.endif
.for env in \
MASTER_SITES MASTER_SITE_SUBDIR PATCH_SITES PATCH_SITE_SUBDIR \
_MASTER_SITE_BACKUP _MASTER_SITE_OVERRIDE \
DISABLE_SIZE DISTDIR DISTINFO_ALGORITHMS DISTINFO_LABEL \
DIST_SUBDIR ECHO_MSG FETCH_AFTER_ARGS FETCH_BEFORE_ARGS \
FETCH_CMD FETCH_SYMLINK_DISTFILES IGNOREFILES LOCALBASE \
MASTER_SORT_AWK MASTER_SORT_CMD MASTER_SORT_ENV MD5_FILE \
MK_FILE NO_CHECKSUM NO_SIZE OSVERSION PERL5 VALID_ALGORITHMS
_FETCHDISTFILES_ENV+= ; ${env}='${${env}}'
.endfor
+.if ${OSVERSION} >= 460000 # XXX This does not work with older make(1)s
.for env in ${VALID_ALGORITHMS} SIZE
_FETCHDISTFILES_ENV+= ; DISTINFO_${env}='${DISTINFO${DISTINFO_LABEL:C/^./_&/}_${env}}'
.endfor
+.endif
.PHONY: do-fetch
.if !target(do-fetch)
do-fetch:
@${_FETCHDISTFILES_ENV}; \
set -- -f; \
. '${DISTFILES_SH}'
.endif
.PHONY: checksum
.if !target(checksum)
checksum: fetch
@${DO_NADA}
.endif
.PHONY: makesum
.if !target(makesum)
makesum:
.if !defined(FETCH_ALL)
- @cd ${.CURDIR} && ${MAKE} FETCH_ALL=yes ${__softMAKEFLAGS} ${.TARGET}
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} FETCH_ALL=yes ${__softMAKEFLAGS} ${.TARGET}
.else
@${_FETCHDISTFILES_ENV}; \
set -- -m; \
. '${DISTFILES_SH}'
.endif
.endif
.PHONY: master-sites-all
.if !target(master-sites-all)
master-sites-all:
@${_FETCHDISTFILES_ENV}; \
set -- -t ''; \
. '${DISTFILES_SH}'
.endif
.PHONY: master-sites
.if !target(master-sites)
master-sites:
@${_FETCHDISTFILES_ENV}; \
set -- -t 'DEFAULT'; \
. '${DISTFILES_SH}'
.endif
.PHONY: patch-sites-all
.if !target(patch-sites-all)
patch-sites-all:
@${_FETCHDISTFILES_ENV}; \
set -- -T ''; \
. '${DISTFILES_SH}'
.endif
.PHONY: patch-sites
.if !target(patch-sites)
patch-sites:
@${_FETCHDISTFILES_ENV}; \
set -- -T 'DEFAULT'; \
. '${DISTFILES_SH}'
.endif
.PHONY: migratesum
.if !target(migratesum)
migratesum:
@${_FETCHDISTFILES_ENV}; \
set -- -M; \
. '${DISTFILES_SH}'
.endif
.PHONY: migratesum2
.if !target(migratesum2)
migratesum2:
@${_FETCHDISTFILES_ENV}; \
set -- -N; \
. '${DISTFILES_SH}'
.endif
.PHONY: checkdistsites
.if !target(checkdistsites)
checkdistsites:
.if !defined(FETCH_ALL)
- @cd ${.CURDIR} && ${MAKE} FETCH_ALL=yes ${__softMAKEFLAGS} ${.TARGET}
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} FETCH_ALL=yes ${__softMAKEFLAGS} ${.TARGET}
.else
@${_FETCHDISTFILES_ENV}; \
set -- -F; \
. '${DISTFILES_SH}'
.endif
.endif
.PHONY: checkdistfiles-recursive
.if !target(checkdistfiles-recursive)
checkdistfiles-recursive:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
- (cd $$dir; ${MAKE} ${__softMAKEFLAGS} checkdistfiles); \
+ (cd $$dir; ${MAKE} ${__softMAKEFLAGS} checkdistfiles); \
done
.endif
+.endif
# Prints out the total size of files missing in ${DISTDIR}
_MISSING_SIZE_SUMMARY= \
${AWK} ' \
BEGIN {t=0; f=0; u=0} \
{if ($$1 > 0) {t+=$$1; f+=1} else {u+=1}} \
END { \
if (t >= 10^9) \
s=sprintf("%.2f GBytes", t/10^9); \
else if (t >= 10^6) \
s=sprintf("%.2f MBytes", t/10^6); \
else if (t >= 10^3) \
s=sprintf("%.2f KBytes", t/10^3); \
else \
s=t " Bytes"; \
msg=ENVIRON["MISSING_MSG"] \
f " file(s) with a total size of " s; \
if (u) msg=msg " and " u " file(s) with unknown size."; \
print msg \
} \
'
.PHONY: missing-size
.if !target(missing-size)
missing-size:
- @cd ${.CURDIR} && ${MAKE} print-missing-files \
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} print-missing-files \
| ${SETENV} MISSING_MSG="To install ${PKGNAME}, you have to fetch " ${_MISSING_SIZE_SUMMARY}
.endif
.PHONY: missing-recursive-size
.if !target(missing-recursive-size)
missing-recursive-size:
- @cd ${.CURDIR} && ${MAKE} print-missing-recursive-files \
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} print-missing-recursive-files \
| ${SETENV} MISSING_MSG="To install ${PKGNAME} and its dependencies, you have to fetch " ${_MISSING_SIZE_SUMMARY}
.endif
.PHONY: print-missing-recursive-files
.if !target(print-missing-recursive-files)
print-missing-recursive-files:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
(cd $$dir; ${MAKE} print-missing-files); \
done | ${SORT} -u +1;
.endif
+.endif
.PHONY: print-missing-files
.if !target(print-missing-files)
print-missing-files:
@${_FETCHDISTFILES_ENV}; \
set -- -S; \
. '${DISTFILES_SH}'
.endif
.PHONY: fetch-list
.if !target(fetch-list)
fetch-list:
@${_FETCHDISTFILES_ENV}; \
set -- -L; \
. '${DISTFILES_SH}'
.endif
# Extract
.PHONY: do-extract
.if !target(do-extract)
do-extract:
@${RM} -rf ${WRKDIR}
@${MKDIR} ${WRKDIR}
.for file in ${EXTRACT_ONLY}
@cd ${WRKDIR} && ${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} "${_DISTDIR}/${file}" ${EXTRACT_AFTER_ARGS}
.endfor
.if !defined(EXTRACT_PRESERVE_OWNERSHIP)
@if [ `${ID} -u` = 0 ]; then \
${CHMOD} -R ug-s ${WRKDIR}; \
${CHOWN} -R 0:0 ${WRKDIR}; \
fi
.endif
.endif
# Patch
.if !target(do-patch)
do-patch:
.if defined(PATCHFILES)
@${ECHO_MSG} "===> Applying distribution patches for ${PKGNAME}"
@(cd ${_DISTDIR}; \
for i in ${_PATCHFILES}; do \
if [ ${PATCH_DEBUG_TMP} = yes ]; then \
${ECHO_MSG} "===> Applying distribution patch $$i" ; \
fi; \
case $$i in \
*.Z|*.gz) \
${GZCAT} "$$i" | ${PATCH} ${PATCH_DIST_ARGS}; \
;; \
*.bz2) \
${BZCAT} "$$i" | ${PATCH} ${PATCH_DIST_ARGS}; \
;; \
*) \
${PATCH} ${PATCH_DIST_ARGS} < "$$i"; \
;; \
esac; \
done)
.endif
.if defined(EXTRA_PATCHES)
@for i in ${EXTRA_PATCHES}; do \
${ECHO_MSG} "===> Applying extra patch $$i"; \
${PATCH} ${PATCH_ARGS} < "$$i"; \
done
.endif
@if [ -d ${PATCHDIR} ]; then \
if [ "`${ECHO_CMD} ${PATCHDIR}/patch-*`" != "${PATCHDIR}/patch-*" ]; then \
${ECHO_MSG} "===> Applying ${OPSYS} patches for ${PKGNAME}" ; \
PATCHES_APPLIED="" ; \
for i in ${PATCHDIR}/patch-*; do \
case $$i in \
*.orig|*.rej|*~|*,v) \
${ECHO_MSG} "===> Ignoring patchfile $$i" ; \
;; \
*) \
if [ ${PATCH_DEBUG_TMP} = yes ]; then \
${ECHO_MSG} "===> Applying ${OPSYS} patch $$i" ; \
fi; \
if ${PATCH} ${PATCH_ARGS} < "$$i" ; then \
PATCHES_APPLIED="$$PATCHES_APPLIED $$i" ; \
else \
${ECHO_MSG} `${ECHO_CMD} ">> Patch $$i failed to apply cleanly." | ${SED} "s|${PATCHDIR}/||"` ; \
if [ x"$$PATCHES_APPLIED" != x"" ]; then \
${ECHO_MSG} `${ECHO_CMD} ">> Patch(es) $$PATCHES_APPLIED applied cleanly." | ${SED} "s|${PATCHDIR}/||g"` ; \
fi; \
${FALSE} ; \
fi; \
;; \
esac; \
done; \
fi; \
fi
.endif
# Configure
.if !target(do-configure)
do-configure:
@if [ -f ${SCRIPTDIR}/configure ]; then \
cd ${.CURDIR} && ${SETENV} ${SCRIPTS_ENV} ${SH} \
${SCRIPTDIR}/configure; \
fi
.if defined(GNU_CONFIGURE)
@CONFIG_GUESS_DIRS=$$(${FIND} ${WRKDIR} -name config.guess -o -name config.sub \
| ${XARGS} -n 1 ${DIRNAME}); \
for _D in $${CONFIG_GUESS_DIRS}; do \
${CP} -f ${TEMPLATES}/config.guess $${_D}/config.guess; \
${CHMOD} a+rx $${_D}/config.guess; \
${CP} -f ${TEMPLATES}/config.sub $${_D}/config.sub; \
${CHMOD} a+rx $${_D}/config.sub; \
done
.endif
.if defined(HAS_CONFIGURE)
@(cd ${CONFIGURE_WRKSRC} && \
if ! ${SETENV} CC="${CC}" CXX="${CXX}" \
CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" \
INSTALL="/usr/bin/install -c ${_BINOWNGRP}" \
INSTALL_DATA="${INSTALL_DATA}" \
INSTALL_PROGRAM="${INSTALL_PROGRAM}" \
INSTALL_SCRIPT="${INSTALL_SCRIPT}" \
${CONFIGURE_ENV} ./${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS}; then \
${ECHO_CMD} "===> Script \"${CONFIGURE_SCRIPT}\" failed unexpectedly."; \
(${ECHO_CMD} ${CONFIGURE_FAIL_MESSAGE}) | ${FMT} 75 79 ; \
${FALSE}; \
fi)
.endif
.if defined(PERL_CONFIGURE)
@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
+.if ${PERL_LEVEL} <= 500503
+ @cd ${CONFIGURE_WRKSRC} && \
+ ${PERL5} -pi -e 's/^(INSTALLSITELIB|INSTALLSITEARCH|SITELIBEXP|SITEARCHEXP|INSTALLMAN1DIR|INSTALLMAN3DIR) = \/usr\/local/$$1 = \$$(PREFIX)/' Makefile
.endif
.endif
+.endif
.if defined(USE_IMAKE)
@(cd ${CONFIGURE_WRKSRC}; ${SETENV} ${MAKE_ENV} ${XMKMF})
.endif
.endif
# Build
.PHONY: do-build
.if !target(do-build)
do-build:
.if defined(USE_GMAKE)
@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${ALL_TARGET})
.else
.if defined(PERL_MODBUILD)
@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${ALL_TARGET})
.else
@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${ALL_TARGET})
.endif
.endif
.endif
# Check conflicts
.PHONY: check-conflicts
.if !target(check-conflicts)
check-conflicts:
.if defined(CONFLICTS) && !defined(DISABLE_CONFLICTS)
- @found=`${PKG_INFO} -I ${CONFLICTS:C/.+/'&'/} 2>/dev/null | ${AWK} '{print $$1}'`; \
+ @found=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -I ${CONFLICTS:C/.+/'&'/} 2>/dev/null | ${AWK} '{print $$1}'`; \
conflicts_with=; \
for entry in $${found}; do \
- prfx=`${PKG_INFO} -q -p "$${entry}" 2> /dev/null | ${SED} -ne '1s/^@cwd //p'`; \
- orgn=`${PKG_INFO} -q -o "$${entry}" 2> /dev/null`; \
+ prfx=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -q -p "$${entry}" 2> /dev/null | ${SED} -ne '1s/^@cwd //p'`; \
+ orgn=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -q -o "$${entry}" 2> /dev/null`; \
if [ "/${PREFIX}" = "/$${prfx}" -a "/${PKGORIGIN}" != "/$${orgn}" ]; then \
conflicts_with="$${conflicts_with} $${entry}"; \
fi; \
done; \
if [ -n "$${conflicts_with}" ]; then \
${ECHO_MSG}; \
${ECHO_MSG} "===> ${PKGNAME} conflicts with installed package(s): "; \
for entry in $${conflicts_with}; do \
${ECHO_MSG} " $${entry}"; \
done; \
${ECHO_MSG}; \
${ECHO_MSG} " They install files into the same place."; \
${ECHO_MSG} " Please remove them first with pkg_delete(1)."; \
exit 1; \
fi
.endif # CONFLICTS
.endif
# Install
.PHONY: do-install
.if !target(do-install)
do-install:
.if defined(USE_GMAKE)
@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET})
.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} install.man)
.if ${XFREE86_HTML_MAN:L} == yes
@${MKHTMLINDEX} ${PREFIX}/lib/X11/doc/html
.endif
.endif
.else # !defined(USE_GMAKE)
.if defined(PERL_MODBUILD)
@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${INSTALL_TARGET})
.else
@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET})
.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} install.man)
.if ${XFREE86_HTML_MAN:L} == yes
@${MKHTMLINDEX} ${PREFIX}/lib/X11/doc/html
.endif
.endif
.endif
.endif
.endif
# Package
+.if defined(DESTDIR) && ${PKGINSTALLVER} < 20040426
+check-makefile::
+ @${ECHO_CMD} "${PKGNAME}: Makefile error: please upgrade pkg_install to use DESTDIR"
+ @${FALSE}
+.endif
+
.PHONY: do-package
.if !target(do-package)
do-package: ${TMPPLIST}
@if [ -d ${PACKAGES} ]; then \
if [ ! -d ${PKGREPOSITORY} ]; then \
if ! ${MKDIR} ${PKGREPOSITORY}; then \
${ECHO_MSG} ">> Can't create directory ${PKGREPOSITORY}."; \
exit 1; \
fi; \
fi; \
fi
@__softMAKEFLAGS='${__softMAKEFLAGS:S/'/'\''/g}'; \
_LATE_PKG_ARGS=""; \
if [ -f ${PKGINSTALL} ]; then \
_LATE_PKG_ARGS="$${_LATE_PKG_ARGS} -i ${PKGINSTALL}"; \
fi; \
if [ -f ${PKGDEINSTALL} ]; then \
_LATE_PKG_ARGS="$${_LATE_PKG_ARGS} -k ${PKGDEINSTALL}"; \
fi; \
if [ -f ${PKGREQ} ]; then \
_LATE_PKG_ARGS="$${_LATE_PKG_ARGS} -r ${PKGREQ}"; \
fi; \
if [ -f ${PKGMESSAGE} ]; then \
_LATE_PKG_ARGS="$${_LATE_PKG_ARGS} -D ${PKGMESSAGE}"; \
fi; \
if ${PKG_CMD} ${PKG_ARGS} ${PKGFILE}; then \
if [ -d ${PACKAGES} ]; then \
- cd ${.CURDIR} && eval ${MAKE} $${__softMAKEFLAGS} package-links; \
+ cd ${.CURDIR} && eval ${MAKE} ${_ONG_MAKEFLAGS} $${__softMAKEFLAGS} package-links; \
fi; \
else \
- cd ${.CURDIR} && eval ${MAKE} $${__softMAKEFLAGS} delete-package; \
+ cd ${.CURDIR} && eval ${MAKE} ${_ONG_MAKEFLAGS} $${__softMAKEFLAGS} delete-package; \
exit 1; \
fi
.endif
# Some support rules for do-package
.PHONY: package-links
.if !target(package-links)
package-links: delete-package-links
@for cat in ${CATEGORIES}; do \
if [ ! -d ${PACKAGES}/$$cat ]; then \
if ! ${MKDIR} ${PACKAGES}/$$cat; then \
${ECHO_MSG} ">> Can't create directory ${PACKAGES}/$$cat."; \
exit 1; \
fi; \
fi; \
${LN} -sf `${ECHO_CMD} $$cat | ${SED} -e 'sa[^/]*a..ag'`/${PKGREPOSITORYSUBDIR}/${PKGNAME}${PKG_SUFX} ${PACKAGES}/$$cat; \
done
.if !defined(NO_LATEST_LINK)
@if [ ! -d ${PKGLATESTREPOSITORY} ]; then \
if ! ${MKDIR} ${PKGLATESTREPOSITORY}; then \
${ECHO_MSG} ">> Can't create directory ${PKGLATESTREPOSITORY}."; \
exit 1; \
fi; \
fi
@${LN} -s ../${PKGREPOSITORYSUBDIR}/${PKGNAME}${PKG_SUFX} ${PKGLATESTFILE}
.endif
.endif
.PHONY: delete-package-links
.if !target(delete-package-links)
delete-package-links:
@for cat in ${CATEGORIES}; do \
${RM} -f ${PACKAGES}/$$cat/${PKGNAME}${PKG_SUFX}; \
done
.if !defined(NO_LATEST_LINK)
@${RM} -f ${PKGLATESTFILE}
.endif
.endif
.PHONY: delete-package
.if !target(delete-package)
delete-package: delete-package-links
@${RM} -f ${PKGFILE}
.endif
.PHONY: delete-package-links-list
.if !target(delete-package-links-list)
delete-package-links-list:
@for cat in ${CATEGORIES}; do \
${ECHO_CMD} ${RM} -f ${PACKAGES}/$$cat/${PKGNAME}${PKG_SUFX}; \
done
.if !defined(NO_LATEST_LINK)
@${ECHO_CMD} ${RM} -f ${PKGLATESTFILE}
.endif
.endif
.PHONY: delete-package-list
.if !target(delete-package-list)
delete-package-list: delete-package-links-list
@${ECHO_CMD} "[ -f ${PKGFILE} ] && (${ECHO_CMD} deleting ${PKGFILE}; ${RM} -f ${PKGFILE})"
.endif
# Utility targets follow
.PHONY: check-already-installed
.if !target(check-already-installed)
check-already-installed:
.if !defined(NO_PKG_REGISTER) && !defined(FORCE_PKG_REGISTER)
@${ECHO_MSG} "===> Checking if ${PKGORIGIN} already installed"
- @${MKDIR} ${PKG_DBDIR}
- @already_installed=`${PKG_INFO} -q -O ${PKGORIGIN}`; \
+ @${MKDIR} ${_PKG_DBDIR}
+ @already_installed=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -q -O ${PKGORIGIN}`; \
if [ -n "$${already_installed}" ]; then \
for p in $${already_installed}; do \
- prfx=`${PKG_INFO} -q -p $${p} 2> /dev/null | ${SED} -ne '1s|^@cwd ||p'`; \
+ prfx=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -q -p $${p} 2> /dev/null | ${SED} -ne '1s|^@cwd ||p'`; \
if [ "x${PREFIX}" = "x$${prfx}" ]; then \
- df=`${PKG_INFO} -q -f $${p} 2> /dev/null | ${GREP} -v "^@" | ${COMM} -12 - ${TMPPLIST}`; \
- if [ -n "$${df}" ]; then \
- found_package=$${p}; \
- break; \
- fi; \
+ found_package=$${p}; \
+ break; \
fi; \
done; \
fi; \
- if [ -d ${PKG_DBDIR}/${PKGNAME} -o -n "$${found_package}" ]; then \
- if [ -d ${PKG_DBDIR}/${PKGNAME} ]; then \
+ if [ -n "$${found_package}" ]; then \
+ if [ "${PKGNAME}" = "$${found_package}" ]; then \
${ECHO_CMD} "===> ${PKGNAME} is already installed"; \
else \
${ECHO_CMD} "===> An older version of ${PKGORIGIN} is already installed ($${found_package})"; \
fi; \
${ECHO_CMD} " You may wish to \`\`make deinstall'' and install this port again"; \
${ECHO_CMD} " by \`\`make reinstall'' to upgrade it properly."; \
${ECHO_CMD} " If you really wish to overwrite the old port of ${PKGORIGIN}"; \
${ECHO_CMD} " without deleting it first, set the variable \"FORCE_PKG_REGISTER\""; \
${ECHO_CMD} " in your environment or the \"make install\" command line."; \
exit 1; \
fi
.else
@${DO_NADA}
.endif
.endif
.PHONY: check-umask
.if !target(check-umask)
check-umask:
@if [ `${SH} -c umask` != 0022 ]; then \
${ECHO_MSG} "===> Warning: your umask is \"`${SH} -c umask`"\".; \
${ECHO_MSG} " If this is not desired, set it to an appropriate value"; \
${ECHO_MSG} " and install this port again by \`\`make reinstall''."; \
fi
.endif
.PHONY: install-mtree
.if !target(install-mtree)
install-mtree:
- @${MKDIR} ${PREFIX}
+ @${MKDIR} ${DESTDIR}${PREFIX}
@if [ `${ID} -u` != 0 ]; then \
- if [ -w ${PREFIX}/ ]; then \
+ if [ -w ${DESTDIR}${PREFIX}/ ]; then \
${ECHO_MSG} "Warning: not superuser, you may get some errors during installation."; \
else \
- ${ECHO_MSG} "Error: ${PREFIX}/ not writable."; \
+ ${ECHO_MSG} "Error: ${DESTDIR}${PREFIX}/ not writable."; \
${FALSE}; \
fi; \
fi
.if !defined(NO_MTREE)
@if [ `${ID} -u` = 0 ]; then \
if [ ! -f ${MTREE_FILE} ]; then \
${ECHO_CMD} "Error: mtree file \"${MTREE_FILE}\" is missing."; \
${ECHO_CMD} "Copy it from a suitable location (e.g., /usr/src/etc/mtree) and try again."; \
exit 1; \
else \
- ${MTREE_CMD} ${MTREE_ARGS} ${PREFIX}/ >/dev/null; \
+ ${MTREE_CMD} ${MTREE_ARGS} ${DESTDIR}${PREFIX}/ >/dev/null; \
if [ ${MTREE_FILE} = "/etc/mtree/BSD.local.dist" ]; then \
- cd ${PREFIX}/share/nls; \
+ cd ${DESTDIR}${PREFIX}/share/nls; \
${LN} -shf C POSIX; \
${LN} -shf C en_US.US-ASCII; \
fi; \
fi; \
else \
${ECHO_MSG} "Warning: not superuser, can't run mtree."; \
${ECHO_MSG} "You may want to become root and try again to ensure correct permissions."; \
fi
.endif
.endif
.PHONY: run-ldconfig
.if !target(run-ldconfig)
run-ldconfig:
.if defined(INSTALLS_SHLIB)
.if !defined(INSTALL_AS_USER)
@${ECHO_MSG} "===> Running ldconfig"
${LDCONFIG} -m ${LDCONFIG_RUNLIST}
.else
@${ECHO_MSG} "===> Running ldconfig (errors are ignored)"
-${LDCONFIG} -m ${LDCONFIG_RUNLIST}
.endif
.else
@${DO_NADA}
.endif
.endif
.PHONY: security-check
.if !target(security-check)
security-check:
# Scan PLIST for:
# 1. setugid files
# 2. accept()/recvfrom() which indicates network listening capability
# 3. insecure functions (gets/mktemp/tempnam/[XXX])
# 4. startup scripts, in conjunction with 2.
# 5. world-writable files/dirs
#
-@${RM} -f ${WRKDIR}/.PLIST.setuid ${WRKDIR}/.PLIST.writable ${WRKDIR}/.PLIST.objdump; \
${AWK} -v prefix='${PREFIX}' ' \
match($$0, /^@cwd /) { prefix = substr($$0, RSTART + RLENGTH); next; } \
/^@/ { next; } \
/^\// { print; next; } \
{ print prefix "/" $$0; } \
' ${TMPPLIST} > ${WRKDIR}/.PLIST.flattened; \
${TR} '\n' '\0' < ${WRKDIR}/.PLIST.flattened \
| ${XARGS} -0 -J % ${FIND} % -prune ! -type l -type f \( -perm -4000 -o -perm -2000 \) \( -perm -0010 -o -perm -0001 \) 2> /dev/null > ${WRKDIR}/.PLIST.setuid; \
${TR} '\n' '\0' < ${WRKDIR}/.PLIST.flattened \
| ${XARGS} -0 -J % ${FIND} % -prune -perm -0002 \! -type l 2> /dev/null > ${WRKDIR}/.PLIST.writable; \
${TR} '\n' '\0' < ${WRKDIR}/.PLIST.flattened \
| ${XARGS} -0 -J % ${FIND} % -prune ! -type l -type f -print0 2> /dev/null \
| ${XARGS} -0 -n 1 ${OBJDUMP} -R 2> /dev/null > ${WRKDIR}/.PLIST.objdump; \
if \
! ${AWK} -v audit="$${PORTS_AUDIT}" -f ${PORTSDIR}/Tools/scripts/security-check.awk \
${WRKDIR}/.PLIST.flattened ${WRKDIR}/.PLIST.objdump ${WRKDIR}/.PLIST.setuid ${WRKDIR}/.PLIST.writable; \
then \
- www_site=$$(cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} www-site); \
+ www_site=$$(cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} www-site); \
if [ ! -z "$${www_site}" ]; then \
${ECHO_MSG}; \
${ECHO_MSG} " For more information, and contact details about the security"; \
${ECHO_MSG} " status of this software, see the following webpage: "; \
${ECHO_MSG} "$${www_site}"; \
fi; \
fi
.endif
################################################################
# Skeleton targets start here
#
# You shouldn't have to change these. Either add the pre-* or
# post-* targets/scripts or redefine the do-* targets. These
# targets don't do anything other than checking for cookies and
# call the necessary targets/scripts.
################################################################
# Please note that the order of the following targets is important, and
# should not be modified.
_BOOTSTRAP_SEQ= bootstrap-depends
_SANITY_DEP= bootstrap
_SANITY_SEQ= pre-everything check-makefile check-categories \
check-makevars check-depends check-deprecated \
check-vulnerable buildanyway-message options-message
_FETCH_DEP= check-sanity
_FETCH_SEQ= fetch-depends pre-fetch pre-fetch-script \
do-fetch post-fetch post-fetch-script
_EXTRACT_DEP= fetch
_EXTRACT_SEQ= extract-message extract-depends pre-extract \
pre-extract-script do-extract \
post-extract post-extract-script
_PATCH_DEP= extract
_PATCH_SEQ= patch-message patch-depends pre-patch pre-patch-script \
do-patch post-patch post-patch-script
_CONFIGURE_DEP= patch
_CONFIGURE_SEQ= build-depends lib-depends misc-depends configure-message \
pre-configure pre-configure-script patch-autotools \
run-autotools do-configure post-configure post-configure-script
_BUILD_DEP= configure
_BUILD_SEQ= build-message pre-build pre-build-script do-build \
post-build post-build-script
_INSTALL_DEP= build
_INSTALL_SEQ= install-message check-conflicts \
run-depends lib-depends pre-install pre-install-script \
generate-plist check-already-installed
_INSTALL_SUSEQ= check-umask install-mtree pre-su-install \
pre-su-install-script do-install post-install \
post-install-script add-plist-info add-plist-docs \
compress-man run-ldconfig fake-pkg security-check
_PACKAGE_DEP= install
_PACKAGE_SEQ= package-message pre-package pre-package-script \
- do-package post-package-script
+ do-package post-package post-package-script
.PHONY: bootstrap
.if !target(bootstrap)
bootstrap: ${_BOOTSTRAP_SEQ}
.endif
.PHONY: check-sanity
-.if !target(check-sanity)
+.if !target(check-sanity) && defined(_ONG_REEXEC)
+check-sanity:
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.elif !target(check-sanity)
check-sanity: ${_SANITY_DEP} ${_SANITY_SEQ}
.endif
# XXX MCL might need to move in loop below?
.PHONY: fetch
-.if !target(fetch)
+.if !target(fetch) && defined(_ONG_REEXEC)
+fetch:
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.elif !target(${target})
fetch: ${_FETCH_DEP} ${_FETCH_SEQ}
.endif
# Main logic. The loop generates 6 main targets and using cookies
# ensures that those already completed are skipped.
.for target in extract patch configure build install package
.PHONY: ${target}
-.if !target(${target}) && defined(_OPTIONS_OK)
+.if !target(${target}) && defined(_ONG_REEXEC)
+${target}:
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.elif !target(${target}) && defined(_OPTIONS_OK)
${target}: ${${target:U}_COOKIE}
.elif !target(${target})
${target}: config
@cd ${.CURDIR} && ${MAKE} CONFIG_DONE=1 ${__softMAKEFLAGS} ${${target:U}_COOKIE}
-.elif target(${target}) && defined(IGNORE)
.endif
.if !exists(${${target:U}_COOKIE})
.if ${UID} != 0 && defined(_${target:U}_SUSEQ) && !defined(INSTALL_AS_USER)
-.if defined(USE_SUBMAKE)
+.if defined(USE_SUBMAKE) || defined(_ONG_REEXEC)
${${target:U}_COOKIE}: ${_${target:U}_DEP}
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} ${_${target:U}_SEQ}
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${_${target:U}_SEQ}
.else
${${target:U}_COOKIE}: ${_${target:U}_DEP} ${_${target:U}_SEQ}
.endif
@${ECHO_MSG} "===> Switching to root credentials for '${target}' target"
@cd ${.CURDIR} && \
- ${SU_CMD} "${MAKE} ${__softMAKEFLAGS} ${_${target:U}_SUSEQ}"
+ ${SU_CMD} "${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${_${target:U}_SUSEQ}"
@${ECHO_MSG} "===> Returning to user credentials"
@${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
-.elif defined(USE_SUBMAKE)
+.elif defined(USE_SUBMAKE) || defined(_ONG_REEXEC)
${${target:U}_COOKIE}: ${_${target:U}_DEP}
@cd ${.CURDIR} && \
- ${MAKE} ${__softMAKEFLAGS} ${_${target:U}_SEQ} ${_${target:U}_SUSEQ}
+ ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${_${target:U}_SEQ} ${_${target:U}_SUSEQ}
@${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
.else
${${target:U}_COOKIE}: ${_${target:U}_DEP} ${_${target:U}_SEQ} ${_${target:U}_SUSEQ}
@${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
.endif
.else
${${target:U}_COOKIE}::
@if [ -e ${.TARGET} ]; then \
${DO_NADA}; \
else \
- cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} ${.TARGET}; \
+ cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}; \
fi
.endif
.endfor
# Enforce order for -jN builds
.ORDER: ${_BOOTSTRAP_SEQ}
.ORDER: ${_SANITY_DEP} ${_SANITY_SEQ}
.ORDER: ${_FETCH_DEP} ${_FETCH_SEQ}
.ORDER: ${_EXTRACT_DEP} ${_EXTRACT_SEQ}
.ORDER: ${_PATCH_DEP} ${_PATCH_SEQ}
.ORDER: ${_CONFIGURE_DEP} ${_CONFIGURE_SEQ}
.ORDER: ${_BUILD_DEP} ${_BUILD_SEQ}
.ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ}
.ORDER: ${_PACKAGE_DEP} ${_PACKAGE_SEQ}
.PHONY: extract-message patch-message configure-message build-message install-message package-message
extract-message:
@${ECHO_MSG} "===> Extracting for ${PKGNAME}"
patch-message:
@${ECHO_MSG} "===> Patching for ${PKGNAME}"
configure-message:
@${ECHO_MSG} "===> Configuring for ${PKGNAME}"
build-message:
@${ECHO_MSG} "===> Building for ${PKGNAME}"
install-message:
@${ECHO_MSG} "===> Installing for ${PKGNAME}"
package-message:
@${ECHO_MSG} "===> Building package for ${PKGNAME}"
# Empty pre-* and post-* targets
.for stage in pre post
.for name in fetch extract patch configure build install package
.PHONY: ${stage}-${name} ${stage}-${name}-script
.if !target(${stage}-${name})
${stage}-${name}:
@${DO_NADA}
.endif
.if !target(${stage}-${name}-script)
${stage}-${name}-script:
@if [ -f ${SCRIPTDIR}/${.TARGET:S/-script$//} ]; then \
cd ${.CURDIR} && ${SETENV} ${SCRIPTS_ENV} ${SH} \
${SCRIPTDIR}/${.TARGET:S/-script$//}; \
fi
.endif
.endfor
.endfor
# Special cases for su
.PHONY: pre-su-install pre-su-install-script
.if !target(pre-su-install)
pre-su-install:
@${DO_NADA}
.endif
.if !target(pre-su-install-script)
pre-su-install-script:
@${DO_NADA}
.endif
.PHONY: pretty-print-www-site
.if !target(pretty-print-www-site)
pretty-print-www-site:
- @www_site=$$(cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} www-site); \
+ @www_site=$$(cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} www-site); \
if [ -n "$${www_site}" ]; then \
${ECHO_CMD} -n " and/or visit the "; \
${ECHO_CMD} -n "web site"; \
${ECHO_CMD} " for futher informations"; \
fi
.endif
################################################################
# Some more targets supplied for users' convenience
################################################################
# Checkpatch
#
# Special target to verify patches
.PHONY: checkpatch
.if !target(checkpatch)
checkpatch:
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} PATCH_CHECK_ONLY=yes ${_PATCH_DEP} ${_PATCH_SEQ}
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} PATCH_CHECK_ONLY=yes ${_PATCH_DEP} ${_PATCH_SEQ}
.endif
# Reinstall
#
# Special target to re-run install
.PHONY: reinstall
.if !target(reinstall)
reinstall:
@${RM} -f ${INSTALL_COOKIE} ${PACKAGE_COOKIE}
- @cd ${.CURDIR} && DEPENDS_TARGET="${DEPENDS_TARGET}" ${MAKE} install
+ @cd ${.CURDIR} && DEPENDS_TARGET="${DEPENDS_TARGET}" DESTDIR=${DESTDIR} ${MAKE} ${_ONG_MAKEFLAGS} install
.endif
# Deinstall
#
# Special target to remove installation
.PHONY: deinstall
.if !target(deinstall)
deinstall:
+ @if [ -n "${DESTDIR}" ]; then \
+ ${ECHO_MSG} "===> Can't deinstall from DESTDIR: ${DESTDIR}"; \
+ ${FALSE}; \
+ fi
.if ${UID} != 0 && !defined(INSTALL_AS_USER)
@${ECHO_MSG} "===> Switching to root credentials for '${.TARGET}' target"
@cd ${.CURDIR} && \
- ${SU_CMD} "${MAKE} ${__softMAKEFLAGS} ${.TARGET}"
+ ${SU_CMD} "${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}"
@${ECHO_MSG} "===> Returning to user credentials"
.else
@${ECHO_MSG} "===> Deinstalling for ${PKGORIGIN}"
- @found_names=`${PKG_INFO} -q -O ${PKGORIGIN}`; \
+ @found_names=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -q -O ${PKGORIGIN}`; \
for p in $${found_names}; do \
check_name=`${ECHO_CMD} $${p} | ${SED} -e 's/-[^-]*$$//'`; \
if [ "$${check_name}" = "${PKGBASE}" ]; then \
- prfx=`${PKG_INFO} -q -p $${p} 2> /dev/null | ${SED} -ne '1s|^@cwd ||p'`; \
+ prfx=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -q -p $${p} 2> /dev/null | ${SED} -ne '1s|^@cwd ||p'`; \
if [ "x${PREFIX}" = "x$${prfx}" ]; then \
${ECHO_MSG} "===> Deinstalling $${p}"; \
- ${PKG_DELETE} -f $${p}; \
+ ${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_DELETE} -f $${p}; \
else \
${ECHO_MSG} "===> $${p} has a different PREFIX: $${prfx}, skipping"; \
fi; \
fi; \
done; \
if [ -z "$${found_names}" ]; then \
${ECHO_MSG} "===> ${PKGBASE} not installed, skipping"; \
fi
@${RM} -f ${INSTALL_COOKIE} ${PACKAGE_COOKIE}
.endif
.endif
# Deinstall-all
#
# Special target to remove installation of all ports of the same origin
.PHONY: deinstall-all
.if !target(deinstall-all)
deinstall-all:
+ @if [ -n "${DESTDIR}" ]; then \
+ ${ECHO_MSG} "===> Can't deinstall from DESTDIR: ${DESTDIR}"; \
+ ${FALSE}; \
+ fi
.if ${UID} != 0 && !defined(INSTALL_AS_USER)
@${ECHO_MSG} "===> Switching to root credentials for '${.TARGET}' target"
@cd ${.CURDIR} && \
- ${SU_CMD} "${MAKE} ${__softMAKEFLAGS} ${.TARGET}"
+ ${SU_CMD} "${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}"
@${ECHO_MSG} "===> Returning to user credentials"
.else
@${ECHO_MSG} "===> Deinstalling for ${PKGORIGIN}"
- @deinstall_names=`${PKG_INFO} -q -O ${PKGORIGIN}`; \
+ @deinstall_names=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -q -O ${PKGORIGIN}`; \
if [ -n "$${deinstall_names}" ]; then \
for d in $${deinstall_names}; do \
${ECHO_MSG} "===> Deinstalling $${d}"; \
- ${PKG_DELETE} -f $${d}; \
+ ${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_DELETE} -f $${d}; \
done; \
else \
${ECHO_MSG} "===> ${PKGORIGIN} not installed, skipping"; \
fi
@${RM} -f ${INSTALL_COOKIE} ${PACKAGE_COOKIE}
.endif
.endif
# Cleaning up
.PHONY: do-clean
.if !target(do-clean)
do-clean:
@if [ -d ${WRKDIR} ]; then \
if [ -w ${WRKDIR} ]; then \
${RM} -rf ${WRKDIR}; \
else \
${ECHO_MSG} "===> ${WRKDIR} not writable, skipping"; \
fi; \
fi
.endif
.PHONY: clean
.if !target(clean)
clean:
.if !defined(NOCLEANDEPENDS)
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} clean-depends
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} clean-depends
.endif
@${ECHO_MSG} "===> Cleaning for ${PKGNAME}"
.if target(pre-clean)
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} pre-clean
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} pre-clean
.endif
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} do-clean
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} do-clean
.if target(post-clean)
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} post-clean
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} post-clean
.endif
.endif
.PHONY: pre-distclean
.if !target(pre-distclean)
pre-distclean:
@${DO_NADA}
.endif
.PHONY: distclean
.if !target(distclean)
distclean: pre-distclean clean
- @cd ${.CURDIR} && ${MAKE} delete-distfiles RESTRICTED_FILES="${_DISTFILES} ${_PATCHFILES}"
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} delete-distfiles RESTRICTED_FILES='$${_DISTFILES} $${_PATCHFILES}'
.endif
.PHONY: delete-distfiles
.if !target(delete-distfiles)
delete-distfiles:
@${ECHO_MSG} "===> Deleting distfiles for ${PKGNAME}"
.if defined(RESTRICTED_FILES)
@if [ -d "${_DISTDIR}" ]; then ( \
cd "${_DISTDIR}"; \
RESTRICTED_FILES="${RESTRICTED_FILES}"; \
for file in $${RESTRICTED_FILES}; do \
${RM} -f "$${file}"; \
dir="$${file%/*}"; \
if [ "$${dir}" != "$${file}" ]; then \
${RMDIR} -p "$${dir}" >/dev/null 2>&1 || ${TRUE}; \
fi; \
done \
); fi
.endif
.if defined(DIST_SUBDIR)
@${RMDIR} "${_DISTDIR}" >/dev/null 2>&1 || ${TRUE}
.endif
.endif
.PHONY: delete-distfiles-list
.if !target(delete-distfiles-list)
delete-distfiles-list:
@${ECHO_CMD} "# ${PKGNAME}"
@if [ "X${RESTRICTED_FILES}" != "X" ]; then \
for file in ${RESTRICTED_FILES}; do \
${ECHO_CMD} "[ -f ${_DISTDIR}/$$file ] && (${ECHO_CMD} deleting ${_DISTDIR}/$$file; ${RM} -f ${_DISTDIR}/$$file)"; \
dir=$${file%/*}; \
if [ "$${dir}" != "$${file}" ]; then \
${ECHO_CMD} "(cd ${_DISTDIR} && ${RMDIR} -p $${dir} 2>/dev/null)"; \
fi; \
done; \
fi
.if defined(DIST_SUBDIR)
@${ECHO_CMD} "${RMDIR} ${_DISTDIR} 2>/dev/null || ${TRUE}"
.endif
.endif
# Generates patches.
.PHONY: update-patches
.if !target(update-patches)
update-patches:
@toedit=`PATCH_WRKSRC=${PATCH_WRKSRC} \
PATCHDIR=${PATCHDIR} \
PATCH_LIST=${PATCHDIR}/patch-* \
DIFF_ARGS=${DIFF_ARGS} \
DISTORIG=${DISTORIG} \
${SH} ${PORTSDIR}/Tools/scripts/update-patches`; \
case $$toedit in "");; \
*) ${ECHO_CMD} -n 'edit patches: '; read i; \
cd ${PATCHDIR} && $${VISUAL:-$${EDIT:-/usr/bin/vi}} $$toedit;; esac
.endif
################################################################
# The special package-building targets
# You probably won't need to touch these
################################################################
# Nobody should want to override this unless PKGNAME is simply bogus.
.PHONY: package-name
.if !target(package-name)
package-name:
@${ECHO_CMD} ${PKGNAME}
.endif
# Build a package but don't check the package cookie
.PHONY: repackage
.if !target(repackage)
.PHONY: repackage pre-repackage
.ORDER: pre-repackage package
repackage: pre-repackage package
pre-repackage:
@${RM} -f ${PACKAGE_COOKIE}
.endif
# Build a package but don't check the cookie for installation, also don't
# install package cookie
.PHONY: package-noinstall
.if !target(package-noinstall)
package-noinstall:
@${MKDIR} ${WRKDIR}
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} pre-package \
- pre-package-script do-package post-package-script
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} pre-package \
+ pre-package-script do-package post-package post-package-script
@${RM} -f ${TMPPLIST}
-@${RMDIR} ${WRKDIR}
.endif
################################################################
# Dependency checking
################################################################
.PHONY: depends
.if !target(depends)
depends: extract-depends patch-depends lib-depends misc-depends fetch-depends build-depends run-depends
.if defined(ALWAYS_BUILD_DEPENDS)
_DEPEND_ALWAYS= 1
.else
_DEPEND_ALWAYS= 0
.endif
.if defined(INSTALLS_DEPENDS) && defined(INSTALLS_BOOTSTRAP)
bootstrap-depends:
@${DO_NADA}
.endif
.for deptype in BOOTSTRAP FETCH EXTRACT PATCH BUILD RUN
.PHONY: ${deptype:L}-depends
+.if !target(${deptype:L}-depends)
${deptype:L}-depends:
.if defined(${deptype}_DEPENDS)
.if !defined(NO_DEPENDS)
@if [ -n "INSTALLS_BOOTSTRAP" -o "${deptype:L}" = "bootstrap" ]; then \
submake_args="-DINSTALLS_BOOTSTRAP -DINSTALLS_DEPENDS"; \
else \
submake_args="-DINSTALLS_DEPENDS"; \
fi; \
for i in ${${deptype}_DEPENDS}; do \
prog=`${ECHO_CMD} $$i | ${SED} -e 's/:.*//'`; \
dir=`${ECHO_CMD} $$i | ${SED} -e 's/[^:]*://'`; \
if ${EXPR} "$$dir" : '.*:' > /dev/null; then \
target=`${ECHO_CMD} $$dir | ${SED} -e 's/.*://'`; \
dir=`${ECHO_CMD} $$dir | ${SED} -e 's/:.*//'`; \
else \
target="${DEPENDS_TARGET}"; \
depends_args="${DEPENDS_ARGS}"; \
fi; \
if ${EXPR} "$$prog" : \\/ >/dev/null; then \
if [ -e "$$prog" ]; then \
if [ "$$prog" = "${NONEXISTENT}" ]; then \
${ECHO_MSG} "Error: ${NONEXISTENT} exists. Please remove it, and restart the build."; \
${FALSE}; \
else \
${ECHO_MSG} "===> ${PKGNAME} depends on file: $$prog - found"; \
if [ ${_DEPEND_ALWAYS} = 1 ]; then \
${ECHO_MSG} " (but building it anyway)"; \
notfound=1; \
else \
notfound=0; \
fi; \
fi; \
else \
${ECHO_MSG} "===> ${PKGNAME} depends on file: $$prog - not found"; \
notfound=1; \
fi; \
else \
if ${WHICH} "$$prog" > /dev/null 2>&1 ; then \
${ECHO_MSG} "===> ${PKGNAME} depends on executable: $$prog - found"; \
if [ ${_DEPEND_ALWAYS} = 1 ]; then \
${ECHO_MSG} " (but building it anyway)"; \
notfound=1; \
else \
notfound=0; \
fi; \
else \
${ECHO_MSG} "===> ${PKGNAME} depends on executable: $$prog - not found"; \
notfound=1; \
fi; \
fi; \
if [ $$notfound != 0 ]; then \
${ECHO_MSG} "===> Verifying $$target for $$prog in $$dir"; \
if [ ! -d "$$dir" ]; then \
${ECHO_MSG} " >> No directory for $$prog. Skipping.."; \
else \
if [ X${USE_PACKAGE_DEPENDS} != "X" ]; then \
subpkgfile=`(cd $$dir; ${MAKE} $$depends_args -V PKGFILE)`; \
if [ -r "$${subpkgfile}" -a "$$target" = "${DEPENDS_TARGET}" ]; then \
${ECHO_MSG} "===> Installing existing package $${subpkgfile}"; \
${PKG_ADD} $${subpkgfile}; \
else \
(cd $$dir; ${MAKE} $$submake_args $$target $$depends_args) ; \
fi; \
else \
(cd $$dir; ${MAKE} $$submake_args $$target $$depends_args) ; \
fi ; \
${ECHO_MSG} "===> Returning to build of ${PKGNAME}"; \
fi; \
fi; \
done
.endif
.else
@${DO_NADA}
.endif
+.endif
.endfor
.PHONY: lib-depends
+.if !target(lib-depends)
lib-depends:
.if defined(LIB_DEPENDS) && !defined(NO_DEPENDS)
@for i in ${LIB_DEPENDS}; do \
lib=$${i%%:*}; \
case $$lib in \
*.*.*) pattern="`${ECHO_CMD} $$lib | ${SED} -e 's/\./\\\\./g'`" ;;\
*.*) pattern="$${lib%%.*}\.$${lib#*.}" ;;\
*) pattern="$$lib" ;;\
esac; \
dir=$${i#*:}; \
target=$${i##*:}; \
if ${TEST} $$dir = $$target; then \
target="${DEPENDS_TARGET}"; \
depends_args="${DEPENDS_ARGS}"; \
else \
dir=$${dir%%:*}; \
fi; \
${ECHO_MSG} -n "===> ${PKGNAME} depends on shared library: $$lib"; \
if ${LDCONFIG} -r | ${GREP} -vwF -e "${PKGCOMPATDIR}" | ${GREP} -qwE -e "-l$$pattern"; then \
${ECHO_MSG} " - found"; \
if [ ${_DEPEND_ALWAYS} = 1 ]; then \
${ECHO_MSG} " (but building it anyway)"; \
notfound=1; \
else \
notfound=0; \
fi; \
else \
${ECHO_MSG} " - not found"; \
notfound=1; \
fi; \
if [ $$notfound != 0 ]; then \
${ECHO_MSG} "===> Verifying $$target for $$lib in $$dir"; \
if [ ! -d "$$dir" ]; then \
${ECHO_MSG} " >> No directory for $$lib. Skipping.."; \
else \
if [ X${USE_PACKAGE_DEPENDS} != "X" ]; then \
subpkgfile=`(cd $$dir; ${MAKE} $$depends_args -V PKGFILE)`; \
if [ -r "$${subpkgfile}" -a "$$target" = "${DEPENDS_TARGET}" ]; then \
${ECHO_MSG} "===> Installing existing package $${subpkgfile}"; \
${PKG_ADD} $${subpkgfile}; \
else \
(cd $$dir; ${MAKE} -DINSTALLS_DEPENDS $$target $$depends_args) ; \
fi; \
else \
(cd $$dir; ${MAKE} -DINSTALLS_DEPENDS $$target $$depends_args) ; \
fi ; \
${ECHO_MSG} "===> Returning to build of ${PKGNAME}"; \
if ! ${LDCONFIG} -r | ${GREP} -vwF -e "${PKGCOMPATDIR}" | ${GREP} -qwE -e "-l$$pattern"; then \
${ECHO_MSG} "Error: shared library \"$$lib\" does not exist"; \
${FALSE}; \
fi; \
fi; \
fi; \
done
.endif
+.endif
.PHONY: misc-depends
+.if !target(misc-depends)
misc-depends:
.if defined(DEPENDS)
.if !defined(NO_DEPENDS)
@for dir in ${DEPENDS}; do \
if ${EXPR} "$$dir" : '.*:' > /dev/null; then \
target=`${ECHO_CMD} $$dir | ${SED} -e 's/.*://'`; \
dir=`${ECHO_CMD} $$dir | ${SED} -e 's/:.*//'`; \
else \
target="${DEPENDS_TARGET}"; \
depends_args="${DEPENDS_ARGS}"; \
fi; \
${ECHO_MSG} "===> ${PKGNAME} depends on: $$dir"; \
${ECHO_MSG} "===> Verifying $$target for $$dir"; \
if [ ! -d $$dir ]; then \
${ECHO_MSG} " >> No directory for $$dir. Skipping.."; \
else \
(cd $$dir; ${MAKE} $$target $$depends_args) ; \
fi \
done
@${ECHO_MSG} "===> Returning to build of ${PKGNAME}"
.endif
.else
@${DO_NADA}
.endif
+.endif
.endif
# Dependency lists: both build and runtime, recursive. Print out directory names.
.PHONY: all-depends-list
all-depends-list:
-.if defined(EXTRACT_DEPENDS) || defined(PATCH_DEPENDS) || defined(FETCH_DEPENDS) || defined(BUILD_DEPENDS) || defined(LIB_DEPENDS) || defined(RUN_DEPENDS) || defined(DEPENDS)
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.elif defined(EXTRACT_DEPENDS) || defined(PATCH_DEPENDS) || defined(FETCH_DEPENDS) || defined(BUILD_DEPENDS) || defined(LIB_DEPENDS) || defined(RUN_DEPENDS) || defined(DEPENDS)
@${ALL-DEPENDS-LIST}
+.else
+ @${DO_NADA}
.endif
+.if defined(_ONG_REEXEC)
ALL-DEPENDS-LIST= \
+ ${ECHO_MSG} "${PKGNAME}: configuration error." >&2; ${FALSE}
+.else
+ALL-DEPENDS-LIST= \
checked="${PARENT_CHECKED}"; \
for dir in $$(${ECHO_CMD} "${EXTRACT_DEPENDS} ${PATCH_DEPENDS} ${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS} ${RUN_DEPENDS}" | ${SED} -e 'y/ /\n/' | ${CUT} -f 2 -d ':') $$(${ECHO_CMD} ${DEPENDS} | ${SED} -e 'y/ /\n/' | ${CUT} -f 1 -d ':'); do \
if [ -d $$dir ]; then \
if (${ECHO_CMD} $$checked | ${GREP} -qwv "$$dir"); then \
child=$$(cd $$dir; ${MAKE} PARENT_CHECKED="$$checked" all-depends-list); \
for d in $$child; do ${ECHO_CMD} $$d; done; \
${ECHO_CMD} $$dir; \
checked="$$dir $$child $$checked"; \
fi; \
else \
${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \
fi; \
done | ${SORT} -u
+.endif
.PHONY: clean-depends
.if !target(clean-depends)
clean-depends:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@for dir in $$(${ALL-DEPENDS-LIST}); do \
(cd $$dir; ${MAKE} NOCLEANDEPENDS=yes clean); \
done
.endif
+.endif
.PHONY: deinstall-depends
.if !target(deinstall-depends)
deinstall-depends:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@for dir in $$(${ALL-DEPENDS-LIST}); do \
(cd $$dir; ${MAKE} deinstall); \
done
.endif
+.endif
.PHONY: fetch-recursive
.if !target(fetch-recursive)
fetch-recursive:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@${ECHO_MSG} "===> Fetching all distfiles for ${PKGNAME} and dependencies"
@for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
(cd $$dir; ${MAKE} fetch); \
done
.endif
+.endif
.PHONY: fetch-recursive-list
.if !target(fetch-recursive-list)
fetch-recursive-list:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
(cd $$dir; ${MAKE} fetch-list); \
done
.endif
+.endif
.PHONY: fetch-required
.if !target(fetch-required)
fetch-required: fetch
@${ECHO_MSG} "===> Fetching all required distfiles for ${PKGNAME} and dependencies"
.for deptype in EXTRACT PATCH FETCH BUILD RUN
.if defined(${deptype}_DEPENDS)
.if !defined(NO_DEPENDS)
@for i in ${${deptype}_DEPENDS}; do \
prog=`${ECHO_CMD} $$i | ${CUT} -f 1 -d ':'`; \
dir=`${ECHO_CMD} $$i | ${CUT} -f 2-999 -d ':'`; \
if ${EXPR} "$$dir" : '.*:' > /dev/null; then \
dir=`${ECHO_CMD} $$dir | ${CUT} -f 1 -d ':'`; \
if ${EXPR} "$$prog" : \\/ >/dev/null; then \
if [ ! -e "$$prog" ]; then \
(cd $$dir; ${MAKE} fetch); \
fi; \
fi; \
else \
(cd $$dir; \
- tmp=`${MAKE} -V PKGNAME`; \
- if [ ! -d ${PKG_DBDIR}/$${tmp} ]; then \
+ if ! ${PKG_INFO} -e `${MAKE} -V PKGNAME`; then \
${MAKE} fetch; \
fi ); \
fi; \
done
.endif
.endif
.endfor
.endif
.PHONY: fetch-required-list
.if !target(fetch-required-list)
fetch-required-list: fetch-list
.for deptype in EXTRACT PATCH FETCH BUILD RUN
.if defined(${deptype}_DEPENDS)
.if !defined(NO_DEPENDS)
@for i in ${${deptype}_DEPENDS}; do \
prog=`${ECHO_CMD} $$i | ${CUT} -f 1 -d ':'`; \
dir=`${ECHO_CMD} $$i | ${CUT} -f 2-999 -d ':'`; \
if ${EXPR} "$$dir" : '.*:' > /dev/null; then \
dir=`${ECHO_CMD} $$dir | ${CUT} -f 1 -d ':'`; \
if ${EXPR} "$$prog" : \\/ >/dev/null; then \
if [ ! -e "$$prog" ]; then \
(cd $$dir; ${MAKE} fetch-list); \
fi; \
fi; \
else \
(cd $$dir; \
- tmp=`${MAKE} -V PKGNAME`; \
- if [ ! -d ${PKG_DBDIR}/$${tmp} ]; then \
+ if ! ${PKG_INFO} -e `${MAKE} -V PKGNAME`; then \
${MAKE} fetch-list; \
fi ); \
fi; \
done
.endif
.endif
.endfor
.endif
.PHONY: checksum-recursive
.if !target(checksum-recursive)
checksum-recursive:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@${ECHO_MSG} "===> Fetching and checking checksums for ${PKGNAME} and dependencies"
@for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
(cd $$dir; ${MAKE} checksum); \
done
.endif
+.endif
# Dependency lists: build and runtime. Print out directory names.
.PHONY: build-depends-list
build-depends-list:
.if defined(EXTRACT_DEPENDS) || defined(PATCH_DEPENDS) || defined(FETCH_DEPENDS) || defined(BUILD_DEPENDS) || defined(LIB_DEPENDS) || defined(DEPENDS)
@${BUILD-DEPENDS-LIST}
.endif
BUILD-DEPENDS-LIST= \
for dir in $$(${ECHO_CMD} "${EXTRACT_DEPENDS} ${PATCH_DEPENDS} ${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS}" | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//' | ${SORT} -u) $$(${ECHO_CMD} ${DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/:.*//' | ${SORT} -u); do \
if [ -d $$dir ]; then \
${ECHO_CMD} $$dir; \
else \
${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \
fi; \
done | ${SORT} -u
.PHONY: run-depends-list
run-depends-list:
.if defined(LIB_DEPENDS) || defined(RUN_DEPENDS) || defined(DEPENDS)
@${RUN-DEPENDS-LIST}
.endif
RUN-DEPENDS-LIST= \
for dir in $$(${ECHO_CMD} "${LIB_DEPENDS} ${RUN_DEPENDS}" | ${SED} -e 'y/ /\n/' | ${CUT} -f 2 -d ':' | ${SORT} -u) $$(${ECHO_CMD} ${DEPENDS} | ${SED} -e 'y/ /\n/' | ${CUT} -f 1 -d ':' | ${SORT} -u); do \
if [ -d $$dir ]; then \
${ECHO_CMD} $$dir; \
else \
${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \
fi; \
done | ${SORT} -u
# Package (recursive runtime) dependency list. Print out both directory names
# and package names.
.PHONY: package-depends-list
package-depends-list:
.if defined(CHILD_DEPENDS) || defined(LIB_DEPENDS) || defined(RUN_DEPENDS) || defined(DEPENDS)
@${PACKAGE-DEPENDS-LIST}
.endif
PACKAGE-DEPENDS-LIST?= \
if [ "${CHILD_DEPENDS}" ]; then \
installed=$$(${PKG_INFO} -qO ${PKGORIGIN} 2>/dev/null || \
${TRUE}); \
if [ "$$installed" ]; then \
break; \
fi; \
if [ -z "$$installed" ]; then \
installed="${PKGNAME}"; \
fi; \
for pkgname in $$installed; do \
${ECHO_CMD} "$$pkgname ${.CURDIR} ${PKGORIGIN}"; \
done; \
fi; \
checked="${PARENT_CHECKED}"; \
for dir in $$(${ECHO_CMD} "${LIB_DEPENDS} ${RUN_DEPENDS}" | ${SED} -e 'y/ /\n/' | ${CUT} -f 2 -d ':') $$(${ECHO_CMD} ${DEPENDS} | ${SED} -e 'y/ /\n/' | ${CUT} -f 1 -d ':'); do \
dir=$$(${REALPATH} $$dir); \
if [ -d $$dir ]; then \
if (${ECHO_CMD} $$checked | ${GREP} -qwv "$$dir"); then \
childout=$$(cd $$dir; ${MAKE} CHILD_DEPENDS=yes PARENT_CHECKED="$$checked" package-depends-list); \
set -- $$childout; \
childdir=""; \
while [ $$\# != 0 ]; do \
childdir="$$childdir $$2"; \
${ECHO_CMD} "$$1 $$2 $$3"; \
shift 3; \
done; \
checked="$$dir $$childdir $$checked"; \
fi; \
else \
${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \
fi; \
done
# Print out package names.
.PHONY: package-depends
package-depends:
.if ${OSVERSION} >= 460102 || exists(${LOCALBASE}/sbin/pkg_info)
@${PACKAGE-DEPENDS-LIST} | ${AWK} '{print $$1":"$$3}'
.else
@${PACKAGE-DEPENDS-LIST} | ${AWK} '{print $$1}'
.endif
# Build packages for port and dependencies
.PHONY: package-recursive
package-recursive: package
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@for dir in $$(${ALL-DEPENDS-LIST}); do \
(cd $$dir; ${MAKE} package-noinstall); \
done
+.endif
################################################################
# Everything after here are internal targets and really
# shouldn't be touched by anybody but the release engineers.
################################################################
# This target generates an index entry suitable for aggregation into
# a large index. Format is:
#
# distribution-name|port-path|installation-prefix|comment| \
# description-file|maintainer|categories|build deps|run deps|www site
.PHONY: describe
.if !target(describe)
describe:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${.TARGET}
+.else
@${ECHO_CMD} -n "${PKGNAME}|${.CURDIR}|${PREFIX}|"
.if defined(COMMENT)
@${ECHO_CMD} -n ${COMMENT:Q}
.else
@${ECHO_CMD} -n '** No Description'
.endif
- @perl -e ' \
+ @${PERL5} -e ' \
if ( -f q{${DESCR}} ) { \
print q{|${DESCR}}; \
} else { \
print q{|/dev/null}; \
} \
print q{|${MAINTAINER}|${CATEGORIES}|}; \
- @bdirs = map((split /:/)[1], split(q{ }, q{${EXTRACT_DEPENDS} ${PATCH_DEPENDS} ${FETCH_DEPENDS} ${BUILD_DEPENDS}})); \
+ @edirs = map((split /:/)[1], split(q{ }, q{${EXTRACT_DEPENDS}})); \
+ @pdirs = map((split /:/)[1], split(q{ }, q{${PATCH_DEPENDS}})); \
+ @fdirs = map((split /:/)[1], split(q{ }, q{${FETCH_DEPENDS}})); \
+ @bdirs = map((split /:/)[1], split(q{ }, q{${BUILD_DEPENDS}})); \
@rdirs = map((split /:/)[1], split(q{ }, q{${RUN_DEPENDS}})); \
- @mdirs = ( \
- map((split /:/)[0], split(q{ }, q{${DEPENDS}})), \
- map((split /:/)[1], split(q{ }, q{${LIB_DEPENDS}})) \
- ); \
- for my $$i (\@bdirs, \@rdirs, \@mdirs) { \
+ @ddirs = map((split /:/)[0], split(q{ }, q{${DEPENDS}})); \
+ @ldirs = map((split /:/)[1], split(q{ }, q{${LIB_DEPENDS}})); \
+ for my $$i (\@edirs, \@pdirs, \@fdirs, \@bdirs, \@rdirs, \@ddirs, \@ldirs) { \
my @dirs = @$$i; \
@$$i = (); \
for (@dirs) { \
if (-d $$_) { \
push @$$i, $$_; \
} else { \
print STDERR qq{${PKGNAME}: \"$$_\" non-existent -- dependency list incomplete\n}; \
exit(1); \
} \
} \
} \
- for (@bdirs, @mdirs) { \
- $$x{$$_} = 1; \
+ for (@edirs, @ddirs) { \
+ $$xe{$$_} = 1; \
} \
- print join(q{ }, sort keys %x), q{|}; \
- for (@rdirs, @mdirs) { \
- $$y{$$_} = 1; \
+ print join(q{ }, sort keys %xe), q{|}; \
+ for (@pdirs, @ddirs) { \
+ $$xp{$$_} = 1; \
} \
- print join(q{ }, sort keys %y), q{|}; \
+ print join(q{ }, sort keys %xp), q{|}; \
+ for (@fdirs, @ddirs) { \
+ $$xf{$$_} = 1; \
+ } \
+ print join(q{ }, sort keys %xf), q{|}; \
+ for (@bdirs, @ddirs, @ldirs) { \
+ $$xb{$$_} = 1; \
+ } \
+ print join(q{ }, sort keys %xb), q{|}; \
+ for (@rdirs, @ddirs, @ldirs) { \
+ $$xr{$$_} = 1; \
+ } \
+ print join(q{ }, sort keys %xr), q{|}; \
if (open(DESCR, q{${DESCR}})) { \
while () { \
if (/^WWW:\s+(\S+)/) { \
print $$1; \
last; \
} \
} \
} \
print qq{\n};'
.endif
+.endif
.PHONY: www-site
.if !target(www-site)
www-site:
.if exists(${DESCR})
@${GREP} '^WWW:[ ]' ${DESCR} | ${AWK} '{print $$2}' | ${HEAD} -1
.else
@${ECHO_CMD}
.endif
.endif
.PHONY: readmes
.if !target(readmes)
readmes: readme
.endif
.PHONY: readme
.if !target(readme)
readme:
@${RM} -f ${.CURDIR}/README.html
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} ${.CURDIR}/README.html
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.CURDIR}/README.html
.endif
${.CURDIR}/README.html:
@${ECHO_MSG} "===> Creating README.html for ${PKGNAME}"
@__softMAKEFLAGS='${__softMAKEFLAGS:S/'/'\''/g}'; \
${SED} -e 's|%%PORT%%|'$$(${ECHO_CMD} ${.CURDIR} | \
${SED} -e 's|.*/\([^/]*/[^/]*\)$$|\1|')'|g' \
-e 's|%%PKG%%|${PKGNAME}|g' \
-e 's|%%COMMENT%%|'"$$(${ECHO_CMD} ${COMMENT:Q})"'|' \
-e '/%%COMMENT%%/d' \
-e 's|%%DESCR%%|'"$$(${ECHO_CMD} ${DESCR} | \
${SED} -e 's|${.CURDIR}/||')"'|' \
-e 's|%%EMAIL%%|'"$$(${ECHO_CMD} "${MAINTAINER}" | \
${SED} -e 's/([^)]*)//;s/.*/;s/>.*//')"'|g' \
-e 's|%%MAINTAINER%%|${MAINTAINER}|g' \
- -e 's|%%WEBSITE%%|'"$$(cd ${.CURDIR} && eval ${MAKE} \
+ -e 's|%%WEBSITE%%|'"$$(cd ${.CURDIR} && eval ${MAKE} ${_ONG_MAKEFLAGS} \
$${__softMAKEFLAGS} pretty-print-www-site)"'|' \
- -e 's|%%BUILD_DEPENDS%%|'"$$(cd ${.CURDIR} && eval ${MAKE} \
+ -e 's|%%BUILD_DEPENDS%%|'"$$(cd ${.CURDIR} && eval ${MAKE} ${_ONG_MAKEFLAGS} \
$${__softMAKEFLAGS} pretty-print-build-depends-list)"'|' \
- -e 's|%%RUN_DEPENDS%%|'"$$(cd ${.CURDIR} && eval ${MAKE} \
+ -e 's|%%RUN_DEPENDS%%|'"$$(cd ${.CURDIR} && eval ${MAKE} ${_ONG_MAKEFLAGS} \
$${__softMAKEFLAGS} pretty-print-run-depends-list)"'|' \
-e 's|%%TOP%%|'"$$(${ECHO_CMD} ${CATEGORIES} | \
${SED} -e 's| .*||' -e 's|[^/]*|..|g')"'/..|' \
${TEMPLATES}/README.port >> $@
# The following two targets require an up-to-date INDEX in ${PORTSDIR}
.PHONY: pretty-print-build-depends-list
.if !target(pretty-print-build-depends-list)
pretty-print-build-depends-list:
.if defined(EXTRACT_DEPENDS) || defined(PATCH_DEPENDS) || \
defined(FETCH_DEPENDS) || defined(BUILD_DEPENDS) || \
defined(LIB_DEPENDS) || defined(DEPENDS)
@${ECHO_CMD} -n 'This port requires package(s) "'
@${ECHO_CMD} -n `${GREP} '^${PKGNAME}|' ${PORTSDIR}/${INDEXFILE} | ${AWK} -F\| '{print $$8;}'`
@${ECHO_CMD} '" to build.'
.endif
.endif
.PHONY: pretty-print-run-depends-list
.if !target(pretty-print-run-depends-list)
pretty-print-run-depends-list:
.if defined(RUN_DEPENDS) || defined(LIB_DEPENDS) || defined(DEPENDS)
@${ECHO_CMD} -n 'This port requires package(s) "'
@${ECHO_CMD} -n `${GREP} '^${PKGNAME}|' ${PORTSDIR}/${INDEXFILE} | ${AWK} -F\| '{print $$9;}'`
@${ECHO_CMD} '" to run.'
.endif
.endif
# Generate packing list. Also tests to make sure all required package
# files exist.
.PHONY: generate-plist
.if !target(generate-plist)
generate-plist:
@${ECHO_MSG} "===> Generating temporary packing list"
@${MKDIR} `${DIRNAME} ${TMPPLIST}`
@if [ ! -f ${DESCR} ]; then ${ECHO_CMD} "** Missing pkg-descr for ${PKGNAME}."; exit 1; fi
@>${TMPPLIST}
@for file in ${PLIST_FILES}; do \
${ECHO_CMD} $${file} | ${SED} ${PLIST_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} >> ${TMPPLIST}; \
done
@for man in ${__MANPAGES}; do \
${ECHO_CMD} $${man} >> ${TMPPLIST}; \
done
.for _PREFIX in ${PREFIX}
.if ${_TMLINKS:M${_PREFIX}*}x != x
@for i in ${_TMLINKS:M${_PREFIX}*:S|^${_PREFIX}/||}; do \
${ECHO_CMD} "$$i" >> ${TMPPLIST}; \
done
.endif
.if ${_TMLINKS:N${_PREFIX}*}x != x
@${ECHO_CMD} @cwd / >> ${TMPPLIST}
@for i in ${_TMLINKS:N${_PREFIX}*:S|^/||}; do \
${ECHO_CMD} "$$i" >> ${TMPPLIST}; \
done
@${ECHO_CMD} '@cwd ${PREFIX}' >> ${TMPPLIST}
.endif
@for i in $$(${ECHO_CMD} ${__MANPAGES} ${_TMLINKS:M${_PREFIX}*:S|^${_PREFIX}/||} ' ' | ${SED} -E -e 's|man([1-9ln])/([^/ ]+) |cat\1/\2 |g'); do \
${ECHO_CMD} "@unexec rm -f %D/$${i%.gz} %D/$${i%.gz}.gz" >> ${TMPPLIST}; \
done
.if ${XFREE86_HTML_MAN:L} == "yes"
.for mansect in 1 2 3 4 5 6 7 8 9 L N
.for man in ${MAN${mansect}}
@${ECHO_CMD} lib/X11/doc/html/${man}.html >> ${TMPPLIST}
.endfor
.endfor
@${ECHO_CMD} "@unexec %D/bin/mkhtmlindex %D/lib/X11/doc/html" >> ${TMPPLIST}
@${ECHO_CMD} "@exec %D/bin/mkhtmlindex %D/lib/X11/doc/html" >> ${TMPPLIST}
.if defined(MLINKS)
@${ECHO_CMD} ${MLINKS} | ${AWK} \
'{ for (i=1; i<=NF; i++) { \
if (i % 2 == 0) { printf "lib/X11/doc/html/%s.html\n", $$i } \
} }' >> ${TMPPLIST}
.endif
.endif
.endfor
@if [ -f ${PLIST} ]; then \
${SED} ${PLIST_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} ${PLIST} >> ${TMPPLIST}; \
fi
.for dir in ${PLIST_DIRS}
@${ECHO_CMD} ${dir} | ${SED} ${PLIST_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} | ${SED} -e 's,^,@dirrm ,' >> ${TMPPLIST}
.endfor
.if defined(INSTALLS_SHLIB) && !defined(INSTALL_AS_USER)
@${ECHO_CMD} "@exec ${LDCONFIG} -m ${LDCONFIG_PLIST}" >> ${TMPPLIST}
@${ECHO_CMD} "@unexec ${LDCONFIG} -R" >> ${TMPPLIST}
.elif defined(INSTALLS_SHLIB)
@${ECHO_CMD} "@exec ${LDCONFIG} -m ${LDCONFIG_PLIST} || ${TRUE}" >> ${TMPPLIST}
@${ECHO_CMD} "@unexec ${LDCONFIG} -R || ${TRUE}" >> ${TMPPLIST}
.endif
.if !defined(NO_FILTER_SHLIBS)
.if (${PORTOBJFORMAT} == "aout")
@${SED} -e 's,\(/lib.*\.so\.[0-9]*\)$$,\1.0,' ${TMPPLIST} > ${TMPPLIST}.tmp
.else
@${SED} -e 's,\(/lib.*\.so\.[0-9]*\)\.[0-9]*$$,\1,' ${TMPPLIST} > ${TMPPLIST}.tmp
.endif
@${MV} -f ${TMPPLIST}.tmp ${TMPPLIST}
.endif
.endif
${TMPPLIST}:
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} generate-plist
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} generate-plist
.PHONY: add-plist-docs
.if !target(add-plist-docs)
add-plist-docs:
.if defined(PORTDOCS)
@if ${EGREP} -qe '^@cw?d' ${TMPPLIST} && \
[ "`${SED} -En -e '/^@cw?d[ ]*/s,,,p' ${TMPPLIST} | ${TAIL} -n 1`" != "${PREFIX}" ]; then \
${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}; \
fi
- @${FIND} -P ${PORTDOCS:S/^/${DOCSDIR}\//} ! -type d 2>/dev/null | \
- ${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
- @${FIND} -P -d ${PORTDOCS:S/^/${DOCSDIR}\//} -type d 2>/dev/null | \
- ${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
- @if [ -d "${DOCSDIR}" ]; then \
+ @${FIND} -P ${PORTDOCS:S/^/${DESTDIR}${DOCSDIR}\//} ! -type d 2>/dev/null | \
+ ${SED} -ne 's,^${DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
+ @${FIND} -P -d ${PORTDOCS:S/^/${DESTDIR}${DOCSDIR}\//} -type d 2>/dev/null | \
+ ${SED} -ne 's,^${DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
+ @if [ -d "${DESTDIR}${DOCSDIR}" ]; then \
${ECHO_CMD} "@unexec rmdir %D/${DOCSDIR:S,^${PREFIX}/,,} 2>/dev/null || true" >> ${TMPPLIST}; \
fi
.else
@${DO_NADA}
.endif
.endif
.PHONY: add-plist-info
.if !target(add-plist-info)
add-plist-info:
# Process GNU INFO files at package install/deinstall time
.for i in ${INFO}
@${ECHO_CMD} "@unexec install-info --delete %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \
>> ${TMPPLIST}
- @${LS} ${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${PREFIX}/::g >> ${TMPPLIST}
+ @${LS} ${DESTDIR}${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${DESTDIR}${PREFIX}/::g >> ${TMPPLIST}
@${ECHO_CMD} "@exec install-info %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \
>> ${TMPPLIST}
.endfor
.if !defined(NO_MTREE) && defined(INFO)
@${ECHO_CMD} "@unexec if [ -f %D/${INFO_PATH}/dir ]; then if sed -e '1,/Menu:/d' %D/${INFO_PATH}/dir | grep -q '^[*] '; then true; else rm %D/${INFO_PATH}/dir; fi; fi" >> ${TMPPLIST}
.else
@${DO_NADA}
.endif
.endif
# Compress (or uncompress) and symlink manpages.
.PHONY: compress-man
.if !target(compress-man)
compress-man:
.if defined(_MANPAGES) || defined(_MLINKS)
.if ${MANCOMPRESSED} == yes && defined(NOMANCOMPRESS)
@${ECHO_MSG} "===> Uncompressing manual pages for ${PKGNAME}"
- @_manpages='${_MANPAGES:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GUNZIP_CMD} $${_manpages} ) || ${TRUE}
+ @_manpages='${_MANPAGES:S/^/${DESTDIR}/:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GUNZIP_CMD} $${_manpages} ) || ${TRUE}
.elif ${MANCOMPRESSED} == no && !defined(NOMANCOMPRESS)
@${ECHO_MSG} "===> Compressing manual pages for ${PKGNAME}"
- @_manpages='${_MANPAGES:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GZIP_CMD} $${_manpages} ) || ${TRUE}
+ @_manpages='${_MANPAGES:S/^/${DESTDIR}/:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GZIP_CMD} $${_manpages} ) || ${TRUE}
.endif
.if defined(_MLINKS)
@set ${_MLINKS}; \
while :; do \
[ $$# -eq 0 ] && break || ${TRUE}; \
- ${RM} -f $${2%.gz}; ${RM} -f $$2.gz; \
+ ${RM} -f ${DESTDIR}$${2%.gz}; ${RM} -f ${DESTDIR}$$2.gz; \
${LN} -fs `${ECHO_CMD} $$1 $$2 | ${AWK} '{ \
z=split($$1, a, /\//); x=split($$2, b, /\//); \
while (a[i] == b[i]) i++; \
for (q=i; q Registering installation for ${PKGNAME}"; \
- ${MKDIR} ${PKG_DBDIR}/${PKGNAME}; \
- ${PKG_CMD} ${PKG_ARGS} -O ${PKGFILE} > ${PKG_DBDIR}/${PKGNAME}/+CONTENTS; \
- ${CP} ${DESCR} ${PKG_DBDIR}/${PKGNAME}/+DESC; \
- ${ECHO_CMD} ${COMMENT:Q} > ${PKG_DBDIR}/${PKGNAME}/+COMMENT; \
+ ${MKDIR} ${_PKG_DBDIR}/${PKGNAME}; \
+ ${PKG_CMD} ${PKG_ARGS} -O ${PKGFILE} > ${_PKG_DBDIR}/${PKGNAME}/+CONTENTS; \
+ ${CP} ${DESCR} ${_PKG_DBDIR}/${PKGNAME}/+DESC; \
+ ${ECHO_CMD} ${COMMENT:Q} > ${_PKG_DBDIR}/${PKGNAME}/+COMMENT; \
if [ -f ${PKGINSTALL} ]; then \
- ${CP} ${PKGINSTALL} ${PKG_DBDIR}/${PKGNAME}/+INSTALL; \
+ ${CP} ${PKGINSTALL} ${_PKG_DBDIR}/${PKGNAME}/+INSTALL; \
fi; \
if [ -f ${PKGDEINSTALL} ]; then \
- ${CP} ${PKGDEINSTALL} ${PKG_DBDIR}/${PKGNAME}/+DEINSTALL; \
+ ${CP} ${PKGDEINSTALL} ${_PKG_DBDIR}/${PKGNAME}/+DEINSTALL; \
fi; \
if [ -f ${PKGREQ} ]; then \
- ${CP} ${PKGREQ} ${PKG_DBDIR}/${PKGNAME}/+REQUIRE; \
+ ${CP} ${PKGREQ} ${_PKG_DBDIR}/${PKGNAME}/+REQUIRE; \
fi; \
if [ -f ${PKGMESSAGE} ]; then \
- ${CP} ${PKGMESSAGE} ${PKG_DBDIR}/${PKGNAME}/+DISPLAY; \
+ ${CP} ${PKGMESSAGE} ${_PKG_DBDIR}/${PKGNAME}/+DISPLAY; \
fi; \
- for dep in `${PKG_INFO} -qf ${PKGNAME} | ${GREP} -w ^@pkgdep | ${AWK} '{print $$2}' | ${SORT} -u`; do \
- if [ -d ${PKG_DBDIR}/$$dep -a -z `${ECHO_CMD} $$dep | ${GREP} -E ${PKG_IGNORE_DEPENDS}` ]; then \
- if ! ${GREP} ^${PKGNAME}$$ ${PKG_DBDIR}/$$dep/+REQUIRED_BY \
+ for dep in `${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -qf ${PKGNAME} | ${GREP} -w ^@pkgdep | ${AWK} '{print $$2}' | ${SORT} -u`; do \
+ if [ -d ${_PKG_DBDIR}/$$dep -a -z `${ECHO_CMD} $$dep | ${GREP} -E ${PKG_IGNORE_DEPENDS}` ]; then \
+ if ! ${GREP} ^${PKGNAME}$$ ${_PKG_DBDIR}/$$dep/+REQUIRED_BY \
>/dev/null 2>&1; then \
- ${ECHO_CMD} ${PKGNAME} >> ${PKG_DBDIR}/$$dep/+REQUIRED_BY; \
+ ${ECHO_CMD} ${PKGNAME} >> ${_PKG_DBDIR}/$$dep/+REQUIRED_BY; \
fi; \
fi; \
done; \
fi
.if !defined(NO_MTREE)
@if [ -f ${MTREE_FILE} ]; then \
- ${CP} ${MTREE_FILE} ${PKG_DBDIR}/${PKGNAME}/+MTREE_DIRS; \
+ ${CP} ${MTREE_FILE} ${_PKG_DBDIR}/${PKGNAME}/+MTREE_DIRS; \
fi
.endif
@if [ -e /tmp/${PKGNAME}-required-by ]; then \
- ${CAT} /tmp/${PKGNAME}-required-by >> ${PKG_DBDIR}/${PKGNAME}/+REQUIRED_BY; \
+ ${CAT} /tmp/${PKGNAME}-required-by >> ${_PKG_DBDIR}/${PKGNAME}/+REQUIRED_BY; \
${RM} -f /tmp/${PKGNAME}-required-by; \
fi
.else
@${DO_NADA}
.endif
.endif
# Depend is generally meaningless for arbitrary ports, but if someone wants
# one they can override this. This is just to catch people who've gotten into
# the habit of typing `make depend all install' as a matter of course.
#
.PHONY: depend
.if !target(depend)
depend:
.endif
# Same goes for tags
.PHONY: tags
.if !target(tags)
tags:
.endif
.if !defined(NOPRECIOUSMAKEVARS)
.for softvar in CKSUMFILES _MLINKS
.if defined(${softvar})
__softMAKEFLAGS+= '${softvar}+=${${softvar}:S/'/'\''/g}'
.endif
.endfor
# These won't change, so we can pass them through the environment
.MAKEFLAGS: \
ARCH="${ARCH:S/"/"'"'"/g:S/\$/\$\$/g:S/\\/\\\\/g}" \
OPSYS="${OPSYS:S/"/"'"'"/g:S/\$/\$\$/g:S/\\/\\\\/g}" \
OSREL="${OSREL:S/"/"'"'"/g:S/\$/\$\$/g:S/\\/\\\\/g}" \
OSVERSION="${OSVERSION:S/"/"'"'"/g:S/\$/\$\$/g:S/\\/\\\\/g}" \
PORTOBJFORMAT="${PORTOBJFORMAT:S/"/"'"'"/g:S/\$/\$\$/g:S/\\/\\\\/g}" \
SYSTEMVERSION="${SYSTEMVERSION:S/"/"'"'"/g:S/\$/\$\$/g:S/\\/\\\\/g}"
.endif
-.PHONY: config
.if !target(config)
config:
.if !defined(OPTIONS)
@${ECHO_MSG} "===> No options to configure"
.else
.if ${OPTIONSFILE} != ${_OPTIONSFILE}
@${ECHO_MSG} "===> Using wrong configuration file ${_OPTIONSFILE}"
@exit 1
.endif
.if ${UID} != 0 && !defined(INSTALL_AS_USER)
@${ECHO_MSG} "===> Switching to root credentials to create `${DIRNAME} ${_OPTIONSFILE}`"
@(${SU_CMD} "${SH} -c \"${MKDIR} `${DIRNAME} ${_OPTIONSFILE}` 2> /dev/null\"") || \
(${ECHO_MSG} "===> Cannot create `${DIRNAME} ${_OPTIONSFILE}`, check permissions"; exit 1)
@${ECHO_MSG} "===> Returning to user credentials"
.else
@(${MKDIR} `${DIRNAME} ${_OPTIONSFILE}` 2> /dev/null) || \
(${ECHO_MSG} "===> Cannot create `${DIRNAME} ${_OPTIONSFILE}`, check permissions"; exit 1)
.endif
-@if [ -e ${_OPTIONSFILE} ]; then \
. ${_OPTIONSFILE}; \
fi; \
set ${OPTIONS} XXX; \
while [ $$# -gt 3 ]; do \
OPTIONSLIST="$${OPTIONSLIST} $$1"; \
defaultval=$$3; \
withvar=WITH_$$1; \
withoutvar=WITHOUT_$$1; \
withval=$$(eval ${ECHO_CMD} $$\{$${withvar}\}); \
withoutval=$$(eval ${ECHO_CMD} $$\{$${withoutvar}\}); \
if [ ! -z "$${withval}" ]; then \
val=on; \
elif [ ! -z "$${withoutval}" ]; then \
val=off; \
else \
val=$$3; \
fi; \
DEFOPTIONS="$${DEFOPTIONS} $$1 \"$$2\" $${val}"; \
shift 3; \
done; \
TMPOPTIONSFILE=$$(${MKTEMP} -t portoptions); \
trap "${RM} -f $${TMPOPTIONSFILE}; exit 1" 1 2 3 5 10 13 15; \
${SH} -c "${DIALOG} --checklist \"Options for ${PKGNAME:C/-([^-]+)$/ \1/}\" 21 70 15 $${DEFOPTIONS} 2> $${TMPOPTIONSFILE}"; \
status=$$?; \
if [ $${status} -ne 0 ] ; then \
${RM} -f $${TMPOPTIONSFILE}; \
${ECHO_MSG} "===> Options unchanged"; \
exit 0; \
fi; \
if [ ! -e ${TMPOPTIONSFILE} ]; then \
${ECHO_MSG} "===> No user-specified options to save for ${PKGNAME}"; \
exit 0; \
fi; \
SELOPTIONS=$$(${CAT} $${TMPOPTIONSFILE}); \
${RM} -f $${TMPOPTIONSFILE}; \
TMPOPTIONSFILE=$$(${MKTEMP} -t portoptions); \
trap "${RM} -f $${TMPOPTIONSFILE}; exit 1" 1 2 3 5 10 13 15; \
${ECHO_CMD} "# This file is auto-generated by 'make config'." > $${TMPOPTIONSFILE}; \
${ECHO_CMD} "# No user-servicable parts inside!" >> $${TMPOPTIONSFILE}; \
${ECHO_CMD} "# Options for ${PKGNAME}" >> $${TMPOPTIONSFILE}; \
${ECHO_CMD} "_OPTIONS_READ=${PKGNAME}" >> $${TMPOPTIONSFILE}; \
for i in $${OPTIONSLIST}; do \
${ECHO_CMD} $${SELOPTIONS} | ${GREP} -qw $${i}; \
if [ $$? -eq 0 ]; then \
${ECHO_CMD} WITH_$${i}=true >> $${TMPOPTIONSFILE}; \
else \
${ECHO_CMD} WITHOUT_$${i}=true >> $${TMPOPTIONSFILE}; \
fi; \
done; \
if [ `${ID} -u` != 0 -a "x${INSTALL_AS_USER}" = "x" ]; then \
${ECHO_MSG} "===> Switching to root credentials to write ${_OPTIONSFILE}"; \
${SU_CMD} "${CAT} $${TMPOPTIONSFILE} > ${_OPTIONSFILE}"; \
${ECHO_MSG} "===> Returning to user credentials"; \
else \
${CAT} $${TMPOPTIONSFILE} > ${_OPTIONSFILE}; \
fi; \
${RM} -f $${TMPOPTIONSFILE}
.endif
.endif
-.PHONY: showconfig
.if !target(showconfig)
showconfig:
.if defined(OPTIONS) && exists(${_OPTIONSFILE})
@${ECHO_MSG} "===> The following configuration options are set for ${PKGNAME}:"
-@if [ -e ${_OPTIONSFILE} ]; then \
. ${_OPTIONSFILE}; \
fi; \
set ${OPTIONS} XXX; \
while [ $$# -gt 3 ]; do \
defaultval=$$3; \
withvar=WITH_$$1; \
withoutvar=WITHOUT_$$1; \
withval=$$(eval ${ECHO_CMD} $$\{$${withvar}\}); \
withoutval=$$(eval ${ECHO_CMD} $$\{$${withoutvar}\}); \
if [ ! -z "$${withval}" ]; then \
val=on; \
elif [ ! -z "$${withoutval}" ]; then \
val=off; \
else \
val="$$3 (default)"; \
fi; \
${ECHO_MSG} " $$1=$${val} \"$$2\""; \
shift 3; \
done
.else
@${ECHO_MSG} "===> No configuration options are set for this port"
.if defined(OPTIONS)
@${ECHO_MSG} " Use 'make config' to set default values"
.endif
.endif
.endif
-.PHONY: rmconfig
.if !target(rmconfig)
rmconfig:
.if defined(OPTIONS) && exists(${_OPTIONSFILE})
-@${ECHO_MSG} "===> Removing user-configured options for ${PKGNAME}"; \
if [ `${ID} -u` != 0 -a "x${INSTALL_AS_USER}" = "x" ]; then \
${ECHO_MSG} "===> Switching to root credentials to remove ${_OPTIONSFILE} and `${DIRNAME} ${_OPTIONSFILE}`"; \
${SU_CMD} "${RM} -f ${_OPTIONSFILE} ; \
${RMDIR} `${DIRNAME} ${_OPTIONSFILE}`"; \
${ECHO_MSG} "===> Returning to user credentials"; \
else \
${RM} -f ${_OPTIONSFILE}; \
${RMDIR} `${DIRNAME} ${_OPTIONSFILE}`; \
fi
.else
@${ECHO_MSG} "===> No user-specified options configured for ${PKGNAME}"
.endif
.endif
Property changes on: head/devel/portmk/Mk/bsd.port.post.mk
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.3
\ No newline at end of property
+1.4
\ No newline at end of property
Index: head/devel/portmk/Mk/bsd.port.pre.mk
===================================================================
--- head/devel/portmk/Mk/bsd.port.pre.mk (revision 113826)
+++ head/devel/portmk/Mk/bsd.port.pre.mk (revision 113827)
@@ -1,406 +1,410 @@
#-*- mode: makefile; tab-width: 4; -*-
# ex:ts=4
#
# $FreeBSD$
#
-PORTMK_VERSION= 20040705
+PORTMK_VERSION= 20040717
.if defined(_PREMKINCLUDED)
check-makefile::
@${ECHO_CMD} "${PKGNAME}: Makefile error: you cannot include bsd.port[.pre].mk twice"
@${FALSE}
.endif
_PREMKINCLUDED= yes
AWK?= /usr/bin/awk
BASENAME?= /usr/bin/basename
BRANDELF?= /usr/bin/brandelf
.if exists(/usr/bin/bzip2)
BZCAT?= /usr/bin/bzcat
BZIP2_CMD?= /usr/bin/bzip2
.else
BZCAT?= ${LOCALBASE}/bin/bzcat
BZIP2_CMD?= ${LOCALBASE}/bin/bzip2
BZIP2DEPENDS= yes
.endif
CAT?= /bin/cat
CHGRP?= /usr/bin/chgrp
CHMOD?= /bin/chmod
CHOWN?= /usr/sbin/chown
CHROOT?= /usr/sbin/chroot
COMM?= /usr/bin/comm
CP?= /bin/cp
CPIO?= /usr/bin/cpio
CUT?= /usr/bin/cut
DATE?= /bin/date
DC?= /usr/bin/dc
DIALOG?= /usr/bin/dialog
DIRNAME?= /usr/bin/dirname
EGREP?= /usr/bin/egrep
EXPR?= /bin/expr
FALSE?= false # Shell builtin
FILE?= /usr/bin/file
FIND?= /usr/bin/find
FMT?= /usr/bin/fmt
GREP?= /usr/bin/grep
GUNZIP_CMD?= /usr/bin/gunzip -f
GZCAT?= /usr/bin/gzcat
GZIP?= -9
GZIP_CMD?= /usr/bin/gzip -nf ${GZIP}
HEAD?= /usr/bin/head
ID?= /usr/bin/id
IDENT?= /usr/bin/ident
LDCONFIG?= /sbin/ldconfig
LN?= /bin/ln
LS?= /bin/ls
MKDIR?= /bin/mkdir -p
MKTEMP?= /usr/bin/mktemp
MV?= /bin/mv
OBJCOPY?= /usr/bin/objcopy
OBJDUMP?= /usr/bin/objdump
PASTE?= /usr/bin/paste
PAX?= /bin/pax
PRINTF?= /usr/bin/printf
REALPATH?= /bin/realpath
RM?= /bin/rm
RMDIR?= /bin/rmdir
SED?= /usr/bin/sed
SETENV?= /usr/bin/env
SH?= /bin/sh
SORT?= /usr/bin/sort
STRIP_CMD?= /usr/bin/strip
SU_CMD?= /usr/bin/su root -c
TAIL?= /usr/bin/tail
TEST?= test # Shell builtin
TR?= /usr/bin/tr
TRUE?= true # Shell builtin
UNAME?= /usr/bin/uname
.if exists(/usr/bin/unzip)
UNZIP_CMD?= /usr/bin/unzip
.else
UNZIP_CMD?= ${LOCALBASE}/bin/unzip
ZIPDEPENDS= yes
.endif
WHICH?= /usr/bin/which
XARGS?= /usr/bin/xargs
YACC?= /usr/bin/yacc
+.if !defined(UID)
+UID!= ${ID} -u
+.endif
+
# ECHO is defined in /usr/share/mk/sys.mk, which can either be "echo",
# or "true" if the make flag -s is given. Use ECHO_CMD where you mean
# the echo command.
ECHO_CMD?= echo # Shell builtin
# Used to print all the '===>' style prompts - override this to turn them off.
ECHO_MSG?= ${ECHO_CMD}
# Get the architecture
.if !defined(ARCH)
ARCH!= ${UNAME} -p
.endif
# Kludge for pre-3.0 systems
MACHINE_ARCH?= i386
# Get the operating system type
.if !defined(OPSYS)
OPSYS!= ${UNAME} -s
.endif
# Get the operating system revision
.if !defined(OSREL)
OSREL!= ${UNAME} -r | ${SED} -e 's/[-(].*//'
.endif
# Get __FreeBSD_version
.if !defined(OSVERSION)
.if exists(/sbin/sysctl)
OSVERSION!= /sbin/sysctl -n kern.osreldate
.else
OSVERSION!= /usr/sbin/sysctl -n kern.osreldate
.endif
.endif
# Get the object format.
.if !defined(PORTOBJFORMAT)
PORTOBJFORMAT!= ${TEST} -x /usr/bin/objformat && /usr/bin/objformat || ${ECHO_CMD} aout
.endif
MASTERDIR?= ${.CURDIR}
PORTMK_CONF?= /etc/portmk.conf
.if exists(${PORTMK_CONF})
.include "${PORTMK_CONF}"
.endif
# If they exist, include Makefile.inc, then architecture/operating
# system specific Makefiles, then local Makefile.local.
.if ${MASTERDIR} != ${.CURDIR} && exists(${.CURDIR}/../Makefile.inc)
.include "${.CURDIR}/../Makefile.inc"
USE_SUBMAKE= yes
.endif
.if exists(${MASTERDIR}/../Makefile.inc)
.include "${MASTERDIR}/../Makefile.inc"
USE_SUBMAKE= yes
.endif
.if exists(${MASTERDIR}/Makefile.${ARCH}-${OPSYS})
.include "${MASTERDIR}/Makefile.${ARCH}-${OPSYS}"
USE_SUBMAKE= yes
.elif exists(${MASTERDIR}/Makefile.${OPSYS})
.include "${MASTERDIR}/Makefile.${OPSYS}"
USE_SUBMAKE= yes
.elif exists(${MASTERDIR}/Makefile.${ARCH})
.include "${MASTERDIR}/Makefile.${ARCH}"
USE_SUBMAKE= yes
.endif
.if exists(${MASTERDIR}/Makefile.local)
.include "${MASTERDIR}/Makefile.local"
USE_SUBMAKE= yes
.endif
# where 'make config' records user configuration options
PORT_DBDIR?= /var/db/ports
.if defined(LATEST_LINK)
UNIQUENAME?= ${LATEST_LINK}
.else
UNIQUENAME?= ${PKGNAMEPREFIX}${PORTNAME}
.endif
OPTIONSFILE?= ${PORT_DBDIR}/${UNIQUENAME}/options
_OPTIONSFILE!= ${ECHO_CMD} "${OPTIONSFILE}"
-.if defined(OPTIONS)
+.if defined(OPTIONS) && !defined(_OPTIONSNG_READ)
.if exists(${_OPTIONSFILE}) && !make(rmconfig)
.include "${_OPTIONSFILE}"
.endif
.if exists(${_OPTIONSFILE}.local)
.include "${_OPTIONSFILE}.local"
.endif
.endif
# check for old, crufty, makefile types, part 1:
.if !defined(PORTNAME) || !defined(PORTVERSION) || defined(PKGNAME)
check-makefile::
@${ECHO_CMD} "Makefile error: you need to define PORTNAME and PORTVERSION instead of PKGNAME."
@${ECHO_CMD} "(This port is too old for your bsd.port.mk, please update it to match"
@${ECHO_CMD} " your bsd.port.mk.)"
@${FALSE}
.endif
.if defined(PORTVERSION)
.if ${PORTVERSION:M*[-_,]*}x != x
BROKEN= "PORTVERSION ${PORTVERSION} may not contain '-' '_' or ','"
.endif
.endif
PORTREVISION?= 0
.if ${PORTREVISION} != 0
_SUF1= _${PORTREVISION}
.endif
PORTEPOCH?= 0
.if ${PORTEPOCH} != 0
_SUF2= ,${PORTEPOCH}
.endif
# check for old, crufty, makefile types, part 2. The "else" case
# should have been handled in part 1, above.
.if !defined(PKGNAME)
PKGNAME= ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION:C/[-_,]/./g}${_SUF1}${_SUF2}
.endif
DISTNAME?= ${PORTNAME}-${PORTVERSION}
# These need to be absolute since we don't know how deep in the ports
# tree we are and thus can't go relative. They can, of course, be overridden
# by individual Makefiles or local system make configuration.
PORTSDIR?= /usr/ports
-LOCALBASE?= ${DESTDIR}/usr/local
-X11BASE?= ${DESTDIR}/usr/X11R6
-LINUXBASE?= ${DESTDIR}/compat/linux
+LOCALBASE?= /usr/local
+X11BASE?= /usr/X11R6
+LINUXBASE?= /compat/linux
DISTDIR?= ${PORTSDIR}/distfiles
_DISTDIR?= ${DISTDIR}/${DIST_SUBDIR}
.if ${OSVERSION} >= 500036
INDEXFILE?= INDEX-5
.else
INDEXFILE?= INDEX
.endif
.if defined(USE_BZIP2)
EXTRACT_SUFX?= .tar.bz2
.elif defined(USE_ZIP)
EXTRACT_SUFX?= .zip
.else
EXTRACT_SUFX?= .tar.gz
.endif
PACKAGES?= ${PORTSDIR}/packages
TEMPLATES?= ${PORTSDIR}/Templates
.if (!defined(PKGDIR) && exists(${MASTERDIR}/pkg/DESCR)) || \
(!defined(MD5_FILE) && exists(${MASTERDIR}/files/md5))
check-makefile::
@${ECHO_CMD} "Makefile error: your port uses an old layout. Please update it to match this bsd.port.mk. If you have updated your ports collection via cvsup and are still getting this error, see Q12 and Q13 in the cvsup FAQ on http://www.polstra.com for further information."
@${FALSE}
.endif
PATCHDIR?= ${MASTERDIR}/files
FILESDIR?= ${MASTERDIR}/files
SCRIPTDIR?= ${MASTERDIR}/scripts
PKGDIR?= ${MASTERDIR}
.if defined(USE_IMAKE) && !defined(USE_X_PREFIX)
USE_X_PREFIX= yes
.endif
.if defined(USE_X_PREFIX) && ${USE_X_PREFIX} == "no"
.undef USE_X_PREFIX
.endif
.if defined(USE_X_PREFIX)
USE_XLIB= yes
.endif
.if defined(USE_LINUX_PREFIX)
USE_LINUX= yes
.endif
.if defined(USE_X_PREFIX)
PREFIX?= ${X11BASE}
.elif defined(USE_LINUX_PREFIX)
PREFIX?= ${LINUXBASE}
NO_MTREE= yes
.else
PREFIX?= ${LOCALBASE}
.endif
PKGCOMPATDIR?= ${LOCALBASE}/lib/compat/pkg
.if defined(WITH_APACHE2)
APACHE_PORT?= www/apache2
.else
APACHE_PORT?= www/apache13
.endif
APXS?= ${LOCALBASE}/sbin/apxs
.if defined(USE_APACHE)
BUILD_DEPENDS+= ${APXS}:${PORTSDIR}/${APACHE_PORT}
RUN_DEPENDS+= ${APXS}:${PORTSDIR}/${APACHE_PORT}
.endif
.if ${OSVERSION} >= 502100
PERL_VERSION?= 5.8.4
PERL_VER?= 5.8.4
.else
.if ${OSVERSION} >= 500032
PERL_VERSION?= 5.6.1
PERL_VER?= 5.6.1
.else
.if ${OSVERSION} >= 500007
PERL_VERSION?= 5.6.0
PERL_VER?= 5.6.0
.else
.if ${OSVERSION} >= 300000
PERL_VERSION?= 5.00503
.else
PERL_VERSION?= 5.00502
.endif
PERL_VER?= 5.005
.endif
.endif
.endif
.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)
.if ${PERL_LEVEL} >= 500600
PERL_ARCH?= mach
.else
PERL_ARCH?= ${ARCH}-freebsd
.endif
.if ${PERL_LEVEL} >= 500800
PERL_PORT?= perl5.8
.else
PERL_PORT?= perl5
.endif
SITE_PERL_REL?= lib/perl5/site_perl/${PERL_VER}
SITE_PERL?= ${LOCALBASE}/${SITE_PERL_REL}
.if ${PERL_LEVEL} < 500600
PERL5= /usr/bin/perl${PERL_VERSION}
PERL= /usr/bin/perl
.else
PERL5= ${LOCALBASE}/bin/perl${PERL_VERSION}
PERL= ${LOCALBASE}/bin/perl
.endif
# XXX: (not yet): .if defined(USE_AUTOTOOLS)
# .include "${PORTSDIR}/Mk/bsd.autotools.mk"
# XXX: (not yet): .endif
.if defined(USE_OPENSSL)
.include "${PORTSDIR}/Mk/bsd.openssl.mk"
.endif
.if defined(EMACS_PORT_NAME)
.include "${PORTSDIR}/Mk/bsd.emacs.mk"
.endif
.if defined(USE_GNUSTEP)
.include "${PORTSDIR}/Mk/bsd.gnustep.mk"
.endif
.if defined(USE_PHP)
.include "${PORTSDIR}/Mk/bsd.php.mk"
.endif
.if defined(USE_PYTHON)
.include "${PORTSDIR}/Mk/bsd.python.mk"
.endif
.if defined(USE_JAVA)
.include "${PORTSDIR}/Mk/bsd.java.mk"
.endif
.if defined(USE_RUBY) || defined(USE_LIBRUBY)
.include "${PORTSDIR}/Mk/bsd.ruby.mk"
.endif
.if defined(USE_QT) || defined(USE_QT2) || defined(USE_QT_VER) || defined(USE_KDELIBS_VER) || defined(USE_KDEBASE_VER)
.include "${PORTSDIR}/Mk/bsd.kde.mk"
.endif
.if defined(WANT_GNOME) || defined(USE_GNOME) || defined(USE_GTK)
.include "${PORTSDIR}/Mk/bsd.gnome.mk"
.endif
.if defined(USE_SDL) || defined(WANT_SDL)
.include "${PORTSDIR}/Mk/bsd.sdl.mk"
.endif
# defaults to 4.x for 5.0-CURRENT and 4.5-STABLE; and 3.3.6 for all other branches
.if ${OSVERSION} > 500025 || ( ${OSVERSION} >= 450005 && ${OSVERSION} < 500000 )
XFREE86_VERSION?= 4
.else
XFREE86_VERSION?= 3
.endif
# Location of mounted CDROM(s) to search for files
CD_MOUNTPTS?= /cdrom ${CD_MOUNTPT}
WANT_OPENLDAP_VER?= 22
# Owner and group of the WWW user
WWWOWN?= www
WWWGRP?= www
Property changes on: head/devel/portmk/Mk/bsd.port.pre.mk
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.2
\ No newline at end of property
+1.3
\ No newline at end of property
Index: head/devel/portmk/files/Features
===================================================================
--- head/devel/portmk/files/Features (revision 113826)
+++ head/devel/portmk/files/Features (revision 113827)
@@ -1,66 +1,80 @@
In case you need to fall back to the old routines, just build the port with `omake'.
* completely rewritten do-fetch/checksum/makesum/fetch-list targets:
- sort MASTER_SITES by distance or latency
To fetch from the nearest mirrors first, install port net/p5-Geo-IP and put
MASTER_SORT_GEOIP=yes
CC_HOME=eu
in /etc/portmk.conf. The first time fetching may stall for about ten seconds, since all sites must be looked up first. Subsequent fetches should be *much* faster.
To fetch from the side with the smallest measured latency, install perl and port net/fping and add
MASTER_SORT_FPING=yes
to /etc/portmk.conf
- refetch from multiple mirrors in case of a checksum mismatch (up to FETCH_REGET times)
Instead of trying the same mirror (which might have a corrupt distfile) twice.
- randomize MASTER_SITES by default (disable with KEEP_MASTER_SITE_ORDER)
- new targets `missing-size' and `missing-recursive-size': calculate size of missing distribution files
Type
make missing-recursive-size
to check how many files you have to fetch to build the current port. To check how many files a port with subports needs overall, including files already on your local disk, do
make DISTDIR=/nonexistent missing-recursive-size
- new target checkdistsites, a brute-force distfile survery for home use,
use with NO_CHECKSUM to just verify the sizes without downloading the files
NO_CHECKSUM currently works only with fetch, not wget or curl. Try
make NO_CHECKSUM=yes checkdistsites
to verify whether your distfiles are fetchable from every site.
- support for integrating distinfo into the ports Makefile via `migratesum' (experimental,
multiple integrated distinfo files could be distinguised by DISTINFO_LABEL)
- support for SHA1 and RMD160 checksums
- support for MASTER_SITES that don't end with a slash
- support to substitute %FILE% in MASTER_SITES with the distfiles name
Useful for sites that have ...?file=xxx&download=true or cvsweb style download sites
- fetch with curl or wget with FETCH_USE_CURL and FETCH_USE_WGET (requires installed curl or wget)
For people behind firewalls that need the extended capabilities. Be aware that some extra features (like size checking) are currently not availible with those download clients.
-- eliminated the master-site-{all,ALL,default,DEFAULT,*} targets, since they are of little use
+* next generation options handling (work in progress)
-In case someone needs them, I can add them back again.
+- only prototype functionality is available
+
+- saved configuration affects clean, describe etc.
+
+- the port is build with the correct default options when not configured
+
+- honours options given on the command line, so that portupgrade et al still work
+
+- custom configurations are available before bsd.port.pre.mk is included
+
+- completely unintrusive, a port doesn't need to be configured when the defaults are acceptable
+
+* ability to build packages without the need to install a port (work in progress)
+
+- not available yet
Property changes on: head/devel/portmk/files/Features
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.1
\ No newline at end of property
+1.2
\ No newline at end of property
Index: head/devel/portmk/files/KnownIssues
===================================================================
--- head/devel/portmk/files/KnownIssues (revision 113826)
+++ head/devel/portmk/files/KnownIssues (revision 113827)
@@ -1,3 +1,2 @@
-* List of ports that fail to fetch/build with portmk, but build with a `stck' bsd.port.mk:
+* List of ports that fail to fetch/build with portmk, but build with a `stock' bsd.port.mk:
-* `make NO_CHECKSUM=yes checkdistsites' failes when FETCH_USE_WGET or FETCH_USE_CURL is set
Property changes on: head/devel/portmk/files/KnownIssues
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.1
\ No newline at end of property
+1.2
\ No newline at end of property
Index: head/devel/portmk/scripts/options.pl
===================================================================
--- head/devel/portmk/scripts/options.pl (nonexistent)
+++ head/devel/portmk/scripts/options.pl (revision 113827)
@@ -0,0 +1,373 @@
+#!/usr/bin/perl -w
+#
+# Copyright (c) 2004 Oliver Eikemeier. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright notice
+# this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the author nor the names of its contributors may be
+# used to endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+# MAINTAINER= eik@FreeBSD.org
+#
+
+require 5.005;
+use strict;
+use Getopt::Std;
+
+my $pkgname;
+
+my %description;
+my %values;
+my @order;
+my @section;
+my %haswithout;
+my %hasoverride;
+my %default;
+my %value;
+my $isoverride;
+my $isedit;
+
+sub parsemaster {
+ my $currdesc;
+ my ($master) = @_;
+
+ -r $master
+ or return 1;
+
+ open MASTER, "<$master"
+ or die "Can't read $master: $!\n";
+
+ push @section, "Configurable options for $pkgname";
+ push @order, $#section;
+ $description{0} = [];
+
+ while() {
+ chomp;
+ last if /^##/;
+ next if /^#?\s*$/;
+ if (/^#!\s*(.*)$/) {
+ if ($1 =~ /MAIN/i) {
+ $currdesc = \@{$description{0}};
+ }
+ else {
+ push @section, $1;
+ $currdesc = \@{$description{$#section}};
+ push @order, $#section;
+ }
+ }
+ elsif(/^#WITH(OUT)?_([A-Z][A-Z0-9_]*)(?:=\s*(.*))?$/) {
+ my ($without, $name, $val) = ($1, $2, $3);
+ if (defined $values{$name}) {
+ print STDERR ">> $pkgname: Duplicate parameter $name at $master line $.: $_.\n";
+ next;
+ }
+ if (defined $val) {
+ my @v;
+ foreach my $r (split /,\s*/, $val) {
+ $r =~ s/\s+$//;
+ if (length $r > 0) {
+ push @v, $r;
+ $haswithout{$name} = 1
+ if $r =~ /^(?:no|none|off|false)$/i;
+ }
+ }
+ if ($#v == -1 || $#v == 0 && $v[0] =~ /^auto$/i) {
+ push @v, qw(yes no);
+ $haswithout{$name} = 1;
+ }
+ $values{$name} = \@v;
+ $default{$name} = defined $without && $haswithout{$name} ? 'no' : $values{$name}->[0];
+ }
+ else {
+ @{$values{$name}} = qw(yes no);
+ $haswithout{$name} = 1;
+ $default{$name} = defined $without ? 'no' : 'yes';
+ }
+ $currdesc = \@{$description{$name}};
+ push @order, $name;
+ }
+ elsif (/^# (.*)$/) {
+ push @{$currdesc}, $1
+ if defined $currdesc;
+ }
+ elsif (/^##$/) {
+ last;
+ }
+ else {
+ print STDERR ">> $pkgname: Parse error at $master line $.: $_.\n"
+ }
+ }
+ close MASTER;
+}
+
+sub parseoverride {
+ my $currdesc;
+ my ($override) = @_;
+
+ -r $override
+ or return 1;
+
+ open OVERRIDE, "<$override"
+ or die "Can't read $override: $!\n";
+
+ while() {
+ chomp;
+ last if /^##/;
+ next if /^#?\s*$/;
+ next if /^#\s*\$FreeBSD/;
+ if (/^#!/) {
+ undef $currdesc;
+ }
+ elsif(/^#WITH(OUT)?_([A-Z][A-Z0-9_]*)(?:=\s*(.*))?$/) {
+ my ($without, $name, $val) = ($1, $2, $3);
+ if (!defined $values{$name}) {
+ print STDERR ">> $pkgname: Override parameter $name not in master file.\n";
+ next;
+ }
+ if (defined $val) {
+ my @v;
+ foreach my $r (split /,\s*/, $val) {
+ $r =~ s/\s+$//;
+ if (length $r > 0) {
+ push @v, $r;
+ $haswithout{$name} = 1
+ if $r =~ /^(?:no|none|off|false)$/i;
+ }
+ }
+ if ($#v == -1 || $#v == 0 && $v[0] =~ /^auto$/i) {
+ push @v, qw(yes no);
+ $haswithout{$name} = 1;
+ }
+ $values{$name} = \@v;
+ $default{$name} = defined $without && $haswithout{$name} ? 'no' : $values{$name}->[0];
+ }
+ else {
+ @{$values{$name}} = qw(yes no);
+ $haswithout{$name} = 1;
+ $default{$name} = defined $without ? 'no' : 'yes';
+ }
+ delete $description{$name};
+ $currdesc = \@{$description{$name}};
+ $hasoverride{$name} = 1;
+ }
+ elsif (/^# (.*)$/) {
+ push @{$currdesc}, $1
+ if defined $currdesc;
+ }
+ elsif (/^##$/) {
+ last;
+ }
+ else {
+ print STDERR ">> $pkgname: Parse error at $override line $.: $_.\n"
+ }
+ }
+ close OVERRIDE;
+
+ $isoverride = 1;
+}
+
+sub parseoptions {
+ my ($options) = @_;
+ -r $options
+ or return 1;
+ open OPTIONS, "<$options"
+ or die "Can't open $options: $!\n";
+ while () {
+ chomp;
+ next if /^(:?#|\s*$)/;
+ next if /^_OPTIONS/;
+ next if /^\./;
+ if (/^WITH(OUT)?_([A-Z][A-Z0-9_]*)\??=(.*)$/) {
+ my ($without, $name, $val) = ($1, $2, $3);
+ next if !defined $values{$name};
+ next if defined $value{$name};
+ if (defined $without) {
+ $value{$name} = 'no';
+ }
+ else {
+ $value{$name} = $val;
+ }
+ }
+ else {
+ print STDERR ">> $pkgname: Parse error at $options line $.: $_\n";
+ }
+ }
+}
+
+sub parseeditoptions {
+ my ($options) = @_;
+ -r $options
+ or return 1;
+ open OPTIONS, "<$options"
+ or die "Can't open $options: $!\n";
+ while () {
+ chomp;
+ s/\s*#.*$//;
+ next if /^$/;
+ if (/^([A-Z][A-Z0-9_]*)\s*=\s*(.*)$/) {
+ my ($name, $val) = ($1, $2);
+ next if !defined $values{$name};
+ next if $#{$values{$name}} == 0 && $values{$name}->[0] =~ /^ignore$/i;
+ next if $isoverride && $#{$values{$name}} == 0;
+ my $candidate;
+ foreach my $c (@{$values{$name}}) {
+ if ($c eq '*' || $c eq $val) {
+ $candidate = $val;
+ last;
+ }
+ elsif (lc $c eq lc $val) {
+ $candidate = $c;
+ }
+ elsif ($c eq 'yes' && $val =~ /^(?:y|yes|on|t|true)$/i) {
+ $candidate = $c;
+ }
+ elsif ($c eq 'no' && $val =~ /^(?:n|no|off|f|false)$/i) {
+ $candidate = $c;
+ }
+ }
+ $value{$name} = $candidate
+ if defined $candidate;
+ }
+ else {
+ print STDERR ">> $pkgname: Parse error at $options line $.: $_\n";
+ }
+ }
+ $isedit = 1;
+}
+
+sub print_editoptions {
+ foreach my $name (@order) {
+ if ($name =~ /^\d/) {
+ my $headline;
+ foreach (1..length $section[$name]) {
+ $headline .= "#";
+ }
+ print "##$headline##\n";
+ print "# $section[$name] #\n";
+ print "##$headline##\n";
+ print @{$description{$name}} ? "#\n" : "\n";
+ }
+ else {
+ my $val = $default{$name};
+ next if $#{$values{$name}} == 0 && $values{$name}->[0] =~ /^ignore$/i;
+ if (defined $value{$name} && !($isoverride && $#{$values{$name}} == 0)) {
+ $val = $value{$name};
+ }
+ print "$name=", $val,
+ " # valid values: ", join(", ", @{$values{$name}}), "\n";
+ }
+ if (@{$description{$name}}) {
+ foreach (@{$description{$name}}) {
+ if ($_ eq '.') {
+ print "#\n";
+ }
+ elsif ($_ =~ /^#/) {
+ print "#$_\n";
+ }
+ else {
+ print "# $_\n";
+ }
+ }
+ print "\n";
+ }
+ }
+}
+
+sub print_dialogoptions {
+ foreach my $name (@order) {
+ next if $name =~ /^\d/;
+ next if !$isedit && $isoverride && !$hasoverride{$name};
+ next if !$isedit && $#{$values{$name}} == 0 && $values{$name}->[0] =~ /^ignore$/i;
+ my $val = defined $value{$name} ? $value{$name} : $default{$name};
+ next if $val ne 'yes' && $val ne 'no';
+ $val = $val eq 'yes' ? 'On' : 'Off';
+ my $desc = join ' ', @{$description{$name}};
+ $desc = "$name support"
+ if !$desc;
+ $desc =~ s/\. .*//;
+ $desc = substr($desc, 0, 38) . '...'
+ if length $desc > 41;
+ $desc =~ s/["\$]/\\&/g;
+ print ' ', $name, ' "', $desc, '" ', $val;
+ }
+ print "\n";
+}
+
+sub print_options {
+ print "_OPTIONSNG_READ?=$pkgname\n";
+ foreach my $name (@order) {
+ next if $name =~ /^\d/;
+ next if !$isedit && $isoverride && !$hasoverride{$name};
+ next if !$isedit && $#{$values{$name}} == 0 && $values{$name}->[0] =~ /^ignore$/i;
+ my $val = defined $value{$name} ? $value{$name} : $default{$name};
+ if ($haswithout{$name}) {
+ if ($val =~ /^(no|none|off|false)$/i) {
+ print ".undef WITH_$name\n"
+ if (!$isedit && $isoverride && $#{$values{$name}} == 0);
+ print ".ifndef WITH_$name\n";
+ print "WITHOUT_$name?=yes\n";
+ print ".endif\n";
+ }
+ else {
+ print ".undef WITHOUT_$name\n"
+ if (!$isedit && $isoverride && $#{$values{$name}} == 0);
+ print ".ifndef WITHOUT_$name\n";
+ print "WITH_$name?=$val\n";
+ print ".endif\n";
+ }
+ }
+ else {
+ print "WITH_$name?=$val\n";
+ }
+ }
+}
+
+my %opts;
+
+getopts('p:M:O:g:t:edo', \%opts);
+
+$pkgname = defined $opts{p} ? $opts{p} : "anonyous";
+
+parsemaster $opts{M}
+ if defined $opts{M};
+
+parseoverride $opts{O}
+ if defined $opts{O};
+
+parseoptions $opts{g}
+ if defined $opts{g};
+
+parseeditoptions $opts{t}
+ if defined $opts{t};
+
+print_editoptions
+ if $opts{e};
+
+print_dialogoptions
+ if $opts{d};
+
+print_options
+ if $opts{o};
Property changes on: head/devel/portmk/scripts/options.pl
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+FreeBSD=%H
\ No newline at end of property
Index: head/devel/portmk/scripts/options.sh
===================================================================
--- head/devel/portmk/scripts/options.sh (nonexistent)
+++ head/devel/portmk/scripts/options.sh (revision 113827)
@@ -0,0 +1,293 @@
+#!/bin/sh -e
+#
+# Copyright (c) 2004 Oliver Eikemeier. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright notice
+# this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the author nor the names of its contributors may be
+# used to endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+# MAINTAINER= eik@FreeBSD.org
+#
+# These variables are referenced and must be exported from the Makefile:
+#
+# CURDIR
+# OBJDIR
+# MASTERDIR
+# OPTIONS_MASTER
+# OPTIONS_OVERRIDE
+# OPTIONS_FILE
+# OPTIONS_CMD
+# PKGNAME
+#
+
+# utilities
+
+LOCALBASE="${LOCALBASE:-/usr/local}"
+
+AWK=/usr/bin/awk
+CAT=/bin/cat
+CHMOD=/bin/chmod
+CP=/bin/cp
+CUT=/usr/bin/cut
+DIALOG=/usr/bin/dialog
+EXPR=/bin/expr
+FETCH=/usr/bin/fetch
+GREP=/usr/bin/grep
+LS=/bin/ls
+MKDIR='/bin/mkdir -p'
+MKTEMP=/usr/bin/mktemp
+MV=/bin/mv
+REALPATH=/bin/realpath
+RM=/bin/rm
+SED=/usr/bin/sed
+SETENV=/usr/bin/env
+SORT=/usr/bin/sort
+TR=/usr/bin/tr
+WC=/usr/bin/wc
+
+# global constants
+
+### utility functions ###
+
+###
+# do_create generates default options for a master (or override) options files
+###
+
+do_create()
+{
+ local rc
+
+ if [ -n "$OPTIONS_OVERRIDE" ]; then
+ OVERRIDEFILE="$OPTIONS_DEFAULT"
+ elif [ "$CURDIR" != `$REALPATH "$MASTERDIR"` ]; then
+ if [ -f "$CURDIR/options" ]; then
+ OVERRIDEFILE="$CURDIR/options"
+ elif [ -n "$PKGNAMESUFFIX" -a -f "$MASTERDIR/options.${PKGNAMESUFFIX#-}" ]; then
+ OVERRIDEFILE="$MASTERDIR/options.${PKGNAMESUFFIX#-}"
+ else
+ OVERRIDEFILE=
+ fi
+ else
+ OVERRIDEFILE=
+ fi
+
+ if [ -n "$OPTIONS_MASTER" ]; then
+ MASTERFILE="$OPTIONS_MASTER"
+ elif [ -f "$MASTERDIR/options" ]; then
+ MASTERFILE="$MASTERDIR/options"
+ else
+ echo ">> makeconfig: Can't find $MASTERDIR/options" >&2
+ return 1
+ fi
+
+ if [ -n "$OVERRIDEFILE" ]; then
+ SRCFILE="$OVERRIDEFILE"
+ else
+ SRCFILE="$MASTERFILE"
+ fi
+
+ if ! TMP_OPTIONS=`$MKTEMP -q "$SRCFILE.XXXXXX"`; then
+ echo ">> makeconfig: Can't create temporary options file"
+ return 1
+ fi
+
+ $SED -e '/^##/,$d' "$SRCFILE" > "$TMP_OPTIONS"
+
+ echo "## AUTOMATICALLY GENERATED FILE - DO NOT CHANGE ANYTHING BELOW THIS LINE ##" >> "$TMP_OPTIONS"
+ echo "# use \`make config' to edit the local configuration" >> "$TMP_OPTIONS"
+ echo "# use \`make makeconfig' to edit the defaults (MAINTAINER only)" >> "$TMP_OPTIONS"
+ echo >> "$TMP_OPTIONS"
+
+ if $OPTIONS_CMD -p "default" -M "$MASTERFILE" -O "$OVERRIDEFILE" -o >> "$TMP_OPTIONS"; then
+ $MV -f "$TMP_OPTIONS" "$SRCFILE"
+ $CHMOD a+r "$SRCFILE"
+ else
+ $RM -f "$TMP_OPTIONS"
+ fi
+
+ return $rc
+}
+
+###
+# do_delete removes a saved configuration
+###
+
+do_delete()
+{
+ local rc
+
+ $RM -f "$OPTIONS_FILE"
+
+ return $rc
+}
+
+###
+# do_edit edits a custom configuration
+###
+
+do_edit()
+{
+ local rc
+
+ if [ -n "$OPTIONS_OVERRIDE" ]; then
+ OVERRIDE="$OPTIONS_DEFAULT"
+ elif [ "$CURDIR" != `$REALPATH "$MASTERDIR"` ]; then
+ if [ -f "$CURDIR/options" ]; then
+ OVERRIDE="$CURDIR/options"
+ elif [ -n "$PKGNAMESUFFIX" -a -f "$MASTERDIR/options.${PKGNAMESUFFIX#-}" ]; then
+ OVERRIDE="$MASTERDIR/options.${PKGNAMESUFFIX#-}"
+ else
+ OVERRIDE=
+ fi
+ else
+ OVERRIDE=
+ fi
+
+ if [ -n "$OPTIONS_MASTER" ]; then
+ MASTER="$OPTIONS_MASTER"
+ elif [ -f "$MASTERDIR/options" ]; then
+ MASTER="$MASTERDIR/options"
+ else
+ echo ">> makeconfig: Can't find $MASTERDIR/options" >&2
+ return 1
+ fi
+
+ TMP_OPTIONS=`$MKTEMP -t options`
+
+ $OPTIONS_CMD -p "$PKGNAME" -M "$MASTER" -O "$OVERRIDE" -g "$OPTIONS_FILE" -e > "$TMP_OPTIONS"
+
+ ${EDITOR:-/usr/bin/vi} "$TMP_OPTIONS"
+
+ TMP_OPTIONS_FILE=`$MKTEMP -q "$OPTIONS_FILE.XXXXXX"`
+ echo "## AUTOMATICALLY GENERATED FILE - DO NOT EDIT ##" > "$TMP_OPTIONS_FILE"
+ $OPTIONS_CMD -p "$PKGNAME" -M "$MASTER" -O "$OVERRIDE" -g "$OPTIONS_FILE" -t "$TMP_OPTIONS" -o >> "$TMP_OPTIONS_FILE"
+ $RM -f "$TMP_OPTIONS"
+
+ $MV -f "$TMP_OPTIONS_FILE" "$OPTIONS_FILE"
+ $CHMOD a+r "$OPTIONS_FILE"
+
+ return $rc
+}
+
+###
+# do_graphical displays a menu to generate a custom configuration
+###
+
+do_graphical()
+{
+ local rc
+
+ if [ -n "$OPTIONS_OVERRIDE" ]; then
+ OVERRIDE="$OPTIONS_DEFAULT"
+ elif [ "$CURDIR" != `$REALPATH "$MASTERDIR"` ]; then
+ if [ -f "$CURDIR/options" ]; then
+ OVERRIDE="$CURDIR/options"
+ elif [ -n "$PKGNAMESUFFIX" -a -f "$MASTERDIR/options.${PKGNAMESUFFIX#-}" ]; then
+ OVERRIDE="$MASTERDIR/options.${PKGNAMESUFFIX#-}"
+ else
+ OVERRIDE=
+ fi
+ else
+ OVERRIDE=
+ fi
+
+ if [ -n "$OPTIONS_MASTER" ]; then
+ MASTER="$OPTIONS_MASTER"
+ elif [ -f "$MASTERDIR/options" ]; then
+ MASTER="$MASTERDIR/options"
+ else
+ echo ">> makeconfig: Can't find $MASTERDIR/options" >&2
+ return 1
+ fi
+
+ TMP_OPTIONS=`$MKTEMP -t options`
+
+ DIALOGRC=`$OPTIONS_CMD -p "$PKGNAME" -M "$MASTER" -O "$OVERRIDE" -g "$OPTIONS_FILE" -d`
+
+ /bin/sh -c "$DIALOG --checklist \"Options for $PKGNAME\" 21 70 15 $DIALOGRC 2>\"$TMP_OPTIONS\""
+
+ #TMP_OPTIONS_FILE=`$MKTEMP -q "$OPTIONS_FILE.XXXXXX"`
+ #echo "## AUTOMATICALLY GENERATED FILE - DO NOT EDIT ##" > "$TMP_OPTIONS_FILE"
+ #$OPTIONS_CMD -p "$PKGNAME" -M "$MASTER" -O "$OVERRIDE" -g "$OPTIONS_FILE" -t "$TMP_OPTIONS" -o >> "$TMP_OPTIONS_FILE"
+ $CAT "$TMP_OPTIONS"
+
+ $RM -f "$TMP_OPTIONS"
+ #$MV -f "$TMP_OPTIONS_FILE" "$OPTIONS_FILE"
+
+ return $rc
+}
+
+###
+# do_list lists the current configuration
+###
+
+do_list()
+{
+ local rc
+
+ return $rc
+}
+
+###
+# main
+###
+
+opt_create=false
+opt_delete=false
+opt_edit=false
+opt_graphical=false
+opt_list=false
+
+while getopts "cdegl" opt; do
+ case "$opt" in
+ c) opt_create=true;;
+ d) opt_delete=true;;
+ e) opt_edit=true;;
+ g) opt_graphical=true;;
+ l) opt_list=true;;
+ ?) echo "Usage: $0 -cdegl"; exit 1;;
+ esac
+done
+
+shift $(($OPTIND-1))
+
+$opt_create &&
+ { do_create || exit 1; }
+
+$opt_delete &&
+ { do_delete || exit 1; }
+
+$opt_edit &&
+ { do_edit || exit 1; }
+
+$opt_graphical &&
+ { do_graphical || exit 1; }
+
+$opt_list &&
+ { do_list || exit 1; }
+
+exit 0
Property changes on: head/devel/portmk/scripts/options.sh
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+FreeBSD=%H
\ No newline at end of property
Index: head/ports-mgmt/portmk/Mk/bsd.port.post.mk
===================================================================
--- head/ports-mgmt/portmk/Mk/bsd.port.post.mk (revision 113826)
+++ head/ports-mgmt/portmk/Mk/bsd.port.post.mk (revision 113827)
@@ -1,3226 +1,3451 @@
#-*- mode: makefile; tab-width: 4; -*-
# ex:ts=4
#
# $FreeBSD$
#
.if defined(_POSTMKINCLUDED)
check-makefile::
@${ECHO_CMD} "${PKGNAME}: Makefile error: you cannot include bsd.port[.post].mk twice"
@${FALSE}
.endif
_POSTMKINCLUDED= yes
+OPTIONS_DBDIR?= /var/db/options
+OPTIONS_FILE?= ${OPTIONS_DBDIR}/${UNIQUENAME}
+
+.if defined(_OPTIONSNG_READ) && exists(${OPTIONS_FILE})
+.if ${_OPTIONSNG_READ} == "default"
+_ONG_REEXEC= yes
+check-makefile::
+ @${ECHO_MSG} "===> Configuration error, \`make rmconfig' to remove custom options."
+ @${FALSE}
+.else
+.undef _ONG_REEXEC
+.endif
+_ONG_MAKEFLAGS= -f '${OPTIONS_FILE}' -f Makefile
+.else
+.undef _ONG_REEXEC
+_ONG_MAKEFLAGS= -f Makefile
+.endif
+
WRKDIR?= ${WRKDIRPREFIX}${.CURDIR}/work
.if defined(NO_WRKSUBDIR)
WRKSRC?= ${WRKDIR}
.else
WRKSRC?= ${WRKDIR}/${DISTNAME}
.endif
PATCH_WRKSRC?= ${WRKSRC}
CONFIGURE_WRKSRC?= ${WRKSRC}
BUILD_WRKSRC?= ${WRKSRC}
INSTALL_WRKSRC?=${WRKSRC}
+WRKINST?= ${WRKDIR}/.inst
+
+.if defined(DESTDIR)
+check-makefile::
+ @${ECHO_CMD} "${PKGNAME}: DESTDIR is not a user settable variable"
+ @${FALSE}
+.endif
+
+.if defined(CLEANROOM_INSTALL)
+DESTDIR= ${WRKINST}
+.endif
+
PLIST_SUB+= OSREL=${OSREL} PREFIX=%D LOCALBASE=${LOCALBASE} X11BASE=${X11BASE}
.if defined(WITHOUT_CPU_CFLAGS)
.if defined(_CPUCFLAGS)
.if !empty(_CPUCFLAGS)
CFLAGS:= ${CFLAGS:C/${_CPUCFLAGS}//}
.endif
.endif
.endif
.if defined(NOPORTDOCS)
PLIST_SUB+= PORTDOCS="@comment "
.else
PLIST_SUB+= PORTDOCS=""
.endif
CONFIGURE_SHELL?= ${SH}
MAKE_SHELL?= ${SH}
CONFIGURE_ENV+= SHELL=${SH} CONFIG_SHELL=${SH} PORTOBJFORMAT=${PORTOBJFORMAT}
SCRIPTS_ENV+= PORTOBJFORMAT=${PORTOBJFORMAT}
MAKE_ENV+= SHELL=${SH} PORTOBJFORMAT=${PORTOBJFORMAT}
PLIST_SUB+= PORTOBJFORMAT=${PORTOBJFORMAT}
.if defined(MANCOMPRESSED)
.if ${MANCOMPRESSED} != yes && ${MANCOMPRESSED} != no && \
${MANCOMPRESSED} != maybe
check-makevars::
@${ECHO_CMD} "${PKGNAME}: Makefile error: value of MANCOMPRESSED (is \"${MANCOMPRESSED}\") can only be \"yes\", \"no\" or \"maybe\"".
@${FALSE}
.endif
.endif
.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
MANCOMPRESSED?= yes
.else
MANCOMPRESSED?= no
.endif
.if defined(PATCHFILES)
.if ${PATCHFILES:M*.bz2}x != x && defined(BZIP2DEPENDS)
PATCH_DEPENDS+= bzip2:${PORTSDIR}/archivers/bzip2
.endif
.if ${PATCHFILES:M*.zip}x != x && defined(ZIPDEPENDS)
PATCH_DEPENDS+= unzip:${PORTSDIR}/archivers/unzip
.endif
.endif
.if defined(USE_BZIP2) && defined(BZIP2DEPENDS)
EXTRACT_DEPENDS+= bzip2:${PORTSDIR}/archivers/bzip2
.endif
.if defined(USE_ZIP) && defined(ZIPDEPENDS)
EXTRACT_DEPENDS+= unzip:${PORTSDIR}/archivers/unzip
.endif
.if defined(USE_GMAKE)
BUILD_DEPENDS+= gmake:${PORTSDIR}/devel/gmake
CONFIGURE_ENV+= MAKE=${GMAKE}
.endif
.if defined(USE_GCC)
.if ${OSVERSION} < 400012
GCCVERSION= 020702
.endif
.if ${OSVERSION} >= 400012 && ${OSVERSION} < 500035
GCCVERSION= 029500
.endif
.if ${OSVERSION} >= 500035 && ${OSVERSION} < 500039
GCCVERSION= 030100
.endif
.if ${OSVERSION} >= 500039 && ${OSVERSION} < 501103
GCCVERSION= 030200
.endif
.if ${OSVERSION} >= 501103
GCCVERSION= 030301
.endif
.if ${OSVERSION} >= 599999
GCCVERSION= 030400
.endif
.endif
.if defined(USE_GCC)
.if ${USE_GCC} == 2.95 && ( ${OSVERSION} < 400012 || ${OSVERSION} > 500034 )
CC= gcc295
CXX= g++295
BUILD_DEPENDS+= gcc295:${PORTSDIR}/lang/gcc295
GCCVERSION= 029500
.endif
.if ${USE_GCC} == 3.1 && ( ${OSVERSION} < 500035 || ${OSVERSION} > 500038 )
CC= gcc31
CXX= g++31
F77= g77-31
BUILD_DEPENDS+= gcc31:${PORTSDIR}/lang/gcc31
GCCVERSION= 030100
.endif
.if ${USE_GCC} == 3.2 && ${OSVERSION} < 500039
CC= gcc32
CXX= g++32
F77= g77-32
BUILD_DEPENDS+= gcc32:${PORTSDIR}/lang/gcc32
GCCVERSION= 030200
.endif
.if ${USE_GCC} == 3.3 && ${OSVERSION} < 501103
CC= gcc33
CXX= g++33
F77= g77-33
BUILD_DEPENDS+= gcc33:${PORTSDIR}/lang/gcc33
GCCVERSION= 030301
.endif
.if ${USE_GCC} == 3.4 # Not yet available in any OSVERSION
CC= gcc34
CXX= g++34
F77= g77-34
BUILD_DEPENDS+= gcc34:${PORTSDIR}/lang/gcc34
GCCVERSION= 030400
.endif
MAKE_ENV+= CC="${CC}" CXX="${CXX}"
.endif
.if defined(USE_OPENLDAP_VER)
USE_OPENLDAP?= yes
WANT_OPENLDAP_VER= ${USE_OPENLDAP_VER}
.endif
.if defined(USE_OPENLDAP)
.if defined(WANT_OPENLDAP_SASL)
_OPENLDAP_FLAVOUR= -sasl
.else
_OPENLDAP_FLAVOUR=
.endif
.if ${WANT_OPENLDAP_VER} == 22
LIB_DEPENDS+= ldap-2.2.7:${PORTSDIR}/net/openldap22${_OPENLDAP_FLAVOUR}-client
.elif ${WANT_OPENLDAP_VER} == 21
LIB_DEPENDS+= ldap.2:${PORTSDIR}/net/openldap21${_OPENLDAP_FLAVOUR}-client
.else
BROKEN= "unknown OpenLDAP version: ${WANT_OPENLDAP_VER}"
.endif
.endif
.if defined(USE_GETOPT_LONG)
.if ${OSVERSION} < 500041
LIB_DEPENDS+= gnugetopt.1:${PORTSDIR}/devel/libgnugetopt
CPPFLAGS+= -I${LOCALBASE}/include
LDFLAGS+= -L${LOCALBASE}/lib -lgnugetopt
CONFIGURE_ENV+= CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}"
.endif
.endif
.if defined(USE_RC_SUBR)
.if ${OSVERSION} < 500037
RUN_DEPENDS+= ${LOCALBASE}/etc/rc.subr:${PORTSDIR}/sysutils/rc_subr
RC_SUBR= ${LOCALBASE}/etc/rc.subr
.else
RC_SUBR= /etc/rc.subr
.endif
.endif
.if defined(USE_ICONV)
LIB_DEPENDS+= iconv.3:${PORTSDIR}/converters/libiconv
.endif
.if defined(USE_GETTEXT)
. if ${USE_GETTEXT:L} == "yes"
LIB_DEPENDS+= intl:${PORTSDIR}/devel/gettext
. else
LIB_DEPENDS+= intl.${USE_GETTEXT}:${PORTSDIR}/devel/gettext
. endif
.endif
.if defined(USE_LINUX)
RUN_DEPENDS+= ${LINUXBASE}/etc/redhat-release:${PORTSDIR}/emulators/linux_base
.endif
.if defined(USE_MOTIF)
USE_XPM= yes
.if defined(WANT_LESSTIF)
LIB_DEPENDS+= Xm:${PORTSDIR}/x11-toolkits/lesstif
NO_OPENMOTIF= yes
.endif
.if !defined(NO_OPENMOTIF)
LIB_DEPENDS+= Xm.3:${PORTSDIR}/x11-toolkits/open-motif
.endif
.endif
.if defined(USE_FREETYPE)
LIB_DEPENDS+= ttf.4:${PORTSDIR}/print/freetype
.endif
.if ${XFREE86_VERSION} == 3
.if defined(USE_IMAKE)
BUILD_DEPENDS+= imake:${PORTSDIR}/x11/XFree86
.endif
.if defined(USE_XPM)
LIB_DEPENDS+= Xpm.4:${PORTSDIR}/graphics/xpm
.endif
.if defined(USE_GL)
LIB_DEPENDS+= GL.14:${PORTSDIR}/graphics/mesagl
.endif
XAWVER= 6
PKG_IGNORE_DEPENDS?= '^XFree86-3\.'
.else
.if defined(USE_IMAKE)
BUILD_DEPENDS+= ${X11BASE}/lib/X11/config/date.def:${PORTSDIR}/devel/imake-4
RUN_DEPENDS+= mkhtmlindex:${PORTSDIR}/devel/imake-4
.endif
.if defined(USE_XPM) || defined(USE_GL)
USE_XLIB= yes
.endif
XAWVER= 7
PKG_IGNORE_DEPENDS?= 'this_port_does_not_exist'
.endif
PLIST_SUB+= XAWVER=${XAWVER}
.if defined(USE_MESA)
LIB_DEPENDS+= glut.3:${PORTSDIR}/graphics/libglut
.endif
.if defined(USE_BISON)
.if ${OSVERSION} >= 400014
BUILD_DEPENDS+= bison:${PORTSDIR}/devel/bison
.endif
.endif
PLIST_SUB+= PERL_VERSION=${PERL_VERSION} \
PERL_VER=${PERL_VER} \
PERL_ARCH=${PERL_ARCH} \
SITE_PERL=${SITE_PERL_REL}
.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+= \
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"
.endif
.if defined(PERL_CONFIGURE)
USE_PERL5= yes
USE_REINPLACE=yes
.endif
.if ${PERL_LEVEL} >= 500600
.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
.endif
.if defined(USE_MYSQL)
DEFAULT_MYSQL_VER?= 40
# MySQL client version currently supported.
MYSQL323_LIBVER= 10
MYSQL40_LIBVER= 12
MYSQL41_LIBVER= 14
MYSQL50_LIBVER= 14
# Setting/finding MySQL version we want.
.if defined(WANT_MYSQL_VER)
MYSQL_VER= ${WANT_MYSQL_VER}
.elif defined(WITH_MYSQL_VER)
MYSQL_VER= ${WITH_MYSQL_VER}
.elif exists(${LOCALBASE}/bin/mysql)
MYSQL_VER!= ${LOCALBASE}/bin/mysql --version | ${SED} -e 's/.*Distrib \([0-9]\)\.\([0-9]*\).*/\1\2/'
.else
MYSQL_VER= ${DEFAULT_MYSQL_VER}
.endif # WANT_MYSQL_VER
# And now we are checking if we can use it
.if exists(${PORTSDIR}/databases/mysql${MYSQL_VER}-client)
.if defined(BROKEN_WITH_MYSQL)
. for VER in ${BROKEN_WITH_MYSQL}
. if (${MYSQL_VER} == "${VER}")
-BROKEN= "Doesn't work with MySQL version : ${MYSQL_VER} (Doesn't support MySQL ${BROKEN_WITH_MYSQL})"
+IGNORE= "Doesn't work with MySQL version : ${MYSQL_VER} (Doesn't support MySQL ${BROKEN_WITH_MYSQL})"
. endif
. endfor
.endif # BROKEN_WITH_MYSQL
LIB_DEPENDS+= mysqlclient.${MYSQL${MYSQL_VER}_LIBVER}:${PORTSDIR}/databases/mysql${MYSQL_VER}-client
.else
BROKEN= "unknown MySQL version: ${MYSQL_VER}"
.endif # Check for correct libs
.endif # USE_MYSQL
.if defined(USE_XLIB)
.if ${XFREE86_VERSION} == 3
# Don't try to build XFree86-3 even if ALWAYS_BUILD_DEPENDS is defined --
# it's just too big....
.if !defined(ALWAYS_BUILD_DEPENDS)
LIB_DEPENDS+= X11.6:${PORTSDIR}/x11/XFree86
.endif
.else
LIB_DEPENDS+= X11.6:${PORTSDIR}/x11/XFree86-4-libraries
.endif
# Add explicit X options to avoid problems with false positives in configure
.if defined(GNU_CONFIGURE)
CONFIGURE_ARGS+=--x-libraries=${X11BASE}/lib --x-includes=${X11BASE}/include
.endif
.endif
# XXX: (not yet): .if defined(USE_AUTOTOOLS)
.include "${PORTSDIR}/Mk/bsd.autotools.mk"
# XXX: (not yet): .endif
.if defined(WANT_GNOME) || defined(USE_GNOME) || defined(USE_GTK)
.include "${PORTSDIR}/Mk/bsd.gnome.mk"
.endif
.if defined(USE_SDL) || defined(WANT_SDL)
.include "${PORTSDIR}/Mk/bsd.sdl.mk"
.endif
.if defined(USE_PYTHON)
.include "${PORTSDIR}/Mk/bsd.python.mk"
.endif
.if exists(${PORTSDIR}/../Makefile.inc)
.include "${PORTSDIR}/../Makefile.inc"
USE_SUBMAKE= yes
.endif
# Set the default for the installation of Postscript(TM)-
# compatible functionality.
.if !defined(WITHOUT_X11)
.if defined(WITH_GHOSTSCRIPT_AFPL)
.if ${WITH_GHOSTSCRIPT_AFPL} == yes
GHOSTSCRIPT_PORT?= print/ghostscript-afpl
.else
GHOSTSCRIPT_PORT?= print/ghostscript-gnu
.endif
.else
GHOSTSCRIPT_PORT?= print/ghostscript-gnu
.endif
.else
.if defined(WITH_GHOSTSCRIPT_AFPL)
.if ${WITH_GHOSTSCRIPT_AFPL} == yes
GHOSTSCRIPT_PORT?= print/ghostscript-afpl-nox11
.else
GHOSTSCRIPT_PORT?= print/ghostscript-gnu-nox11
.endif
.else
GHOSTSCRIPT_PORT?= print/ghostscript-gnu-nox11
.endif
.endif
# Set up the ghostscript dependencies.
.if defined(USE_GHOSTSCRIPT) || defined(USE_GHOSTSCRIPT_BUILD)
BUILD_DEPENDS+= gs:${PORTSDIR}/${GHOSTSCRIPT_PORT}
.endif
.if defined(USE_GHOSTSCRIPT) || defined(USE_GHOSTSCRIPT_RUN)
RUN_DEPENDS+= gs:${PORTSDIR}/${GHOSTSCRIPT_PORT}
.endif
# Special macro for doing in-place file editing using regexps
.if defined(USE_REINPLACE)
REINPLACE_ARGS?= -i.bak
.if ${OSVERSION} < 460101 || ( ${OSVERSION} >= 500000 && ${OSVERSION} < 500036 )
PATCH_DEPENDS+= ${LOCALBASE}/bin/sed_inplace:${PORTSDIR}/textproc/sed_inplace
REINPLACE_CMD?= ${LOCALBASE}/bin/sed_inplace ${REINPLACE_ARGS}
.else
REINPLACE_CMD?= ${SED} ${REINPLACE_ARGS}
.endif
.endif
# Names of cookies used to skip already completed stages
-EXTRACT_COOKIE?= ${WRKDIR}/.extract_done.${PKGNAME}.${PREFIX:S/\//_/g}
-CONFIGURE_COOKIE?= ${WRKDIR}/.configure_done.${PKGNAME}.${PREFIX:S/\//_/g}
-INSTALL_COOKIE?= ${WRKDIR}/.install_done.${PKGNAME}.${PREFIX:S/\//_/g}
-BUILD_COOKIE?= ${WRKDIR}/.build_done.${PKGNAME}.${PREFIX:S/\//_/g}
-PATCH_COOKIE?= ${WRKDIR}/.patch_done.${PKGNAME}.${PREFIX:S/\//_/g}
-PACKAGE_COOKIE?= ${WRKDIR}/.package_done.${PKGNAME}.${PREFIX:S/\//_/g}
+.for target in extract patch configure build install package
+${target:U}_COOKIE?=${WRKDIR}/.${target}_done.${PKGNAME}.${PREFIX:S/\//_/g}
+.endfor
# How to do nothing. Override if you, for some strange reason, would rather
# do something.
DO_NADA?= ${TRUE}
# Use this as the first operand to always build dependency.
NONEXISTENT?= /nonexistent
# Miscellaneous overridable commands:
GMAKE?= gmake
XMKMF?= xmkmf -a
MKHTMLINDEX?= ${X11BASE}/bin/mkhtmlindex
.if exists(/sbin/md5)
MD5?= /sbin/md5
.elif exists(/bin/md5)
MD5?= /bin/md5
.elif exists(/usr/bin/md5)
MD5?= /usr/bin/md5
.else
MD5?= md5
.endif
MD5_FILE?= ${MASTERDIR}/distinfo
MAKE_FLAGS?= -f
MAKEFILE?= Makefile
-MAKE_ENV+= PREFIX=${PREFIX} LOCALBASE=${LOCALBASE} X11BASE=${X11BASE} MOTIFLIB="${MOTIFLIB}" LIBDIR="${LIBDIR}" CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" MANPREFIX="${MANPREFIX}"
+MAKE_ENV+= PREFIX=${PREFIX} LOCALBASE=${LOCALBASE} X11BASE=${X11BASE} DESTDIR=${DESTDIR} MOTIFLIB="${MOTIFLIB}" LIBDIR="${LIBDIR}" CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" MANPREFIX="${MANPREFIX}"
.if ${OSVERSION} < 500016
PTHREAD_CFLAGS?= -D_THREAD_SAFE
PTHREAD_LIBS?= -pthread
.elif ${OSVERSION} < 502102
PTHREAD_CFLAGS?= -D_THREAD_SAFE
PTHREAD_LIBS?= -lc_r
.else
PTHREAD_CFLAGS?=
PTHREAD_LIBS?= -lpthread
.endif
.if defined(FETCH_USE_CURL) && exists(${LOCALBASE}/bin/curl)
FETCH_CMD?= ${LOCALBASE}/bin/curl --create-dirs -L --max-redirs 1 -C -
.elif defined(FETCH_USE_WGET) && exists(${LOCALBASE}/bin/wget)
FETCH_CMD?= ${LOCALBASE}/bin/wget -c -t 1
.else
FETCH_CMD?= /usr/bin/fetch -ARr
.endif
TOUCH?= /usr/bin/touch
TOUCH_FLAGS?= -f
DISTORIG?= .bak.orig
PATCH?= /usr/bin/patch
PATCH_STRIP?= -p0
PATCH_DIST_STRIP?= -p0
.if defined(PATCH_DEBUG)
PATCH_DEBUG_TMP= yes
PATCH_ARGS?= -d ${PATCH_WRKSRC} -E ${PATCH_STRIP}
PATCH_DIST_ARGS?= -b ${DISTORIG} -d ${PATCH_WRKSRC} -E ${PATCH_DIST_STRIP}
.else
PATCH_DEBUG_TMP= no
PATCH_ARGS?= -d ${PATCH_WRKSRC} --forward --quiet -E ${PATCH_STRIP}
PATCH_DIST_ARGS?= -b ${DISTORIG} -d ${PATCH_WRKSRC} --forward --quiet -E ${PATCH_DIST_STRIP}
.endif
.if defined(BATCH)
PATCH_ARGS+= --batch
PATCH_DIST_ARGS+= --batch
.endif
# Prevent breakage with VERSION_CONTROL=numbered
PATCH_ARGS+= -V simple
.if defined(PATCH_CHECK_ONLY)
PATCH_ARGS+= -C
PATCH_DIST_ARGS+= -C
.endif
.if ${PATCH} == "/usr/bin/patch"
PATCH_ARGS+= -b .orig
PATCH_DIST_ARGS+= -b .orig
.endif
.if exists(/bin/tar)
TAR?= /bin/tar
.else
TAR?= /usr/bin/tar
.endif
# EXTRACT_SUFX is defined in .pre.mk section
.if defined(USE_ZIP)
EXTRACT_CMD?= ${UNZIP_CMD}
EXTRACT_BEFORE_ARGS?= -qo
EXTRACT_AFTER_ARGS?= -d ${WRKDIR}
.else
EXTRACT_BEFORE_ARGS?= -dc
EXTRACT_AFTER_ARGS?= | ${TAR} -xf -
.if defined(USE_BZIP2)
EXTRACT_CMD?= ${BZIP2_CMD}
.else
EXTRACT_CMD?= ${GZIP_CMD}
.endif
.endif
# Figure out where the local mtree file is
.if !defined(MTREE_FILE) && !defined(NO_MTREE)
.if defined(USE_X_PREFIX)
.if ${XFREE86_VERSION} == 3
MTREE_FILE= /etc/mtree/BSD.x11.dist
.else
MTREE_FILE= /etc/mtree/BSD.x11-4.dist
.endif
.else
.if ${PREFIX} == /usr
MTREE_FILE= /etc/mtree/BSD.usr.dist
.else
MTREE_FILE= /etc/mtree/BSD.local.dist
.endif
.endif
.endif
MTREE_CMD?= /usr/sbin/mtree
MTREE_ARGS?= -U ${MTREE_FOLLOWS_SYMLINKS} -f ${MTREE_FILE} -d -e -p
# Determine whether or not we can use rootly owner/group functions.
-.if !defined(UID)
-UID!= ${ID} -u
-.endif
.if ${UID} == 0
_BINOWNGRP= -o ${BINOWN} -g ${BINGRP}
_SHROWNGRP= -o ${SHAREOWN} -g ${SHAREGRP}
_MANOWNGRP= -o ${MANOWN} -g ${MANGRP}
.else
_BINOWNGRP=
_SHROWNGRP=
_MANOWNGRP=
.endif
# A few aliases for *-install targets
INSTALL_PROGRAM= \
${INSTALL} ${COPY} ${STRIP} ${_BINOWNGRP} -m ${BINMODE}
INSTALL_SCRIPT= \
${INSTALL} ${COPY} ${_BINOWNGRP} -m ${BINMODE}
INSTALL_DATA= \
${INSTALL} ${COPY} ${_SHROWNGRP} -m ${SHAREMODE}
INSTALL_MAN= \
${INSTALL} ${COPY} ${_MANOWNGRP} -m ${MANMODE}
INSTALL_MACROS= BSD_INSTALL_PROGRAM="${INSTALL_PROGRAM}" \
BSD_INSTALL_SCRIPT="${INSTALL_SCRIPT}" \
BSD_INSTALL_DATA="${INSTALL_DATA}" \
BSD_INSTALL_MAN="${INSTALL_MAN}"
MAKE_ENV+= ${INSTALL_MACROS}
SCRIPTS_ENV+= ${INSTALL_MACROS}
# The user can override the NO_PACKAGE by specifying this from
# the make command line
.if defined(FORCE_PACKAGE)
.undef NO_PACKAGE
.endif
COMMENTFILE?= ${PKGDIR}/pkg-comment
DESCR?= ${PKGDIR}/pkg-descr
PLIST?= ${PKGDIR}/pkg-plist
PKGINSTALL?= ${PKGDIR}/pkg-install
PKGDEINSTALL?= ${PKGDIR}/pkg-deinstall
PKGREQ?= ${PKGDIR}/pkg-req
PKGMESSAGE?= ${PKGDIR}/pkg-message
TMPPLIST?= ${WRKDIR}/.PLIST.mktmp
.if ${OSVERSION} >= 400000
.for _CATEGORY in ${CATEGORIES}
PKGCATEGORY?= ${_CATEGORY}
.endfor
_PORTDIRNAME= ${.CURDIR:T}
PORTDIRNAME?= ${_PORTDIRNAME}
PKGORIGIN?= ${PKGCATEGORY}/${PORTDIRNAME}
.endif
.if exists(${LOCALBASE}/sbin/pkg_info)
PKG_CMD?= ${LOCALBASE}/sbin/pkg_create
PKG_ADD?= ${LOCALBASE}/sbin/pkg_add
PKG_DELETE?= ${LOCALBASE}/sbin/pkg_delete
PKG_INFO?= ${LOCALBASE}/sbin/pkg_info
PKG_VERSION?= ${LOCALBASE}/sbin/pkg_version
.elif ${OSVERSION} < 460102 && ${PKGORIGIN} != "sysutils/pkg_install"
BUILD_DEPENDS+= ${LOCALBASE}/sbin/pkg_info:${PORTSDIR}/sysutils/pkg_install
PKG_CMD?= ${LOCALBASE}/sbin/pkg_create
PKG_ADD?= ${LOCALBASE}/sbin/pkg_add
PKG_DELETE?= ${LOCALBASE}/sbin/pkg_delete
PKG_INFO?= ${LOCALBASE}/sbin/pkg_info
PKG_VERSION?= ${LOCALBASE}/sbin/pkg_version
.else
PKG_CMD?= /usr/sbin/pkg_create
PKG_ADD?= /usr/sbin/pkg_add
PKG_DELETE?= /usr/sbin/pkg_delete
PKG_INFO?= /usr/sbin/pkg_info
PKG_VERSION?= /usr/sbin/pkg_version
.endif
# Does the pkg_create tool support conflict checking?
# XXX Slow?
.if !defined(PKGINSTALLVER)
PKGINSTALLVER!= ${PKG_INFO} -P 2>/dev/null | ${SED} -e 's/.*: //'
.endif
.if ${PKGINSTALLVER} < 20030417
DISABLE_CONFLICTS= YES
.endif
.if !defined(PKG_ARGS)
-PKG_ARGS= -v -c -${COMMENT:Q} -d ${DESCR} -f ${TMPPLIST} -p ${PREFIX} -P "`cd ${.CURDIR} && ${MAKE} package-depends | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u`" ${EXTRA_PKG_ARGS} $${_LATE_PKG_ARGS}
+PKG_ARGS= -v -c -${COMMENT:Q} -d ${DESCR} -f ${TMPPLIST} -p ${PREFIX} -P "`cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} package-depends | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u`" ${EXTRA_PKG_ARGS} $${_LATE_PKG_ARGS}
.if !defined(NO_MTREE)
PKG_ARGS+= -m ${MTREE_FILE}
.endif
.if defined(PKGORIGIN)
PKG_ARGS+= -o ${PKGORIGIN}
.endif
.if defined(CONFLICTS) && !defined(DISABLE_CONFLICTS)
PKG_ARGS+= -C "${CONFLICTS}"
.endif
+.if defined(DESTDIR)
+PKG_ARGS+= -S "${DESTDIR}"
.endif
+.endif
.if defined(PKG_NOCOMPRESS)
PKG_SUFX?= .tar
.else
.if ${OSVERSION} >= 500039
PKG_SUFX?= .tbz
.else
PKG_SUFX?= .tgz
.endif
.endif
# where pkg_add records its dirty deeds.
PKG_DBDIR?= /var/db/pkg
+_PKG_DBDIR?= ${DESTDIR}${PKG_DBDIR}
MOTIFLIB?= -L${X11BASE}/lib -lXm -lXp
ALL_TARGET?= all
INSTALL_TARGET?= install
# This is a mid-term solution patch while pkg-comment files are
# phased out.
# The final simpler patch will come afterwards
.if !defined(COMMENT)
check-makevars::
@${ECHO_CMD} 'Makefile error: there is no COMMENT variable defined'
@${ECHO_CMD} 'for this port. Please, rectify this.'
@${FALSE}
.else
.if exists(${COMMENTFILE})
check-makevars::
@${ECHO_CMD} 'Makefile error: There is a COMMENTFILE in this port.'
@${ECHO_CMD} 'COMMENTFILEs have been deprecated in'
@${ECHO_CMD} 'favor of COMMENT variables.'
@${ECHO_CMD} 'Please, rectify this.'
@${FALSE}
.endif
.endif
# Popular master sites
.include "${PORTSDIR}/Mk/bsd.sites.mk"
# The primary backup site.
MASTER_SITE_BACKUP?= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/
MASTER_SITE_BACKUP:= ${MASTER_SITE_BACKUP:S^\${DIST_SUBDIR}/^^}
# If the user has MASTER_SITE_FREEBSD set, go to the FreeBSD repository
# for everything, but don't search it twice by appending it to the end.
.if defined(MASTER_SITE_FREEBSD)
_MASTER_SITE_OVERRIDE:= ${MASTER_SITE_BACKUP}
_MASTER_SITE_BACKUP:= # empty
.else
_MASTER_SITE_OVERRIDE= ${MASTER_SITE_OVERRIDE}
_MASTER_SITE_BACKUP= ${MASTER_SITE_BACKUP}
.endif
# Search CDROM first if mounted
.for MOUNTPT in ${CD_MOUNTPTS}
.if exists(${MOUNTPT}/ports/distfiles)
_MASTER_SITE_OVERRIDE:= file:${MOUNTPT}/ports/distfiles/${DIST_SUBDIR}/ ${_MASTER_SITE_OVERRIDE}
.endif
.endfor
DISTFILES?= ${DISTNAME}${EXTRACT_SUFX}
.if !defined(DISTFILES_KEEP_QUOTING)
_DISTFILES= ${DISTFILES:C/:[^:]+$//:C/\\\\(.)/\1/g}
_PATCHFILES= ${PATCHFILES:C/:[^:]+$//:C/\\\\(.)/\1/g}
.else
_DISTFILES= ${DISTFILES:C/:[^:]+$//}
_PATCHFILES= ${PATCHFILES:C/:[^:]+$//}
.endif
#
# Sort the master site list according to the patterns in MASTER_SORT
#
MASTER_SORT?=
MASTER_SORT_REGEX?=
MASTER_SORT_REGEX+= ${MASTER_SORT:S|.|\\.|g:S|^|://[^/]*|:S|$|/|}
MASTER_SORT_AWK= BEGIN { RS = " "; ORS = " "; IGNORECASE = 1 ; gl = "${MASTER_SORT_REGEX:S|\\|\\\\|g}"; }
.for srt in ${MASTER_SORT_REGEX}
MASTER_SORT_AWK+= /${srt:S|/|\\/|g}/ { good["${srt:S|\\|\\\\|g}"] = good["${srt:S|\\|\\\\|g}"] " " $$0 ; next; }
.endfor
MASTER_SORT_AWK+= { rest = rest " " $$0; } END { n=split(gl, gla); for(i=1;i<=n;i++) { print good[gla[i]]; } print rest; }
.if defined(MASTER_SORT_FPING) && exists(${PERL5}) && exists(${LOCALBASE}/sbin/fping)
MASTER_SORT_CMD?= ${PERL5} -w ${PORTSDIR}/devel/portmk/scripts/ranksites-fping.pl
.elif defined(MASTER_SORT_GEOIP) && defined(CC_HOME) && exists(${PERL5}) && exists(${SITE_PERL}/${PERL_ARCH}/Geo/IP.pm)
MASTER_SORT_CMD?= ${PERL5} -w ${PORTSDIR}/devel/portmk/scripts/ranksites-geoip.pl
MASTER_SORT_ENV+= CC_HOME=${CC_HOME}
.endif
# This is what is actually going to be extracted, and is overridable
# by user.
EXTRACT_ONLY?= ${_DISTFILES}
# Documentation
MAINTAINER?= ports@FreeBSD.org
.PHONY: maintainer
.if !target(maintainer)
maintainer:
@${ECHO_CMD} "${MAINTAINER}"
.endif
.PHONY: check-makefile
.if !target(check-makefile)
check-makefile::
@${DO_NADA}
.endif
.PHONY: check-categories
.if !defined(CATEGORIES)
check-categories:
@${ECHO_CMD} "${PKGNAME}: Makefile error: CATEGORIES is mandatory."
@${FALSE}
.else
VALID_CATEGORIES+= accessibility afterstep arabic archivers astro audio \
benchmarks biology cad chinese comms converters databases \
deskutils devel dns editors elisp emulators finance french ftp \
games german gnome graphics haskell hebrew hungarian \
ipv6 irc japanese java kde korean lang linux lisp \
mail math mbone misc multimedia net net-mgmt news \
offix palm parallel pear perl5 picobsd plan9 polish portuguese print \
python ruby russian \
scheme science security shells sysutils \
tcl76 tcl80 tcl81 tcl82 tcl83 tcl84 textproc \
tk42 tk80 tk82 tk83 tk84 tkstep80 \
ukrainian vietnamese windowmaker www \
x11 x11-clocks x11-fm x11-fonts x11-servers x11-themes x11-toolkits \
x11-wm xfce zope
check-categories:
.for cat in ${CATEGORIES}
@if ${ECHO_CMD} ${VALID_CATEGORIES} | ${GREP} -wq ${cat}; then \
${TRUE}; \
else \
${ECHO_CMD} "${PKGNAME}: Makefile error: category ${cat} not in list of valid categories."; \
${FALSE}; \
fi
.endfor
.endif
.PHONY: check-makevars
.if !target(check-makevars)
check-makevars::
@${DO_NADA}
.endif
.PHONY: check-depends
.if !target(check-depends)
check-depends:
@${DO_NADA}
.endif
PKGREPOSITORYSUBDIR?= All
PKGREPOSITORY?= ${PACKAGES}/${PKGREPOSITORYSUBDIR}
.if exists(${PACKAGES})
PKGFILE?= ${PKGREPOSITORY}/${PKGNAME}${PKG_SUFX}
.else
PKGFILE?= ${.CURDIR}/${PKGNAME}${PKG_SUFX}
.endif
# The "latest version" link -- ${PKGNAME} minus everthing after the last '-'
PKGLATESTREPOSITORY?= ${PACKAGES}/Latest
PKGBASE?= ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}
LATEST_LINK?= ${PKGBASE}
PKGLATESTFILE= ${PKGLATESTREPOSITORY}/${LATEST_LINK}${PKG_SUFX}
.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
CONFIGURE_SCRIPT?= configure
CONFIGURE_TARGET?= ${MACHINE_ARCH}-portbld-freebsd${OSREL}
CONFIGURE_LOG?= config.log
# A default message to print if do-configure fails.
CONFIGURE_FAIL_MESSAGE?= "Please report the problem to ${MAINTAINER} [maintainer] and attach the \"${CONFIGURE_WRKSRC}/${CONFIGURE_LOG}\" including the output of the failure of your make command. Also, it might be a good idea to provide an overview of all packages installed on your system (e.g. an \`ls ${PKG_DBDIR}\`)."
.if defined(GNU_CONFIGURE)
# Maximum command line length
.if !defined(CONFIGURE_MAX_CMD_LEN)
.if exists(/sbin/sysctl)
CONFIGURE_MAX_CMD_LEN!= /sbin/sysctl -n kern.argmax
.else
CONFIGURE_MAX_CMD_LEN!= /usr/sbin/sysctl -n kern.argmax
.endif
.endif
CONFIGURE_ARGS+= --prefix=${PREFIX} ${CONFIGURE_TARGET}
CONFIGURE_ENV+= lt_cv_sys_max_cmd_len=${CONFIGURE_MAX_CMD_LEN}
HAS_CONFIGURE= yes
.endif
# Passed to most of script invocations
SCRIPTS_ENV+= CURDIR=${MASTERDIR} DISTDIR=${DISTDIR} \
WRKDIR=${WRKDIR} WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} \
SCRIPTDIR=${SCRIPTDIR} FILESDIR=${FILESDIR} \
PORTSDIR=${PORTSDIR} DEPENDS="${DEPENDS}" \
- PREFIX=${PREFIX} LOCALBASE=${LOCALBASE} X11BASE=${X11BASE}
+ PREFIX=${PREFIX} LOCALBASE=${LOCALBASE} X11BASE=${X11BASE} \
+ DESTDIR=${DESTDIR}
.if defined(BATCH)
SCRIPTS_ENV+= BATCH=yes
.endif
.if ${PREFIX} == /usr
MANPREFIX?= /usr/share
.else
MANPREFIX?= ${PREFIX}
.endif
.for sect in 1 2 3 4 5 6 7 8 9
MAN${sect}PREFIX?= ${MANPREFIX}
.endfor
MANLPREFIX?= ${MANPREFIX}
MANNPREFIX?= ${MANPREFIX}
MANLANG?= "" # english only by default
.if !defined(NOMANCOMPRESS)
MANEXT= .gz
.endif
.if (defined(MLINKS) || defined(_MLINKS_PREPEND)) && !defined(_MLINKS)
__pmlinks!= ${ECHO_CMD} '${MLINKS:S/ / /}' | ${AWK} \
'{ if (NF % 2 != 0) { print "broken"; exit; } \
for (i=1; i<=NF; i++) { \
if ($$i ~ /^-$$/ && i != 1 && i % 2 != 0) \
{ $$i = $$(i-2); printf " " $$i " "; } \
else if ($$i ~ /^[^ ]+\.[1-9ln][^. ]*$$/ || $$i ~ /^\//) \
printf " " $$i " "; \
else \
{ print "broken"; exit; } \
} \
}' | ${SED} -e 's \([^/ ][^ ]*\.\(.\)[^. ]*\) $${MAN\2PREFIX}/$$$$$$$${__lang}/man\2/\1${MANEXT}g' -e 's/ //g' -e 's/MANlPREFIX/MANLPREFIX/g' -e 's/MANnPREFIX/MANNPREFIX/g'
.if ${__pmlinks:Mbroken} == "broken"
check-makevars::
@${ECHO_CMD} "${PKGNAME}: Makefile error: unable to parse MLINKS."
@${FALSE}
.endif
_MLINKS= ${_MLINKS_PREPEND}
# XXX 20040119 This next line should read:
# .for lang in ${MANLANG:S%^%man/%:S%^man/""$%man%}
# but there is currently a bug in make(1) that prevents the double-quote
# substitution from working correctly. Once that problem is addressed,
# and has had a enough time to mature, this hack should be removed.
.for lang in ${MANLANG:S%^%man/%:S%^man/""$%man%:S%^man/"$%man%}
.for ___pmlinks in ${__pmlinks}
.for __lang in ${lang}
_MLINKS+= ${___pmlinks:S// /g}
.endfor
.endfor
.endfor
.endif
_COUNT=0
.for ___tpmlinks in ${_MLINKS}
.if ${_COUNT} == "1"
_TMLINKS+= ${___tpmlinks}
_COUNT=0
.else
_COUNT=1
.endif
.endfor
# XXX 20040119 This next line should read:
# .for manlang in ${MANLANG:S%^%man/%:S%^man/""$%man%}
# but there is currently a bug in make(1) that prevents the double-quote
# substitution from working correctly. Once that problem is addressed,
# and has had a enough time to mature, this hack should be removed.
.for manlang in ${MANLANG:S%^%man/%:S%^man/""$%man%:S%^man/"$%man%}
.for sect in 1 2 3 4 5 6 7 8 9 L N
.if defined(MAN${sect})
_MANPAGES+= ${MAN${sect}:S%^%${MAN${sect}PREFIX}/${manlang}/man${sect:L}/%}
.endif
.endfor
.endfor
.if !defined(_TMLINKS)
_TMLINKS=
.endif
.if defined(_MANPAGES)
.if defined(NOMANCOMPRESS)
__MANPAGES:= ${_MANPAGES:S%^${PREFIX}/%%}
.else
__MANPAGES:= ${_MANPAGES:S%^${PREFIX}/%%:S%$%.gz%}
.endif
.if ${MANCOMPRESSED} == "yes"
_MANPAGES:= ${_MANPAGES:S%$%.gz%}
.endif
.endif
.if ${PREFIX} == /usr
INFO_PATH?= share/info
.else
INFO_PATH?= info
.endif
.if ${XFREE86_VERSION} == 3
XFREE86_HTML_MAN= no
.else
.if defined(USE_IMAKE)
XFREE86_HTML_MAN?= yes
.else
XFREE86_HTML_MAN?= no
.endif
.endif
DOCSDIR?= ${PREFIX}/share/doc/${PORTNAME}
EXAMPLESDIR?= ${PREFIX}/share/examples/${PORTNAME}
DATADIR?= ${PREFIX}/share/${PORTNAME}
PLIST_SUB+= DOCSDIR="${DOCSDIR:S,^${PREFIX}/,,}" \
EXAMPLESDIR="${EXAMPLESDIR:S,^${PREFIX}/,,}" \
DATADIR="${DATADIR:S,^${PREFIX}/,,}"
# Put this as far down as possible so it will catch all PLIST_SUB definitions.
.if defined(INSTALLS_SHLIB)
LDCONFIG_DIRS?= %%PREFIX%%/lib
LDCONFIG_PLIST!= ${ECHO_CMD} ${LDCONFIG_DIRS} | ${SED} ${PLIST_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/}
LDCONFIG_RUNLIST!= ${ECHO_CMD} ${LDCONFIG_PLIST} | ${SED} -e "s!%D!${PREFIX}!g"
.endif
.MAIN: all
################################################################
# Many ways to disable a port.
#
# If we're in BATCH mode and the port is interactive, or we're
# in interactive mode and the port is non-interactive, skip all
# the important targets. The reason we have two modes is that
# one might want to leave a build in BATCH mode running
# overnight, then come back in the morning and do _only_ the
# interactive ones that required your intervention.
#
# Ignore ports that can't be resold if building for a CDROM.
#
# Don't build a port if it's restricted and we don't want to get
# into that.
#
# Don't build a port on an ELF machine if it's broken for ELF.
#
# Don't build a port if it's broken, unless we're running a parallel
# build (in case it's fixed).
#
# Don't build a port if it's forbidden for whatever reason.
#
# Don't build a port if the system is too old.
################################################################
.if ${OSVERSION} < 420000
# You need an upgrade kit or make world newer than this
IGNORE= ": Your system is too old to use this bsd.port.mk. You need a fresh make world or an upgrade kit. Please go to http://www.FreeBSD.org/ports/ or a mirror site and follow the instructions"
.endif
.if defined(ONLY_FOR_ARCHS)
.for __ARCH in ${ONLY_FOR_ARCHS}
.if ${MACHINE_ARCH:M${__ARCH}} != ""
__ARCH_OK?= 1
.endif
.endfor
.else
__ARCH_OK?= 1
.endif
.if defined(NOT_FOR_ARCHS)
.for __NARCH in ${NOT_FOR_ARCHS}
.if ${MACHINE_ARCH:M${__NARCH}} != ""
.undef __ARCH_OK
.endif
.endfor
.endif
.if !defined(__ARCH_OK)
.if defined(ONLY_FOR_ARCHS)
IGNORE= "is only for ${ONLY_FOR_ARCHS},"
.else # defined(NOT_FOR_ARCHS)
IGNORE= "does not run on ${NOT_FOR_ARCHS},"
.endif
IGNORE+= "and you are running ${ARCH}"
.endif
.if !defined(NO_IGNORE)
.if (defined(IS_INTERACTIVE) && defined(BATCH))
IGNORE= "is an interactive port"
.elif (!defined(IS_INTERACTIVE) && defined(INTERACTIVE))
IGNORE= "is not an interactive port"
.elif (defined(NO_CDROM) && defined(FOR_CDROM))
IGNORE= "may not be placed on a CDROM: ${NO_CDROM}"
.elif (defined(RESTRICTED) && defined(NO_RESTRICTED))
IGNORE= "is restricted: ${RESTRICTED}"
.elif defined(BROKEN)
.if !defined(TRYBROKEN)
IGNORE= "is marked as broken: ${BROKEN}"
.endif
.elif defined(FORBIDDEN)
IGNORE= "is forbidden: ${FORBIDDEN}"
.endif
.if (defined(MANUAL_PACKAGE_BUILD) && defined(PACKAGE_BUILDING) && !defined(PARALLEL_PACKAGE_BUILD))
IGNORE= "has to be built manually: ${MANUAL_PACKAGE_BUILD}"
clean:
@${IGNORECMD}
.endif
.if defined(IGNORE)
.if defined(IGNORE_SILENT)
IGNORECMD= ${DO_NADA}
.else
IGNORECMD= ${ECHO_MSG} "===> ${PKGNAME} ${IGNORE}."
.endif
.for target in check-sanity fetch checksum extract patch configure all build install reinstall package
${target}:
@${IGNORECMD}
.if defined(INSTALLS_DEPENDS)
@${FALSE}
.endif
.endfor
.endif
.endif
.if defined(IGNORE) || defined(NO_PACKAGE)
ignorelist: package-name
.else
ignorelist:
@${DO_NADA}
.endif
################################################################
# Clean directories for ftp or CDROM.
################################################################
.if defined(RESTRICTED)
clean-restricted: delete-distfiles delete-package
clean-restricted-list: delete-distfiles-list delete-package-list
RESTRICTED_FILES?= ${_DISTFILES} ${_PATCHFILES}
.else
clean-restricted:
clean-restricted-list:
.endif
.if defined(NO_CDROM)
clean-for-cdrom: delete-distfiles delete-package
clean-for-cdrom-list: delete-distfiles-list delete-package-list
RESTRICTED_FILES?= ${_DISTFILES} ${_PATCHFILES}
.else
clean-for-cdrom:
clean-for-cdrom-list:
.endif
.if defined(ALL_HOOK)
all:
@cd ${.CURDIR} && ${SETENV} CURDIR=${.CURDIR} DISTNAME=${DISTNAME} \
DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} WRKSRC=${WRKSRC} \
PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \
FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \
+ DESTDIR=${DESTDIR} \
DEPENDS="${DEPENDS}" BUILD_DEPENDS="${BUILD_DEPENDS}" \
RUN_DEPENDS="${RUN_DEPENDS}" X11BASE=${X11BASE} \
CONFLICTS="${CONFLICTS}" \
${ALL_HOOK}
.endif
.if !target(all)
all: build
.endif
.if !defined(DEPENDS_TARGET)
.if make(reinstall)
DEPENDS_TARGET= reinstall
.else
DEPENDS_TARGET= install
.endif
.if defined(DEPENDS_CLEAN)
DEPENDS_TARGET+= clean
DEPENDS_ARGS+= NOCLEANDEPENDS=yes
.endif
.else
DEPENDS_ARGS+= FORCE_PKG_REGISTER=yes
.endif
.if defined(DEPENDS)
# pretty much guarantees overwrite of existing installation
.MAKEFLAGS: FORCE_PKG_REGISTER=yes
.endif
################################################################
#
# Do preliminary work to detect if we need to run the config
# target or not.
#
################################################################
-.if (!defined(OPTIONS) || defined(CONFIG_DONE) || \
+.if (defined(_OPTIONSNG_READ) || !defined(OPTIONS) || defined(CONFIG_DONE) || \
defined(PACKAGE_BUILDING) || defined(BATCH) || \
exists(${_OPTIONSFILE}) || exists(${_OPTIONSFILE}.local))
_OPTIONS_OK=yes
.endif
################################################################
# The following are used to create easy dummy targets for
# disabling some bit of default target behavior you don't want.
# They still check to see if the target exists, and if so don't
# do anything, since you might want to set this globally for a
# group of ports in a Makefile.inc, but still be able to
# override from an individual Makefile.
################################################################
# Disable checksum
.if defined(NO_CHECKSUM) && !target(checksum) && defined(_OPTIONS_OK)
checksum: fetch
@${DO_NADA}
.endif
# Disable build
.if defined(NO_BUILD) && !target(build) && defined(_OPTIONS_OK)
build: configure
@${TOUCH} ${TOUCH_FLAGS} ${BUILD_COOKIE}
.endif
# Disable install
.if defined(NO_INSTALL) && !target(install) && defined(_OPTIONS_OK)
install: build
@${TOUCH} ${TOUCH_FLAGS} ${INSTALL_COOKIE}
.endif
# Disable package
.if defined(NO_PACKAGE) && !target(package) && defined(_OPTIONS_OK)
package:
.if defined(IGNORE_SILENT)
@${DO_NADA}
.else
@${ECHO_MSG} "===> ${PKGNAME} may not be packaged: ${NO_PACKAGE}."
.endif
.endif
# Disable describe
.if defined(NO_DESCRIBE) && !target(describe)
describe:
@${DO_NADA}
.endif
################################################################
# More standard targets start here.
#
# These are the body of the build/install framework. If you are
# not happy with the default actions, and you can't solve it by
# adding pre-* or post-* targets/scripts, override these.
################################################################
# Pre-everything
# XXX MCL suggests deprecating this in favor of something
# less likely to be abused by overloading
pre-everything::
@${DO_NADA}
buildanyway-message:
.if defined(TRYBROKEN)
@${ECHO_MSG} "Trying build of ${PKGNAME} even though it is marked BROKEN."
.else
@${DO_NADA}
.endif
options-message:
.if defined(GNOME_OPTION_MSG) && (!defined(PACKAGE_BUILDING) || !defined(BATCH))
@for m in ${GNOME_OPTION_MSG}; do \
${ECHO_MSG} $$m; \
done
.else
@${DO_NADA}
.endif
-.if defined(_OPTIONS_READ)
+.if defined(_OPTIONSNG_READ)
+.if ${_OPTIONSNG_READ} == "default"
+ @${ECHO_MSG} "===> Building with default configuration, \`make config' to customize."
+.else
+ @${ECHO_MSG} "===> Building with saved configuration for ${_OPTIONSNG_READ}, \`make config' to change."
+.endif
+.elif defined(_OPTIONS_READ)
@${ECHO_MSG} "===> Found saved configuration for ${_OPTIONS_READ}"
.if ${OPTIONSFILE} != ${_OPTIONSFILE}
@${ECHO_MSG} "===> *** CAUTION *** Using wrong configuration file ${_OPTIONSFILE}"
.endif
.endif
-
# Warn user about deprecated packages. Advisory only.
.if !target(check-deprecated)
check-deprecated:
.if defined(DEPRECATED)
@${ECHO_MSG} "===> NOTICE:"
@${ECHO_MSG}
@${ECHO_MSG} "This port is deprecated; you may wish to reconsider installing it:"
@${ECHO_MSG}
@${ECHO_MSG} "${DEPRECATED}."
@${ECHO_MSG}
.if defined(EXPIRATION_DATE)
@${ECHO_MSG} "It is scheduled to be removed on or after ${EXPIRATION_DATE}."
@${ECHO_MSG}
.endif
.endif
.endif
# Check if the port is listed in the vulnerability database
.if ${PKGINSTALLVER} < 20040623 || ${OSVERSION} < 420001 || ${OSVERSION} >= 500000 && ${OSVERSION} < 500014
DISABLE_VULNERABILITIES= yes
.endif
AUDITFILE?= /var/db/portaudit/auditfile.tbz
AUDITURL?= http://www.FreeBSD.org/ports
AUDITEXPIRY?= 14
_EXTRACT_AUDITFILE= ${TAR} -jxOf "${AUDITFILE}" auditfile
.PHONY: update-auditfile
update-auditfile:
.if !defined(DISABLE_VULNERABILITIES) && !defined(PACKAGE_BUILDING)
@audit_expired=${TRUE}; \
if [ -f "${AUDITFILE}" ]; then \
audit_created=`${_EXTRACT_AUDITFILE} | \
${SED} -nEe "1s/^#CREATED: *([0-9]{4})-?([0-9]{2})-?([0-9]{2}).*$$/\1\2\3/p"`; \
audit_expiry=`${DATE} -u -v-${AUDITEXPIRY}d "+%Y%m%d"`; \
if [ "$$audit_created" -lt "$$audit_expiry" ]; then \
${ECHO_MSG} ">> Vulnerability database out of date."; \
else \
audit_expired=${FALSE}; \
fi; \
fi; \
if $$audit_expired; then \
if [ ! -w "${AUDITFILE:H}" -a `${ID} -u` != 0 ]; then \
if [ -z "${INSTALL_AS_USER}" ]; then \
${ECHO_MSG} "===> Switching to root credentials to fetch the vulnerability database."; \
- ${SU_CMD} "cd ${.CURDIR} && ${MAKE} ${.TARGET}"; \
+ ${SU_CMD} "cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${.TARGET}"; \
${ECHO_MSG} "===> Returning to user credentials"; \
else \
${ECHO_MSG} "===> Can't fetch the vulnerability database."; \
fi; \
else \
${ECHO_MSG} ">> Fetching vulnerability database from ${AUDITURL}."; \
if [ -f "${AUDITFILE}" ]; then \
${MV} -f "${AUDITFILE}" "${AUDITFILE}.old"; \
else \
${MKDIR} "${AUDITFILE:H}"; \
fi; \
if ${SETENV} ${FETCH_ENV} ${FETCH_CMD} -o "${AUDITFILE}" "${AUDITURL}/${AUDITFILE:T}"; then \
${CHMOD} a+r "${AUDITFILE}"; \
if [ -f "${AUDITFILE}.old" ]; then \
${RM} -f "${AUDITFILE}.old"; \
fi; \
else \
if [ -f "${AUDITFILE}.old" ]; then \
${ECHO_MSG} ">> Failed, using old database."; \
${MV} -f "${AUDITFILE}.old" "${AUDITFILE}"; \
fi; \
fi; \
fi; \
fi
.else
@${DO_NADA}
.endif
.PHONY: check-vulnerable
check-vulnerable: update-auditfile
.if !defined(DISABLE_VULNERABILITIES) && !defined(PACKAGE_BUILDING)
@if [ -r "${AUDITFILE}" ]; then \
if vlist=`${_EXTRACT_AUDITFILE} | ${GREP} -v '^#' | ${PKG_VERSION} -T '${PKGNAME}' -`; then \
${ECHO_MSG} "===> ${PKGNAME} has known vulnerabilities:"; \
${ECHO_MSG} "$$vlist" | ${AWK} -F\| '{ \
print ">> " $$3 "."; \
split($$2, ref, / /); \
for(r in ref) \
print " Reference: <" ref[r] ">" \
}'; \
${ECHO_MSG} ">> Please update your ports tree and try again."; \
exit 1; \
fi; \
else \
${ECHO_MSG} "===> Vulnerability check disabled, database not found."; \
fi
.else
@${ECHO_MSG} "===> Vulnerability check disabled."
.endif
+
+# Next generation options handling
+
+.if exists(${PERL5})
+OPTIONS_CMD?= ${PERL} -w ${PORTSDIR}/devel/portmk/scripts/options.pl
+.else
+OPTIONS_CMD?= eval ${ECHO_CMD} ">> ${PKGNAME}: ${PERL5} requried, please install ${PERL_PORT}."; exit 1
+.endif
+
+OPTIONS_SH?= ${PORTSDIR}/devel/portmk/scripts/options.sh
+
+_OPTIONS_ENV= \
+ CURDIR='${.CURDIR}' \
+ OBJDIR='${.OBJDIR}' \
+ MASTERDIR='${MASTERDIR}' \
+ PKGNAME='${PKGNAME}' \
+ PKGNAMESUFFIX='${PKGNAMESUFFIX}' \
+ OPTIONS_MASTER='${OPTIONS_MASTER}' \
+ OPTIONS_OVERRIDE='${OPTIONS_OVERRIDE}' \
+ OPTIONS_FILE='${OPTIONS_FILE}' \
+ OPTIONS_CMD='${OPTIONS_CMD}'
+
+.PHONY: config
+.PHONY: showconfig
+.PHONY: rmconfig
+.PHONY: menuconfig
+
+.if defined(_OPTIONSNG_READ)
+
+.if !target(config)
+config:
+ @${_OPTIONS_ENV}; \
+ set -- -e; \
+ . '${OPTIONS_SH}'
+.endif
+
+.if !target(menuconfig)
+menuconfig:
+ @${ECHO_MSG} "===> ${PKGNAME}: menuconfig is a reserved target."
+ @${FALSE}
+ @${_OPTIONS_ENV}; \
+ set -- -g; \
+ . '${OPTIONS_SH}'
+.endif
+
+.if !target(rmconfig)
+rmconfig:
+ @${ECHO_MSG} "===> ${PKGNAME}: Reverting to default configuration."
+ @${_OPTIONS_ENV}; \
+ set -- -d; \
+ . '${OPTIONS_SH}'
+.endif
+
+.if !target(showconfig)
+showconfig:
+ @${ECHO_MSG} "===> ${PKGNAME}: menuconfig is a reserved target."
+ @${FALSE}
+ @${_OPTIONS_ENV}; \
+ set -- -l; \
+ . '${OPTIONS_SH}'
+.endif
+
+.elif !defined(OPTIONS)
+
+.if !target(config)
+config:
+ @${ECHO_MSG} "===> ${PKGNAME} has no configurable options."
+.endif
+
+.if !target(menuconfig)
+menuconfig:
+ @${ECHO_MSG} "===> ${PKGNAME} has no configurable options."
+.endif
+
+.if !target(rmconfig)
+rmconfig:
+ @${ECHO_MSG} "===> ${PKGNAME} has no configurable options."
+.endif
+
+.if !target(showconfig)
+showconfig:
+ @${ECHO_MSG} "===> ${PKGNAME} has no configurable options."
+.endif
+
+.else
+
+menuconfig: config
+ @${DO_NADA}
+
+.endif
+
+.PHONY: makeconfig
+.if !target(makeconfig)
+makeconfig:
+ @${_OPTIONS_ENV}; \
+ set -- -c; \
+ . '${OPTIONS_SH}'
+.endif
+
+.PHONY: config-recursive
+.if !target(config-recursive)
+config-recursive:
+ @${ECHO_MSG} "===> ${PKGNAME}: config-recursive is a reserved target."
+ @${FALSE}
+.endif
+
# New style distfile handling
DISTFILES_SH?= ${PORTSDIR}/devel/portmk/scripts/distfiles.sh
DISTINFO_ALGORITHMS?= MD5
VALID_ALGORITHMS= MD5 SHA1 RMD160
MK_FILE?= ${MASTERDIR}/Makefile
.if !defined(DISTFILES_KEEP_QUOTING)
_FETCHDISTFILES_ENV= \
- DISTFILES='${DISTFILES:C/\\\\(.)/\1/g}'; \
- PATCHFILES='${PATCHFILES:C/\\\\(.)/\1/g}'
+ DISTFILES=${DISTFILES:C/\\\\(.)/\1/g:Q}; \
+ PATCHFILES=${PATCHFILES:C/\\\\(.)/\1/g:Q}
.else
_FETCHDISTFILES_ENV= \
- DISTFILES='${DISTFILES}'; \
- PATCHFILES='${PATCHFILES}'
+ DISTFILES=${DISTFILES:Q}; \
+ PATCHFILES=${PATCHFILES:Q}
.endif
.for env in \
MASTER_SITES MASTER_SITE_SUBDIR PATCH_SITES PATCH_SITE_SUBDIR \
_MASTER_SITE_BACKUP _MASTER_SITE_OVERRIDE \
DISABLE_SIZE DISTDIR DISTINFO_ALGORITHMS DISTINFO_LABEL \
DIST_SUBDIR ECHO_MSG FETCH_AFTER_ARGS FETCH_BEFORE_ARGS \
FETCH_CMD FETCH_SYMLINK_DISTFILES IGNOREFILES LOCALBASE \
MASTER_SORT_AWK MASTER_SORT_CMD MASTER_SORT_ENV MD5_FILE \
MK_FILE NO_CHECKSUM NO_SIZE OSVERSION PERL5 VALID_ALGORITHMS
_FETCHDISTFILES_ENV+= ; ${env}='${${env}}'
.endfor
+.if ${OSVERSION} >= 460000 # XXX This does not work with older make(1)s
.for env in ${VALID_ALGORITHMS} SIZE
_FETCHDISTFILES_ENV+= ; DISTINFO_${env}='${DISTINFO${DISTINFO_LABEL:C/^./_&/}_${env}}'
.endfor
+.endif
.PHONY: do-fetch
.if !target(do-fetch)
do-fetch:
@${_FETCHDISTFILES_ENV}; \
set -- -f; \
. '${DISTFILES_SH}'
.endif
.PHONY: checksum
.if !target(checksum)
checksum: fetch
@${DO_NADA}
.endif
.PHONY: makesum
.if !target(makesum)
makesum:
.if !defined(FETCH_ALL)
- @cd ${.CURDIR} && ${MAKE} FETCH_ALL=yes ${__softMAKEFLAGS} ${.TARGET}
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} FETCH_ALL=yes ${__softMAKEFLAGS} ${.TARGET}
.else
@${_FETCHDISTFILES_ENV}; \
set -- -m; \
. '${DISTFILES_SH}'
.endif
.endif
.PHONY: master-sites-all
.if !target(master-sites-all)
master-sites-all:
@${_FETCHDISTFILES_ENV}; \
set -- -t ''; \
. '${DISTFILES_SH}'
.endif
.PHONY: master-sites
.if !target(master-sites)
master-sites:
@${_FETCHDISTFILES_ENV}; \
set -- -t 'DEFAULT'; \
. '${DISTFILES_SH}'
.endif
.PHONY: patch-sites-all
.if !target(patch-sites-all)
patch-sites-all:
@${_FETCHDISTFILES_ENV}; \
set -- -T ''; \
. '${DISTFILES_SH}'
.endif
.PHONY: patch-sites
.if !target(patch-sites)
patch-sites:
@${_FETCHDISTFILES_ENV}; \
set -- -T 'DEFAULT'; \
. '${DISTFILES_SH}'
.endif
.PHONY: migratesum
.if !target(migratesum)
migratesum:
@${_FETCHDISTFILES_ENV}; \
set -- -M; \
. '${DISTFILES_SH}'
.endif
.PHONY: migratesum2
.if !target(migratesum2)
migratesum2:
@${_FETCHDISTFILES_ENV}; \
set -- -N; \
. '${DISTFILES_SH}'
.endif
.PHONY: checkdistsites
.if !target(checkdistsites)
checkdistsites:
.if !defined(FETCH_ALL)
- @cd ${.CURDIR} && ${MAKE} FETCH_ALL=yes ${__softMAKEFLAGS} ${.TARGET}
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} FETCH_ALL=yes ${__softMAKEFLAGS} ${.TARGET}
.else
@${_FETCHDISTFILES_ENV}; \
set -- -F; \
. '${DISTFILES_SH}'
.endif
.endif
.PHONY: checkdistfiles-recursive
.if !target(checkdistfiles-recursive)
checkdistfiles-recursive:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
- (cd $$dir; ${MAKE} ${__softMAKEFLAGS} checkdistfiles); \
+ (cd $$dir; ${MAKE} ${__softMAKEFLAGS} checkdistfiles); \
done
.endif
+.endif
# Prints out the total size of files missing in ${DISTDIR}
_MISSING_SIZE_SUMMARY= \
${AWK} ' \
BEGIN {t=0; f=0; u=0} \
{if ($$1 > 0) {t+=$$1; f+=1} else {u+=1}} \
END { \
if (t >= 10^9) \
s=sprintf("%.2f GBytes", t/10^9); \
else if (t >= 10^6) \
s=sprintf("%.2f MBytes", t/10^6); \
else if (t >= 10^3) \
s=sprintf("%.2f KBytes", t/10^3); \
else \
s=t " Bytes"; \
msg=ENVIRON["MISSING_MSG"] \
f " file(s) with a total size of " s; \
if (u) msg=msg " and " u " file(s) with unknown size."; \
print msg \
} \
'
.PHONY: missing-size
.if !target(missing-size)
missing-size:
- @cd ${.CURDIR} && ${MAKE} print-missing-files \
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} print-missing-files \
| ${SETENV} MISSING_MSG="To install ${PKGNAME}, you have to fetch " ${_MISSING_SIZE_SUMMARY}
.endif
.PHONY: missing-recursive-size
.if !target(missing-recursive-size)
missing-recursive-size:
- @cd ${.CURDIR} && ${MAKE} print-missing-recursive-files \
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} print-missing-recursive-files \
| ${SETENV} MISSING_MSG="To install ${PKGNAME} and its dependencies, you have to fetch " ${_MISSING_SIZE_SUMMARY}
.endif
.PHONY: print-missing-recursive-files
.if !target(print-missing-recursive-files)
print-missing-recursive-files:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
(cd $$dir; ${MAKE} print-missing-files); \
done | ${SORT} -u +1;
.endif
+.endif
.PHONY: print-missing-files
.if !target(print-missing-files)
print-missing-files:
@${_FETCHDISTFILES_ENV}; \
set -- -S; \
. '${DISTFILES_SH}'
.endif
.PHONY: fetch-list
.if !target(fetch-list)
fetch-list:
@${_FETCHDISTFILES_ENV}; \
set -- -L; \
. '${DISTFILES_SH}'
.endif
# Extract
.PHONY: do-extract
.if !target(do-extract)
do-extract:
@${RM} -rf ${WRKDIR}
@${MKDIR} ${WRKDIR}
.for file in ${EXTRACT_ONLY}
@cd ${WRKDIR} && ${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} "${_DISTDIR}/${file}" ${EXTRACT_AFTER_ARGS}
.endfor
.if !defined(EXTRACT_PRESERVE_OWNERSHIP)
@if [ `${ID} -u` = 0 ]; then \
${CHMOD} -R ug-s ${WRKDIR}; \
${CHOWN} -R 0:0 ${WRKDIR}; \
fi
.endif
.endif
# Patch
.if !target(do-patch)
do-patch:
.if defined(PATCHFILES)
@${ECHO_MSG} "===> Applying distribution patches for ${PKGNAME}"
@(cd ${_DISTDIR}; \
for i in ${_PATCHFILES}; do \
if [ ${PATCH_DEBUG_TMP} = yes ]; then \
${ECHO_MSG} "===> Applying distribution patch $$i" ; \
fi; \
case $$i in \
*.Z|*.gz) \
${GZCAT} "$$i" | ${PATCH} ${PATCH_DIST_ARGS}; \
;; \
*.bz2) \
${BZCAT} "$$i" | ${PATCH} ${PATCH_DIST_ARGS}; \
;; \
*) \
${PATCH} ${PATCH_DIST_ARGS} < "$$i"; \
;; \
esac; \
done)
.endif
.if defined(EXTRA_PATCHES)
@for i in ${EXTRA_PATCHES}; do \
${ECHO_MSG} "===> Applying extra patch $$i"; \
${PATCH} ${PATCH_ARGS} < "$$i"; \
done
.endif
@if [ -d ${PATCHDIR} ]; then \
if [ "`${ECHO_CMD} ${PATCHDIR}/patch-*`" != "${PATCHDIR}/patch-*" ]; then \
${ECHO_MSG} "===> Applying ${OPSYS} patches for ${PKGNAME}" ; \
PATCHES_APPLIED="" ; \
for i in ${PATCHDIR}/patch-*; do \
case $$i in \
*.orig|*.rej|*~|*,v) \
${ECHO_MSG} "===> Ignoring patchfile $$i" ; \
;; \
*) \
if [ ${PATCH_DEBUG_TMP} = yes ]; then \
${ECHO_MSG} "===> Applying ${OPSYS} patch $$i" ; \
fi; \
if ${PATCH} ${PATCH_ARGS} < "$$i" ; then \
PATCHES_APPLIED="$$PATCHES_APPLIED $$i" ; \
else \
${ECHO_MSG} `${ECHO_CMD} ">> Patch $$i failed to apply cleanly." | ${SED} "s|${PATCHDIR}/||"` ; \
if [ x"$$PATCHES_APPLIED" != x"" ]; then \
${ECHO_MSG} `${ECHO_CMD} ">> Patch(es) $$PATCHES_APPLIED applied cleanly." | ${SED} "s|${PATCHDIR}/||g"` ; \
fi; \
${FALSE} ; \
fi; \
;; \
esac; \
done; \
fi; \
fi
.endif
# Configure
.if !target(do-configure)
do-configure:
@if [ -f ${SCRIPTDIR}/configure ]; then \
cd ${.CURDIR} && ${SETENV} ${SCRIPTS_ENV} ${SH} \
${SCRIPTDIR}/configure; \
fi
.if defined(GNU_CONFIGURE)
@CONFIG_GUESS_DIRS=$$(${FIND} ${WRKDIR} -name config.guess -o -name config.sub \
| ${XARGS} -n 1 ${DIRNAME}); \
for _D in $${CONFIG_GUESS_DIRS}; do \
${CP} -f ${TEMPLATES}/config.guess $${_D}/config.guess; \
${CHMOD} a+rx $${_D}/config.guess; \
${CP} -f ${TEMPLATES}/config.sub $${_D}/config.sub; \
${CHMOD} a+rx $${_D}/config.sub; \
done
.endif
.if defined(HAS_CONFIGURE)
@(cd ${CONFIGURE_WRKSRC} && \
if ! ${SETENV} CC="${CC}" CXX="${CXX}" \
CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" \
INSTALL="/usr/bin/install -c ${_BINOWNGRP}" \
INSTALL_DATA="${INSTALL_DATA}" \
INSTALL_PROGRAM="${INSTALL_PROGRAM}" \
INSTALL_SCRIPT="${INSTALL_SCRIPT}" \
${CONFIGURE_ENV} ./${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS}; then \
${ECHO_CMD} "===> Script \"${CONFIGURE_SCRIPT}\" failed unexpectedly."; \
(${ECHO_CMD} ${CONFIGURE_FAIL_MESSAGE}) | ${FMT} 75 79 ; \
${FALSE}; \
fi)
.endif
.if defined(PERL_CONFIGURE)
@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
+.if ${PERL_LEVEL} <= 500503
+ @cd ${CONFIGURE_WRKSRC} && \
+ ${PERL5} -pi -e 's/^(INSTALLSITELIB|INSTALLSITEARCH|SITELIBEXP|SITEARCHEXP|INSTALLMAN1DIR|INSTALLMAN3DIR) = \/usr\/local/$$1 = \$$(PREFIX)/' Makefile
.endif
.endif
+.endif
.if defined(USE_IMAKE)
@(cd ${CONFIGURE_WRKSRC}; ${SETENV} ${MAKE_ENV} ${XMKMF})
.endif
.endif
# Build
.PHONY: do-build
.if !target(do-build)
do-build:
.if defined(USE_GMAKE)
@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${ALL_TARGET})
.else
.if defined(PERL_MODBUILD)
@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${ALL_TARGET})
.else
@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${ALL_TARGET})
.endif
.endif
.endif
# Check conflicts
.PHONY: check-conflicts
.if !target(check-conflicts)
check-conflicts:
.if defined(CONFLICTS) && !defined(DISABLE_CONFLICTS)
- @found=`${PKG_INFO} -I ${CONFLICTS:C/.+/'&'/} 2>/dev/null | ${AWK} '{print $$1}'`; \
+ @found=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -I ${CONFLICTS:C/.+/'&'/} 2>/dev/null | ${AWK} '{print $$1}'`; \
conflicts_with=; \
for entry in $${found}; do \
- prfx=`${PKG_INFO} -q -p "$${entry}" 2> /dev/null | ${SED} -ne '1s/^@cwd //p'`; \
- orgn=`${PKG_INFO} -q -o "$${entry}" 2> /dev/null`; \
+ prfx=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -q -p "$${entry}" 2> /dev/null | ${SED} -ne '1s/^@cwd //p'`; \
+ orgn=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -q -o "$${entry}" 2> /dev/null`; \
if [ "/${PREFIX}" = "/$${prfx}" -a "/${PKGORIGIN}" != "/$${orgn}" ]; then \
conflicts_with="$${conflicts_with} $${entry}"; \
fi; \
done; \
if [ -n "$${conflicts_with}" ]; then \
${ECHO_MSG}; \
${ECHO_MSG} "===> ${PKGNAME} conflicts with installed package(s): "; \
for entry in $${conflicts_with}; do \
${ECHO_MSG} " $${entry}"; \
done; \
${ECHO_MSG}; \
${ECHO_MSG} " They install files into the same place."; \
${ECHO_MSG} " Please remove them first with pkg_delete(1)."; \
exit 1; \
fi
.endif # CONFLICTS
.endif
# Install
.PHONY: do-install
.if !target(do-install)
do-install:
.if defined(USE_GMAKE)
@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET})
.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} install.man)
.if ${XFREE86_HTML_MAN:L} == yes
@${MKHTMLINDEX} ${PREFIX}/lib/X11/doc/html
.endif
.endif
.else # !defined(USE_GMAKE)
.if defined(PERL_MODBUILD)
@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${INSTALL_TARGET})
.else
@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET})
.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} install.man)
.if ${XFREE86_HTML_MAN:L} == yes
@${MKHTMLINDEX} ${PREFIX}/lib/X11/doc/html
.endif
.endif
.endif
.endif
.endif
# Package
+.if defined(DESTDIR) && ${PKGINSTALLVER} < 20040426
+check-makefile::
+ @${ECHO_CMD} "${PKGNAME}: Makefile error: please upgrade pkg_install to use DESTDIR"
+ @${FALSE}
+.endif
+
.PHONY: do-package
.if !target(do-package)
do-package: ${TMPPLIST}
@if [ -d ${PACKAGES} ]; then \
if [ ! -d ${PKGREPOSITORY} ]; then \
if ! ${MKDIR} ${PKGREPOSITORY}; then \
${ECHO_MSG} ">> Can't create directory ${PKGREPOSITORY}."; \
exit 1; \
fi; \
fi; \
fi
@__softMAKEFLAGS='${__softMAKEFLAGS:S/'/'\''/g}'; \
_LATE_PKG_ARGS=""; \
if [ -f ${PKGINSTALL} ]; then \
_LATE_PKG_ARGS="$${_LATE_PKG_ARGS} -i ${PKGINSTALL}"; \
fi; \
if [ -f ${PKGDEINSTALL} ]; then \
_LATE_PKG_ARGS="$${_LATE_PKG_ARGS} -k ${PKGDEINSTALL}"; \
fi; \
if [ -f ${PKGREQ} ]; then \
_LATE_PKG_ARGS="$${_LATE_PKG_ARGS} -r ${PKGREQ}"; \
fi; \
if [ -f ${PKGMESSAGE} ]; then \
_LATE_PKG_ARGS="$${_LATE_PKG_ARGS} -D ${PKGMESSAGE}"; \
fi; \
if ${PKG_CMD} ${PKG_ARGS} ${PKGFILE}; then \
if [ -d ${PACKAGES} ]; then \
- cd ${.CURDIR} && eval ${MAKE} $${__softMAKEFLAGS} package-links; \
+ cd ${.CURDIR} && eval ${MAKE} ${_ONG_MAKEFLAGS} $${__softMAKEFLAGS} package-links; \
fi; \
else \
- cd ${.CURDIR} && eval ${MAKE} $${__softMAKEFLAGS} delete-package; \
+ cd ${.CURDIR} && eval ${MAKE} ${_ONG_MAKEFLAGS} $${__softMAKEFLAGS} delete-package; \
exit 1; \
fi
.endif
# Some support rules for do-package
.PHONY: package-links
.if !target(package-links)
package-links: delete-package-links
@for cat in ${CATEGORIES}; do \
if [ ! -d ${PACKAGES}/$$cat ]; then \
if ! ${MKDIR} ${PACKAGES}/$$cat; then \
${ECHO_MSG} ">> Can't create directory ${PACKAGES}/$$cat."; \
exit 1; \
fi; \
fi; \
${LN} -sf `${ECHO_CMD} $$cat | ${SED} -e 'sa[^/]*a..ag'`/${PKGREPOSITORYSUBDIR}/${PKGNAME}${PKG_SUFX} ${PACKAGES}/$$cat; \
done
.if !defined(NO_LATEST_LINK)
@if [ ! -d ${PKGLATESTREPOSITORY} ]; then \
if ! ${MKDIR} ${PKGLATESTREPOSITORY}; then \
${ECHO_MSG} ">> Can't create directory ${PKGLATESTREPOSITORY}."; \
exit 1; \
fi; \
fi
@${LN} -s ../${PKGREPOSITORYSUBDIR}/${PKGNAME}${PKG_SUFX} ${PKGLATESTFILE}
.endif
.endif
.PHONY: delete-package-links
.if !target(delete-package-links)
delete-package-links:
@for cat in ${CATEGORIES}; do \
${RM} -f ${PACKAGES}/$$cat/${PKGNAME}${PKG_SUFX}; \
done
.if !defined(NO_LATEST_LINK)
@${RM} -f ${PKGLATESTFILE}
.endif
.endif
.PHONY: delete-package
.if !target(delete-package)
delete-package: delete-package-links
@${RM} -f ${PKGFILE}
.endif
.PHONY: delete-package-links-list
.if !target(delete-package-links-list)
delete-package-links-list:
@for cat in ${CATEGORIES}; do \
${ECHO_CMD} ${RM} -f ${PACKAGES}/$$cat/${PKGNAME}${PKG_SUFX}; \
done
.if !defined(NO_LATEST_LINK)
@${ECHO_CMD} ${RM} -f ${PKGLATESTFILE}
.endif
.endif
.PHONY: delete-package-list
.if !target(delete-package-list)
delete-package-list: delete-package-links-list
@${ECHO_CMD} "[ -f ${PKGFILE} ] && (${ECHO_CMD} deleting ${PKGFILE}; ${RM} -f ${PKGFILE})"
.endif
# Utility targets follow
.PHONY: check-already-installed
.if !target(check-already-installed)
check-already-installed:
.if !defined(NO_PKG_REGISTER) && !defined(FORCE_PKG_REGISTER)
@${ECHO_MSG} "===> Checking if ${PKGORIGIN} already installed"
- @${MKDIR} ${PKG_DBDIR}
- @already_installed=`${PKG_INFO} -q -O ${PKGORIGIN}`; \
+ @${MKDIR} ${_PKG_DBDIR}
+ @already_installed=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -q -O ${PKGORIGIN}`; \
if [ -n "$${already_installed}" ]; then \
for p in $${already_installed}; do \
- prfx=`${PKG_INFO} -q -p $${p} 2> /dev/null | ${SED} -ne '1s|^@cwd ||p'`; \
+ prfx=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -q -p $${p} 2> /dev/null | ${SED} -ne '1s|^@cwd ||p'`; \
if [ "x${PREFIX}" = "x$${prfx}" ]; then \
- df=`${PKG_INFO} -q -f $${p} 2> /dev/null | ${GREP} -v "^@" | ${COMM} -12 - ${TMPPLIST}`; \
- if [ -n "$${df}" ]; then \
- found_package=$${p}; \
- break; \
- fi; \
+ found_package=$${p}; \
+ break; \
fi; \
done; \
fi; \
- if [ -d ${PKG_DBDIR}/${PKGNAME} -o -n "$${found_package}" ]; then \
- if [ -d ${PKG_DBDIR}/${PKGNAME} ]; then \
+ if [ -n "$${found_package}" ]; then \
+ if [ "${PKGNAME}" = "$${found_package}" ]; then \
${ECHO_CMD} "===> ${PKGNAME} is already installed"; \
else \
${ECHO_CMD} "===> An older version of ${PKGORIGIN} is already installed ($${found_package})"; \
fi; \
${ECHO_CMD} " You may wish to \`\`make deinstall'' and install this port again"; \
${ECHO_CMD} " by \`\`make reinstall'' to upgrade it properly."; \
${ECHO_CMD} " If you really wish to overwrite the old port of ${PKGORIGIN}"; \
${ECHO_CMD} " without deleting it first, set the variable \"FORCE_PKG_REGISTER\""; \
${ECHO_CMD} " in your environment or the \"make install\" command line."; \
exit 1; \
fi
.else
@${DO_NADA}
.endif
.endif
.PHONY: check-umask
.if !target(check-umask)
check-umask:
@if [ `${SH} -c umask` != 0022 ]; then \
${ECHO_MSG} "===> Warning: your umask is \"`${SH} -c umask`"\".; \
${ECHO_MSG} " If this is not desired, set it to an appropriate value"; \
${ECHO_MSG} " and install this port again by \`\`make reinstall''."; \
fi
.endif
.PHONY: install-mtree
.if !target(install-mtree)
install-mtree:
- @${MKDIR} ${PREFIX}
+ @${MKDIR} ${DESTDIR}${PREFIX}
@if [ `${ID} -u` != 0 ]; then \
- if [ -w ${PREFIX}/ ]; then \
+ if [ -w ${DESTDIR}${PREFIX}/ ]; then \
${ECHO_MSG} "Warning: not superuser, you may get some errors during installation."; \
else \
- ${ECHO_MSG} "Error: ${PREFIX}/ not writable."; \
+ ${ECHO_MSG} "Error: ${DESTDIR}${PREFIX}/ not writable."; \
${FALSE}; \
fi; \
fi
.if !defined(NO_MTREE)
@if [ `${ID} -u` = 0 ]; then \
if [ ! -f ${MTREE_FILE} ]; then \
${ECHO_CMD} "Error: mtree file \"${MTREE_FILE}\" is missing."; \
${ECHO_CMD} "Copy it from a suitable location (e.g., /usr/src/etc/mtree) and try again."; \
exit 1; \
else \
- ${MTREE_CMD} ${MTREE_ARGS} ${PREFIX}/ >/dev/null; \
+ ${MTREE_CMD} ${MTREE_ARGS} ${DESTDIR}${PREFIX}/ >/dev/null; \
if [ ${MTREE_FILE} = "/etc/mtree/BSD.local.dist" ]; then \
- cd ${PREFIX}/share/nls; \
+ cd ${DESTDIR}${PREFIX}/share/nls; \
${LN} -shf C POSIX; \
${LN} -shf C en_US.US-ASCII; \
fi; \
fi; \
else \
${ECHO_MSG} "Warning: not superuser, can't run mtree."; \
${ECHO_MSG} "You may want to become root and try again to ensure correct permissions."; \
fi
.endif
.endif
.PHONY: run-ldconfig
.if !target(run-ldconfig)
run-ldconfig:
.if defined(INSTALLS_SHLIB)
.if !defined(INSTALL_AS_USER)
@${ECHO_MSG} "===> Running ldconfig"
${LDCONFIG} -m ${LDCONFIG_RUNLIST}
.else
@${ECHO_MSG} "===> Running ldconfig (errors are ignored)"
-${LDCONFIG} -m ${LDCONFIG_RUNLIST}
.endif
.else
@${DO_NADA}
.endif
.endif
.PHONY: security-check
.if !target(security-check)
security-check:
# Scan PLIST for:
# 1. setugid files
# 2. accept()/recvfrom() which indicates network listening capability
# 3. insecure functions (gets/mktemp/tempnam/[XXX])
# 4. startup scripts, in conjunction with 2.
# 5. world-writable files/dirs
#
-@${RM} -f ${WRKDIR}/.PLIST.setuid ${WRKDIR}/.PLIST.writable ${WRKDIR}/.PLIST.objdump; \
${AWK} -v prefix='${PREFIX}' ' \
match($$0, /^@cwd /) { prefix = substr($$0, RSTART + RLENGTH); next; } \
/^@/ { next; } \
/^\// { print; next; } \
{ print prefix "/" $$0; } \
' ${TMPPLIST} > ${WRKDIR}/.PLIST.flattened; \
${TR} '\n' '\0' < ${WRKDIR}/.PLIST.flattened \
| ${XARGS} -0 -J % ${FIND} % -prune ! -type l -type f \( -perm -4000 -o -perm -2000 \) \( -perm -0010 -o -perm -0001 \) 2> /dev/null > ${WRKDIR}/.PLIST.setuid; \
${TR} '\n' '\0' < ${WRKDIR}/.PLIST.flattened \
| ${XARGS} -0 -J % ${FIND} % -prune -perm -0002 \! -type l 2> /dev/null > ${WRKDIR}/.PLIST.writable; \
${TR} '\n' '\0' < ${WRKDIR}/.PLIST.flattened \
| ${XARGS} -0 -J % ${FIND} % -prune ! -type l -type f -print0 2> /dev/null \
| ${XARGS} -0 -n 1 ${OBJDUMP} -R 2> /dev/null > ${WRKDIR}/.PLIST.objdump; \
if \
! ${AWK} -v audit="$${PORTS_AUDIT}" -f ${PORTSDIR}/Tools/scripts/security-check.awk \
${WRKDIR}/.PLIST.flattened ${WRKDIR}/.PLIST.objdump ${WRKDIR}/.PLIST.setuid ${WRKDIR}/.PLIST.writable; \
then \
- www_site=$$(cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} www-site); \
+ www_site=$$(cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} www-site); \
if [ ! -z "$${www_site}" ]; then \
${ECHO_MSG}; \
${ECHO_MSG} " For more information, and contact details about the security"; \
${ECHO_MSG} " status of this software, see the following webpage: "; \
${ECHO_MSG} "$${www_site}"; \
fi; \
fi
.endif
################################################################
# Skeleton targets start here
#
# You shouldn't have to change these. Either add the pre-* or
# post-* targets/scripts or redefine the do-* targets. These
# targets don't do anything other than checking for cookies and
# call the necessary targets/scripts.
################################################################
# Please note that the order of the following targets is important, and
# should not be modified.
_BOOTSTRAP_SEQ= bootstrap-depends
_SANITY_DEP= bootstrap
_SANITY_SEQ= pre-everything check-makefile check-categories \
check-makevars check-depends check-deprecated \
check-vulnerable buildanyway-message options-message
_FETCH_DEP= check-sanity
_FETCH_SEQ= fetch-depends pre-fetch pre-fetch-script \
do-fetch post-fetch post-fetch-script
_EXTRACT_DEP= fetch
_EXTRACT_SEQ= extract-message extract-depends pre-extract \
pre-extract-script do-extract \
post-extract post-extract-script
_PATCH_DEP= extract
_PATCH_SEQ= patch-message patch-depends pre-patch pre-patch-script \
do-patch post-patch post-patch-script
_CONFIGURE_DEP= patch
_CONFIGURE_SEQ= build-depends lib-depends misc-depends configure-message \
pre-configure pre-configure-script patch-autotools \
run-autotools do-configure post-configure post-configure-script
_BUILD_DEP= configure
_BUILD_SEQ= build-message pre-build pre-build-script do-build \
post-build post-build-script
_INSTALL_DEP= build
_INSTALL_SEQ= install-message check-conflicts \
run-depends lib-depends pre-install pre-install-script \
generate-plist check-already-installed
_INSTALL_SUSEQ= check-umask install-mtree pre-su-install \
pre-su-install-script do-install post-install \
post-install-script add-plist-info add-plist-docs \
compress-man run-ldconfig fake-pkg security-check
_PACKAGE_DEP= install
_PACKAGE_SEQ= package-message pre-package pre-package-script \
- do-package post-package-script
+ do-package post-package post-package-script
.PHONY: bootstrap
.if !target(bootstrap)
bootstrap: ${_BOOTSTRAP_SEQ}
.endif
.PHONY: check-sanity
-.if !target(check-sanity)
+.if !target(check-sanity) && defined(_ONG_REEXEC)
+check-sanity:
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.elif !target(check-sanity)
check-sanity: ${_SANITY_DEP} ${_SANITY_SEQ}
.endif
# XXX MCL might need to move in loop below?
.PHONY: fetch
-.if !target(fetch)
+.if !target(fetch) && defined(_ONG_REEXEC)
+fetch:
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.elif !target(${target})
fetch: ${_FETCH_DEP} ${_FETCH_SEQ}
.endif
# Main logic. The loop generates 6 main targets and using cookies
# ensures that those already completed are skipped.
.for target in extract patch configure build install package
.PHONY: ${target}
-.if !target(${target}) && defined(_OPTIONS_OK)
+.if !target(${target}) && defined(_ONG_REEXEC)
+${target}:
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.elif !target(${target}) && defined(_OPTIONS_OK)
${target}: ${${target:U}_COOKIE}
.elif !target(${target})
${target}: config
@cd ${.CURDIR} && ${MAKE} CONFIG_DONE=1 ${__softMAKEFLAGS} ${${target:U}_COOKIE}
-.elif target(${target}) && defined(IGNORE)
.endif
.if !exists(${${target:U}_COOKIE})
.if ${UID} != 0 && defined(_${target:U}_SUSEQ) && !defined(INSTALL_AS_USER)
-.if defined(USE_SUBMAKE)
+.if defined(USE_SUBMAKE) || defined(_ONG_REEXEC)
${${target:U}_COOKIE}: ${_${target:U}_DEP}
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} ${_${target:U}_SEQ}
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${_${target:U}_SEQ}
.else
${${target:U}_COOKIE}: ${_${target:U}_DEP} ${_${target:U}_SEQ}
.endif
@${ECHO_MSG} "===> Switching to root credentials for '${target}' target"
@cd ${.CURDIR} && \
- ${SU_CMD} "${MAKE} ${__softMAKEFLAGS} ${_${target:U}_SUSEQ}"
+ ${SU_CMD} "${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${_${target:U}_SUSEQ}"
@${ECHO_MSG} "===> Returning to user credentials"
@${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
-.elif defined(USE_SUBMAKE)
+.elif defined(USE_SUBMAKE) || defined(_ONG_REEXEC)
${${target:U}_COOKIE}: ${_${target:U}_DEP}
@cd ${.CURDIR} && \
- ${MAKE} ${__softMAKEFLAGS} ${_${target:U}_SEQ} ${_${target:U}_SUSEQ}
+ ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${_${target:U}_SEQ} ${_${target:U}_SUSEQ}
@${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
.else
${${target:U}_COOKIE}: ${_${target:U}_DEP} ${_${target:U}_SEQ} ${_${target:U}_SUSEQ}
@${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
.endif
.else
${${target:U}_COOKIE}::
@if [ -e ${.TARGET} ]; then \
${DO_NADA}; \
else \
- cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} ${.TARGET}; \
+ cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}; \
fi
.endif
.endfor
# Enforce order for -jN builds
.ORDER: ${_BOOTSTRAP_SEQ}
.ORDER: ${_SANITY_DEP} ${_SANITY_SEQ}
.ORDER: ${_FETCH_DEP} ${_FETCH_SEQ}
.ORDER: ${_EXTRACT_DEP} ${_EXTRACT_SEQ}
.ORDER: ${_PATCH_DEP} ${_PATCH_SEQ}
.ORDER: ${_CONFIGURE_DEP} ${_CONFIGURE_SEQ}
.ORDER: ${_BUILD_DEP} ${_BUILD_SEQ}
.ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ}
.ORDER: ${_PACKAGE_DEP} ${_PACKAGE_SEQ}
.PHONY: extract-message patch-message configure-message build-message install-message package-message
extract-message:
@${ECHO_MSG} "===> Extracting for ${PKGNAME}"
patch-message:
@${ECHO_MSG} "===> Patching for ${PKGNAME}"
configure-message:
@${ECHO_MSG} "===> Configuring for ${PKGNAME}"
build-message:
@${ECHO_MSG} "===> Building for ${PKGNAME}"
install-message:
@${ECHO_MSG} "===> Installing for ${PKGNAME}"
package-message:
@${ECHO_MSG} "===> Building package for ${PKGNAME}"
# Empty pre-* and post-* targets
.for stage in pre post
.for name in fetch extract patch configure build install package
.PHONY: ${stage}-${name} ${stage}-${name}-script
.if !target(${stage}-${name})
${stage}-${name}:
@${DO_NADA}
.endif
.if !target(${stage}-${name}-script)
${stage}-${name}-script:
@if [ -f ${SCRIPTDIR}/${.TARGET:S/-script$//} ]; then \
cd ${.CURDIR} && ${SETENV} ${SCRIPTS_ENV} ${SH} \
${SCRIPTDIR}/${.TARGET:S/-script$//}; \
fi
.endif
.endfor
.endfor
# Special cases for su
.PHONY: pre-su-install pre-su-install-script
.if !target(pre-su-install)
pre-su-install:
@${DO_NADA}
.endif
.if !target(pre-su-install-script)
pre-su-install-script:
@${DO_NADA}
.endif
.PHONY: pretty-print-www-site
.if !target(pretty-print-www-site)
pretty-print-www-site:
- @www_site=$$(cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} www-site); \
+ @www_site=$$(cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} www-site); \
if [ -n "$${www_site}" ]; then \
${ECHO_CMD} -n " and/or visit the "; \
${ECHO_CMD} -n "web site"; \
${ECHO_CMD} " for futher informations"; \
fi
.endif
################################################################
# Some more targets supplied for users' convenience
################################################################
# Checkpatch
#
# Special target to verify patches
.PHONY: checkpatch
.if !target(checkpatch)
checkpatch:
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} PATCH_CHECK_ONLY=yes ${_PATCH_DEP} ${_PATCH_SEQ}
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} PATCH_CHECK_ONLY=yes ${_PATCH_DEP} ${_PATCH_SEQ}
.endif
# Reinstall
#
# Special target to re-run install
.PHONY: reinstall
.if !target(reinstall)
reinstall:
@${RM} -f ${INSTALL_COOKIE} ${PACKAGE_COOKIE}
- @cd ${.CURDIR} && DEPENDS_TARGET="${DEPENDS_TARGET}" ${MAKE} install
+ @cd ${.CURDIR} && DEPENDS_TARGET="${DEPENDS_TARGET}" DESTDIR=${DESTDIR} ${MAKE} ${_ONG_MAKEFLAGS} install
.endif
# Deinstall
#
# Special target to remove installation
.PHONY: deinstall
.if !target(deinstall)
deinstall:
+ @if [ -n "${DESTDIR}" ]; then \
+ ${ECHO_MSG} "===> Can't deinstall from DESTDIR: ${DESTDIR}"; \
+ ${FALSE}; \
+ fi
.if ${UID} != 0 && !defined(INSTALL_AS_USER)
@${ECHO_MSG} "===> Switching to root credentials for '${.TARGET}' target"
@cd ${.CURDIR} && \
- ${SU_CMD} "${MAKE} ${__softMAKEFLAGS} ${.TARGET}"
+ ${SU_CMD} "${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}"
@${ECHO_MSG} "===> Returning to user credentials"
.else
@${ECHO_MSG} "===> Deinstalling for ${PKGORIGIN}"
- @found_names=`${PKG_INFO} -q -O ${PKGORIGIN}`; \
+ @found_names=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -q -O ${PKGORIGIN}`; \
for p in $${found_names}; do \
check_name=`${ECHO_CMD} $${p} | ${SED} -e 's/-[^-]*$$//'`; \
if [ "$${check_name}" = "${PKGBASE}" ]; then \
- prfx=`${PKG_INFO} -q -p $${p} 2> /dev/null | ${SED} -ne '1s|^@cwd ||p'`; \
+ prfx=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -q -p $${p} 2> /dev/null | ${SED} -ne '1s|^@cwd ||p'`; \
if [ "x${PREFIX}" = "x$${prfx}" ]; then \
${ECHO_MSG} "===> Deinstalling $${p}"; \
- ${PKG_DELETE} -f $${p}; \
+ ${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_DELETE} -f $${p}; \
else \
${ECHO_MSG} "===> $${p} has a different PREFIX: $${prfx}, skipping"; \
fi; \
fi; \
done; \
if [ -z "$${found_names}" ]; then \
${ECHO_MSG} "===> ${PKGBASE} not installed, skipping"; \
fi
@${RM} -f ${INSTALL_COOKIE} ${PACKAGE_COOKIE}
.endif
.endif
# Deinstall-all
#
# Special target to remove installation of all ports of the same origin
.PHONY: deinstall-all
.if !target(deinstall-all)
deinstall-all:
+ @if [ -n "${DESTDIR}" ]; then \
+ ${ECHO_MSG} "===> Can't deinstall from DESTDIR: ${DESTDIR}"; \
+ ${FALSE}; \
+ fi
.if ${UID} != 0 && !defined(INSTALL_AS_USER)
@${ECHO_MSG} "===> Switching to root credentials for '${.TARGET}' target"
@cd ${.CURDIR} && \
- ${SU_CMD} "${MAKE} ${__softMAKEFLAGS} ${.TARGET}"
+ ${SU_CMD} "${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}"
@${ECHO_MSG} "===> Returning to user credentials"
.else
@${ECHO_MSG} "===> Deinstalling for ${PKGORIGIN}"
- @deinstall_names=`${PKG_INFO} -q -O ${PKGORIGIN}`; \
+ @deinstall_names=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -q -O ${PKGORIGIN}`; \
if [ -n "$${deinstall_names}" ]; then \
for d in $${deinstall_names}; do \
${ECHO_MSG} "===> Deinstalling $${d}"; \
- ${PKG_DELETE} -f $${d}; \
+ ${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_DELETE} -f $${d}; \
done; \
else \
${ECHO_MSG} "===> ${PKGORIGIN} not installed, skipping"; \
fi
@${RM} -f ${INSTALL_COOKIE} ${PACKAGE_COOKIE}
.endif
.endif
# Cleaning up
.PHONY: do-clean
.if !target(do-clean)
do-clean:
@if [ -d ${WRKDIR} ]; then \
if [ -w ${WRKDIR} ]; then \
${RM} -rf ${WRKDIR}; \
else \
${ECHO_MSG} "===> ${WRKDIR} not writable, skipping"; \
fi; \
fi
.endif
.PHONY: clean
.if !target(clean)
clean:
.if !defined(NOCLEANDEPENDS)
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} clean-depends
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} clean-depends
.endif
@${ECHO_MSG} "===> Cleaning for ${PKGNAME}"
.if target(pre-clean)
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} pre-clean
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} pre-clean
.endif
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} do-clean
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} do-clean
.if target(post-clean)
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} post-clean
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} post-clean
.endif
.endif
.PHONY: pre-distclean
.if !target(pre-distclean)
pre-distclean:
@${DO_NADA}
.endif
.PHONY: distclean
.if !target(distclean)
distclean: pre-distclean clean
- @cd ${.CURDIR} && ${MAKE} delete-distfiles RESTRICTED_FILES="${_DISTFILES} ${_PATCHFILES}"
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} delete-distfiles RESTRICTED_FILES='$${_DISTFILES} $${_PATCHFILES}'
.endif
.PHONY: delete-distfiles
.if !target(delete-distfiles)
delete-distfiles:
@${ECHO_MSG} "===> Deleting distfiles for ${PKGNAME}"
.if defined(RESTRICTED_FILES)
@if [ -d "${_DISTDIR}" ]; then ( \
cd "${_DISTDIR}"; \
RESTRICTED_FILES="${RESTRICTED_FILES}"; \
for file in $${RESTRICTED_FILES}; do \
${RM} -f "$${file}"; \
dir="$${file%/*}"; \
if [ "$${dir}" != "$${file}" ]; then \
${RMDIR} -p "$${dir}" >/dev/null 2>&1 || ${TRUE}; \
fi; \
done \
); fi
.endif
.if defined(DIST_SUBDIR)
@${RMDIR} "${_DISTDIR}" >/dev/null 2>&1 || ${TRUE}
.endif
.endif
.PHONY: delete-distfiles-list
.if !target(delete-distfiles-list)
delete-distfiles-list:
@${ECHO_CMD} "# ${PKGNAME}"
@if [ "X${RESTRICTED_FILES}" != "X" ]; then \
for file in ${RESTRICTED_FILES}; do \
${ECHO_CMD} "[ -f ${_DISTDIR}/$$file ] && (${ECHO_CMD} deleting ${_DISTDIR}/$$file; ${RM} -f ${_DISTDIR}/$$file)"; \
dir=$${file%/*}; \
if [ "$${dir}" != "$${file}" ]; then \
${ECHO_CMD} "(cd ${_DISTDIR} && ${RMDIR} -p $${dir} 2>/dev/null)"; \
fi; \
done; \
fi
.if defined(DIST_SUBDIR)
@${ECHO_CMD} "${RMDIR} ${_DISTDIR} 2>/dev/null || ${TRUE}"
.endif
.endif
# Generates patches.
.PHONY: update-patches
.if !target(update-patches)
update-patches:
@toedit=`PATCH_WRKSRC=${PATCH_WRKSRC} \
PATCHDIR=${PATCHDIR} \
PATCH_LIST=${PATCHDIR}/patch-* \
DIFF_ARGS=${DIFF_ARGS} \
DISTORIG=${DISTORIG} \
${SH} ${PORTSDIR}/Tools/scripts/update-patches`; \
case $$toedit in "");; \
*) ${ECHO_CMD} -n 'edit patches: '; read i; \
cd ${PATCHDIR} && $${VISUAL:-$${EDIT:-/usr/bin/vi}} $$toedit;; esac
.endif
################################################################
# The special package-building targets
# You probably won't need to touch these
################################################################
# Nobody should want to override this unless PKGNAME is simply bogus.
.PHONY: package-name
.if !target(package-name)
package-name:
@${ECHO_CMD} ${PKGNAME}
.endif
# Build a package but don't check the package cookie
.PHONY: repackage
.if !target(repackage)
.PHONY: repackage pre-repackage
.ORDER: pre-repackage package
repackage: pre-repackage package
pre-repackage:
@${RM} -f ${PACKAGE_COOKIE}
.endif
# Build a package but don't check the cookie for installation, also don't
# install package cookie
.PHONY: package-noinstall
.if !target(package-noinstall)
package-noinstall:
@${MKDIR} ${WRKDIR}
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} pre-package \
- pre-package-script do-package post-package-script
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} pre-package \
+ pre-package-script do-package post-package post-package-script
@${RM} -f ${TMPPLIST}
-@${RMDIR} ${WRKDIR}
.endif
################################################################
# Dependency checking
################################################################
.PHONY: depends
.if !target(depends)
depends: extract-depends patch-depends lib-depends misc-depends fetch-depends build-depends run-depends
.if defined(ALWAYS_BUILD_DEPENDS)
_DEPEND_ALWAYS= 1
.else
_DEPEND_ALWAYS= 0
.endif
.if defined(INSTALLS_DEPENDS) && defined(INSTALLS_BOOTSTRAP)
bootstrap-depends:
@${DO_NADA}
.endif
.for deptype in BOOTSTRAP FETCH EXTRACT PATCH BUILD RUN
.PHONY: ${deptype:L}-depends
+.if !target(${deptype:L}-depends)
${deptype:L}-depends:
.if defined(${deptype}_DEPENDS)
.if !defined(NO_DEPENDS)
@if [ -n "INSTALLS_BOOTSTRAP" -o "${deptype:L}" = "bootstrap" ]; then \
submake_args="-DINSTALLS_BOOTSTRAP -DINSTALLS_DEPENDS"; \
else \
submake_args="-DINSTALLS_DEPENDS"; \
fi; \
for i in ${${deptype}_DEPENDS}; do \
prog=`${ECHO_CMD} $$i | ${SED} -e 's/:.*//'`; \
dir=`${ECHO_CMD} $$i | ${SED} -e 's/[^:]*://'`; \
if ${EXPR} "$$dir" : '.*:' > /dev/null; then \
target=`${ECHO_CMD} $$dir | ${SED} -e 's/.*://'`; \
dir=`${ECHO_CMD} $$dir | ${SED} -e 's/:.*//'`; \
else \
target="${DEPENDS_TARGET}"; \
depends_args="${DEPENDS_ARGS}"; \
fi; \
if ${EXPR} "$$prog" : \\/ >/dev/null; then \
if [ -e "$$prog" ]; then \
if [ "$$prog" = "${NONEXISTENT}" ]; then \
${ECHO_MSG} "Error: ${NONEXISTENT} exists. Please remove it, and restart the build."; \
${FALSE}; \
else \
${ECHO_MSG} "===> ${PKGNAME} depends on file: $$prog - found"; \
if [ ${_DEPEND_ALWAYS} = 1 ]; then \
${ECHO_MSG} " (but building it anyway)"; \
notfound=1; \
else \
notfound=0; \
fi; \
fi; \
else \
${ECHO_MSG} "===> ${PKGNAME} depends on file: $$prog - not found"; \
notfound=1; \
fi; \
else \
if ${WHICH} "$$prog" > /dev/null 2>&1 ; then \
${ECHO_MSG} "===> ${PKGNAME} depends on executable: $$prog - found"; \
if [ ${_DEPEND_ALWAYS} = 1 ]; then \
${ECHO_MSG} " (but building it anyway)"; \
notfound=1; \
else \
notfound=0; \
fi; \
else \
${ECHO_MSG} "===> ${PKGNAME} depends on executable: $$prog - not found"; \
notfound=1; \
fi; \
fi; \
if [ $$notfound != 0 ]; then \
${ECHO_MSG} "===> Verifying $$target for $$prog in $$dir"; \
if [ ! -d "$$dir" ]; then \
${ECHO_MSG} " >> No directory for $$prog. Skipping.."; \
else \
if [ X${USE_PACKAGE_DEPENDS} != "X" ]; then \
subpkgfile=`(cd $$dir; ${MAKE} $$depends_args -V PKGFILE)`; \
if [ -r "$${subpkgfile}" -a "$$target" = "${DEPENDS_TARGET}" ]; then \
${ECHO_MSG} "===> Installing existing package $${subpkgfile}"; \
${PKG_ADD} $${subpkgfile}; \
else \
(cd $$dir; ${MAKE} $$submake_args $$target $$depends_args) ; \
fi; \
else \
(cd $$dir; ${MAKE} $$submake_args $$target $$depends_args) ; \
fi ; \
${ECHO_MSG} "===> Returning to build of ${PKGNAME}"; \
fi; \
fi; \
done
.endif
.else
@${DO_NADA}
.endif
+.endif
.endfor
.PHONY: lib-depends
+.if !target(lib-depends)
lib-depends:
.if defined(LIB_DEPENDS) && !defined(NO_DEPENDS)
@for i in ${LIB_DEPENDS}; do \
lib=$${i%%:*}; \
case $$lib in \
*.*.*) pattern="`${ECHO_CMD} $$lib | ${SED} -e 's/\./\\\\./g'`" ;;\
*.*) pattern="$${lib%%.*}\.$${lib#*.}" ;;\
*) pattern="$$lib" ;;\
esac; \
dir=$${i#*:}; \
target=$${i##*:}; \
if ${TEST} $$dir = $$target; then \
target="${DEPENDS_TARGET}"; \
depends_args="${DEPENDS_ARGS}"; \
else \
dir=$${dir%%:*}; \
fi; \
${ECHO_MSG} -n "===> ${PKGNAME} depends on shared library: $$lib"; \
if ${LDCONFIG} -r | ${GREP} -vwF -e "${PKGCOMPATDIR}" | ${GREP} -qwE -e "-l$$pattern"; then \
${ECHO_MSG} " - found"; \
if [ ${_DEPEND_ALWAYS} = 1 ]; then \
${ECHO_MSG} " (but building it anyway)"; \
notfound=1; \
else \
notfound=0; \
fi; \
else \
${ECHO_MSG} " - not found"; \
notfound=1; \
fi; \
if [ $$notfound != 0 ]; then \
${ECHO_MSG} "===> Verifying $$target for $$lib in $$dir"; \
if [ ! -d "$$dir" ]; then \
${ECHO_MSG} " >> No directory for $$lib. Skipping.."; \
else \
if [ X${USE_PACKAGE_DEPENDS} != "X" ]; then \
subpkgfile=`(cd $$dir; ${MAKE} $$depends_args -V PKGFILE)`; \
if [ -r "$${subpkgfile}" -a "$$target" = "${DEPENDS_TARGET}" ]; then \
${ECHO_MSG} "===> Installing existing package $${subpkgfile}"; \
${PKG_ADD} $${subpkgfile}; \
else \
(cd $$dir; ${MAKE} -DINSTALLS_DEPENDS $$target $$depends_args) ; \
fi; \
else \
(cd $$dir; ${MAKE} -DINSTALLS_DEPENDS $$target $$depends_args) ; \
fi ; \
${ECHO_MSG} "===> Returning to build of ${PKGNAME}"; \
if ! ${LDCONFIG} -r | ${GREP} -vwF -e "${PKGCOMPATDIR}" | ${GREP} -qwE -e "-l$$pattern"; then \
${ECHO_MSG} "Error: shared library \"$$lib\" does not exist"; \
${FALSE}; \
fi; \
fi; \
fi; \
done
.endif
+.endif
.PHONY: misc-depends
+.if !target(misc-depends)
misc-depends:
.if defined(DEPENDS)
.if !defined(NO_DEPENDS)
@for dir in ${DEPENDS}; do \
if ${EXPR} "$$dir" : '.*:' > /dev/null; then \
target=`${ECHO_CMD} $$dir | ${SED} -e 's/.*://'`; \
dir=`${ECHO_CMD} $$dir | ${SED} -e 's/:.*//'`; \
else \
target="${DEPENDS_TARGET}"; \
depends_args="${DEPENDS_ARGS}"; \
fi; \
${ECHO_MSG} "===> ${PKGNAME} depends on: $$dir"; \
${ECHO_MSG} "===> Verifying $$target for $$dir"; \
if [ ! -d $$dir ]; then \
${ECHO_MSG} " >> No directory for $$dir. Skipping.."; \
else \
(cd $$dir; ${MAKE} $$target $$depends_args) ; \
fi \
done
@${ECHO_MSG} "===> Returning to build of ${PKGNAME}"
.endif
.else
@${DO_NADA}
.endif
+.endif
.endif
# Dependency lists: both build and runtime, recursive. Print out directory names.
.PHONY: all-depends-list
all-depends-list:
-.if defined(EXTRACT_DEPENDS) || defined(PATCH_DEPENDS) || defined(FETCH_DEPENDS) || defined(BUILD_DEPENDS) || defined(LIB_DEPENDS) || defined(RUN_DEPENDS) || defined(DEPENDS)
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.elif defined(EXTRACT_DEPENDS) || defined(PATCH_DEPENDS) || defined(FETCH_DEPENDS) || defined(BUILD_DEPENDS) || defined(LIB_DEPENDS) || defined(RUN_DEPENDS) || defined(DEPENDS)
@${ALL-DEPENDS-LIST}
+.else
+ @${DO_NADA}
.endif
+.if defined(_ONG_REEXEC)
ALL-DEPENDS-LIST= \
+ ${ECHO_MSG} "${PKGNAME}: configuration error." >&2; ${FALSE}
+.else
+ALL-DEPENDS-LIST= \
checked="${PARENT_CHECKED}"; \
for dir in $$(${ECHO_CMD} "${EXTRACT_DEPENDS} ${PATCH_DEPENDS} ${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS} ${RUN_DEPENDS}" | ${SED} -e 'y/ /\n/' | ${CUT} -f 2 -d ':') $$(${ECHO_CMD} ${DEPENDS} | ${SED} -e 'y/ /\n/' | ${CUT} -f 1 -d ':'); do \
if [ -d $$dir ]; then \
if (${ECHO_CMD} $$checked | ${GREP} -qwv "$$dir"); then \
child=$$(cd $$dir; ${MAKE} PARENT_CHECKED="$$checked" all-depends-list); \
for d in $$child; do ${ECHO_CMD} $$d; done; \
${ECHO_CMD} $$dir; \
checked="$$dir $$child $$checked"; \
fi; \
else \
${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \
fi; \
done | ${SORT} -u
+.endif
.PHONY: clean-depends
.if !target(clean-depends)
clean-depends:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@for dir in $$(${ALL-DEPENDS-LIST}); do \
(cd $$dir; ${MAKE} NOCLEANDEPENDS=yes clean); \
done
.endif
+.endif
.PHONY: deinstall-depends
.if !target(deinstall-depends)
deinstall-depends:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@for dir in $$(${ALL-DEPENDS-LIST}); do \
(cd $$dir; ${MAKE} deinstall); \
done
.endif
+.endif
.PHONY: fetch-recursive
.if !target(fetch-recursive)
fetch-recursive:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@${ECHO_MSG} "===> Fetching all distfiles for ${PKGNAME} and dependencies"
@for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
(cd $$dir; ${MAKE} fetch); \
done
.endif
+.endif
.PHONY: fetch-recursive-list
.if !target(fetch-recursive-list)
fetch-recursive-list:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
(cd $$dir; ${MAKE} fetch-list); \
done
.endif
+.endif
.PHONY: fetch-required
.if !target(fetch-required)
fetch-required: fetch
@${ECHO_MSG} "===> Fetching all required distfiles for ${PKGNAME} and dependencies"
.for deptype in EXTRACT PATCH FETCH BUILD RUN
.if defined(${deptype}_DEPENDS)
.if !defined(NO_DEPENDS)
@for i in ${${deptype}_DEPENDS}; do \
prog=`${ECHO_CMD} $$i | ${CUT} -f 1 -d ':'`; \
dir=`${ECHO_CMD} $$i | ${CUT} -f 2-999 -d ':'`; \
if ${EXPR} "$$dir" : '.*:' > /dev/null; then \
dir=`${ECHO_CMD} $$dir | ${CUT} -f 1 -d ':'`; \
if ${EXPR} "$$prog" : \\/ >/dev/null; then \
if [ ! -e "$$prog" ]; then \
(cd $$dir; ${MAKE} fetch); \
fi; \
fi; \
else \
(cd $$dir; \
- tmp=`${MAKE} -V PKGNAME`; \
- if [ ! -d ${PKG_DBDIR}/$${tmp} ]; then \
+ if ! ${PKG_INFO} -e `${MAKE} -V PKGNAME`; then \
${MAKE} fetch; \
fi ); \
fi; \
done
.endif
.endif
.endfor
.endif
.PHONY: fetch-required-list
.if !target(fetch-required-list)
fetch-required-list: fetch-list
.for deptype in EXTRACT PATCH FETCH BUILD RUN
.if defined(${deptype}_DEPENDS)
.if !defined(NO_DEPENDS)
@for i in ${${deptype}_DEPENDS}; do \
prog=`${ECHO_CMD} $$i | ${CUT} -f 1 -d ':'`; \
dir=`${ECHO_CMD} $$i | ${CUT} -f 2-999 -d ':'`; \
if ${EXPR} "$$dir" : '.*:' > /dev/null; then \
dir=`${ECHO_CMD} $$dir | ${CUT} -f 1 -d ':'`; \
if ${EXPR} "$$prog" : \\/ >/dev/null; then \
if [ ! -e "$$prog" ]; then \
(cd $$dir; ${MAKE} fetch-list); \
fi; \
fi; \
else \
(cd $$dir; \
- tmp=`${MAKE} -V PKGNAME`; \
- if [ ! -d ${PKG_DBDIR}/$${tmp} ]; then \
+ if ! ${PKG_INFO} -e `${MAKE} -V PKGNAME`; then \
${MAKE} fetch-list; \
fi ); \
fi; \
done
.endif
.endif
.endfor
.endif
.PHONY: checksum-recursive
.if !target(checksum-recursive)
checksum-recursive:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@${ECHO_MSG} "===> Fetching and checking checksums for ${PKGNAME} and dependencies"
@for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
(cd $$dir; ${MAKE} checksum); \
done
.endif
+.endif
# Dependency lists: build and runtime. Print out directory names.
.PHONY: build-depends-list
build-depends-list:
.if defined(EXTRACT_DEPENDS) || defined(PATCH_DEPENDS) || defined(FETCH_DEPENDS) || defined(BUILD_DEPENDS) || defined(LIB_DEPENDS) || defined(DEPENDS)
@${BUILD-DEPENDS-LIST}
.endif
BUILD-DEPENDS-LIST= \
for dir in $$(${ECHO_CMD} "${EXTRACT_DEPENDS} ${PATCH_DEPENDS} ${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS}" | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//' | ${SORT} -u) $$(${ECHO_CMD} ${DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/:.*//' | ${SORT} -u); do \
if [ -d $$dir ]; then \
${ECHO_CMD} $$dir; \
else \
${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \
fi; \
done | ${SORT} -u
.PHONY: run-depends-list
run-depends-list:
.if defined(LIB_DEPENDS) || defined(RUN_DEPENDS) || defined(DEPENDS)
@${RUN-DEPENDS-LIST}
.endif
RUN-DEPENDS-LIST= \
for dir in $$(${ECHO_CMD} "${LIB_DEPENDS} ${RUN_DEPENDS}" | ${SED} -e 'y/ /\n/' | ${CUT} -f 2 -d ':' | ${SORT} -u) $$(${ECHO_CMD} ${DEPENDS} | ${SED} -e 'y/ /\n/' | ${CUT} -f 1 -d ':' | ${SORT} -u); do \
if [ -d $$dir ]; then \
${ECHO_CMD} $$dir; \
else \
${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \
fi; \
done | ${SORT} -u
# Package (recursive runtime) dependency list. Print out both directory names
# and package names.
.PHONY: package-depends-list
package-depends-list:
.if defined(CHILD_DEPENDS) || defined(LIB_DEPENDS) || defined(RUN_DEPENDS) || defined(DEPENDS)
@${PACKAGE-DEPENDS-LIST}
.endif
PACKAGE-DEPENDS-LIST?= \
if [ "${CHILD_DEPENDS}" ]; then \
installed=$$(${PKG_INFO} -qO ${PKGORIGIN} 2>/dev/null || \
${TRUE}); \
if [ "$$installed" ]; then \
break; \
fi; \
if [ -z "$$installed" ]; then \
installed="${PKGNAME}"; \
fi; \
for pkgname in $$installed; do \
${ECHO_CMD} "$$pkgname ${.CURDIR} ${PKGORIGIN}"; \
done; \
fi; \
checked="${PARENT_CHECKED}"; \
for dir in $$(${ECHO_CMD} "${LIB_DEPENDS} ${RUN_DEPENDS}" | ${SED} -e 'y/ /\n/' | ${CUT} -f 2 -d ':') $$(${ECHO_CMD} ${DEPENDS} | ${SED} -e 'y/ /\n/' | ${CUT} -f 1 -d ':'); do \
dir=$$(${REALPATH} $$dir); \
if [ -d $$dir ]; then \
if (${ECHO_CMD} $$checked | ${GREP} -qwv "$$dir"); then \
childout=$$(cd $$dir; ${MAKE} CHILD_DEPENDS=yes PARENT_CHECKED="$$checked" package-depends-list); \
set -- $$childout; \
childdir=""; \
while [ $$\# != 0 ]; do \
childdir="$$childdir $$2"; \
${ECHO_CMD} "$$1 $$2 $$3"; \
shift 3; \
done; \
checked="$$dir $$childdir $$checked"; \
fi; \
else \
${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \
fi; \
done
# Print out package names.
.PHONY: package-depends
package-depends:
.if ${OSVERSION} >= 460102 || exists(${LOCALBASE}/sbin/pkg_info)
@${PACKAGE-DEPENDS-LIST} | ${AWK} '{print $$1":"$$3}'
.else
@${PACKAGE-DEPENDS-LIST} | ${AWK} '{print $$1}'
.endif
# Build packages for port and dependencies
.PHONY: package-recursive
package-recursive: package
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}
+.else
@for dir in $$(${ALL-DEPENDS-LIST}); do \
(cd $$dir; ${MAKE} package-noinstall); \
done
+.endif
################################################################
# Everything after here are internal targets and really
# shouldn't be touched by anybody but the release engineers.
################################################################
# This target generates an index entry suitable for aggregation into
# a large index. Format is:
#
# distribution-name|port-path|installation-prefix|comment| \
# description-file|maintainer|categories|build deps|run deps|www site
.PHONY: describe
.if !target(describe)
describe:
+.if defined(_ONG_REEXEC)
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${.TARGET}
+.else
@${ECHO_CMD} -n "${PKGNAME}|${.CURDIR}|${PREFIX}|"
.if defined(COMMENT)
@${ECHO_CMD} -n ${COMMENT:Q}
.else
@${ECHO_CMD} -n '** No Description'
.endif
- @perl -e ' \
+ @${PERL5} -e ' \
if ( -f q{${DESCR}} ) { \
print q{|${DESCR}}; \
} else { \
print q{|/dev/null}; \
} \
print q{|${MAINTAINER}|${CATEGORIES}|}; \
- @bdirs = map((split /:/)[1], split(q{ }, q{${EXTRACT_DEPENDS} ${PATCH_DEPENDS} ${FETCH_DEPENDS} ${BUILD_DEPENDS}})); \
+ @edirs = map((split /:/)[1], split(q{ }, q{${EXTRACT_DEPENDS}})); \
+ @pdirs = map((split /:/)[1], split(q{ }, q{${PATCH_DEPENDS}})); \
+ @fdirs = map((split /:/)[1], split(q{ }, q{${FETCH_DEPENDS}})); \
+ @bdirs = map((split /:/)[1], split(q{ }, q{${BUILD_DEPENDS}})); \
@rdirs = map((split /:/)[1], split(q{ }, q{${RUN_DEPENDS}})); \
- @mdirs = ( \
- map((split /:/)[0], split(q{ }, q{${DEPENDS}})), \
- map((split /:/)[1], split(q{ }, q{${LIB_DEPENDS}})) \
- ); \
- for my $$i (\@bdirs, \@rdirs, \@mdirs) { \
+ @ddirs = map((split /:/)[0], split(q{ }, q{${DEPENDS}})); \
+ @ldirs = map((split /:/)[1], split(q{ }, q{${LIB_DEPENDS}})); \
+ for my $$i (\@edirs, \@pdirs, \@fdirs, \@bdirs, \@rdirs, \@ddirs, \@ldirs) { \
my @dirs = @$$i; \
@$$i = (); \
for (@dirs) { \
if (-d $$_) { \
push @$$i, $$_; \
} else { \
print STDERR qq{${PKGNAME}: \"$$_\" non-existent -- dependency list incomplete\n}; \
exit(1); \
} \
} \
} \
- for (@bdirs, @mdirs) { \
- $$x{$$_} = 1; \
+ for (@edirs, @ddirs) { \
+ $$xe{$$_} = 1; \
} \
- print join(q{ }, sort keys %x), q{|}; \
- for (@rdirs, @mdirs) { \
- $$y{$$_} = 1; \
+ print join(q{ }, sort keys %xe), q{|}; \
+ for (@pdirs, @ddirs) { \
+ $$xp{$$_} = 1; \
} \
- print join(q{ }, sort keys %y), q{|}; \
+ print join(q{ }, sort keys %xp), q{|}; \
+ for (@fdirs, @ddirs) { \
+ $$xf{$$_} = 1; \
+ } \
+ print join(q{ }, sort keys %xf), q{|}; \
+ for (@bdirs, @ddirs, @ldirs) { \
+ $$xb{$$_} = 1; \
+ } \
+ print join(q{ }, sort keys %xb), q{|}; \
+ for (@rdirs, @ddirs, @ldirs) { \
+ $$xr{$$_} = 1; \
+ } \
+ print join(q{ }, sort keys %xr), q{|}; \
if (open(DESCR, q{${DESCR}})) { \
while () { \
if (/^WWW:\s+(\S+)/) { \
print $$1; \
last; \
} \
} \
} \
print qq{\n};'
.endif
+.endif
.PHONY: www-site
.if !target(www-site)
www-site:
.if exists(${DESCR})
@${GREP} '^WWW:[ ]' ${DESCR} | ${AWK} '{print $$2}' | ${HEAD} -1
.else
@${ECHO_CMD}
.endif
.endif
.PHONY: readmes
.if !target(readmes)
readmes: readme
.endif
.PHONY: readme
.if !target(readme)
readme:
@${RM} -f ${.CURDIR}/README.html
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} ${.CURDIR}/README.html
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.CURDIR}/README.html
.endif
${.CURDIR}/README.html:
@${ECHO_MSG} "===> Creating README.html for ${PKGNAME}"
@__softMAKEFLAGS='${__softMAKEFLAGS:S/'/'\''/g}'; \
${SED} -e 's|%%PORT%%|'$$(${ECHO_CMD} ${.CURDIR} | \
${SED} -e 's|.*/\([^/]*/[^/]*\)$$|\1|')'|g' \
-e 's|%%PKG%%|${PKGNAME}|g' \
-e 's|%%COMMENT%%|'"$$(${ECHO_CMD} ${COMMENT:Q})"'|' \
-e '/%%COMMENT%%/d' \
-e 's|%%DESCR%%|'"$$(${ECHO_CMD} ${DESCR} | \
${SED} -e 's|${.CURDIR}/||')"'|' \
-e 's|%%EMAIL%%|'"$$(${ECHO_CMD} "${MAINTAINER}" | \
${SED} -e 's/([^)]*)//;s/.*/;s/>.*//')"'|g' \
-e 's|%%MAINTAINER%%|${MAINTAINER}|g' \
- -e 's|%%WEBSITE%%|'"$$(cd ${.CURDIR} && eval ${MAKE} \
+ -e 's|%%WEBSITE%%|'"$$(cd ${.CURDIR} && eval ${MAKE} ${_ONG_MAKEFLAGS} \
$${__softMAKEFLAGS} pretty-print-www-site)"'|' \
- -e 's|%%BUILD_DEPENDS%%|'"$$(cd ${.CURDIR} && eval ${MAKE} \
+ -e 's|%%BUILD_DEPENDS%%|'"$$(cd ${.CURDIR} && eval ${MAKE} ${_ONG_MAKEFLAGS} \
$${__softMAKEFLAGS} pretty-print-build-depends-list)"'|' \
- -e 's|%%RUN_DEPENDS%%|'"$$(cd ${.CURDIR} && eval ${MAKE} \
+ -e 's|%%RUN_DEPENDS%%|'"$$(cd ${.CURDIR} && eval ${MAKE} ${_ONG_MAKEFLAGS} \
$${__softMAKEFLAGS} pretty-print-run-depends-list)"'|' \
-e 's|%%TOP%%|'"$$(${ECHO_CMD} ${CATEGORIES} | \
${SED} -e 's| .*||' -e 's|[^/]*|..|g')"'/..|' \
${TEMPLATES}/README.port >> $@
# The following two targets require an up-to-date INDEX in ${PORTSDIR}
.PHONY: pretty-print-build-depends-list
.if !target(pretty-print-build-depends-list)
pretty-print-build-depends-list:
.if defined(EXTRACT_DEPENDS) || defined(PATCH_DEPENDS) || \
defined(FETCH_DEPENDS) || defined(BUILD_DEPENDS) || \
defined(LIB_DEPENDS) || defined(DEPENDS)
@${ECHO_CMD} -n 'This port requires package(s) "'
@${ECHO_CMD} -n `${GREP} '^${PKGNAME}|' ${PORTSDIR}/${INDEXFILE} | ${AWK} -F\| '{print $$8;}'`
@${ECHO_CMD} '" to build.'
.endif
.endif
.PHONY: pretty-print-run-depends-list
.if !target(pretty-print-run-depends-list)
pretty-print-run-depends-list:
.if defined(RUN_DEPENDS) || defined(LIB_DEPENDS) || defined(DEPENDS)
@${ECHO_CMD} -n 'This port requires package(s) "'
@${ECHO_CMD} -n `${GREP} '^${PKGNAME}|' ${PORTSDIR}/${INDEXFILE} | ${AWK} -F\| '{print $$9;}'`
@${ECHO_CMD} '" to run.'
.endif
.endif
# Generate packing list. Also tests to make sure all required package
# files exist.
.PHONY: generate-plist
.if !target(generate-plist)
generate-plist:
@${ECHO_MSG} "===> Generating temporary packing list"
@${MKDIR} `${DIRNAME} ${TMPPLIST}`
@if [ ! -f ${DESCR} ]; then ${ECHO_CMD} "** Missing pkg-descr for ${PKGNAME}."; exit 1; fi
@>${TMPPLIST}
@for file in ${PLIST_FILES}; do \
${ECHO_CMD} $${file} | ${SED} ${PLIST_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} >> ${TMPPLIST}; \
done
@for man in ${__MANPAGES}; do \
${ECHO_CMD} $${man} >> ${TMPPLIST}; \
done
.for _PREFIX in ${PREFIX}
.if ${_TMLINKS:M${_PREFIX}*}x != x
@for i in ${_TMLINKS:M${_PREFIX}*:S|^${_PREFIX}/||}; do \
${ECHO_CMD} "$$i" >> ${TMPPLIST}; \
done
.endif
.if ${_TMLINKS:N${_PREFIX}*}x != x
@${ECHO_CMD} @cwd / >> ${TMPPLIST}
@for i in ${_TMLINKS:N${_PREFIX}*:S|^/||}; do \
${ECHO_CMD} "$$i" >> ${TMPPLIST}; \
done
@${ECHO_CMD} '@cwd ${PREFIX}' >> ${TMPPLIST}
.endif
@for i in $$(${ECHO_CMD} ${__MANPAGES} ${_TMLINKS:M${_PREFIX}*:S|^${_PREFIX}/||} ' ' | ${SED} -E -e 's|man([1-9ln])/([^/ ]+) |cat\1/\2 |g'); do \
${ECHO_CMD} "@unexec rm -f %D/$${i%.gz} %D/$${i%.gz}.gz" >> ${TMPPLIST}; \
done
.if ${XFREE86_HTML_MAN:L} == "yes"
.for mansect in 1 2 3 4 5 6 7 8 9 L N
.for man in ${MAN${mansect}}
@${ECHO_CMD} lib/X11/doc/html/${man}.html >> ${TMPPLIST}
.endfor
.endfor
@${ECHO_CMD} "@unexec %D/bin/mkhtmlindex %D/lib/X11/doc/html" >> ${TMPPLIST}
@${ECHO_CMD} "@exec %D/bin/mkhtmlindex %D/lib/X11/doc/html" >> ${TMPPLIST}
.if defined(MLINKS)
@${ECHO_CMD} ${MLINKS} | ${AWK} \
'{ for (i=1; i<=NF; i++) { \
if (i % 2 == 0) { printf "lib/X11/doc/html/%s.html\n", $$i } \
} }' >> ${TMPPLIST}
.endif
.endif
.endfor
@if [ -f ${PLIST} ]; then \
${SED} ${PLIST_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} ${PLIST} >> ${TMPPLIST}; \
fi
.for dir in ${PLIST_DIRS}
@${ECHO_CMD} ${dir} | ${SED} ${PLIST_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} | ${SED} -e 's,^,@dirrm ,' >> ${TMPPLIST}
.endfor
.if defined(INSTALLS_SHLIB) && !defined(INSTALL_AS_USER)
@${ECHO_CMD} "@exec ${LDCONFIG} -m ${LDCONFIG_PLIST}" >> ${TMPPLIST}
@${ECHO_CMD} "@unexec ${LDCONFIG} -R" >> ${TMPPLIST}
.elif defined(INSTALLS_SHLIB)
@${ECHO_CMD} "@exec ${LDCONFIG} -m ${LDCONFIG_PLIST} || ${TRUE}" >> ${TMPPLIST}
@${ECHO_CMD} "@unexec ${LDCONFIG} -R || ${TRUE}" >> ${TMPPLIST}
.endif
.if !defined(NO_FILTER_SHLIBS)
.if (${PORTOBJFORMAT} == "aout")
@${SED} -e 's,\(/lib.*\.so\.[0-9]*\)$$,\1.0,' ${TMPPLIST} > ${TMPPLIST}.tmp
.else
@${SED} -e 's,\(/lib.*\.so\.[0-9]*\)\.[0-9]*$$,\1,' ${TMPPLIST} > ${TMPPLIST}.tmp
.endif
@${MV} -f ${TMPPLIST}.tmp ${TMPPLIST}
.endif
.endif
${TMPPLIST}:
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} generate-plist
+ @cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} generate-plist
.PHONY: add-plist-docs
.if !target(add-plist-docs)
add-plist-docs:
.if defined(PORTDOCS)
@if ${EGREP} -qe '^@cw?d' ${TMPPLIST} && \
[ "`${SED} -En -e '/^@cw?d[ ]*/s,,,p' ${TMPPLIST} | ${TAIL} -n 1`" != "${PREFIX}" ]; then \
${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}; \
fi
- @${FIND} -P ${PORTDOCS:S/^/${DOCSDIR}\//} ! -type d 2>/dev/null | \
- ${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
- @${FIND} -P -d ${PORTDOCS:S/^/${DOCSDIR}\//} -type d 2>/dev/null | \
- ${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
- @if [ -d "${DOCSDIR}" ]; then \
+ @${FIND} -P ${PORTDOCS:S/^/${DESTDIR}${DOCSDIR}\//} ! -type d 2>/dev/null | \
+ ${SED} -ne 's,^${DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
+ @${FIND} -P -d ${PORTDOCS:S/^/${DESTDIR}${DOCSDIR}\//} -type d 2>/dev/null | \
+ ${SED} -ne 's,^${DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
+ @if [ -d "${DESTDIR}${DOCSDIR}" ]; then \
${ECHO_CMD} "@unexec rmdir %D/${DOCSDIR:S,^${PREFIX}/,,} 2>/dev/null || true" >> ${TMPPLIST}; \
fi
.else
@${DO_NADA}
.endif
.endif
.PHONY: add-plist-info
.if !target(add-plist-info)
add-plist-info:
# Process GNU INFO files at package install/deinstall time
.for i in ${INFO}
@${ECHO_CMD} "@unexec install-info --delete %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \
>> ${TMPPLIST}
- @${LS} ${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${PREFIX}/::g >> ${TMPPLIST}
+ @${LS} ${DESTDIR}${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${DESTDIR}${PREFIX}/::g >> ${TMPPLIST}
@${ECHO_CMD} "@exec install-info %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \
>> ${TMPPLIST}
.endfor
.if !defined(NO_MTREE) && defined(INFO)
@${ECHO_CMD} "@unexec if [ -f %D/${INFO_PATH}/dir ]; then if sed -e '1,/Menu:/d' %D/${INFO_PATH}/dir | grep -q '^[*] '; then true; else rm %D/${INFO_PATH}/dir; fi; fi" >> ${TMPPLIST}
.else
@${DO_NADA}
.endif
.endif
# Compress (or uncompress) and symlink manpages.
.PHONY: compress-man
.if !target(compress-man)
compress-man:
.if defined(_MANPAGES) || defined(_MLINKS)
.if ${MANCOMPRESSED} == yes && defined(NOMANCOMPRESS)
@${ECHO_MSG} "===> Uncompressing manual pages for ${PKGNAME}"
- @_manpages='${_MANPAGES:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GUNZIP_CMD} $${_manpages} ) || ${TRUE}
+ @_manpages='${_MANPAGES:S/^/${DESTDIR}/:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GUNZIP_CMD} $${_manpages} ) || ${TRUE}
.elif ${MANCOMPRESSED} == no && !defined(NOMANCOMPRESS)
@${ECHO_MSG} "===> Compressing manual pages for ${PKGNAME}"
- @_manpages='${_MANPAGES:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GZIP_CMD} $${_manpages} ) || ${TRUE}
+ @_manpages='${_MANPAGES:S/^/${DESTDIR}/:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GZIP_CMD} $${_manpages} ) || ${TRUE}
.endif
.if defined(_MLINKS)
@set ${_MLINKS}; \
while :; do \
[ $$# -eq 0 ] && break || ${TRUE}; \
- ${RM} -f $${2%.gz}; ${RM} -f $$2.gz; \
+ ${RM} -f ${DESTDIR}$${2%.gz}; ${RM} -f ${DESTDIR}$$2.gz; \
${LN} -fs `${ECHO_CMD} $$1 $$2 | ${AWK} '{ \
z=split($$1, a, /\//); x=split($$2, b, /\//); \
while (a[i] == b[i]) i++; \
for (q=i; q Registering installation for ${PKGNAME}"; \
- ${MKDIR} ${PKG_DBDIR}/${PKGNAME}; \
- ${PKG_CMD} ${PKG_ARGS} -O ${PKGFILE} > ${PKG_DBDIR}/${PKGNAME}/+CONTENTS; \
- ${CP} ${DESCR} ${PKG_DBDIR}/${PKGNAME}/+DESC; \
- ${ECHO_CMD} ${COMMENT:Q} > ${PKG_DBDIR}/${PKGNAME}/+COMMENT; \
+ ${MKDIR} ${_PKG_DBDIR}/${PKGNAME}; \
+ ${PKG_CMD} ${PKG_ARGS} -O ${PKGFILE} > ${_PKG_DBDIR}/${PKGNAME}/+CONTENTS; \
+ ${CP} ${DESCR} ${_PKG_DBDIR}/${PKGNAME}/+DESC; \
+ ${ECHO_CMD} ${COMMENT:Q} > ${_PKG_DBDIR}/${PKGNAME}/+COMMENT; \
if [ -f ${PKGINSTALL} ]; then \
- ${CP} ${PKGINSTALL} ${PKG_DBDIR}/${PKGNAME}/+INSTALL; \
+ ${CP} ${PKGINSTALL} ${_PKG_DBDIR}/${PKGNAME}/+INSTALL; \
fi; \
if [ -f ${PKGDEINSTALL} ]; then \
- ${CP} ${PKGDEINSTALL} ${PKG_DBDIR}/${PKGNAME}/+DEINSTALL; \
+ ${CP} ${PKGDEINSTALL} ${_PKG_DBDIR}/${PKGNAME}/+DEINSTALL; \
fi; \
if [ -f ${PKGREQ} ]; then \
- ${CP} ${PKGREQ} ${PKG_DBDIR}/${PKGNAME}/+REQUIRE; \
+ ${CP} ${PKGREQ} ${_PKG_DBDIR}/${PKGNAME}/+REQUIRE; \
fi; \
if [ -f ${PKGMESSAGE} ]; then \
- ${CP} ${PKGMESSAGE} ${PKG_DBDIR}/${PKGNAME}/+DISPLAY; \
+ ${CP} ${PKGMESSAGE} ${_PKG_DBDIR}/${PKGNAME}/+DISPLAY; \
fi; \
- for dep in `${PKG_INFO} -qf ${PKGNAME} | ${GREP} -w ^@pkgdep | ${AWK} '{print $$2}' | ${SORT} -u`; do \
- if [ -d ${PKG_DBDIR}/$$dep -a -z `${ECHO_CMD} $$dep | ${GREP} -E ${PKG_IGNORE_DEPENDS}` ]; then \
- if ! ${GREP} ^${PKGNAME}$$ ${PKG_DBDIR}/$$dep/+REQUIRED_BY \
+ for dep in `${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -qf ${PKGNAME} | ${GREP} -w ^@pkgdep | ${AWK} '{print $$2}' | ${SORT} -u`; do \
+ if [ -d ${_PKG_DBDIR}/$$dep -a -z `${ECHO_CMD} $$dep | ${GREP} -E ${PKG_IGNORE_DEPENDS}` ]; then \
+ if ! ${GREP} ^${PKGNAME}$$ ${_PKG_DBDIR}/$$dep/+REQUIRED_BY \
>/dev/null 2>&1; then \
- ${ECHO_CMD} ${PKGNAME} >> ${PKG_DBDIR}/$$dep/+REQUIRED_BY; \
+ ${ECHO_CMD} ${PKGNAME} >> ${_PKG_DBDIR}/$$dep/+REQUIRED_BY; \
fi; \
fi; \
done; \
fi
.if !defined(NO_MTREE)
@if [ -f ${MTREE_FILE} ]; then \
- ${CP} ${MTREE_FILE} ${PKG_DBDIR}/${PKGNAME}/+MTREE_DIRS; \
+ ${CP} ${MTREE_FILE} ${_PKG_DBDIR}/${PKGNAME}/+MTREE_DIRS; \
fi
.endif
@if [ -e /tmp/${PKGNAME}-required-by ]; then \
- ${CAT} /tmp/${PKGNAME}-required-by >> ${PKG_DBDIR}/${PKGNAME}/+REQUIRED_BY; \
+ ${CAT} /tmp/${PKGNAME}-required-by >> ${_PKG_DBDIR}/${PKGNAME}/+REQUIRED_BY; \
${RM} -f /tmp/${PKGNAME}-required-by; \
fi
.else
@${DO_NADA}
.endif
.endif
# Depend is generally meaningless for arbitrary ports, but if someone wants
# one they can override this. This is just to catch people who've gotten into
# the habit of typing `make depend all install' as a matter of course.
#
.PHONY: depend
.if !target(depend)
depend:
.endif
# Same goes for tags
.PHONY: tags
.if !target(tags)
tags:
.endif
.if !defined(NOPRECIOUSMAKEVARS)
.for softvar in CKSUMFILES _MLINKS
.if defined(${softvar})
__softMAKEFLAGS+= '${softvar}+=${${softvar}:S/'/'\''/g}'
.endif
.endfor
# These won't change, so we can pass them through the environment
.MAKEFLAGS: \
ARCH="${ARCH:S/"/"'"'"/g:S/\$/\$\$/g:S/\\/\\\\/g}" \
OPSYS="${OPSYS:S/"/"'"'"/g:S/\$/\$\$/g:S/\\/\\\\/g}" \
OSREL="${OSREL:S/"/"'"'"/g:S/\$/\$\$/g:S/\\/\\\\/g}" \
OSVERSION="${OSVERSION:S/"/"'"'"/g:S/\$/\$\$/g:S/\\/\\\\/g}" \
PORTOBJFORMAT="${PORTOBJFORMAT:S/"/"'"'"/g:S/\$/\$\$/g:S/\\/\\\\/g}" \
SYSTEMVERSION="${SYSTEMVERSION:S/"/"'"'"/g:S/\$/\$\$/g:S/\\/\\\\/g}"
.endif
-.PHONY: config
.if !target(config)
config:
.if !defined(OPTIONS)
@${ECHO_MSG} "===> No options to configure"
.else
.if ${OPTIONSFILE} != ${_OPTIONSFILE}
@${ECHO_MSG} "===> Using wrong configuration file ${_OPTIONSFILE}"
@exit 1
.endif
.if ${UID} != 0 && !defined(INSTALL_AS_USER)
@${ECHO_MSG} "===> Switching to root credentials to create `${DIRNAME} ${_OPTIONSFILE}`"
@(${SU_CMD} "${SH} -c \"${MKDIR} `${DIRNAME} ${_OPTIONSFILE}` 2> /dev/null\"") || \
(${ECHO_MSG} "===> Cannot create `${DIRNAME} ${_OPTIONSFILE}`, check permissions"; exit 1)
@${ECHO_MSG} "===> Returning to user credentials"
.else
@(${MKDIR} `${DIRNAME} ${_OPTIONSFILE}` 2> /dev/null) || \
(${ECHO_MSG} "===> Cannot create `${DIRNAME} ${_OPTIONSFILE}`, check permissions"; exit 1)
.endif
-@if [ -e ${_OPTIONSFILE} ]; then \
. ${_OPTIONSFILE}; \
fi; \
set ${OPTIONS} XXX; \
while [ $$# -gt 3 ]; do \
OPTIONSLIST="$${OPTIONSLIST} $$1"; \
defaultval=$$3; \
withvar=WITH_$$1; \
withoutvar=WITHOUT_$$1; \
withval=$$(eval ${ECHO_CMD} $$\{$${withvar}\}); \
withoutval=$$(eval ${ECHO_CMD} $$\{$${withoutvar}\}); \
if [ ! -z "$${withval}" ]; then \
val=on; \
elif [ ! -z "$${withoutval}" ]; then \
val=off; \
else \
val=$$3; \
fi; \
DEFOPTIONS="$${DEFOPTIONS} $$1 \"$$2\" $${val}"; \
shift 3; \
done; \
TMPOPTIONSFILE=$$(${MKTEMP} -t portoptions); \
trap "${RM} -f $${TMPOPTIONSFILE}; exit 1" 1 2 3 5 10 13 15; \
${SH} -c "${DIALOG} --checklist \"Options for ${PKGNAME:C/-([^-]+)$/ \1/}\" 21 70 15 $${DEFOPTIONS} 2> $${TMPOPTIONSFILE}"; \
status=$$?; \
if [ $${status} -ne 0 ] ; then \
${RM} -f $${TMPOPTIONSFILE}; \
${ECHO_MSG} "===> Options unchanged"; \
exit 0; \
fi; \
if [ ! -e ${TMPOPTIONSFILE} ]; then \
${ECHO_MSG} "===> No user-specified options to save for ${PKGNAME}"; \
exit 0; \
fi; \
SELOPTIONS=$$(${CAT} $${TMPOPTIONSFILE}); \
${RM} -f $${TMPOPTIONSFILE}; \
TMPOPTIONSFILE=$$(${MKTEMP} -t portoptions); \
trap "${RM} -f $${TMPOPTIONSFILE}; exit 1" 1 2 3 5 10 13 15; \
${ECHO_CMD} "# This file is auto-generated by 'make config'." > $${TMPOPTIONSFILE}; \
${ECHO_CMD} "# No user-servicable parts inside!" >> $${TMPOPTIONSFILE}; \
${ECHO_CMD} "# Options for ${PKGNAME}" >> $${TMPOPTIONSFILE}; \
${ECHO_CMD} "_OPTIONS_READ=${PKGNAME}" >> $${TMPOPTIONSFILE}; \
for i in $${OPTIONSLIST}; do \
${ECHO_CMD} $${SELOPTIONS} | ${GREP} -qw $${i}; \
if [ $$? -eq 0 ]; then \
${ECHO_CMD} WITH_$${i}=true >> $${TMPOPTIONSFILE}; \
else \
${ECHO_CMD} WITHOUT_$${i}=true >> $${TMPOPTIONSFILE}; \
fi; \
done; \
if [ `${ID} -u` != 0 -a "x${INSTALL_AS_USER}" = "x" ]; then \
${ECHO_MSG} "===> Switching to root credentials to write ${_OPTIONSFILE}"; \
${SU_CMD} "${CAT} $${TMPOPTIONSFILE} > ${_OPTIONSFILE}"; \
${ECHO_MSG} "===> Returning to user credentials"; \
else \
${CAT} $${TMPOPTIONSFILE} > ${_OPTIONSFILE}; \
fi; \
${RM} -f $${TMPOPTIONSFILE}
.endif
.endif
-.PHONY: showconfig
.if !target(showconfig)
showconfig:
.if defined(OPTIONS) && exists(${_OPTIONSFILE})
@${ECHO_MSG} "===> The following configuration options are set for ${PKGNAME}:"
-@if [ -e ${_OPTIONSFILE} ]; then \
. ${_OPTIONSFILE}; \
fi; \
set ${OPTIONS} XXX; \
while [ $$# -gt 3 ]; do \
defaultval=$$3; \
withvar=WITH_$$1; \
withoutvar=WITHOUT_$$1; \
withval=$$(eval ${ECHO_CMD} $$\{$${withvar}\}); \
withoutval=$$(eval ${ECHO_CMD} $$\{$${withoutvar}\}); \
if [ ! -z "$${withval}" ]; then \
val=on; \
elif [ ! -z "$${withoutval}" ]; then \
val=off; \
else \
val="$$3 (default)"; \
fi; \
${ECHO_MSG} " $$1=$${val} \"$$2\""; \
shift 3; \
done
.else
@${ECHO_MSG} "===> No configuration options are set for this port"
.if defined(OPTIONS)
@${ECHO_MSG} " Use 'make config' to set default values"
.endif
.endif
.endif
-.PHONY: rmconfig
.if !target(rmconfig)
rmconfig:
.if defined(OPTIONS) && exists(${_OPTIONSFILE})
-@${ECHO_MSG} "===> Removing user-configured options for ${PKGNAME}"; \
if [ `${ID} -u` != 0 -a "x${INSTALL_AS_USER}" = "x" ]; then \
${ECHO_MSG} "===> Switching to root credentials to remove ${_OPTIONSFILE} and `${DIRNAME} ${_OPTIONSFILE}`"; \
${SU_CMD} "${RM} -f ${_OPTIONSFILE} ; \
${RMDIR} `${DIRNAME} ${_OPTIONSFILE}`"; \
${ECHO_MSG} "===> Returning to user credentials"; \
else \
${RM} -f ${_OPTIONSFILE}; \
${RMDIR} `${DIRNAME} ${_OPTIONSFILE}`; \
fi
.else
@${ECHO_MSG} "===> No user-specified options configured for ${PKGNAME}"
.endif
.endif
Property changes on: head/ports-mgmt/portmk/Mk/bsd.port.post.mk
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.3
\ No newline at end of property
+1.4
\ No newline at end of property
Index: head/ports-mgmt/portmk/Mk/bsd.port.pre.mk
===================================================================
--- head/ports-mgmt/portmk/Mk/bsd.port.pre.mk (revision 113826)
+++ head/ports-mgmt/portmk/Mk/bsd.port.pre.mk (revision 113827)
@@ -1,406 +1,410 @@
#-*- mode: makefile; tab-width: 4; -*-
# ex:ts=4
#
# $FreeBSD$
#
-PORTMK_VERSION= 20040705
+PORTMK_VERSION= 20040717
.if defined(_PREMKINCLUDED)
check-makefile::
@${ECHO_CMD} "${PKGNAME}: Makefile error: you cannot include bsd.port[.pre].mk twice"
@${FALSE}
.endif
_PREMKINCLUDED= yes
AWK?= /usr/bin/awk
BASENAME?= /usr/bin/basename
BRANDELF?= /usr/bin/brandelf
.if exists(/usr/bin/bzip2)
BZCAT?= /usr/bin/bzcat
BZIP2_CMD?= /usr/bin/bzip2
.else
BZCAT?= ${LOCALBASE}/bin/bzcat
BZIP2_CMD?= ${LOCALBASE}/bin/bzip2
BZIP2DEPENDS= yes
.endif
CAT?= /bin/cat
CHGRP?= /usr/bin/chgrp
CHMOD?= /bin/chmod
CHOWN?= /usr/sbin/chown
CHROOT?= /usr/sbin/chroot
COMM?= /usr/bin/comm
CP?= /bin/cp
CPIO?= /usr/bin/cpio
CUT?= /usr/bin/cut
DATE?= /bin/date
DC?= /usr/bin/dc
DIALOG?= /usr/bin/dialog
DIRNAME?= /usr/bin/dirname
EGREP?= /usr/bin/egrep
EXPR?= /bin/expr
FALSE?= false # Shell builtin
FILE?= /usr/bin/file
FIND?= /usr/bin/find
FMT?= /usr/bin/fmt
GREP?= /usr/bin/grep
GUNZIP_CMD?= /usr/bin/gunzip -f
GZCAT?= /usr/bin/gzcat
GZIP?= -9
GZIP_CMD?= /usr/bin/gzip -nf ${GZIP}
HEAD?= /usr/bin/head
ID?= /usr/bin/id
IDENT?= /usr/bin/ident
LDCONFIG?= /sbin/ldconfig
LN?= /bin/ln
LS?= /bin/ls
MKDIR?= /bin/mkdir -p
MKTEMP?= /usr/bin/mktemp
MV?= /bin/mv
OBJCOPY?= /usr/bin/objcopy
OBJDUMP?= /usr/bin/objdump
PASTE?= /usr/bin/paste
PAX?= /bin/pax
PRINTF?= /usr/bin/printf
REALPATH?= /bin/realpath
RM?= /bin/rm
RMDIR?= /bin/rmdir
SED?= /usr/bin/sed
SETENV?= /usr/bin/env
SH?= /bin/sh
SORT?= /usr/bin/sort
STRIP_CMD?= /usr/bin/strip
SU_CMD?= /usr/bin/su root -c
TAIL?= /usr/bin/tail
TEST?= test # Shell builtin
TR?= /usr/bin/tr
TRUE?= true # Shell builtin
UNAME?= /usr/bin/uname
.if exists(/usr/bin/unzip)
UNZIP_CMD?= /usr/bin/unzip
.else
UNZIP_CMD?= ${LOCALBASE}/bin/unzip
ZIPDEPENDS= yes
.endif
WHICH?= /usr/bin/which
XARGS?= /usr/bin/xargs
YACC?= /usr/bin/yacc
+.if !defined(UID)
+UID!= ${ID} -u
+.endif
+
# ECHO is defined in /usr/share/mk/sys.mk, which can either be "echo",
# or "true" if the make flag -s is given. Use ECHO_CMD where you mean
# the echo command.
ECHO_CMD?= echo # Shell builtin
# Used to print all the '===>' style prompts - override this to turn them off.
ECHO_MSG?= ${ECHO_CMD}
# Get the architecture
.if !defined(ARCH)
ARCH!= ${UNAME} -p
.endif
# Kludge for pre-3.0 systems
MACHINE_ARCH?= i386
# Get the operating system type
.if !defined(OPSYS)
OPSYS!= ${UNAME} -s
.endif
# Get the operating system revision
.if !defined(OSREL)
OSREL!= ${UNAME} -r | ${SED} -e 's/[-(].*//'
.endif
# Get __FreeBSD_version
.if !defined(OSVERSION)
.if exists(/sbin/sysctl)
OSVERSION!= /sbin/sysctl -n kern.osreldate
.else
OSVERSION!= /usr/sbin/sysctl -n kern.osreldate
.endif
.endif
# Get the object format.
.if !defined(PORTOBJFORMAT)
PORTOBJFORMAT!= ${TEST} -x /usr/bin/objformat && /usr/bin/objformat || ${ECHO_CMD} aout
.endif
MASTERDIR?= ${.CURDIR}
PORTMK_CONF?= /etc/portmk.conf
.if exists(${PORTMK_CONF})
.include "${PORTMK_CONF}"
.endif
# If they exist, include Makefile.inc, then architecture/operating
# system specific Makefiles, then local Makefile.local.
.if ${MASTERDIR} != ${.CURDIR} && exists(${.CURDIR}/../Makefile.inc)
.include "${.CURDIR}/../Makefile.inc"
USE_SUBMAKE= yes
.endif
.if exists(${MASTERDIR}/../Makefile.inc)
.include "${MASTERDIR}/../Makefile.inc"
USE_SUBMAKE= yes
.endif
.if exists(${MASTERDIR}/Makefile.${ARCH}-${OPSYS})
.include "${MASTERDIR}/Makefile.${ARCH}-${OPSYS}"
USE_SUBMAKE= yes
.elif exists(${MASTERDIR}/Makefile.${OPSYS})
.include "${MASTERDIR}/Makefile.${OPSYS}"
USE_SUBMAKE= yes
.elif exists(${MASTERDIR}/Makefile.${ARCH})
.include "${MASTERDIR}/Makefile.${ARCH}"
USE_SUBMAKE= yes
.endif
.if exists(${MASTERDIR}/Makefile.local)
.include "${MASTERDIR}/Makefile.local"
USE_SUBMAKE= yes
.endif
# where 'make config' records user configuration options
PORT_DBDIR?= /var/db/ports
.if defined(LATEST_LINK)
UNIQUENAME?= ${LATEST_LINK}
.else
UNIQUENAME?= ${PKGNAMEPREFIX}${PORTNAME}
.endif
OPTIONSFILE?= ${PORT_DBDIR}/${UNIQUENAME}/options
_OPTIONSFILE!= ${ECHO_CMD} "${OPTIONSFILE}"
-.if defined(OPTIONS)
+.if defined(OPTIONS) && !defined(_OPTIONSNG_READ)
.if exists(${_OPTIONSFILE}) && !make(rmconfig)
.include "${_OPTIONSFILE}"
.endif
.if exists(${_OPTIONSFILE}.local)
.include "${_OPTIONSFILE}.local"
.endif
.endif
# check for old, crufty, makefile types, part 1:
.if !defined(PORTNAME) || !defined(PORTVERSION) || defined(PKGNAME)
check-makefile::
@${ECHO_CMD} "Makefile error: you need to define PORTNAME and PORTVERSION instead of PKGNAME."
@${ECHO_CMD} "(This port is too old for your bsd.port.mk, please update it to match"
@${ECHO_CMD} " your bsd.port.mk.)"
@${FALSE}
.endif
.if defined(PORTVERSION)
.if ${PORTVERSION:M*[-_,]*}x != x
BROKEN= "PORTVERSION ${PORTVERSION} may not contain '-' '_' or ','"
.endif
.endif
PORTREVISION?= 0
.if ${PORTREVISION} != 0
_SUF1= _${PORTREVISION}
.endif
PORTEPOCH?= 0
.if ${PORTEPOCH} != 0
_SUF2= ,${PORTEPOCH}
.endif
# check for old, crufty, makefile types, part 2. The "else" case
# should have been handled in part 1, above.
.if !defined(PKGNAME)
PKGNAME= ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION:C/[-_,]/./g}${_SUF1}${_SUF2}
.endif
DISTNAME?= ${PORTNAME}-${PORTVERSION}
# These need to be absolute since we don't know how deep in the ports
# tree we are and thus can't go relative. They can, of course, be overridden
# by individual Makefiles or local system make configuration.
PORTSDIR?= /usr/ports
-LOCALBASE?= ${DESTDIR}/usr/local
-X11BASE?= ${DESTDIR}/usr/X11R6
-LINUXBASE?= ${DESTDIR}/compat/linux
+LOCALBASE?= /usr/local
+X11BASE?= /usr/X11R6
+LINUXBASE?= /compat/linux
DISTDIR?= ${PORTSDIR}/distfiles
_DISTDIR?= ${DISTDIR}/${DIST_SUBDIR}
.if ${OSVERSION} >= 500036
INDEXFILE?= INDEX-5
.else
INDEXFILE?= INDEX
.endif
.if defined(USE_BZIP2)
EXTRACT_SUFX?= .tar.bz2
.elif defined(USE_ZIP)
EXTRACT_SUFX?= .zip
.else
EXTRACT_SUFX?= .tar.gz
.endif
PACKAGES?= ${PORTSDIR}/packages
TEMPLATES?= ${PORTSDIR}/Templates
.if (!defined(PKGDIR) && exists(${MASTERDIR}/pkg/DESCR)) || \
(!defined(MD5_FILE) && exists(${MASTERDIR}/files/md5))
check-makefile::
@${ECHO_CMD} "Makefile error: your port uses an old layout. Please update it to match this bsd.port.mk. If you have updated your ports collection via cvsup and are still getting this error, see Q12 and Q13 in the cvsup FAQ on http://www.polstra.com for further information."
@${FALSE}
.endif
PATCHDIR?= ${MASTERDIR}/files
FILESDIR?= ${MASTERDIR}/files
SCRIPTDIR?= ${MASTERDIR}/scripts
PKGDIR?= ${MASTERDIR}
.if defined(USE_IMAKE) && !defined(USE_X_PREFIX)
USE_X_PREFIX= yes
.endif
.if defined(USE_X_PREFIX) && ${USE_X_PREFIX} == "no"
.undef USE_X_PREFIX
.endif
.if defined(USE_X_PREFIX)
USE_XLIB= yes
.endif
.if defined(USE_LINUX_PREFIX)
USE_LINUX= yes
.endif
.if defined(USE_X_PREFIX)
PREFIX?= ${X11BASE}
.elif defined(USE_LINUX_PREFIX)
PREFIX?= ${LINUXBASE}
NO_MTREE= yes
.else
PREFIX?= ${LOCALBASE}
.endif
PKGCOMPATDIR?= ${LOCALBASE}/lib/compat/pkg
.if defined(WITH_APACHE2)
APACHE_PORT?= www/apache2
.else
APACHE_PORT?= www/apache13
.endif
APXS?= ${LOCALBASE}/sbin/apxs
.if defined(USE_APACHE)
BUILD_DEPENDS+= ${APXS}:${PORTSDIR}/${APACHE_PORT}
RUN_DEPENDS+= ${APXS}:${PORTSDIR}/${APACHE_PORT}
.endif
.if ${OSVERSION} >= 502100
PERL_VERSION?= 5.8.4
PERL_VER?= 5.8.4
.else
.if ${OSVERSION} >= 500032
PERL_VERSION?= 5.6.1
PERL_VER?= 5.6.1
.else
.if ${OSVERSION} >= 500007
PERL_VERSION?= 5.6.0
PERL_VER?= 5.6.0
.else
.if ${OSVERSION} >= 300000
PERL_VERSION?= 5.00503
.else
PERL_VERSION?= 5.00502
.endif
PERL_VER?= 5.005
.endif
.endif
.endif
.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)
.if ${PERL_LEVEL} >= 500600
PERL_ARCH?= mach
.else
PERL_ARCH?= ${ARCH}-freebsd
.endif
.if ${PERL_LEVEL} >= 500800
PERL_PORT?= perl5.8
.else
PERL_PORT?= perl5
.endif
SITE_PERL_REL?= lib/perl5/site_perl/${PERL_VER}
SITE_PERL?= ${LOCALBASE}/${SITE_PERL_REL}
.if ${PERL_LEVEL} < 500600
PERL5= /usr/bin/perl${PERL_VERSION}
PERL= /usr/bin/perl
.else
PERL5= ${LOCALBASE}/bin/perl${PERL_VERSION}
PERL= ${LOCALBASE}/bin/perl
.endif
# XXX: (not yet): .if defined(USE_AUTOTOOLS)
# .include "${PORTSDIR}/Mk/bsd.autotools.mk"
# XXX: (not yet): .endif
.if defined(USE_OPENSSL)
.include "${PORTSDIR}/Mk/bsd.openssl.mk"
.endif
.if defined(EMACS_PORT_NAME)
.include "${PORTSDIR}/Mk/bsd.emacs.mk"
.endif
.if defined(USE_GNUSTEP)
.include "${PORTSDIR}/Mk/bsd.gnustep.mk"
.endif
.if defined(USE_PHP)
.include "${PORTSDIR}/Mk/bsd.php.mk"
.endif
.if defined(USE_PYTHON)
.include "${PORTSDIR}/Mk/bsd.python.mk"
.endif
.if defined(USE_JAVA)
.include "${PORTSDIR}/Mk/bsd.java.mk"
.endif
.if defined(USE_RUBY) || defined(USE_LIBRUBY)
.include "${PORTSDIR}/Mk/bsd.ruby.mk"
.endif
.if defined(USE_QT) || defined(USE_QT2) || defined(USE_QT_VER) || defined(USE_KDELIBS_VER) || defined(USE_KDEBASE_VER)
.include "${PORTSDIR}/Mk/bsd.kde.mk"
.endif
.if defined(WANT_GNOME) || defined(USE_GNOME) || defined(USE_GTK)
.include "${PORTSDIR}/Mk/bsd.gnome.mk"
.endif
.if defined(USE_SDL) || defined(WANT_SDL)
.include "${PORTSDIR}/Mk/bsd.sdl.mk"
.endif
# defaults to 4.x for 5.0-CURRENT and 4.5-STABLE; and 3.3.6 for all other branches
.if ${OSVERSION} > 500025 || ( ${OSVERSION} >= 450005 && ${OSVERSION} < 500000 )
XFREE86_VERSION?= 4
.else
XFREE86_VERSION?= 3
.endif
# Location of mounted CDROM(s) to search for files
CD_MOUNTPTS?= /cdrom ${CD_MOUNTPT}
WANT_OPENLDAP_VER?= 22
# Owner and group of the WWW user
WWWOWN?= www
WWWGRP?= www
Property changes on: head/ports-mgmt/portmk/Mk/bsd.port.pre.mk
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.2
\ No newline at end of property
+1.3
\ No newline at end of property
Index: head/ports-mgmt/portmk/files/Features
===================================================================
--- head/ports-mgmt/portmk/files/Features (revision 113826)
+++ head/ports-mgmt/portmk/files/Features (revision 113827)
@@ -1,66 +1,80 @@
In case you need to fall back to the old routines, just build the port with `omake'.
* completely rewritten do-fetch/checksum/makesum/fetch-list targets:
- sort MASTER_SITES by distance or latency
To fetch from the nearest mirrors first, install port net/p5-Geo-IP and put
MASTER_SORT_GEOIP=yes
CC_HOME=eu
in /etc/portmk.conf. The first time fetching may stall for about ten seconds, since all sites must be looked up first. Subsequent fetches should be *much* faster.
To fetch from the side with the smallest measured latency, install perl and port net/fping and add
MASTER_SORT_FPING=yes
to /etc/portmk.conf
- refetch from multiple mirrors in case of a checksum mismatch (up to FETCH_REGET times)
Instead of trying the same mirror (which might have a corrupt distfile) twice.
- randomize MASTER_SITES by default (disable with KEEP_MASTER_SITE_ORDER)
- new targets `missing-size' and `missing-recursive-size': calculate size of missing distribution files
Type
make missing-recursive-size
to check how many files you have to fetch to build the current port. To check how many files a port with subports needs overall, including files already on your local disk, do
make DISTDIR=/nonexistent missing-recursive-size
- new target checkdistsites, a brute-force distfile survery for home use,
use with NO_CHECKSUM to just verify the sizes without downloading the files
NO_CHECKSUM currently works only with fetch, not wget or curl. Try
make NO_CHECKSUM=yes checkdistsites
to verify whether your distfiles are fetchable from every site.
- support for integrating distinfo into the ports Makefile via `migratesum' (experimental,
multiple integrated distinfo files could be distinguised by DISTINFO_LABEL)
- support for SHA1 and RMD160 checksums
- support for MASTER_SITES that don't end with a slash
- support to substitute %FILE% in MASTER_SITES with the distfiles name
Useful for sites that have ...?file=xxx&download=true or cvsweb style download sites
- fetch with curl or wget with FETCH_USE_CURL and FETCH_USE_WGET (requires installed curl or wget)
For people behind firewalls that need the extended capabilities. Be aware that some extra features (like size checking) are currently not availible with those download clients.
-- eliminated the master-site-{all,ALL,default,DEFAULT,*} targets, since they are of little use
+* next generation options handling (work in progress)
-In case someone needs them, I can add them back again.
+- only prototype functionality is available
+
+- saved configuration affects clean, describe etc.
+
+- the port is build with the correct default options when not configured
+
+- honours options given on the command line, so that portupgrade et al still work
+
+- custom configurations are available before bsd.port.pre.mk is included
+
+- completely unintrusive, a port doesn't need to be configured when the defaults are acceptable
+
+* ability to build packages without the need to install a port (work in progress)
+
+- not available yet
Property changes on: head/ports-mgmt/portmk/files/Features
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.1
\ No newline at end of property
+1.2
\ No newline at end of property
Index: head/ports-mgmt/portmk/files/KnownIssues
===================================================================
--- head/ports-mgmt/portmk/files/KnownIssues (revision 113826)
+++ head/ports-mgmt/portmk/files/KnownIssues (revision 113827)
@@ -1,3 +1,2 @@
-* List of ports that fail to fetch/build with portmk, but build with a `stck' bsd.port.mk:
+* List of ports that fail to fetch/build with portmk, but build with a `stock' bsd.port.mk:
-* `make NO_CHECKSUM=yes checkdistsites' failes when FETCH_USE_WGET or FETCH_USE_CURL is set
Property changes on: head/ports-mgmt/portmk/files/KnownIssues
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.1
\ No newline at end of property
+1.2
\ No newline at end of property
Index: head/ports-mgmt/portmk/scripts/options.pl
===================================================================
--- head/ports-mgmt/portmk/scripts/options.pl (nonexistent)
+++ head/ports-mgmt/portmk/scripts/options.pl (revision 113827)
@@ -0,0 +1,373 @@
+#!/usr/bin/perl -w
+#
+# Copyright (c) 2004 Oliver Eikemeier. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright notice
+# this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the author nor the names of its contributors may be
+# used to endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+# MAINTAINER= eik@FreeBSD.org
+#
+
+require 5.005;
+use strict;
+use Getopt::Std;
+
+my $pkgname;
+
+my %description;
+my %values;
+my @order;
+my @section;
+my %haswithout;
+my %hasoverride;
+my %default;
+my %value;
+my $isoverride;
+my $isedit;
+
+sub parsemaster {
+ my $currdesc;
+ my ($master) = @_;
+
+ -r $master
+ or return 1;
+
+ open MASTER, "<$master"
+ or die "Can't read $master: $!\n";
+
+ push @section, "Configurable options for $pkgname";
+ push @order, $#section;
+ $description{0} = [];
+
+ while() {
+ chomp;
+ last if /^##/;
+ next if /^#?\s*$/;
+ if (/^#!\s*(.*)$/) {
+ if ($1 =~ /MAIN/i) {
+ $currdesc = \@{$description{0}};
+ }
+ else {
+ push @section, $1;
+ $currdesc = \@{$description{$#section}};
+ push @order, $#section;
+ }
+ }
+ elsif(/^#WITH(OUT)?_([A-Z][A-Z0-9_]*)(?:=\s*(.*))?$/) {
+ my ($without, $name, $val) = ($1, $2, $3);
+ if (defined $values{$name}) {
+ print STDERR ">> $pkgname: Duplicate parameter $name at $master line $.: $_.\n";
+ next;
+ }
+ if (defined $val) {
+ my @v;
+ foreach my $r (split /,\s*/, $val) {
+ $r =~ s/\s+$//;
+ if (length $r > 0) {
+ push @v, $r;
+ $haswithout{$name} = 1
+ if $r =~ /^(?:no|none|off|false)$/i;
+ }
+ }
+ if ($#v == -1 || $#v == 0 && $v[0] =~ /^auto$/i) {
+ push @v, qw(yes no);
+ $haswithout{$name} = 1;
+ }
+ $values{$name} = \@v;
+ $default{$name} = defined $without && $haswithout{$name} ? 'no' : $values{$name}->[0];
+ }
+ else {
+ @{$values{$name}} = qw(yes no);
+ $haswithout{$name} = 1;
+ $default{$name} = defined $without ? 'no' : 'yes';
+ }
+ $currdesc = \@{$description{$name}};
+ push @order, $name;
+ }
+ elsif (/^# (.*)$/) {
+ push @{$currdesc}, $1
+ if defined $currdesc;
+ }
+ elsif (/^##$/) {
+ last;
+ }
+ else {
+ print STDERR ">> $pkgname: Parse error at $master line $.: $_.\n"
+ }
+ }
+ close MASTER;
+}
+
+sub parseoverride {
+ my $currdesc;
+ my ($override) = @_;
+
+ -r $override
+ or return 1;
+
+ open OVERRIDE, "<$override"
+ or die "Can't read $override: $!\n";
+
+ while() {
+ chomp;
+ last if /^##/;
+ next if /^#?\s*$/;
+ next if /^#\s*\$FreeBSD/;
+ if (/^#!/) {
+ undef $currdesc;
+ }
+ elsif(/^#WITH(OUT)?_([A-Z][A-Z0-9_]*)(?:=\s*(.*))?$/) {
+ my ($without, $name, $val) = ($1, $2, $3);
+ if (!defined $values{$name}) {
+ print STDERR ">> $pkgname: Override parameter $name not in master file.\n";
+ next;
+ }
+ if (defined $val) {
+ my @v;
+ foreach my $r (split /,\s*/, $val) {
+ $r =~ s/\s+$//;
+ if (length $r > 0) {
+ push @v, $r;
+ $haswithout{$name} = 1
+ if $r =~ /^(?:no|none|off|false)$/i;
+ }
+ }
+ if ($#v == -1 || $#v == 0 && $v[0] =~ /^auto$/i) {
+ push @v, qw(yes no);
+ $haswithout{$name} = 1;
+ }
+ $values{$name} = \@v;
+ $default{$name} = defined $without && $haswithout{$name} ? 'no' : $values{$name}->[0];
+ }
+ else {
+ @{$values{$name}} = qw(yes no);
+ $haswithout{$name} = 1;
+ $default{$name} = defined $without ? 'no' : 'yes';
+ }
+ delete $description{$name};
+ $currdesc = \@{$description{$name}};
+ $hasoverride{$name} = 1;
+ }
+ elsif (/^# (.*)$/) {
+ push @{$currdesc}, $1
+ if defined $currdesc;
+ }
+ elsif (/^##$/) {
+ last;
+ }
+ else {
+ print STDERR ">> $pkgname: Parse error at $override line $.: $_.\n"
+ }
+ }
+ close OVERRIDE;
+
+ $isoverride = 1;
+}
+
+sub parseoptions {
+ my ($options) = @_;
+ -r $options
+ or return 1;
+ open OPTIONS, "<$options"
+ or die "Can't open $options: $!\n";
+ while () {
+ chomp;
+ next if /^(:?#|\s*$)/;
+ next if /^_OPTIONS/;
+ next if /^\./;
+ if (/^WITH(OUT)?_([A-Z][A-Z0-9_]*)\??=(.*)$/) {
+ my ($without, $name, $val) = ($1, $2, $3);
+ next if !defined $values{$name};
+ next if defined $value{$name};
+ if (defined $without) {
+ $value{$name} = 'no';
+ }
+ else {
+ $value{$name} = $val;
+ }
+ }
+ else {
+ print STDERR ">> $pkgname: Parse error at $options line $.: $_\n";
+ }
+ }
+}
+
+sub parseeditoptions {
+ my ($options) = @_;
+ -r $options
+ or return 1;
+ open OPTIONS, "<$options"
+ or die "Can't open $options: $!\n";
+ while () {
+ chomp;
+ s/\s*#.*$//;
+ next if /^$/;
+ if (/^([A-Z][A-Z0-9_]*)\s*=\s*(.*)$/) {
+ my ($name, $val) = ($1, $2);
+ next if !defined $values{$name};
+ next if $#{$values{$name}} == 0 && $values{$name}->[0] =~ /^ignore$/i;
+ next if $isoverride && $#{$values{$name}} == 0;
+ my $candidate;
+ foreach my $c (@{$values{$name}}) {
+ if ($c eq '*' || $c eq $val) {
+ $candidate = $val;
+ last;
+ }
+ elsif (lc $c eq lc $val) {
+ $candidate = $c;
+ }
+ elsif ($c eq 'yes' && $val =~ /^(?:y|yes|on|t|true)$/i) {
+ $candidate = $c;
+ }
+ elsif ($c eq 'no' && $val =~ /^(?:n|no|off|f|false)$/i) {
+ $candidate = $c;
+ }
+ }
+ $value{$name} = $candidate
+ if defined $candidate;
+ }
+ else {
+ print STDERR ">> $pkgname: Parse error at $options line $.: $_\n";
+ }
+ }
+ $isedit = 1;
+}
+
+sub print_editoptions {
+ foreach my $name (@order) {
+ if ($name =~ /^\d/) {
+ my $headline;
+ foreach (1..length $section[$name]) {
+ $headline .= "#";
+ }
+ print "##$headline##\n";
+ print "# $section[$name] #\n";
+ print "##$headline##\n";
+ print @{$description{$name}} ? "#\n" : "\n";
+ }
+ else {
+ my $val = $default{$name};
+ next if $#{$values{$name}} == 0 && $values{$name}->[0] =~ /^ignore$/i;
+ if (defined $value{$name} && !($isoverride && $#{$values{$name}} == 0)) {
+ $val = $value{$name};
+ }
+ print "$name=", $val,
+ " # valid values: ", join(", ", @{$values{$name}}), "\n";
+ }
+ if (@{$description{$name}}) {
+ foreach (@{$description{$name}}) {
+ if ($_ eq '.') {
+ print "#\n";
+ }
+ elsif ($_ =~ /^#/) {
+ print "#$_\n";
+ }
+ else {
+ print "# $_\n";
+ }
+ }
+ print "\n";
+ }
+ }
+}
+
+sub print_dialogoptions {
+ foreach my $name (@order) {
+ next if $name =~ /^\d/;
+ next if !$isedit && $isoverride && !$hasoverride{$name};
+ next if !$isedit && $#{$values{$name}} == 0 && $values{$name}->[0] =~ /^ignore$/i;
+ my $val = defined $value{$name} ? $value{$name} : $default{$name};
+ next if $val ne 'yes' && $val ne 'no';
+ $val = $val eq 'yes' ? 'On' : 'Off';
+ my $desc = join ' ', @{$description{$name}};
+ $desc = "$name support"
+ if !$desc;
+ $desc =~ s/\. .*//;
+ $desc = substr($desc, 0, 38) . '...'
+ if length $desc > 41;
+ $desc =~ s/["\$]/\\&/g;
+ print ' ', $name, ' "', $desc, '" ', $val;
+ }
+ print "\n";
+}
+
+sub print_options {
+ print "_OPTIONSNG_READ?=$pkgname\n";
+ foreach my $name (@order) {
+ next if $name =~ /^\d/;
+ next if !$isedit && $isoverride && !$hasoverride{$name};
+ next if !$isedit && $#{$values{$name}} == 0 && $values{$name}->[0] =~ /^ignore$/i;
+ my $val = defined $value{$name} ? $value{$name} : $default{$name};
+ if ($haswithout{$name}) {
+ if ($val =~ /^(no|none|off|false)$/i) {
+ print ".undef WITH_$name\n"
+ if (!$isedit && $isoverride && $#{$values{$name}} == 0);
+ print ".ifndef WITH_$name\n";
+ print "WITHOUT_$name?=yes\n";
+ print ".endif\n";
+ }
+ else {
+ print ".undef WITHOUT_$name\n"
+ if (!$isedit && $isoverride && $#{$values{$name}} == 0);
+ print ".ifndef WITHOUT_$name\n";
+ print "WITH_$name?=$val\n";
+ print ".endif\n";
+ }
+ }
+ else {
+ print "WITH_$name?=$val\n";
+ }
+ }
+}
+
+my %opts;
+
+getopts('p:M:O:g:t:edo', \%opts);
+
+$pkgname = defined $opts{p} ? $opts{p} : "anonyous";
+
+parsemaster $opts{M}
+ if defined $opts{M};
+
+parseoverride $opts{O}
+ if defined $opts{O};
+
+parseoptions $opts{g}
+ if defined $opts{g};
+
+parseeditoptions $opts{t}
+ if defined $opts{t};
+
+print_editoptions
+ if $opts{e};
+
+print_dialogoptions
+ if $opts{d};
+
+print_options
+ if $opts{o};
Property changes on: head/ports-mgmt/portmk/scripts/options.pl
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+FreeBSD=%H
\ No newline at end of property
Index: head/ports-mgmt/portmk/scripts/options.sh
===================================================================
--- head/ports-mgmt/portmk/scripts/options.sh (nonexistent)
+++ head/ports-mgmt/portmk/scripts/options.sh (revision 113827)
@@ -0,0 +1,293 @@
+#!/bin/sh -e
+#
+# Copyright (c) 2004 Oliver Eikemeier. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright notice
+# this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the author nor the names of its contributors may be
+# used to endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+# MAINTAINER= eik@FreeBSD.org
+#
+# These variables are referenced and must be exported from the Makefile:
+#
+# CURDIR
+# OBJDIR
+# MASTERDIR
+# OPTIONS_MASTER
+# OPTIONS_OVERRIDE
+# OPTIONS_FILE
+# OPTIONS_CMD
+# PKGNAME
+#
+
+# utilities
+
+LOCALBASE="${LOCALBASE:-/usr/local}"
+
+AWK=/usr/bin/awk
+CAT=/bin/cat
+CHMOD=/bin/chmod
+CP=/bin/cp
+CUT=/usr/bin/cut
+DIALOG=/usr/bin/dialog
+EXPR=/bin/expr
+FETCH=/usr/bin/fetch
+GREP=/usr/bin/grep
+LS=/bin/ls
+MKDIR='/bin/mkdir -p'
+MKTEMP=/usr/bin/mktemp
+MV=/bin/mv
+REALPATH=/bin/realpath
+RM=/bin/rm
+SED=/usr/bin/sed
+SETENV=/usr/bin/env
+SORT=/usr/bin/sort
+TR=/usr/bin/tr
+WC=/usr/bin/wc
+
+# global constants
+
+### utility functions ###
+
+###
+# do_create generates default options for a master (or override) options files
+###
+
+do_create()
+{
+ local rc
+
+ if [ -n "$OPTIONS_OVERRIDE" ]; then
+ OVERRIDEFILE="$OPTIONS_DEFAULT"
+ elif [ "$CURDIR" != `$REALPATH "$MASTERDIR"` ]; then
+ if [ -f "$CURDIR/options" ]; then
+ OVERRIDEFILE="$CURDIR/options"
+ elif [ -n "$PKGNAMESUFFIX" -a -f "$MASTERDIR/options.${PKGNAMESUFFIX#-}" ]; then
+ OVERRIDEFILE="$MASTERDIR/options.${PKGNAMESUFFIX#-}"
+ else
+ OVERRIDEFILE=
+ fi
+ else
+ OVERRIDEFILE=
+ fi
+
+ if [ -n "$OPTIONS_MASTER" ]; then
+ MASTERFILE="$OPTIONS_MASTER"
+ elif [ -f "$MASTERDIR/options" ]; then
+ MASTERFILE="$MASTERDIR/options"
+ else
+ echo ">> makeconfig: Can't find $MASTERDIR/options" >&2
+ return 1
+ fi
+
+ if [ -n "$OVERRIDEFILE" ]; then
+ SRCFILE="$OVERRIDEFILE"
+ else
+ SRCFILE="$MASTERFILE"
+ fi
+
+ if ! TMP_OPTIONS=`$MKTEMP -q "$SRCFILE.XXXXXX"`; then
+ echo ">> makeconfig: Can't create temporary options file"
+ return 1
+ fi
+
+ $SED -e '/^##/,$d' "$SRCFILE" > "$TMP_OPTIONS"
+
+ echo "## AUTOMATICALLY GENERATED FILE - DO NOT CHANGE ANYTHING BELOW THIS LINE ##" >> "$TMP_OPTIONS"
+ echo "# use \`make config' to edit the local configuration" >> "$TMP_OPTIONS"
+ echo "# use \`make makeconfig' to edit the defaults (MAINTAINER only)" >> "$TMP_OPTIONS"
+ echo >> "$TMP_OPTIONS"
+
+ if $OPTIONS_CMD -p "default" -M "$MASTERFILE" -O "$OVERRIDEFILE" -o >> "$TMP_OPTIONS"; then
+ $MV -f "$TMP_OPTIONS" "$SRCFILE"
+ $CHMOD a+r "$SRCFILE"
+ else
+ $RM -f "$TMP_OPTIONS"
+ fi
+
+ return $rc
+}
+
+###
+# do_delete removes a saved configuration
+###
+
+do_delete()
+{
+ local rc
+
+ $RM -f "$OPTIONS_FILE"
+
+ return $rc
+}
+
+###
+# do_edit edits a custom configuration
+###
+
+do_edit()
+{
+ local rc
+
+ if [ -n "$OPTIONS_OVERRIDE" ]; then
+ OVERRIDE="$OPTIONS_DEFAULT"
+ elif [ "$CURDIR" != `$REALPATH "$MASTERDIR"` ]; then
+ if [ -f "$CURDIR/options" ]; then
+ OVERRIDE="$CURDIR/options"
+ elif [ -n "$PKGNAMESUFFIX" -a -f "$MASTERDIR/options.${PKGNAMESUFFIX#-}" ]; then
+ OVERRIDE="$MASTERDIR/options.${PKGNAMESUFFIX#-}"
+ else
+ OVERRIDE=
+ fi
+ else
+ OVERRIDE=
+ fi
+
+ if [ -n "$OPTIONS_MASTER" ]; then
+ MASTER="$OPTIONS_MASTER"
+ elif [ -f "$MASTERDIR/options" ]; then
+ MASTER="$MASTERDIR/options"
+ else
+ echo ">> makeconfig: Can't find $MASTERDIR/options" >&2
+ return 1
+ fi
+
+ TMP_OPTIONS=`$MKTEMP -t options`
+
+ $OPTIONS_CMD -p "$PKGNAME" -M "$MASTER" -O "$OVERRIDE" -g "$OPTIONS_FILE" -e > "$TMP_OPTIONS"
+
+ ${EDITOR:-/usr/bin/vi} "$TMP_OPTIONS"
+
+ TMP_OPTIONS_FILE=`$MKTEMP -q "$OPTIONS_FILE.XXXXXX"`
+ echo "## AUTOMATICALLY GENERATED FILE - DO NOT EDIT ##" > "$TMP_OPTIONS_FILE"
+ $OPTIONS_CMD -p "$PKGNAME" -M "$MASTER" -O "$OVERRIDE" -g "$OPTIONS_FILE" -t "$TMP_OPTIONS" -o >> "$TMP_OPTIONS_FILE"
+ $RM -f "$TMP_OPTIONS"
+
+ $MV -f "$TMP_OPTIONS_FILE" "$OPTIONS_FILE"
+ $CHMOD a+r "$OPTIONS_FILE"
+
+ return $rc
+}
+
+###
+# do_graphical displays a menu to generate a custom configuration
+###
+
+do_graphical()
+{
+ local rc
+
+ if [ -n "$OPTIONS_OVERRIDE" ]; then
+ OVERRIDE="$OPTIONS_DEFAULT"
+ elif [ "$CURDIR" != `$REALPATH "$MASTERDIR"` ]; then
+ if [ -f "$CURDIR/options" ]; then
+ OVERRIDE="$CURDIR/options"
+ elif [ -n "$PKGNAMESUFFIX" -a -f "$MASTERDIR/options.${PKGNAMESUFFIX#-}" ]; then
+ OVERRIDE="$MASTERDIR/options.${PKGNAMESUFFIX#-}"
+ else
+ OVERRIDE=
+ fi
+ else
+ OVERRIDE=
+ fi
+
+ if [ -n "$OPTIONS_MASTER" ]; then
+ MASTER="$OPTIONS_MASTER"
+ elif [ -f "$MASTERDIR/options" ]; then
+ MASTER="$MASTERDIR/options"
+ else
+ echo ">> makeconfig: Can't find $MASTERDIR/options" >&2
+ return 1
+ fi
+
+ TMP_OPTIONS=`$MKTEMP -t options`
+
+ DIALOGRC=`$OPTIONS_CMD -p "$PKGNAME" -M "$MASTER" -O "$OVERRIDE" -g "$OPTIONS_FILE" -d`
+
+ /bin/sh -c "$DIALOG --checklist \"Options for $PKGNAME\" 21 70 15 $DIALOGRC 2>\"$TMP_OPTIONS\""
+
+ #TMP_OPTIONS_FILE=`$MKTEMP -q "$OPTIONS_FILE.XXXXXX"`
+ #echo "## AUTOMATICALLY GENERATED FILE - DO NOT EDIT ##" > "$TMP_OPTIONS_FILE"
+ #$OPTIONS_CMD -p "$PKGNAME" -M "$MASTER" -O "$OVERRIDE" -g "$OPTIONS_FILE" -t "$TMP_OPTIONS" -o >> "$TMP_OPTIONS_FILE"
+ $CAT "$TMP_OPTIONS"
+
+ $RM -f "$TMP_OPTIONS"
+ #$MV -f "$TMP_OPTIONS_FILE" "$OPTIONS_FILE"
+
+ return $rc
+}
+
+###
+# do_list lists the current configuration
+###
+
+do_list()
+{
+ local rc
+
+ return $rc
+}
+
+###
+# main
+###
+
+opt_create=false
+opt_delete=false
+opt_edit=false
+opt_graphical=false
+opt_list=false
+
+while getopts "cdegl" opt; do
+ case "$opt" in
+ c) opt_create=true;;
+ d) opt_delete=true;;
+ e) opt_edit=true;;
+ g) opt_graphical=true;;
+ l) opt_list=true;;
+ ?) echo "Usage: $0 -cdegl"; exit 1;;
+ esac
+done
+
+shift $(($OPTIND-1))
+
+$opt_create &&
+ { do_create || exit 1; }
+
+$opt_delete &&
+ { do_delete || exit 1; }
+
+$opt_edit &&
+ { do_edit || exit 1; }
+
+$opt_graphical &&
+ { do_graphical || exit 1; }
+
+$opt_list &&
+ { do_list || exit 1; }
+
+exit 0
Property changes on: head/ports-mgmt/portmk/scripts/options.sh
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+FreeBSD=%H
\ No newline at end of property