#-*- 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/.*.*//')"'|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