From owner-freebsd-current Thu Apr 19 6:13:44 2001 Delivered-To: freebsd-current@freebsd.org Received: from mailman.zeta.org.au (mailman.zeta.org.au [203.26.10.16]) by hub.freebsd.org (Postfix) with ESMTP id 7F50C37B42C for ; Thu, 19 Apr 2001 06:13:40 -0700 (PDT) (envelope-from bde@zeta.org.au) Received: from bde.zeta.org.au (bde.zeta.org.au [203.2.228.102]) by mailman.zeta.org.au (8.9.3/8.8.7) with ESMTP id XAA03448; Thu, 19 Apr 2001 23:13:25 +1000 Date: Thu, 19 Apr 2001 23:12:24 +1000 (EST) From: Bruce Evans X-Sender: bde@besplex.bde.org To: Makoto MATSUSHITA Cc: current@FreeBSD.ORG Subject: Re: groff breaks "make -j N buildworld" In-Reply-To: <20010419171841Z.matusita@jp.FreeBSD.org> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG On Thu, 19 Apr 2001, Makoto MATSUSHITA wrote: > ru> I always thought that ``obj'', ``all'' and ``install'' should be > ru> executed in sequence, not together. Hey, this even does not work > ru> for bin/cat: `obj' must normally be built before everything else. Otherwise, make(1) will start by chdir'ing to the wrong object directory... Some cases work accidentally. E.g., `make obj all' works in directories with only subdirs, since all the object subdirectories will have been created by the time make(1) recurses into them for the `all' target. `make all install' might work. However ... > IIRC, it is assumed that "make -jX install (where X > 1)" _doesn't_ work. > I've heard why, but I've forgotten :-) Right. One case where it doesn't work is installing /bin/sh with the default install flags. /bin/sh gets clobbered, so anything that attempts to use it concurrently doesn't work. In particular, a concurrent sub-make may fail. This problem is avoided for some very important install targets like ld.so by adding -C to INSTALLFLAGS to give an atomic installation. Atomic installation (but not -C) should be the default. Since make -jX install doesn't work, `make world' in /usr/src/Makefile uses `${MAKE} -B installworld' to turn off any previous setting of -j. If you make installworld directly, then then -B is not enforced, so you must use it in the command line if you have a setting of -j in the environment. ... back to `make all install'. If this works at all, then you can only use it without -j, since the `install' part of it doesn't work with -j. Separate steps are required to pass different flags to make(1). Bruce To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message