diff options
author | kris <kris@FreeBSD.org> | 2004-04-02 15:25:23 +0800 |
---|---|---|
committer | kris <kris@FreeBSD.org> | 2004-04-02 15:25:23 +0800 |
commit | e2d890ce79e982e5b469cfc411061acff2d49599 (patch) | |
tree | d91adcfd788f8fdaafba7a44369dbdb93e0b4a38 | |
parent | 4c26fd70c1144c23504f3ce17c0657ef32ff79fe (diff) | |
download | freebsd-ports-gnome-e2d890ce79e982e5b469cfc411061acff2d49599.tar.gz freebsd-ports-gnome-e2d890ce79e982e5b469cfc411061acff2d49599.tar.zst freebsd-ports-gnome-e2d890ce79e982e5b469cfc411061acff2d49599.zip |
- Allow processing of info files in non-standard locations; the
INFO_PATH variable may be used to specify their location. It defaults
to 'share/info' for the standard PREFIX, and 'info' when PREFIX ==
/usr. [1]
- Remove the <category>/pkg/COMMENT files in favour of a COMMENT
variable in <category>/Makefile [2]
- Prevent patch breakage with VERSION_CONTROL=numbered [3]
- Fix some instances of incorrect WRKDIRPREFIX handling. [4]
- remove useless ${MKDIR} ${WRKSRC} in config target [5]
- remove reference to OpenBSD [6]
- Exempt devel/p5-Module-Build from the self-dependency in
PERL_MODBUILD so that this port may use the option without getting an
infinite dependency list [7]
- The default PERL_ARCH is currently determined as a function of
OSVERSION. It should however be a function of PERL_LEVEL since the
correct value depends on what Perl version one has installed (older
Perl versions use ${ARCH}-freebsd, newer versions use mach). [8]
- Fix PORTDOCS on older (4.7, 5.0) systems [9]
- Allow 'make parallel' to generate a working makefile when not all
categories are present (this does not mean you'll be able to build all
ports, unless you make sure they don't have external dependencies) [10]
- Don't report symlinks as world-writable in the security check [11]
- Fix a comment that was broken by a mismerged patch [12]
- Clarify the meaning of USE_*, WANT_*, WITH_* and WITHOUT_* [13]
- Don't set _CHKSUMFILES/_IGNOREFILES if CKSUMFILES/IGNOREFILES is
empty and DIST_SUBDIR is set. [14]
- Fix comment for DISTDIR [15]
- Update the documentation of the USE_GL variable [16]
- Check to see if NONEXISTENT exists, and fail with an error if it does [17]
- Fix fetching of new distfiles in 'make makesum' when SIZE is set [18]
- Consistently set MAKE_ENV when USE_GCC=3.2 or 3.3 are set [19]
- Rework INDEX builds: [20]
* Fix the bsd.port.subdir.mk code that is supposed to report index
breakage (the fallback code wasn't actually being run because make
would halt immediately following the error). This should help with
INDEX error reports because it will immediately show the cause of
failure, so we won't have to pull teeth to extract it from the
submitter.
* Streamline the 'make describe' code a bit.
* Provide some basic instructions to the user when an index build
fails, on when and how to report index build failures (turn this off
with INDEX_QUIET=1)
* Removed INDEX_NOSORT, because I couldn't imagine it to be very
useful and it doesn't cost very much anyway.
* Don't prevent INDEX builds from seeing the local host environment.
Since a lot of users are using 'make index' thesedays they should get
an index that reflects their local settings and installed ports. If
you want to build a 'default' index that isn't influenced by local
settings (e.g. for release builds), set the INDEX_PRISTINE variable.
* Allows parallel INDEX builds (using make -j). The most obvious way
of doing this doesn't work, because I/O from child makes is broken up
into 2k chunks, and output lines from 'make describe' that exceed this
length (*cough* GNOME *cough*) will be intertwined with the output of
other makes, leading to a corrupted INDEX. The I/O interleaving
can be disabled using 'make -P', but this inserts extraneous output of
its own, and redirects stderr, making it useless for our purposes.
Instead, I collect the output from the child make processes in
temporary files and recombine them at the end.
* The number of concurrent make processes to spawn can be set using
INDEX_JOBS. By default this is set to 2, which seems to be a sweet
spot for both single and dual-processor systems. On my tests I do not
see any significant performance changes on UP, but on a dual 4.x
system the build time drops by 47% (6 minute index builds on one test
machine!). Depending on your disk and CPU hardware you might see
further gains with INDEX_JOBS=4 or higher, so you might like to
experiment to see what works best. On a dual 5.x system the
performance gains do not seem to be as great (20-30%), but this is
still a significant net win.
PR: 55493 [1], 59651 [2], 61552 [3], 62247 [4], 62329 [5],
62337 [6], 62422 [7], 62441 [8], 62627 [9], 62983 [10],
63112 [11], 63297 [12], 63335 [13], 64029 [14], 64069 [15],
64236 [16], 64519 [17], 62958 [18], 64237 [19]
Submitted by: lev [1],
Matthew Seaman <m.seaman@infracaninophile.co.uk> [2],
Joel Ray Holveck <joelh@piquan.org> [3],
ade [4], Sergey Matveychuk <sem@ciam.ru> [5],
markus [6], mat [7], des [8], eik [9],
Dmitry Morozovsky <marck@rinet.ru> [10],
Andrew <andrew@ugh.net.au> [11], vs [12], linimon [13],
edwin [14][15], gerald [16], marcus[17][18], kris [19][20]
-rw-r--r-- | Makefile | 46 | ||||
-rw-r--r-- | Mk/bsd.port.mk | 100 | ||||
-rw-r--r-- | Mk/bsd.port.subdir.mk | 52 |
3 files changed, 128 insertions, 70 deletions
@@ -70,20 +70,44 @@ index: @rm -f ${.CURDIR}/${INDEXFILE} @cd ${.CURDIR} && make ${.CURDIR}/${INDEXFILE} +INDEX_JOBS?= 2 + ${.CURDIR}/${INDEXFILE}: @echo -n "Generating ${INDEXFILE} - please wait.."; \ - export LOCALBASE=/nonexistentlocal; \ - export X11BASE=/nonexistentx; \ - cd ${.CURDIR} && make describe ECHO_MSG="echo > /dev/null" | \ - perl ${.CURDIR}/Tools/make_index | \ - sed -e 's/ */ /g' -e 's/| */|/g' -e 's/ *|/|/g' -e "s,$${LOCALBASE},/usr/local," -e "s,$${X11BASE},/usr/X11R6," > ${INDEXFILE} -.if !defined(INDEX_NOSORT) - @sed -e 's./..g' ${.CURDIR}/${INDEXFILE} | \ + if [ "${INDEX_PRISTINE}" != "" ]; then \ + export LOCALBASE=/nonexistentlocal; \ + export X11BASE=/nonexistentx; \ + fi; \ + tmpdir=`/usr/bin/mktemp -d -t index` || exit 1; \ + trap "rm -rf $${tmpdir}; exit 1" 1 2 3 5 10 13 15; \ + ( cd ${.CURDIR} && make -j${INDEX_JOBS} INDEX_TMPDIR=$${tmpdir} BUILDING_INDEX=1 \ + ECHO_MSG="echo > /dev/null" describe ) || \ + (rm -rf $${tmpdir} ; \ + if [ "${INDEX_QUIET}" = "" ]; then \ + echo; \ + echo "********************************************************************"; \ + echo "Before reporting this error, verify that you are running a supported"; \ + echo "version of FreeBSD (see http://www.FreeBSD.org/ports/) and that you"; \ + echo "have a complete and up-to-date ports collection. If so, then report"; \ + echo "the failure to ports@FreeBSD.org together with relevant details of"; \ + echo "your ports configuration (including FreeBSD version, environment and"; \ + echo "/etc/make.conf settings)."; \ + echo "********************************************************************"; \ + echo; \ + fi; \ + exit 1); \ + cat $${tmpdir}/${INDEXFILE}.desc.* | perl ${.CURDIR}/Tools/make_index | \ + sed -e 's/ */ /g' -e 's/| */|/g' -e 's/ *|/|/g' -e 's./..g' | \ sort -t '|' +1 -2 | \ sed -e 's../.g' > ${.CURDIR}/${INDEXFILE}.tmp; \ - mv -f ${.CURDIR}/${INDEXFILE}.tmp ${.CURDIR}/${INDEXFILE} -.endif - @echo " Done." + if [ "${INDEX_PRISTINE}" != "" ]; then \ + sed -e "s,$${LOCALBASE},/usr/local," -e "s,$${X11BASE},/usr/X11R6," \ + ${.CURDIR}/${INDEXFILE}.tmp > ${.CURDIR}/${INDEXFILE}; \ + else \ + mv ${.CURDIR}/${INDEXFILE}.tmp ${.CURDIR}/${INDEXFILE}; \ + fi; \ + rm -rf $${tmpdir}; \ + echo " Done." print-index: ${.CURDIR}/${INDEXFILE} @awk -F\| '{ printf("Port:\t%s\nPath:\t%s\nInfo:\t%s\nMaint:\t%s\nIndex:\t%s\nB-deps:\t%s\nR-deps:\t%s\n\n", $$1, $$2, $$4, $$6, $$7, $$8, $$9); }' < ${.CURDIR}/${INDEXFILE} @@ -95,7 +119,7 @@ parallel: ${.CURDIR}/${INDEXFILE} @false .endif .for dir in ${SUBDIR} - @echo "all: ${dir}-all" + @[ -r ${dir}/Makefile ] && echo "all: ${dir}-all" || true .endfor @awk -F '|' '{me=$$1; here=$$2; bdep=$$8; rdep=$$9; split(here, tmp, "/"); if (bdep != "") { gsub("$$", ".tgz", bdep); gsub(" ", ".tgz ", bdep); } if (rdep != "") { gsub("$$", ".tgz", rdep); gsub(" ", ".tgz ", rdep); } print tmp[4] "-all: " me ".tgz"; print me ": " me ".tgz"; print me ".tgz: " bdep " " rdep; printf("\t@/var/portbuild/scripts/pdispatch ${branch} /var/portbuild/scripts/portbuild %s.tgz %s", me, here); if (bdep != "") printf(" %s", bdep); if (rdep != "") printf(" %s", rdep); printf("\n")}' < ${.CURDIR}/${INDEXFILE} diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk index 5c26fcb214f1..4fc5910e7988 100644 --- a/Mk/bsd.port.mk +++ b/Mk/bsd.port.mk @@ -65,10 +65,10 @@ FreeBSD_MAINTAINER= portmgr@FreeBSD.org # Default: 0 (no effect). # PKGNAME - Always defined as # ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}. +# Do not define this in your Makefile. # PKGNAMEPREFIX - Prefix to specify that port is language-specific, etc. # Optional. # PKGNAMESUFFIX - Suffix to specify compilation options. Optional. -# Do not define this in your Makefile. # UNIQUENAME - A name for your port that is globally unique. By default, # this is set to ${LATEST_LINK} when LATEST_LINK is set, # and to ${PKGNAMEPREFIX}${PORTNAME} otherwise. @@ -179,10 +179,17 @@ FreeBSD_MAINTAINER= portmgr@FreeBSD.org # ONLY_FOR_ARCHS - Only build ports if ${ARCH} matches one of these. # NOT_FOR_ARCHS - Only build ports if ${ARCH} doesn't match one of these. # +# These variables control options about how a port gets built and/or +# are shorthand notations for common sets of dependencies. # Use these if your port uses some of the common software packages. By # convention these should be set to 'yes', although they only need to be # defined. (Defaults: not set, unless explicitly indicated below.) # +# Note: the distinction between the USE_* and WANT_* variables, and the +# WITH_* and WITHOUT_* variables, are that the former are restricted to +# usage inside the ports framework, and the latter are reserved for user- +# settable options. (Setting USE_* in /etc/make.conf is always wrong). +# # USE_BZIP2 - Says that the port tarballs use bzip2, not gzip, for # compression. # USE_ZIP - Says that the port distfile uses zip, not tar w/[bg]zip @@ -358,7 +365,8 @@ FreeBSD_MAINTAINER= portmgr@FreeBSD.org # USE_XLIB - Says that the port uses the X libraries. # # USE_FREETYPE - Says that the port uses the freetype print libraries. -# USE_GL - Says that the port uses libGL. +# USE_GL - Says that the port uses libGL (not needed with XFree86 4.x +# which already includes this functionality). # USE_MESA - Says that the port uses libGL/libglut (deprecated). # USE_MOTIF - Says that the port uses a Motif toolkit. Implies USE_XPM. # NO_OPENMOTIF - Says that the port uses a custom Motif toolkit @@ -534,7 +542,7 @@ FreeBSD_MAINTAINER= portmgr@FreeBSD.org # this is you have two or more ports that share most of the # files (default: ${.CURDIR}). # PORTSDIR - The root of the ports tree. (default: /usr/ports) -# DISTDIR - Where to get gzip'd, tarballed copies of original sources +# DISTDIR - Where to search for and store copies of original sources # (default: ${PORTSDIR}/distfiles). # PACKAGES - A top level directory where all packages go (rather than # going locally to each port). (default: ${PORTSDIR}/packages). @@ -604,6 +612,9 @@ FreeBSD_MAINTAINER= portmgr@FreeBSD.org # # INFO - A list of .info files (omitting the trailing ".info"); # only one entry per document! +# INFO_PATH - Path, where all .info files will be installed by your +# port, relative to ${PREFIX} (default: "share/info" if +# ${PREFIX} is equal to /usr and "info" otherwise). # # Set the following to specify all documentation your port installs into # ${DOCSDIR} @@ -1155,17 +1166,14 @@ RUN_DEPENDS+= ${APXS}:${PORTSDIR}/${APACHE_PORT} .if ${OSVERSION} >= 502100 PERL_VERSION?= 5.8.2 PERL_VER?= 5.8.2 -PERL_ARCH?= mach .else .if ${OSVERSION} >= 500032 PERL_VERSION?= 5.6.1 PERL_VER?= 5.6.1 -PERL_ARCH?= mach .else .if ${OSVERSION} >= 500007 PERL_VERSION?= 5.6.0 PERL_VER?= 5.6.0 -PERL_ARCH?= mach .else .if ${OSVERSION} >= 300000 PERL_VERSION?= 5.00503 @@ -1173,7 +1181,6 @@ PERL_VERSION?= 5.00503 PERL_VERSION?= 5.00502 .endif PERL_VER?= 5.005 -PERL_ARCH?= ${ARCH}-freebsd .endif .endif .endif @@ -1194,6 +1201,12 @@ PERL_LEVEL= ${perl_major}${perl_minor}${perl_patch} PERL_LEVEL=0 .endif # !defined(PERL_LEVEL) && defined(PERL_VERSION) +.if ${PERL_LEVEL} >= 500600 +PERL_ARCH?= mach +.else +PERL_ARCH?= ${ARCH}-freebsd +.endif + .if ${PERL_LEVEL} >= 500800 PERL_PORT?= perl5.8 .else @@ -1326,7 +1339,7 @@ check-makevars:: .endif .endif -.if defined(USE_IMAKE) && ${OPSYS} != OpenBSD && !defined(NO_INSTALL_MANPAGES) +.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES) MANCOMPRESSED?= yes .else MANCOMPRESSED?= no @@ -1593,42 +1606,43 @@ GCCVERSION= 030400 .endif .endif -.if defined(USE_GCC) && ${USE_GCC} == 2.95 && ( ${OSVERSION} < 400012 || ${OSVERSION} > 500034 ) +.if defined(USE_GCC) +.if ${USE_GCC} == 2.95 && ( ${OSVERSION} < 400012 || ${OSVERSION} > 500034 ) CC= gcc295 CXX= g++295 BUILD_DEPENDS+= gcc295:${PORTSDIR}/lang/gcc295 -MAKE_ENV+= CC=${CC} CXX=${CXX} GCCVERSION= 029500 .endif -.if defined(USE_GCC) && ${USE_GCC} == 3.1 && ( ${OSVERSION} < 500035 || ${OSVERSION} > 500038 ) +.if ${USE_GCC} == 3.1 && ( ${OSVERSION} < 500035 || ${OSVERSION} > 500038 ) CC= gcc31 CXX= g++31 F77= g77-31 BUILD_DEPENDS+= gcc31:${PORTSDIR}/lang/gcc31 -MAKE_ENV+= CC=${CC} CXX=${CXX} GCCVERSION= 030100 .endif -.if defined(USE_GCC) && ${USE_GCC} == 3.2 && ${OSVERSION} < 500039 +.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 defined(USE_GCC) && ${USE_GCC} == 3.3 && ${OSVERSION} < 501103 +.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 defined(USE_GCC) && ${USE_GCC} == 3.4 # Not yet available in any OSVERSION +.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 @@ -1733,7 +1747,9 @@ PLIST_SUB+= PERL_VERSION=${PERL_VERSION} \ .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+= \ @@ -1971,6 +1987,9 @@ 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 @@ -2538,8 +2557,12 @@ CKSUMFILES= ${ALLFILES} # List of all files, with ${DIST_SUBDIR} in front. Used for checksum. .if defined(DIST_SUBDIR) +.if defined(CKSUMFILES) && ${CKSUMFILES}!="" _CKSUMFILES?= ${CKSUMFILES:S/^/${DIST_SUBDIR}\//} +.endif +.if defined(IGNOREFILES) && ${IGNOREFILES}!="" _IGNOREFILES?= ${IGNOREFILES:S/^/${DIST_SUBDIR}\//} +.endif .else _CKSUMFILES?= ${CKSUMFILES} _IGNOREFILES?= ${IGNOREFILES} @@ -2750,6 +2773,12 @@ _MANPAGES:= ${_MANPAGES:S%$%.gz%} .endif +.if ${PREFIX} == /usr +INFO_PATH?= share/info +.else +INFO_PATH?= info +.endif + .if ${XFREE86_VERSION} == 3 XFREE86_HTML_MAN= no .else @@ -3642,7 +3671,7 @@ security-check: ${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 2> /dev/null > ${WRKDIR}/.PLIST.writable; \ + | ${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 /usr/bin/objdump -R 2> /dev/null > ${WRKDIR}/.PLIST.objdump; \ @@ -3650,11 +3679,12 @@ security-check: ! ${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 \ - if [ ! -z "`make www-site`" ]; then \ + www_site=$$(cd ${.CURDIR} && ${MAKE} ${__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: "; \ - ${MAKE} www-site; \ + ${ECHO_MSG} "$${www_site}"; \ fi; \ fi @@ -3705,7 +3735,7 @@ security-check: fi; \ fi; \ if [ ! -L "${PREFIX}/$$i" ]; then \ - if [ -n "`${FIND} ${PREFIX}/$$i -prune -perm -0002 2>/dev/null`" ]; then \ + if [ -n "`${FIND} ${PREFIX}/$$i -prune -perm -0002 \! -type l 2>/dev/null`" ]; then \ ${ECHO_CMD} ${PREFIX}/$$i >> ${WRKDIR}/.PLIST.writable; \ fi; \ fi; \ @@ -3744,11 +3774,12 @@ security-check: ${ECHO_MSG} " risk to the system. FreeBSD makes no guarantee about the security of"; \ ${ECHO_MSG} " ports included in the Ports Collection. Please type 'make deinstall'"; \ ${ECHO_MSG} " to deinstall the port if this is a concern."; \ - if [ ! -z "`make www-site`" ]; then \ + www_site=$$(cd ${.CURDIR} && ${MAKE} ${__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: "; \ - ${MAKE} www-site; \ + ${ECHO_MSG} "$${www_site}"; \ fi; \ fi .endif # !defined(OLD_SECURITY_CHECK) @@ -4201,7 +4232,8 @@ update-patches: .if !target(makesum) makesum: - @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} fetch NO_CHECKSUM=yes + @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} fetch NO_CHECKSUM=yes \ + DISABLE_SIZE=yes @if [ -f ${MD5_FILE} ]; then ${CAT} /dev/null > ${MD5_FILE}; fi @(cd ${DISTDIR}; \ for file in ${_CKSUMFILES}; do \ @@ -4347,12 +4379,17 @@ ${deptype:L}-depends: fi; \ if ${EXPR} "$$prog" : \\/ >/dev/null; then \ if [ -e "$$prog" ]; then \ - ${ECHO_MSG} "===> ${PKGNAME} depends on file: $$prog - found"; \ - if [ ${_DEPEND_ALWAYS} = 1 ]; then \ - ${ECHO_MSG} " (but building it anyway)"; \ - notfound=1; \ + if [ "$$prog" = "${NONEXISTENT}" ]; then \ + ${ECHO_MSG} "Error: ${NONEXISTENT} exists. Please remove it, and restart the build."; \ + ${FALSE}; \ else \ - notfound=0; \ + ${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"; \ @@ -4892,7 +4929,7 @@ add-plist-docs: [ "`${SED} -En -e '/^@cw?d[ ]*/s,,,p' ${TMPPLIST} | ${TAIL} -n 1`" != "${PREFIX}" ]; then \ ${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}; \ fi - @${FIND} -P ${PORTDOCS:S/^/${DOCSDIR}\//} -not -type d 2>/dev/null | \ + @${FIND} -P ${PORTDOCS:S/^/${DOCSDIR}\//} ! -type d 2>/dev/null | \ ${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST} @${FIND} -P -d ${PORTDOCS:S/^/${DOCSDIR}\//} -type d 2>/dev/null | \ ${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST} @@ -4907,10 +4944,10 @@ add-plist-docs: add-plist-info: # Process GNU INFO files at package install/deinstall time .for i in ${INFO} - @${ECHO_CMD} "@unexec install-info --delete %D/info/$i.info %D/info/dir" \ + @${ECHO_CMD} "@unexec install-info --delete %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \ >> ${TMPPLIST} - @${LS} ${PREFIX}/info/$i.info* | ${SED} -e s:${PREFIX}/::g >> ${TMPPLIST} - @${ECHO_CMD} "@exec install-info %D/info/$i.info %D/info/dir" \ + @${LS} ${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${PREFIX}/::g >> ${TMPPLIST} + @${ECHO_CMD} "@exec install-info %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \ >> ${TMPPLIST} .endfor @@ -5030,7 +5067,6 @@ __softMAKEFLAGS+= '${softvar}+=${${softvar}:S/'/'\''/g}' .if !target(config) config: - @${MKDIR} ${WRKDIR} .if !defined(OPTIONS) @${ECHO_MSG} "===> No options to configure" .else diff --git a/Mk/bsd.port.subdir.mk b/Mk/bsd.port.subdir.mk index 25682e8674ec..dd04f94d5ff9 100644 --- a/Mk/bsd.port.subdir.mk +++ b/Mk/bsd.port.subdir.mk @@ -198,38 +198,36 @@ checksubdir: .if !target(describe) .if defined(PORTSTOP) +# This is a bit convoluted to deal with the fact that make will overlap I/O from child make processes +# if they write more than 2k: this will corrupt the INDEX file. make -P does not do this, but it adds +# extraneous output and redirects stderr, so we lose error reporting from child makes. Instead we have +# to roll our own implementation of make -P and make sure that each child make writes to their own file, +# which we will combine at the end. This gives substantial performance benefits over doing a make -j1 + +.if defined(BUILDING_INDEX) +describe: ${SUBDIR:S/^/describe./} + +.for i in ${SUBDIR} +describe.$i: + @${MAKE} -B ${i:S/^/_/:S/$/.describe/} > ${INDEX_TMPDIR}/${INDEXFILE}.desc.${i} +.endfor +.else describe: ${SUBDIR:S/^/_/:S/$/.describe/} +.endif .else describe: - @TMPFILE=`mktemp -q /tmp/describe.XXXXXX` || exit 1; \ - for sub in ${SUBDIR}; do \ - OK=""; \ - for dud in $$DUDS; do \ - if [ $${dud} = $$sub ]; then \ - OK="false"; \ - ${ECHO_MSG} "===> ${DIRPRFX}$$sub skipped"; \ - fi; \ - done; \ - if test -d ${.CURDIR}/$${sub}.${MACHINE_ARCH}; then \ - edir=$${sub}.${MACHINE_ARCH}; \ - elif test -d ${.CURDIR}/$${sub}; then \ - edir=$${sub}; \ + @for sub in ${SUBDIR}; do \ + if test -d ${.CURDIR}/$${sub}; then \ + ${ECHO_MSG} "===> ${DIRPRFX}$${sub}"; \ + cd ${.CURDIR}/$${sub}; \ + ${MAKE} -B describe 2> /dev/null || \ + (echo "===> ${DIRPRFX}$${sub} failed:" >&2 ; \ + cd ${.CURDIR}/$${sub}; ${MAKE} -B describe >&2; \ + exit 1) ;\ else \ - OK="false"; \ ${ECHO_MSG} "===> ${DIRPRFX}$${sub} non-existent"; \ fi; \ - if [ "$$OK" = "" ]; then \ - ${ECHO_MSG} "===> ${DIRPRFX}$${edir}"; \ - cd ${.CURDIR}/$${edir}; \ - ${MAKE} -B describe 2>$${TMPFILE}; \ - if [ -s $${TMPFILE} ]; then \ - echo "===> ${DIRPRFX}$${sub} failed:" >&2; \ - cat $${TMPFILE} >&2; \ - echo -n >$${TMPFILE}; \ - fi; \ - fi; \ - done; \ - rm -f $${TMPFILE} + done .endif .endif @@ -287,7 +285,7 @@ README.html: @> $@.tmp3 .endif .if defined(COMMENT) - @echo "${COMMENT:Q}" | ${HTMLIFY} > $@.tmp4 + @echo "${COMMENT}" | ${HTMLIFY} > $@.tmp4 .else .if exists(${COMMENTFILE}) @${HTMLIFY} ${COMMENTFILE} > $@.tmp4 |