diff options
author | asami <asami@FreeBSD.org> | 1995-04-21 02:03:02 +0800 |
---|---|---|
committer | asami <asami@FreeBSD.org> | 1995-04-21 02:03:02 +0800 |
commit | 58b0f9819863b2e7c3e6822793ff74d82a3a99f9 (patch) | |
tree | 113e7f6f3f80463b8689bd1fb4a51dd2f1357c83 /Mk | |
parent | ea0f788962fb24803f749fe078a25bf5981ffbf1 (diff) | |
download | freebsd-ports-gnome-58b0f9819863b2e7c3e6822793ff74d82a3a99f9.tar.gz freebsd-ports-gnome-58b0f9819863b2e7c3e6822793ff74d82a3a99f9.tar.zst freebsd-ports-gnome-58b0f9819863b2e7c3e6822793ff74d82a3a99f9.zip |
Major overhaul. The major targets (fetch, extract, patch, configure,
build, install) are now all skeletons and do nothing but
(1) Call pre-* target (if exists)
(2) Call scripts/pre-* script (if exists)
(3) Call do-* target
(4) Call post-* target (if exists)
(5) Call scripts/post-* script (if exists)
The do-* targets do all the work. The pre-* and post-* targets/scripts
don't exist by default. The main targets check for the cookies too, so
porters shouldn't have to worry about them at all.
NOTE: THE MAIN TARGETS IN THE PORTS MAKEFILES SHOULD GO AWAY. We need
to fix this before wcarchive comes back up. Change the names to do-*,
rip out the cookies, rip out the calls to pre-* etc. and most of them
should work.
Also, reorganize the whole thing so that similar targets are together
and add more comments. Surround section header with 64 #'s (C-u C-u
C-u # in emacs :).
Hopefully this will be the last major change to bsd.port.mk. Now let
the Makefile-hacking begin.
Diffstat (limited to 'Mk')
-rw-r--r-- | Mk/bsd.port.mk | 889 |
1 files changed, 532 insertions, 357 deletions
diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk index bd3a36d9b167..cb7757fced37 100644 --- a/Mk/bsd.port.mk +++ b/Mk/bsd.port.mk @@ -3,7 +3,7 @@ # bsd.port.mk - 940820 Jordan K. Hubbard. # This file is in the public domain. # -# $Id: bsd.port.mk,v 1.142 1995/04/18 08:24:18 asami Exp $ +# $Id: bsd.port.mk,v 1.134 1995/04/09 10:24:09 jkh Exp $ # # Please view me with 4 column tabs! @@ -139,7 +139,15 @@ # checksum - Use files/md5 to ensure that your distfiles are valid # makesum - Generate files/md5 (only do this for your own ports!) # -# Default sequence for "all" is: fetch extract patch configure build +# Default sequence for "all" is: fetch checksum extract patch configure build +# +# Please read the comments in the targets section below, you +# should be able to use the pre-* or post-* targets/scripts +# (which are available for every stage except checksum) or +# override the do-* targets to do pretty much anything you want. +# +# NEVER override the "regular" targets unless you want to open +# a major can of worms. .if exists(${.CURDIR}/../Makefile.inc) .include "${.CURDIR}/../Makefile.inc" @@ -179,7 +187,6 @@ EXEC_DEPENDS+= gmake:${PORTSDIR}/devel/gmake .include "${PORTSDIR}/../Makefile.inc" .endif - # Change these if you'd prefer to keep the cookies someplace else. EXTRACT_COOKIE?= ${WRKDIR}/.extract_done CONFIGURE_COOKIE?= ${WRKDIR}/.configure_done @@ -298,30 +305,26 @@ HAS_CONFIGURE= yes .MAIN: all -# 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. -# This allows you to do both. +################################################################ +# 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. # +# This allows you to do both. +################################################################ + .if (defined(IS_INTERACTIVE) && defined(BATCH)) || (!defined(IS_INTERACTIVE) && defined(INTERACTIVE)) all: @${DO_NADA} -pre-build: - @${DO_NADA} build: @${DO_NADA} -pre-install: - @${DO_NADA} install: @${DO_NADA} -pre-fetch: - @${DO_NADA} fetch: @${DO_NADA} -pre-configure: - @${DO_NADA} configure: @${DO_NADA} package: @@ -333,15 +336,19 @@ all: build .endif .if !target(is_depended) -is_depended: all install +is_depended: install .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 (since you can't _undefine_ -# a variable in make!). +################################################################ +# 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 (since you can't _ +# undefine_ a variable in make!). +################################################################ + .if defined(NO_EXTRACT) && !target(extract) extract: @${TOUCH} ${TOUCH_FLAGS} ${EXTRACT_COOKIE} @@ -375,50 +382,174 @@ patch: @${TOUCH} ${TOUCH_FLAGS} ${PATCH_COOKIE} .endif +################################################################ # More standard targets start here. - -# 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 -# -.if !target(describe) -describe: - @echo -n "${PKGNAME}|${.CURDIR}/${PKGNAME}|" - @echo -n "${PREFIX}|" - @if [ -f ${PKGDIR}/COMMENT ]; then \ - echo -n "`cat ${PKGDIR}/COMMENT`"; \ - else \ - echo -n "** No Description"; \ +# 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. +################################################################ + +# Fetch + +.if !target(do-fetch) +do-fetch: + @if [ ! -d ${DISTDIR} ]; then mkdir -p ${DISTDIR}; fi + @(cd ${DISTDIR}; \ + for file in ${DISTFILES}; do \ + if [ ! -f $$file -a ! -f `basename $$file` ]; then \ + ${ECHO_MSG} ">> $$file doesn't seem to exist on this system."; \ + for site in ${MASTER_SITES}; do \ + ${ECHO_MSG} ">> Attempting to fetch from $${site}"; \ + if ${NCFTP} ${NCFTPFLAGS} $${site}$${file}; then \ + break; \ + fi \ + done; \ + if [ ! -f $$file -a ! -f `basename $$file` ]; then \ + ${ECHO_MSG} ">> Couldn't fetch it - please try to retreive this";\ + ${ECHO_MSG} ">> port manually into ${DISTDIR} and try again."; \ + exit 1; \ + fi; \ + fi \ + done) +.if defined(PATCHFILES) + @(cd ${DISTDIR}; \ + for file in ${PATCHFILES}; do \ + if [ ! -f $$file -a ! -f `basename $$file` ]; then \ + ${ECHO_MSG} ">> $$file doesn't seem to exist on this system."; \ + for site in ${PATCH_SITES}; do \ + ${ECHO_MSG} ">> Attempting to fetch from $${site}."; \ + if ${NCFTP} ${NCFTPFLAGS} $${site}$${file}; then \ + break; \ + fi \ + done; \ + if [ ! -f $$file -a ! -f `basename $$file` ]; then \ + ${ECHO_MSG} ">> Couldn't fetch it - please try to retreive this";\ + ${ECHO_MSG} ">> port manually into ${DISTDIR} and try again."; \ + exit 1; \ + fi; \ + fi \ + done) +.endif +.endif + +# Extract + +.if !target(do-extract) +do-extract: + @rm -rf ${WRKDIR} + @mkdir -p ${WRKDIR} +.if defined(EXTRACT_ONLY) + @for file in ${EXTRACT_ONLY}; do \ + if ! (cd ${WRKDIR};${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} ${DISTDIR}/$$file ${EXTRACT_AFTER_ARGS});\ + then \ + exit 1; \ + fi \ + done +.else + @for file in ${DISTFILES}; do \ + if ! (cd ${WRKDIR};${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} ${DISTDIR}/$$file ${EXTRACT_AFTER_ARGS});\ + then \ + exit 1; \ + fi \ + done +.endif +.endif + +# Patch + +.if !target(do-patch) +do-patch: +.if defined(PATCHFILES) + @${ECHO_MSG} "===> Applying distributed patches for ${PKGNAME}" +.if defined(PATCH_DEBUG) + @(cd ${DISTDIR}; \ + for i in ${PATCHFILES}; do \ + ${ECHO_MSG} "===> Applying distributed patch $$i" ; \ + case $$i in \ + *.Z|*.gz) \ + zcat $$i | ${PATCH} ${PATCH_DIST_ARGS}; \ + ;; \ + *) \ + ${PATCH} ${PATCH_DIST_ARGS} < $$i; \ + ;; \ + esac; \ + done) +.else + @(cd ${DISTDIR}; \ + for i in ${PATCHFILES}; do \ + case $$i in \ + *.Z|*.gz) \ + zcat $$i | ${PATCH} ${PATCH_DIST_ARGS}; \ + ;; \ + *) \ + ${PATCH} ${PATCH_DIST_ARGS} < $$i; \ + ;; \ + esac; \ + done) +.endif +.endif +.if defined(PATCH_DEBUG) + @if [ -d ${PATCHDIR} ]; then \ + ${ECHO_MSG} "===> Applying FreeBSD patches for ${PKGNAME}" ; \ + for i in ${PATCHDIR}/patch-*; do \ + ${ECHO_MSG} "===> Applying FreeBSD patch $$i" ; \ + ${PATCH} ${PATCH_ARGS} < $$i; \ + done; \ fi - @if [ -f ${PKGDIR}/DESCR ]; then \ - echo -n "|${PKGDIR}/DESCR"; \ - else \ - echo -n "|/dev/null"; \ + @${TOUCH} ${TOUCH_FLAGS} ${PATCH_COOKIE} +.else + @if [ -d ${PATCHDIR} ]; then \ + ${ECHO_MSG} "===> Applying FreeBSD patches for ${PKGNAME}" ; \ + for i in ${PATCHDIR}/patch-*; \ + do ${PATCH} ${PATCH_ARGS} < $$i; \ + done;\ fi - @echo -n "|${MAINTAINER}|${CATEGORIES}|${KEYWORDS}" - @echo "" + @${TOUCH} ${TOUCH_FLAGS} ${PATCH_COOKIE} +.endif .endif -.if !target(reinstall) -reinstall: pre-reinstall install +# Configure -pre-reinstall: - @rm -f ${INSTALL_COOKIE} +.if !target(do-configure) +do-configure: + @if [ -f ${SCRIPTDIR}/configure ]; then \ + env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ + WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ + FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ + DEPENDS="${DEPENDS}" \ + sh ${SCRIPTDIR}/configure; \ + fi +.if defined(HAS_CONFIGURE) + @(cd ${WRKSRC}; CC="${CC}" ac_cv_path_CC="${CC}" CFLAGS="${CFLAGS}" \ + INSTALL="/usr/bin/install -c -o ${BINOWN} -g ${BINGRP}" \ + INSTALL_PROGRAM="/usr/bin/install ${COPY} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE}" \ + ./${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS}) +.endif +.if defined(USE_IMAKE) +.if defined(USE_GMAKE) + @(cd ${WRKSRC}; ${XMKMF} && ${GMAKE} Makefiles) +.else + @(cd ${WRKSRC}; ${XMKMF} && ${MAKE} Makefiles) +.endif +.endif .endif -.if !target(pre-install) -pre-install: - @${DO_NADA} +# Build + +.if !target(do-build) +do-build: +.if defined(USE_GMAKE) + @(cd ${WRKSRC}; ${GMAKE} PREFIX=${PREFIX} ${MAKE_FLAGS} ${MAKEFILE} ${ALL_TARGET}) +.else defined(USE_GMAKE) + @(cd ${WRKSRC}; ${MAKE} PREFIX=${PREFIX} ${MAKE_FLAGS} ${MAKEFILE} ${ALL_TARGET}) +.endif .endif -.if !target(install) -install: build ${INSTALL_COOKIE} +# Install -${INSTALL_COOKIE}: - @${ECHO_MSG} "===> Installing for ${PKGNAME}" - @${MAKE} ${.MAKEFLAGS} pre-install +.if !target(do-install) +do-install: .if defined(USE_GMAKE) @(cd ${WRKSRC}; ${GMAKE} PREFIX=${PREFIX} ${MAKE_FLAGS} ${MAKEFILE} ${INSTALL_TARGET}) .if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES) @@ -430,26 +561,302 @@ ${INSTALL_COOKIE}: @(cd ${WRKSRC}; ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} install.man) .endif .endif -.if !defined(NO_PACKAGE) - @if [ ! -f ${PKGDIR}/PLIST -o ! -f ${PKGDIR}/COMMENT -o ! -f ${PKGDIR}/DESCR ]; then echo "** Missing patch files for ${PKGNAME} - installation not recorded."; exit 1; fi - @if [ ! -d ${PKG_DBDIR} ]; then rm -f ${PKG_DBDIR}; mkdir -p ${PKG_DBDIR}; fi - @if [ ! -d ${PKG_DBDIR}/${PKGNAME} ]; then \ - ${ECHO_MSG} "===> Registering installation for ${PKGNAME}"; \ - mkdir -p ${PKG_DBDIR}/${PKGNAME}; \ - cp ${PKGDIR}/PLIST ${PKG_DBDIR}/${PKGNAME}/+CONTENTS; \ - cp ${PKGDIR}/DESCR ${PKG_DBDIR}/${PKGNAME}/+DESC; \ - cp ${PKGDIR}/COMMENT ${PKG_DBDIR}/${PKGNAME}/+COMMENT; \ - else \ - ${ECHO_MSG} "===> ${PKGNAME} is already installed - perhaps an older version?"; \ - ${ECHO_MSG} " If so, you may wish to \`\`pkg_delete ${PKGNAME}'' and install"; \ - ${ECHO_MSG} " this port again to upgrade it properly."; \ + @${MAKE} ${.MAKEFLAGS} fake-pkg +.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. +################################################################ + +# Fetch + +.if !target(fetch) +fetch: depends +.if target(pre-fetch) + @${MAKE} ${.MAKEFLAGS} pre-fetch +.endif + @if [ -f ${SCRIPTDIR}/pre-fetch ]; then \ + env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ + WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ + FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ + DEPENDS="${DEPENDS}" \ + sh ${SCRIPTDIR}/pre-fetch; \ + fi + @${MAKE} ${.MAKEFLAGS} do-fetch +.if target(post-fetch) + @${MAKE} ${.MAKEFLAGS} post-fetch +.endif + @if [ -f ${SCRIPTDIR}/post-fetch ]; then \ + env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ + WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ + FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ + DEPENDS="${DEPENDS}" \ + sh ${SCRIPTDIR}/post-fetch; \ + fi +.endif + +# Extract + +.if !target(extract) +extract: checksum ${EXTRACT_COOKIE} + +${EXTRACT_COOKIE}: + @${ECHO_MSG} "===> Extracting for ${PKGNAME}" +.if target(pre-extract) + @${MAKE} ${.MAKEFLAGS} pre-extract +.endif + @if [ -f ${SCRIPTDIR}/pre-extract ]; then \ + env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ + WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ + FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ + DEPENDS="${DEPENDS}" \ + sh ${SCRIPTDIR}/pre-extract; \ + fi + @${MAKE} ${.MAKEFLAGS} do-extract +.if target(post-extract) + @${MAKE} ${.MAKEFLAGS} post-extract +.endif + @if [ -f ${SCRIPTDIR}/post-extract ]; then \ + env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ + WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ + FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ + DEPENDS="${DEPENDS}" \ + sh ${SCRIPTDIR}/post-extract; \ + fi + @${TOUCH} ${TOUCH_FLAGS} ${EXTRACT_COOKIE} +.endif + +# Patch + +.if !target(patch) +patch: extract ${PATCH_COOKIE} + +${PATCH_COOKIE}: + @${ECHO_MSG} "===> Patching for ${PKGNAME}" +.if target(pre-patch) + @${MAKE} ${.MAKEFLAGS} pre-patch +.endif + @if [ -f ${SCRIPTDIR}/pre-patch ]; then \ + env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ + WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ + FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ + DEPENDS="${DEPENDS}" \ + sh ${SCRIPTDIR}/pre-patch; \ + fi + @${MAKE} ${.MAKEFLAGS} do-patch +.if target(post-patch) + @${MAKE} ${.MAKEFLAGS} post-patch +.endif + @if [ -f ${SCRIPTDIR}/post-patch ]; then \ + env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ + WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ + FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ + DEPENDS="${DEPENDS}" \ + sh ${SCRIPTDIR}/post-patch; \ + fi + @${TOUCH} ${TOUCH_FLAGS} ${PATCH_COOKIE} +.endif + +# Configure + +.if !target(configure) +configure: patch ${CONFIGURE_COOKIE} + +${CONFIGURE_COOKIE}: + @${ECHO_MSG} "===> Configuring for ${PKGNAME}" +.if target(pre-configure) + @${MAKE} ${.MAKEFLAGS} pre-configure +.endif + @if [ -f ${SCRIPTDIR}/pre-configure ]; then \ + env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ + WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ + FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ + DEPENDS="${DEPENDS}" \ + sh ${SCRIPTDIR}/pre-configure; \ fi + @${MAKE} ${.MAKEFLAGS} do-configure +.if target(post-configure) + @${MAKE} ${.MAKEFLAGS} post-configure .endif + @if [ -f ${SCRIPTDIR}/post-configure ]; then \ + env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ + WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ + FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ + DEPENDS="${DEPENDS}" \ + sh ${SCRIPTDIR}/post-configure; \ + fi + @${TOUCH} ${TOUCH_FLAGS} ${CONFIGURE_COOKIE} +.endif + +# Build + +.if !target(build) +build: configure ${BUILD_COOKIE} + +${BUILD_COOKIE}: + @${ECHO_MSG} "===> Building for ${PKGNAME}" +.if target(pre-build) + @${MAKE} ${.MAKEFLAGS} pre-build +.endif + @if [ -f ${SCRIPTDIR}/pre-build ]; then \ + env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ + WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ + FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ + DEPENDS="${DEPENDS}" \ + sh ${SCRIPTDIR}/pre-build; \ + fi + @${MAKE} ${.MAKEFLAGS} do-build +.if target(post-build) + @${MAKE} ${.MAKEFLAGS} post-build +.endif + @if [ -f ${SCRIPTDIR}/post-build ]; then \ + env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ + WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ + FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ + DEPENDS="${DEPENDS}" \ + sh ${SCRIPTDIR}/post-build; \ + fi + @${TOUCH} ${TOUCH_FLAGS} ${BUILD_COOKIE} +.endif + +# Install + +.if !target(install) +install: build ${INSTALL_COOKIE} + +${INSTALL_COOKIE}: + @${ECHO_MSG} "===> Installing for ${PKGNAME}" +.if target(pre-install) + @${MAKE} ${.MAKEFLAGS} pre-install +.endif + @if [ -f ${SCRIPTDIR}/pre-install ]; then \ + env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ + WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ + FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ + DEPENDS="${DEPENDS}" \ + sh ${SCRIPTDIR}/pre-install; \ + fi + @${MAKE} ${.MAKEFLAGS} do-install +.if target(post-install) + @${MAKE} ${.MAKEFLAGS} post-install +.endif + @if [ -f ${SCRIPTDIR}/post-install ]; then \ + env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ + WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ + FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ + DEPENDS="${DEPENDS}" \ + sh ${SCRIPTDIR}/post-install; \ + fi @${TOUCH} ${TOUCH_FLAGS} ${INSTALL_COOKIE} .endif -# package-name and package-depends are internal targets and really -# shouldn't be touched by anybody but the release engineers. +# Reinstall +# +# This is a special target to re-run install + +.if !target(reinstall) +reinstall: pre-reinstall install + +pre-reinstall: + @rm -f ${INSTALL_COOKIE} +.endif + +################################################################ +# Some more targets supplied for users' convenience +################################################################ + +# Cleaning up + +.if !target(pre-clean) +pre-clean: + @${DO_NADA} +.endif + +.if !target(clean) +clean: pre-clean + @${ECHO_MSG} "===> Cleaning for ${PKGNAME}" + @rm -f ${EXTRACT_COOKIE} ${CONFIGURE_COOKIE} ${INSTALL_COOKIE} \ + ${BUILD_COOKIE} ${PATCH_COOKIE} +.if !defined(NO_WRKDIR) + @rm -rf ${WRKDIR} +.endif +.endif + +# Prints out a list of files to fetch (useful to do a batch fetch) + +.if !target(fetch-list) +fetch-list: + @if [ ! -d ${DISTDIR} ]; then mkdir -p ${DISTDIR}; fi + @(cd ${DISTDIR}; \ + for file in ${DISTFILES}; do \ + if [ ! -f $$file -a ! -f `basename $$file` ]; then \ + for site in ${MASTER_SITES}; do \ + echo -n ${NCFTP} ${NCFTPFLAGS} $${site}$${file} '||' ; \ + break; \ + done; \ + echo "echo $${file} not fetched" ; \ + fi \ + done) +.if defined(PATCHFILES) + @(cd ${DISTDIR}; \ + for file in ${PATCHFILES}; do \ + if [ ! -f $$file -a ! -f `basename $$file` ]; then \ + for site in ${PATCH_SITES}; do \ + echo -n ${NCFTP} ${NCFTPFLAGS} $${site}$${file} '||' ; \ + break; \ + done; \ + echo "echo $${file} not fetched" ; \ + fi \ + done) +.endif +.endif + +# Checksumming utilities + +.if !target(makesum) +makesum: fetch + @if [ ! -d ${FILESDIR} ]; then mkdir -p ${FILESDIR}; fi + @if [ -f ${MD5_FILE} ]; then rm -f ${MD5_FILE}; fi + @(cd ${DISTDIR}; \ + for file in ${DISTFILES} ${PATCHFILES}; do \ + ${MD5} $$file >> ${MD5_FILE}; \ + done) +.endif + +.if !target(checksum) +checksum: fetch + @if [ ! -f ${MD5_FILE} ]; then \ + ${ECHO_MSG} ">> No MD5 checksum file."; \ + else \ + (cd ${DISTDIR}; OK=""; \ + for file in ${DISTFILES} ${PATCHFILES}; do \ + CKSUM=`${MD5} $$file | awk '{print $$4}'`; \ + CKSUM2=`grep "($$file)" ${MD5_FILE} | awk '{print $$4}'`; \ + if [ "$$CKSUM2" = "" ]; then \ + ${ECHO_MSG} ">> No checksum recorded for $$file"; \ + OK="false"; \ + elif [ "$$CKSUM" != "$$CKSUM2" ]; then \ + ${ECHO_MSG} ">> Checksum mismatch for $$file"; \ + exit 1; \ + fi; \ + done; \ + if [ "$$OK" = "" ]; then \ + ${ECHO_MSG} "Checksums OK."; \ + else \ + ${ECHO_MSG} "Checksums OK for files that have them."; \ + fi) ; \ + fi +.endif + +################################################################ +# The package-building targets +# You probably won't need to touch these +################################################################ # Nobody should want to override this unless PKGNAME is simply bogus. .if !target(package-name) @@ -468,23 +875,28 @@ package-depends: done .endif -.if !target(pre-package) -pre-package: - @${DO_NADA} -.endif +# Build a package .if !target(package) package: install +.if target(pre-package) @${MAKE} ${.MAKEFLAGS} pre-package +.endif @${MAKE} ${.MAKEFLAGS} do-package .endif +# Build a package but don't check the cookie for installation + .if !target(repackage) repackage: +.if target(pre-package) @${MAKE} ${.MAKEFLAGS} pre-package +.endif @${MAKE} ${.MAKEFLAGS} do-package .endif +# The body of the package-building target + .if !target(do-package) do-package: @if [ -e ${PKGDIR}/PLIST ]; then \ @@ -513,6 +925,10 @@ do-package: fi .endif +################################################################ +# Dependency checking +################################################################ + .if !target(depends) depends: exec_depends lib_depends misc_depends @@ -598,299 +1014,58 @@ misc_depends: .endif -.if !target(pre-build) -pre-build: - @${DO_NADA} -.endif - -.if !target(build) -build: configure ${BUILD_COOKIE} - -${BUILD_COOKIE}: - @${ECHO_MSG} "===> Building for ${PKGNAME}" - @${MAKE} ${.MAKEFLAGS} pre-build -.if defined(USE_GMAKE) - @(cd ${WRKSRC}; ${GMAKE} PREFIX=${PREFIX} ${MAKE_FLAGS} ${MAKEFILE} ${ALL_TARGET}) -.else defined(USE_GMAKE) - @(cd ${WRKSRC}; ${MAKE} PREFIX=${PREFIX} ${MAKE_FLAGS} ${MAKEFILE} ${ALL_TARGET}) -.endif - @if [ -f ${SCRIPTDIR}/post-build ]; then \ - env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ - WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ - FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ - DEPENDS="${DEPENDS}" \ - sh ${SCRIPTDIR}/post-build; \ - fi - @${TOUCH} ${TOUCH_FLAGS} ${BUILD_COOKIE} -.endif - -.if !target(pre-patch) -pre-patch: - @${DO_NADA} -.endif - -.if !target(patch) -patch: extract ${PATCH_COOKIE} - -${PATCH_COOKIE}: - @${MAKE} ${.MAKEFLAGS} pre-patch -.if defined(PATCHFILES) - @${ECHO_MSG} "===> Applying distributed patches for ${PKGNAME}" -.if defined(PATCH_DEBUG) - @(cd ${DISTDIR}; \ - for i in ${PATCHFILES}; do \ - ${ECHO_MSG} "===> Applying distributed patch $$i" ; \ - case $$i in \ - *.Z|*.gz) \ - zcat $$i | ${PATCH} ${PATCH_DIST_ARGS}; \ - ;; \ - *) \ - ${PATCH} ${PATCH_DIST_ARGS} < $$i; \ - ;; \ - esac; \ - done) -.else - @(cd ${DISTDIR}; \ - for i in ${PATCHFILES}; do \ - case $$i in \ - *.Z|*.gz) \ - zcat $$i | ${PATCH} ${PATCH_DIST_ARGS}; \ - ;; \ - *) \ - ${PATCH} ${PATCH_DIST_ARGS} < $$i; \ - ;; \ - esac; \ - done) -.endif -.endif -.if defined(PATCH_DEBUG) - @if [ -d ${PATCHDIR} ]; then \ - ${ECHO_MSG} "===> Applying FreeBSD patches for ${PKGNAME}" ; \ - for i in ${PATCHDIR}/patch-*; do \ - ${ECHO_MSG} "===> Applying FreeBSD patch $$i" ; \ - ${PATCH} ${PATCH_ARGS} < $$i; \ - done; \ - fi - @${TOUCH} ${TOUCH_FLAGS} ${PATCH_COOKIE} -.else - @if [ -d ${PATCHDIR} ]; then \ - ${ECHO_MSG} "===> Applying FreeBSD patches for ${PKGNAME}" ; \ - for i in ${PATCHDIR}/patch-*; \ - do ${PATCH} ${PATCH_ARGS} < $$i; \ - done;\ - fi - @${TOUCH} ${TOUCH_FLAGS} ${PATCH_COOKIE} -.endif -.endif - -.if !target(pre-configure) -pre-configure: - @${DO_NADA} -.endif - -.if !target(configure) -configure: depends patch ${CONFIGURE_COOKIE} +################################################################ +# Everything after here are internal targets and really +# shouldn't be touched by anybody but the release engineers. +################################################################ -${CONFIGURE_COOKIE}: - @${ECHO_MSG} "===> Configuring for ${PKGNAME}" - @${MAKE} ${.MAKEFLAGS} pre-configure - @if [ -f ${SCRIPTDIR}/pre-configure ]; then \ - env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ - WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ - FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ - DEPENDS="${DEPENDS}" \ - sh ${SCRIPTDIR}/pre-configure; \ - fi - @if [ -f ${SCRIPTDIR}/configure ]; then \ - env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ - WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ - FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ - DEPENDS="${DEPENDS}" \ - sh ${SCRIPTDIR}/configure; \ +# 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|keywords +# +.if !target(describe) +describe: + @echo -n "${PKGNAME}|${.CURDIR}/${PKGNAME}|" + @echo -n "${PREFIX}|" + @if [ -f ${PKGDIR}/COMMENT ]; then \ + echo -n "`cat ${PKGDIR}/COMMENT`"; \ + else \ + echo -n "** No Description"; \ fi -.if defined(HAS_CONFIGURE) - @(cd ${WRKSRC}; CC="${CC}" ac_cv_path_CC="${CC}" CFLAGS="${CFLAGS}" \ - INSTALL="/usr/bin/install -c -o ${BINOWN} -g ${BINGRP}" \ - INSTALL_PROGRAM="/usr/bin/install ${COPY} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE}" \ - ./${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS}) -.endif -.if defined(USE_IMAKE) -.if defined(USE_GMAKE) - @(cd ${WRKSRC}; ${XMKMF} && ${GMAKE} Makefiles) -.else - @(cd ${WRKSRC}; ${XMKMF} && ${MAKE} Makefiles) -.endif -.endif - @if [ -f ${SCRIPTDIR}/post-configure ]; then \ - env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \ - WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ - FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ - DEPENDS="${DEPENDS}" \ - sh ${SCRIPTDIR}/post-configure; \ + @if [ -f ${PKGDIR}/DESCR ]; then \ + echo -n "|${PKGDIR}/DESCR"; \ + else \ + echo -n "|/dev/null"; \ fi - @${TOUCH} ${TOUCH_FLAGS} ${CONFIGURE_COOKIE} -.endif - -.if !target(pre-fetch) -pre-fetch: - @${DO_NADA} -.endif - -.if !target(fetch) -fetch: pre-fetch - @if [ ! -d ${DISTDIR} ]; then mkdir -p ${DISTDIR}; fi - @(cd ${DISTDIR}; \ - for file in ${DISTFILES}; do \ - if [ ! -f $$file -a ! -f `basename $$file` ]; then \ - ${ECHO_MSG} ">> $$file doesn't seem to exist on this system."; \ - for site in ${MASTER_SITES}; do \ - ${ECHO_MSG} ">> Attempting to fetch from $${site}"; \ - if ${NCFTP} ${NCFTPFLAGS} $${site}$${file}; then \ - break; \ - fi \ - done; \ - if [ ! -f $$file -a ! -f `basename $$file` ]; then \ - ${ECHO_MSG} ">> Couldn't fetch it - please try to retreive this";\ - ${ECHO_MSG} ">> port manually into ${DISTDIR} and try again."; \ - exit 1; \ - fi; \ - fi \ - done) -.if defined(PATCHFILES) - @(cd ${DISTDIR}; \ - for file in ${PATCHFILES}; do \ - if [ ! -f $$file -a ! -f `basename $$file` ]; then \ - ${ECHO_MSG} ">> $$file doesn't seem to exist on this system."; \ - for site in ${PATCH_SITES}; do \ - ${ECHO_MSG} ">> Attempting to fetch from $${site}."; \ - if ${NCFTP} ${NCFTPFLAGS} $${site}$${file}; then \ - break; \ - fi \ - done; \ - if [ ! -f $$file -a ! -f `basename $$file` ]; then \ - ${ECHO_MSG} ">> Couldn't fetch it - please try to retreive this";\ - ${ECHO_MSG} ">> port manually into ${DISTDIR} and try again."; \ - exit 1; \ - fi; \ - fi \ - done) -.endif -.endif - -.if !target(fetch-list) -fetch-list: - @if [ ! -d ${DISTDIR} ]; then mkdir -p ${DISTDIR}; fi - @(cd ${DISTDIR}; \ - for file in ${DISTFILES}; do \ - if [ ! -f $$file -a ! -f `basename $$file` ]; then \ - for site in ${MASTER_SITES}; do \ - echo -n ${NCFTP} ${NCFTPFLAGS} $${site}$${file} '||' ; \ - break; \ - done; \ - echo "echo $${file} not fetched" ; \ - fi \ - done) -.if defined(PATCHFILES) - @(cd ${DISTDIR}; \ - for file in ${PATCHFILES}; do \ - if [ ! -f $$file -a ! -f `basename $$file` ]; then \ - for site in ${PATCH_SITES}; do \ - echo -n ${NCFTP} ${NCFTPFLAGS} $${site}$${file} '||' ; \ - break; \ - done; \ - echo "echo $${file} not fetched" ; \ - fi \ - done) -.endif + @echo -n "|${MAINTAINER}|${CATEGORIES}|${KEYWORDS}" + @echo "" .endif -.if !target(makesum) -makesum: fetch - @if [ ! -d ${FILESDIR} ]; then mkdir -p ${FILESDIR}; fi - @if [ -f ${MD5_FILE} ]; then rm -f ${MD5_FILE}; fi - @(cd ${DISTDIR}; \ - for file in ${DISTFILES} ${PATCHFILES}; do \ - ${MD5} $$file >> ${MD5_FILE}; \ - done) -.endif +# Fake installation of package so that user can pkg_delete it later. +# Also, make sure that an installed port is recognized correctly in +# accordance to the @pkgdep directive in the packing lists -.if !target(checksum) -checksum: fetch - @if [ ! -f ${MD5_FILE} ]; then \ - ${ECHO_MSG} ">> No MD5 checksum file."; \ +.if !target(fake-pkg) +.if !defined(NO_PACKAGE) +fake-pkg: + @if [ ! -f ${PKGDIR}/PLIST -o ! -f ${PKGDIR}/COMMENT -o ! -f ${PKGDIR}/DESCR ]; then echo "** Missing patch files for ${PKGNAME} - installation not recorded."; exit 1; fi + @if [ ! -d ${PKG_DBDIR} ]; then rm -f ${PKG_DBDIR}; mkdir -p ${PKG_DBDIR}; fi + @if [ ! -d ${PKG_DBDIR}/${PKGNAME} ]; then \ + ${ECHO_MSG} "===> Registering installation for ${PKGNAME}"; \ + mkdir -p ${PKG_DBDIR}/${PKGNAME}; \ + cp ${PKGDIR}/PLIST ${PKG_DBDIR}/${PKGNAME}/+CONTENTS; \ + cp ${PKGDIR}/DESCR ${PKG_DBDIR}/${PKGNAME}/+DESC; \ + cp ${PKGDIR}/COMMENT ${PKG_DBDIR}/${PKGNAME}/+COMMENT; \ else \ - (cd ${DISTDIR}; OK=""; \ - for file in ${DISTFILES} ${PATCHFILES}; do \ - CKSUM=`${MD5} $$file | awk '{print $$4}'`; \ - CKSUM2=`grep "($$file)" ${MD5_FILE} | awk '{print $$4}'`; \ - if [ "$$CKSUM2" = "" ]; then \ - ${ECHO_MSG} ">> No checksum recorded for $$file"; \ - OK="false"; \ - elif [ "$$CKSUM" != "$$CKSUM2" ]; then \ - ${ECHO_MSG} ">> Checksum mismatch for $$file"; \ - exit 1; \ - fi; \ - done; \ - if [ "$$OK" = "" ]; then \ - ${ECHO_MSG} "Checksums OK."; \ - else \ - ${ECHO_MSG} "Checksums OK for files that have them."; \ - fi) ; \ + ${ECHO_MSG} "===> ${PKGNAME} is already installed - perhaps an older version?"; \ + ${ECHO_MSG} " If so, you may wish to \`\`pkg_delete ${PKGNAME}'' and install"; \ + ${ECHO_MSG} " this port again to upgrade it properly."; \ fi .endif - -.if !target(pre-extract) -pre-extract: - @${DO_NADA} .endif -.if !target(extract) -# We need to depend on .extract_done rather than the presence of ${WRKDIR} -# because if the user interrupts the extract in the middle (and it's often -# a long procedure), we get tricked into thinking that we've got a good dist -# in ${WRKDIR}. -extract: fetch ${EXTRACT_COOKIE} - -${EXTRACT_COOKIE}: - @${MAKE} ${.MAKEFLAGS} checksum pre-extract - @${ECHO_MSG} "===> Extracting for ${PKGNAME}" - @rm -rf ${WRKDIR} - @mkdir -p ${WRKDIR} -.if defined(EXTRACT_ONLY) - @for file in ${EXTRACT_ONLY}; do \ - if ! (cd ${WRKDIR};${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} ${DISTDIR}/$$file ${EXTRACT_AFTER_ARGS});\ - then \ - exit 1; \ - fi \ - done -.else - @for file in ${DISTFILES}; do \ - if ! (cd ${WRKDIR};${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} ${DISTDIR}/$$file ${EXTRACT_AFTER_ARGS});\ - then \ - exit 1; \ - fi \ - done -.endif - @${TOUCH} ${TOUCH_FLAGS} ${EXTRACT_COOKIE} -.endif - -.if !target(pre-clean) -pre-clean: - @${DO_NADA} -.endif - -.if !target(clean) -clean: pre-clean - @${ECHO_MSG} "===> Cleaning for ${PKGNAME}" - @rm -f ${EXTRACT_COOKIE} ${CONFIGURE_COOKIE} ${INSTALL_COOKIE} \ - ${BUILD_COOKIE} ${PATCH_COOKIE} -.if !defined(NO_WRKDIR) - @rm -rf ${WRKDIR} -.endif -.endif - -# No pre-targets for depend or tags. It would be silly. - # 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. |