From a1ce5bbd5c12c5e190426d35e2f574cfc57b1353 Mon Sep 17 00:00:00 2001 From: asami Date: Sat, 12 Dec 1998 07:39:30 +0000 Subject: (0) Fast INDEX generation. Only print out the directory name and don't recurse in "make describe". The new INDEX target in ports/Makefile invokes a perl script to recurse and convert them into package names. While I'm here, change the name of targets and move them around a little bit for the sake of consistency. It is also probably worth noting here that the meaning of the "build dependency" list in INDEX has been changed slightly changed. The old list was "build depends and its build depends" -- not particularly useful if you had things like autoconf, which run-depend on gm4 (you install all the things listed here and you'll get an autoconf that won't run). It is now "build depends and its run depends" -- you install everything listed here, and you'll be able to build the port. Submitted by: steve (0') Fast README.html generation. It uses ports/INDEX to find dependencies instead of embarking on to a recursive loop. Submitted by: steve (1) Remove NO_WRKDIR and NO_EXTRACT. Their functionality are easily replacable with NO_WRKSUBDIR=t and EXTRACT_ONLY= (nothing on right side), and they get in the way of read-only port trees. (2) Surround first few variable definitions with ".if !defined()". This will make cross-compilation easier and also speed up make processes. (3) Call sysctl with absolute path. Prefer the one in /sbin over the one in /usr/sbin. (4) Add four new variables PKGINSTALL?= ${PKGDIR}/INSTALL PKGDEINSTALL?= ${PKGDIR}/DEINSTALL PKGREQ?= ${PKGDIR}/REQ PKGMESSAGE?= ${PKGDIR}/MESSAGE and use them in PKG_ARGS. Frobbing with PKG_ARGS directly is strongly discouraged. (5) Change PKG_SUFX to ".tar" (instead of ".tgz") if PKG_NOCOMPRESS is defined. This is intended only for our own use. (6) Add more sites to MASTER_SITE_GNU. Submitted by: billf (7) Override MANUAL_PACKAGE_BUILD if PARALLEL_PACKAGE_BUILD is defined. This is intended only for our own use. (8) Add new target "ignorelist" which will print out the package name if the port is not going to be built on this machine. This is intended only for our own use. (9) Make mtree a little quieter. --- Mk/bsd.port.mk | 173 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 101 insertions(+), 72 deletions(-) (limited to 'Mk/bsd.port.mk') diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk index 66dc62198f10..c523b6279104 100644 --- a/Mk/bsd.port.mk +++ b/Mk/bsd.port.mk @@ -1,7 +1,7 @@ #-*- mode: Fundamental; tab-width: 4; -*- # ex:ts=4 # -# $Id: bsd.port.mk,v 1.298 1998/11/20 04:00:38 asami Exp $ +# $Id: bsd.port.mk,v 1.299 1998/11/25 00:12:27 asami Exp $ # $NetBSD: $ # # bsd.port.mk - 940820 Jordan K. Hubbard. @@ -189,8 +189,6 @@ OpenBSD_MAINTAINER= imp@OpenBSD.ORG # unpacks to. (Default: ${WRKDIR}/${DISTNAME} unless # NO_WRKSUBDIR is set, in which case simply ${WRKDIR}). # NO_WRKSUBDIR - Assume port unpacks directly into ${WRKDIR}. -# NO_WRKDIR - There's no work directory at all; port does this someplace -# else. # PATCHDIR - A directory containing any additional patches you made # to port this software to FreeBSD (default: # ${MASTERDIR}/patches) @@ -285,10 +283,10 @@ OpenBSD_MAINTAINER= imp@OpenBSD.ORG # # Set these variables if your port doesn't need some of the steps. # Note that there are no NO_PATCH or NO_CONFIGURE variables becuase -# those steps are empty by default. Also, NO_CHECKSUM is a user variable -# and is not to be set in a port's Makefile. See above for NO_PACKAGE. +# those steps are empty by default. NO_EXTRACT is not allowed anymore +# since we need to at least create ${WRKDIR}. Also, NO_CHECKSUM is a user +# variable and is not to be set in a port's Makefile. See above for NO_PACKAGE. # -# NO_EXTRACT - Use a dummy (do-nothing) extract target. # NO_BUILD - Use a dummy (do-nothing) build target. # NO_INSTALL - Use a dummy (do-nothing) install target. # @@ -389,19 +387,33 @@ OpenBSD_MAINTAINER= imp@OpenBSD.ORG .if !defined(AFTERPORTMK) # Get the architecture +.if !defined(ARCH) ARCH!= /usr/bin/uname -m +.endif # Get the operating system type +.if !defined(OPSYS) OPSYS!= /usr/bin/uname -s +.endif # Get the operating system revision +.if !defined(OSREL) OSREL!= /usr/bin/uname -r | sed -e 's/[-(].*//' +.endif # Get __FreeBSD_version -OSVERSION!= sysctl -n kern.osreldate +.if !defined(OSVERSION) +.if exists(/sbin/sysctl) +OSVERSION!= /sbin/sysctl -n kern.osreldate +.else +OSVERSION!= /usr/sbin/sysctl -n kern.osreldate +.endif +.endif # Get the object format. +.if !defined(PORTOBJFORMAT) PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat || echo aout +.endif MASTERDIR?= ${.CURDIR} @@ -497,11 +509,7 @@ PREFIX?= ${LOCALBASE} # Start of post-makefile section. .if !defined(BEFOREPORTMK) -.if !defined(NO_WRKDIR) WRKDIR?= ${WRKDIRPREFIX}${.CURDIR}/work -.else -WRKDIR?= ${WRKDIRPREFIX}${.CURDIR} -.endif .if defined(NO_WRKSUBDIR) WRKSRC?= ${WRKDIR} .else @@ -538,6 +546,10 @@ GNU_CONFIGURE= yes BUILD_DEPENDS+= autoconf:${PORTSDIR}/devel/autoconf .endif +#.if defined(REQUIRES_MOTIF) +#BUILD_DEPENDS+= ${X11BASE}/lib/libXm.a:${PORTSDIR}/tmp/motif +#.endif + PERL_VERSION= 5.00502 PERL_VER= 5.005 PLIST_SUB+= PERL_VERSION=${PERL_VERSION} \ @@ -687,28 +699,36 @@ COMMENT?= ${PKGDIR}/COMMENT DESCR?= ${PKGDIR}/DESCR PLIST?= ${PKGDIR}/PLIST TMPPLIST?= ${WRKDIR}/.PLIST.mktmp +PKGINSTALL?= ${PKGDIR}/INSTALL +PKGDEINSTALL?= ${PKGDIR}/DEINSTALL +PKGREQ?= ${PKGDIR}/REQ +PKGMESSAGE?= ${PKGDIR}/MESSAGE PKG_CMD?= /usr/sbin/pkg_create PKG_DELETE?= /usr/sbin/pkg_delete .if !defined(PKG_ARGS) PKG_ARGS= -v -c ${COMMENT} -d ${DESCR} -f ${TMPPLIST} -p ${PREFIX} -P "`${MAKE} package-depends|sort -u`" ${EXTRA_PKG_ARGS} -.if exists(${PKGDIR}/INSTALL) -PKG_ARGS+= -i ${PKGDIR}/INSTALL +.if exists(${PKGINSTALL}) +PKG_ARGS+= -i ${PKGINSTALL} .endif -.if exists(${PKGDIR}/DEINSTALL) -PKG_ARGS+= -k ${PKGDIR}/DEINSTALL +.if exists(${PKGDEINSTALL}) +PKG_ARGS+= -k ${PKGDEINSTALL} .endif -.if exists(${PKGDIR}/REQ) -PKG_ARGS+= -r ${PKGDIR}/REQ +.if exists(${PKGREQ}) +PKG_ARGS+= -r ${PKGREQ} .endif -.if exists(${PKGDIR}/MESSAGE) -PKG_ARGS+= -D ${PKGDIR}/MESSAGE +.if exists(${PKGMESSAGE}) +PKG_ARGS+= -D ${PKGMESSAGE} .endif .if !defined(NO_MTREE) PKG_ARGS+= -m ${MTREE_FILE} .endif .endif +.if defined(PKG_NOCOMPRESS) +PKG_SUFX?= .tar +.else PKG_SUFX?= .tgz +.endif # where pkg_add records its dirty deeds. PKG_DBDIR?= /var/db/pkg @@ -764,7 +784,14 @@ MASTER_SITE_XCONTRIB+= \ MASTER_SITE_GNU+= \ ftp://prep.ai.mit.edu/pub/gnu/%SUBDIR%/ \ - ftp://wuarchive.wustl.edu/systems/gnu/%SUBDIR%/ + ftp://wuarchive.wustl.edu/systems/gnu/%SUBDIR%/ \ + ftp://ftp.kddlabs.co.jp/pub/gnu/%SUBDIR%/ \ + ftp://ftp.digex.net/pub/gnu/%SUBDIR%/ \ + ftp://ftp.univ-evry.fr/pub/gnu/%SUBDIR%/ \ + ftp://ftp.cdrom.com/pub/gnu/%SUBDIR%/ \ + ftp://ftp.duke.edu/pub/gnu/%SUBDIR%/ \ + ftp://ftp.gamma.ru/pub/gnu/%SUBDIR%/ \ + ftp://ftp.nihon-u.ac.jp/pub/gnu/%SUBDIR%/ MASTER_SITE_PERL_CPAN+= \ ftp://ftp.digital.com/pub/plan/perl/CPAN/modules/by-module/%SUBDIR%/ \ @@ -1046,6 +1073,10 @@ IGNORE= "does not require Motif" IGNORE= "may not be placed on a CDROM: ${NO_CDROM}" .elif (defined(RESTRICTED) && defined(NO_RESTRICTED)) IGNORE= "is restricted: ${RESTRICTED}" +.elif defined(NO_WRKDIR) +IGNORE= "defines NO_WRKDIR, which is obsoleted. If you are defining NO_WRKDIR and NO_EXTRACT, try changing it to NO_WRKSUBDIR=yes and EXTRACT_ONLY= \(the right side intentionally left empty\)" +.elif defined(NO_EXTRACT) +IGNORE= "defines NO_EXTRACT, which is obsoleted. Try changing it to EXTRACT_ONLY= \(the right side intentionally left empty\)" .elif defined(NO_CONFIGURE) IGNORE= "defines NO_CONFIGURE, which is obsoleted" .elif defined(NO_PATCH) @@ -1056,7 +1087,7 @@ IGNORE= "is broken for ELF: ${BROKEN_ELF}" IGNORE= "is marked as broken: ${BROKEN}" .endif -.if (defined(MANUAL_PACKAGE_BUILD) && defined(PACKAGE_BUILDING)) +.if (defined(MANUAL_PACKAGE_BUILD) && defined(PACKAGE_BUILDING) && !defined(PARALLEL_PACKAGE_BUILD)) IGNORE= "has to be built manually: ${MANUAL_PACKAGE_BUILD}" clean: @${IGNORECMD} @@ -1088,7 +1119,12 @@ reinstall: @${IGNORECMD} package: @${IGNORECMD} +ignorelist: package-name +.else +ignorelist: + @${DO_NADA} .endif + .endif ################################################################ @@ -1145,13 +1181,6 @@ checksum: fetch @${DO_NADA} .endif -# Disable extract -.if defined(NO_EXTRACT) && !target(extract) -extract: fetch - @cd ${.CURDIR} && ${MAKE} ${.MAKEFLAGS} checksum REAL_EXTRACT=yes - @${TOUCH} ${TOUCH_FLAGS} ${EXTRACT_COOKIE} -.endif - # Disable build .if defined(NO_BUILD) && !target(build) build: configure @@ -1247,10 +1276,8 @@ do-fetch: .if !target(do-extract) do-extract: -.if !defined(NO_WRKDIR) @${RM} -rf ${WRKDIR} @${MKDIR} ${WRKDIR} -.endif @for file in ${EXTRACT_ONLY}; do \ if ! (cd ${WRKDIR} && ${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} ${_DISTDIR}/$$file ${EXTRACT_AFTER_ARGS});\ then \ @@ -1461,7 +1488,7 @@ _PORT_USE: .USE ${ECHO_MSG} "Copy it from a suitable location (e.g., /usr/src/etc/mtree) and try again."; \ exit 1; \ else \ - ${MTREE_CMD} ${MTREE_ARGS} ${PREFIX}/; \ + ${MTREE_CMD} ${MTREE_ARGS} ${PREFIX}/ >/dev/null; \ fi; \ else \ ${ECHO_MSG} "Warning: not superuser, can't run mtree."; \ @@ -1632,7 +1659,6 @@ clean: pre-clean @${MAKE} clean-depends .endif @${ECHO_MSG} "===> Cleaning for ${PKGNAME}" -.if !defined(NO_WRKDIR) @if [ -d ${WRKDIR} ]; then \ if [ -w ${WRKDIR} ]; then \ ${RM} -rf ${WRKDIR}; \ @@ -1640,9 +1666,6 @@ clean: pre-clean ${ECHO_MSG} "===> ${WRKDIR} not writable, skipping"; \ fi; \ fi -.else - @${RM} -f ${WRKDIR}/.*_done ${TMPPLIST} -.endif .endif .if !target(pre-distclean) @@ -1775,19 +1798,6 @@ package-name: @${ECHO} ${PKGNAME} .endif -# Show (recursively) all the packages this package depends on. - -.if !target(package-depends) -package-depends: - @for dir in `${ECHO} "${LIB_DEPENDS} ${RUN_DEPENDS}" | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//' | sort -u` `${ECHO} ${DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/:.*//' | sort -u`; do \ - if [ -d $$dir ]; then \ - (cd $$dir ; ${MAKE} package-name package-depends); \ - else \ - ${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \ - fi; \ - done -.endif - # Build a package but don't check the package cookie .if !target(repackage) @@ -1802,9 +1812,7 @@ pre-repackage: .if !target(package-noinstall) package-noinstall: -.if !defined(NO_WRKDIR) @${MKDIR} ${WRKDIR} -.endif @cd ${.CURDIR} && ${MAKE} ${.MAKEFLAGS} PACKAGE_NOINSTALL=yes real-package @${RM} ${TMPPLIST} -@${RMDIR} ${WRKDIR} @@ -1961,16 +1969,35 @@ clean-depends: .endif .endif -.if !target(depends-list) -depends-list: +# Dependency lists: build and runtime. Print out directory names. + +build-depends-list: @for dir in `${ECHO} "${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS}" | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//' | sort -u` `${ECHO} ${DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/:.*//' | sort -u`; do \ if [ -d $$dir ]; then \ - (cd $$dir ; ${MAKE} package-name depends-list); \ + ${ECHO} $$dir; \ + else \ + ${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \ + fi; \ + done | sort -u + +run-depends-list: + @for dir in `${ECHO} "${LIB_DEPENDS} ${RUN_DEPENDS}" | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//' | sort -u` `${ECHO} ${DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/:.*//' | sort -u`; do \ + if [ -d $$dir ]; then \ + ${ECHO} $$dir; \ + else \ + ${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \ + fi; \ + done | sort -u + +# This one does not print out directory names -- it could take a long time. +package-depends: + @for dir in `${ECHO} "${LIB_DEPENDS} ${RUN_DEPENDS}" | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//' | sort -u` `${ECHO} ${DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/:.*//' | sort -u`; do \ + if [ -d $$dir ]; then \ + (cd $$dir ; ${MAKE} package-name package-depends); \ else \ ${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \ fi; \ done -.endif ################################################################ # Everything after here are internal targets and really @@ -2000,12 +2027,12 @@ describe: ${ECHO} -n "|${MAINTAINER}|${CATEGORIES}|"; \ case "A${FETCH_DEPENDS}B${BUILD_DEPENDS}C${LIB_DEPENDS}D${DEPENDS}E" in \ ABCDE) ;; \ - *) cd ${.CURDIR} && ${ECHO} -n `${MAKE} depends-list|sort -u`;; \ + *) cd ${.CURDIR} && ${ECHO} -n `${MAKE} build-depends-list|sort -u`;; \ esac; \ ${ECHO} -n "|"; \ case "A${RUN_DEPENDS}B${LIB_DEPENDS}C${DEPENDS}D" in \ ABCD) ;; \ - *) cd ${.CURDIR} && ${ECHO} -n `${MAKE} package-depends|sort -u`;; \ + *) cd ${.CURDIR} && ${ECHO} -n `${MAKE} run-depends-list|sort -u`;; \ esac; \ ${ECHO} "" .endif @@ -2027,25 +2054,27 @@ README.html: -e 's%%PKG%%${PKGNAME}g' \ -e '/%%COMMENT%%/r${PKGDIR}/COMMENT' \ -e '/%%COMMENT%%/d' \ - -e 's%%BUILD_DEPENDS%%'"`${MAKE} print-depends-list`"'' \ - -e 's%%RUN_DEPENDS%%'"`${MAKE} print-package-depends`"'' \ + -e 's%%BUILD_DEPENDS%%'"`${MAKE} pretty-print-build-depends-list`"'' \ + -e 's%%RUN_DEPENDS%%'"`${MAKE} pretty-print-run-depends-list`"'' \ >> $@ -.if !target(print-depends-list) -print-depends-list: +# The following two targets require an up-to-date INDEX in ${PORTSDIR} + +.if !target(pretty-print-build-depends-list) +pretty-print-build-depends-list: .if defined(FETCH_DEPENDS) || defined(BUILD_DEPENDS) || \ defined(LIB_DEPENDS) || defined(DEPENDS) @${ECHO} -n 'This port requires package(s) "' - @${ECHO} -n `${MAKE} depends-list | sort -u` + @${ECHO} -n `grep '^${PKGNAME}|' ${PORTSDIR}/INDEX | awk -F\| '{print $$8;}'` @${ECHO} '" to build.' .endif .endif -.if !target(print-package-depends) -print-package-depends: +.if !target(pretty-print-run-depends-list) +pretty-print-run-depends-list: .if defined(RUN_DEPENDS) || defined(LIB_DEPENDS) || defined(DEPENDS) @${ECHO} -n 'This port requires package(s) "' - @${ECHO} -n `${MAKE} package-depends | sort -u` + @${ECHO} -n `grep '^${PKGNAME}|' ${PORTSDIR}/INDEX | awk -F\| '{print $$9;}'` @${ECHO} '" to run.' .endif .endif @@ -2134,17 +2163,17 @@ fake-pkg: ${PKG_CMD} ${PKG_ARGS} -O ${PKGFILE} > ${PKG_DBDIR}/${PKGNAME}/+CONTENTS; \ ${CP} ${DESCR} ${PKG_DBDIR}/${PKGNAME}/+DESC; \ ${CP} ${COMMENT} ${PKG_DBDIR}/${PKGNAME}/+COMMENT; \ - if [ -f ${PKGDIR}/INSTALL ]; then \ - ${CP} ${PKGDIR}/INSTALL ${PKG_DBDIR}/${PKGNAME}/+INSTALL; \ + if [ -f ${PKGINSTALL} ]; then \ + ${CP} ${PKGINSTALL} ${PKG_DBDIR}/${PKGNAME}/+INSTALL; \ fi; \ - if [ -f ${PKGDIR}/DEINSTALL ]; then \ - ${CP} ${PKGDIR}/DEINSTALL ${PKG_DBDIR}/${PKGNAME}/+DEINSTALL; \ + if [ -f ${PKGDEINSTALL} ]; then \ + ${CP} ${PKGDEINSTALL} ${PKG_DBDIR}/${PKGNAME}/+DEINSTALL; \ fi; \ - if [ -f ${PKGDIR}/REQ ]; then \ - ${CP} ${PKGDIR}/REQ ${PKG_DBDIR}/${PKGNAME}/+REQUIRE; \ + if [ -f ${PKGREQ} ]; then \ + ${CP} ${PKGREQ} ${PKG_DBDIR}/${PKGNAME}/+REQUIRE; \ fi; \ - if [ -f ${PKGDIR}/MESSAGE ]; then \ - ${CP} ${PKGDIR}/MESSAGE ${PKG_DBDIR}/${PKGNAME}/+DISPLAY; \ + if [ -f ${PKGMESSAGE} ]; then \ + ${CP} ${PKGMESSAGE} ${PKG_DBDIR}/${PKGNAME}/+DISPLAY; \ fi; \ for dep in `${MAKE} package-depends ECHO_MSG=/usr/bin/true | sort -u`; do \ if [ -d ${PKG_DBDIR}/$$dep ]; then \ -- cgit