#-*- 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 defined(X_WINDOW_SYSTEM) && ${X_WINDOW_SYSTEM:L} == xorg
X_IMAKE_PORT= ${PORTSDIR}/devel/imake-6
X_LIBRARIES_PORT= ${PORTSDIR}/x11/xorg-libraries
X_CLIENTS_PORT= ${PORTSDIR}/x11/xorg-clients
X_SERVER_PORT= ${PORTSDIR}/x11-servers/xorg-server
X_FONTSERVER_PORT= ${PORTSDIR}/x11-servers/xorg-fontserver
X_PRINTSERVER_PORT= ${PORTSDIR}/x11-servers/xorg-printserver
X_VFBSERVER_PORT= ${PORTSDIR}/x11-servers/xorg-vfbserver
X_NESTSERVER_PORT= ${PORTSDIR}/x11-servers/xorg-nestserver
X_FONTS_ENCODINGS_PORT= ${PORTSDIR}/x11-fonts/xorg-fonts-encodings
X_FONTS_MISC_PORT= ${PORTSDIR}/x11-fonts/xorg-fonts-miscbitmaps
X_FONTS_100DPI_PORT= ${PORTSDIR}/x11-fonts/xorg-fonts-100dpi
X_FONTS_75DPI_PORT= ${PORTSDIR}/x11-fonts/xorg-fonts-75dpi
X_FONTS_CYRILLIC_PORT= ${PORTSDIR}/x11-fonts/xorg-fonts-cyrillic
X_FONTS_TTF_PORT= ${PORTSDIR}/x11-fonts/xorg-fonts-truetype
X_FONTS_TYPE1_PORT= ${PORTSDIR}/x11-fonts/xorg-fonts-type1
X_MANUALS_PORT= ${PORTSDIR}/x11/xorg-manpages
.elif defined(X_WINDOW_SYSTEM) && ${X_WINDOW_SYSTEM:L} == xfree86-4
X_IMAKE_PORT= ${PORTSDIR}/devel/imake-4
X_LIBRARIES_PORT= ${PORTSDIR}/x11/XFree86-4-libraries
X_CLIENTS_PORT= ${PORTSDIR}/x11/XFree86-4-clients
X_SERVER_PORT= ${PORTSDIR}/x11-servers/XFree86-4-Server
X_FONTSERVER_PORT= ${PORTSDIR}/x11-servers/XFree86-4-FontServer
X_PRINTSERVER_PORT= ${PORTSDIR}/x11-servers/XFree86-4-PrintServer
X_VFBSERVER_PORT= ${PORTSDIR}/x11-servers/XFree86-4-VirtualFramebufferServer
X_NESTSERVER_PORT= ${PORTSDIR}/x11-servers/XFree86-4-NestServer
X_FONTS_ENCODINGS_PORT= ${PORTSDIR}/x11-fonts/XFree86-4-fontEncodings
X_FONTS_MISC_PORT= ${PORTSDIR}/x11-fonts/XFree86-4-fontDefaultBitmaps
X_FONTS_100DPI_PORT= ${PORTSDIR}/x11-fonts/XFree86-4-font100dpi
X_FONTS_75DPI_PORT= ${PORTSDIR}/x11-fonts/XFree86-4-font75dpi
X_FONTS_CYRILLIC_PORT= ${PORTSDIR}/x11-fonts/XFree86-4-fontCyrillic
X_FONTS_TTF_PORT= ${PORTSDIR}/x11-fonts/XFree86-4-fontScalable
X_FONTS_TYPE1_PORT= ${PORTSDIR}/x11-fonts/XFree86-4-fontScalable
X_MANUALS_PORT= ${PORTSDIR}/x11/XFree86-4-manuals
.elif defined(X_WINDOW_SYSTEM) && ${X_WINDOW_SYSTEM:L} == xfree86-3
X_IMAKE_PORT= ${PORTSDIR}/x11/XFree86
X_LIBRARIES_PORT= ${PORTSDIR}/x11/XFree86
X_CLIENTS_PORT= ${PORTSDIR}/x11/XFree86
X_SERVER_PORT= ${PORTSDIR}/x11/XFree86
X_FONTSERVER_PORT= ${PORTSDIR}/x11/XFree86
X_PRINTSERVER_PORT= ${PORTSDIR}/x11/XFree86
X_VFBSERVER_PORT= ${PORTSDIR}/x11/XFree86
X_NESTSERVER_PORT= ${PORTSDIR}/x11/XFree86
X_FONTS_ENCODINGS_PORT= ${PORTSDIR}/x11/XFree86
X_FONTS_MISC_PORT= ${PORTSDIR}/x11/XFree86
X_FONTS_100DPI_PORT= ${PORTSDIR}/x11/XFree86
X_FONTS_75DPI_PORT= ${PORTSDIR}/x11/XFree86
X_FONTS_CYRILLIC_PORT= ${PORTSDIR}/x11/XFree86
X_FONTS_TTF_PORT= ${PORTSDIR}/x11/XFree86
X_FONTS_TYPE1_PORT= ${PORTSDIR}/x11/XFree86
X_MANUALS_PORT= ${PORTSDIR}/x11/XFree86
.else
.error Bad X_WINDOW_SYSTEM setting
.endif
.if defined(USE_IMAKE)
BUILD_DEPENDS+= imake:${X_IMAKE_PORT}
.endif
.if ${X_WINDOW_SYSTEM:L} == xfree86-3
.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)
RUN_DEPENDS+= mkhtmlindex:${X_IMAKE_PORT}
.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}")
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)
LIB_DEPENDS+= X11.6:${X_LIBRARIES_PORT}
# 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
.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} 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 ${X_WINDOW_SYSTEM:L} == xfree86-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 ${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} ${_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} \
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 ${X_WINDOW_SYSTEM:L} == xfree86-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(_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(_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} ${_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:Q}; \
PATCHFILES=${PATCHFILES:C/\\\\(.)/\1/g:Q}
.else
_FETCHDISTFILES_ENV= \
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} ${_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} ${_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); \
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} ${_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} ${_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=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -I ${CONFLICTS:C/.+/'&'/} 2>/dev/null | ${AWK} '{print $$1}'`; \
conflicts_with=; \
for entry in $${found}; do \
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} ${_ONG_MAKEFLAGS} $${__softMAKEFLAGS} package-links; \
fi; \
else \
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=`${SETENV} PKG_DBDIR=${_PKG_DBDIR} ${PKG_INFO} -q -O ${PKGORIGIN}`; \
if [ -n "$${already_installed}" ]; then \
for p in $${already_installed}; do \
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 \
found_package=$${p}; \
break; \
fi; \
done; \
fi; \
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} ${DESTDIR}${PREFIX}
@if [ `${ID} -u` != 0 ]; then \
if [ -w ${DESTDIR}${PREFIX}/ ]; then \
${ECHO_MSG} "Warning: not superuser, you may get some errors during installation."; \
else \
${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} ${DESTDIR}${PREFIX}/ >/dev/null; \
if [ ${MTREE_FILE} = "/etc/mtree/BSD.local.dist" ]; then \
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} ${_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 post-package-script
.PHONY: bootstrap
.if !target(bootstrap)
bootstrap: ${_BOOTSTRAP_SEQ}
.endif
.PHONY: 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) && 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(_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}
.endif
.if !exists(${${target:U}_COOKIE})
.if ${UID} != 0 && defined(_${target:U}_SUSEQ) && !defined(INSTALL_AS_USER)
.if defined(USE_SUBMAKE) || defined(_ONG_REEXEC)
${${target:U}_COOKIE}: ${_${target:U}_DEP}
@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} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${_${target:U}_SUSEQ}"
@${ECHO_MSG} "===> Returning to user credentials"
@${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
.elif defined(USE_SUBMAKE) || defined(_ONG_REEXEC)
${${target:U}_COOKIE}: ${_${target:U}_DEP}
@cd ${.CURDIR} && \
${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} ${_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} ${_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} ${_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}" 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} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}"
@${ECHO_MSG} "===> Returning to user credentials"
.else
@${ECHO_MSG} "===> Deinstalling for ${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=`${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}"; \
${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} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} ${.TARGET}"
@${ECHO_MSG} "===> Returning to user credentials"
.else
@${ECHO_MSG} "===> Deinstalling for ${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}"; \
${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} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} clean-depends
.endif
@${ECHO_MSG} "===> Cleaning for ${PKGNAME}"
.if target(pre-clean)
@cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} pre-clean
.endif
@cd ${.CURDIR} && ${MAKE} ${_ONG_MAKEFLAGS} ${__softMAKEFLAGS} do-clean
.if target(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} ${_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} ${_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(_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; \
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; \
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
@${PERL5} -e ' \
if ( -f q{${DESCR}} ) { \
print q{|${DESCR}}; \
} else { \
print q{|/dev/null}; \
} \
print q{|${MAINTAINER}|${CATEGORIES}|}; \
@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}})); \
@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 (@edirs, @ddirs) { \
$$xe{$$_} = 1; \
} \
print join(q{ }, sort keys %xe), q{|}; \
for (@pdirs, @ddirs) { \
$$xp{$$_} = 1; \
} \
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} ${_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} ${_ONG_MAKEFLAGS} \
$${__softMAKEFLAGS} pretty-print-www-site)"'|' \
-e 's|%%BUILD_DEPENDS%%|'"$$(cd ${.CURDIR} && eval ${MAKE} ${_ONG_MAKEFLAGS} \
$${__softMAKEFLAGS} pretty-print-build-depends-list)"'|' \
-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} ${_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/^/${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} ${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/^/${DESTDIR}/:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GUNZIP_CMD} $${_manpages} ) || ${TRUE}
.elif ${MANCOMPRESSED} == no && !defined(NOMANCOMPRESS)
@${ECHO_MSG} "===> Compressing manual pages for ${PKGNAME}"
@_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 ${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; \
if [ -f ${PKGINSTALL} ]; then \
${CP} ${PKGINSTALL} ${_PKG_DBDIR}/${PKGNAME}/+INSTALL; \
fi; \
if [ -f ${PKGDEINSTALL} ]; then \
${CP} ${PKGDEINSTALL} ${_PKG_DBDIR}/${PKGNAME}/+DEINSTALL; \
fi; \
if [ -f ${PKGREQ} ]; then \
${CP} ${PKGREQ} ${_PKG_DBDIR}/${PKGNAME}/+REQUIRE; \
fi; \
if [ -f ${PKGMESSAGE} ]; then \
${CP} ${PKGMESSAGE} ${_PKG_DBDIR}/${PKGNAME}/+DISPLAY; \
fi; \
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; \
fi; \
fi; \
done; \
fi
.if !defined(NO_MTREE)
@if [ -f ${MTREE_FILE} ]; then \
${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; \
${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
.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
.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
.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