forcemerge 18055 18436 stop On 09/09/2014 08:57 PM, Daniel Richard G. wrote: > I normally build with --disable-dependency-tracking to speed up builds, > and also build out-of-tree, and got this with the latest coreutils: > > $ cd /foo/bar/coreutils-8.23 > $ mkdir _build > $ cd _build > $ ../configure --disable-dependency-tracking > checking for a BSD-compatible install... /usr/bin/install -c > checking whether build environment is sane... yes > [...] > $ make > [...] > GEN lib/unistr.h > GEN lib/unitypes.h > GEN lib/uniwidth.h > GEN lib/wchar.h > GEN lib/wctype.h > GEN src/coreutils.h > /bin/sh: src/coreutils.ht: No such file or directory > gmake: *** [src/coreutils.h] Error 1
This is essentially the same issue as http://bugs.gnu.org/18055 I'm guessing tha dependency tracking is disabled there too for the distro as it's not needed for once off builds, and then doing parallel make builds compounds the issue. We could fix it for GNU and solaris make but break on BSD (since it doesn't support included makefiles) like: diff --git a/man/local.mk b/man/local.mk index f2d1357..0464cf1 100644 --- a/man/local.mk +++ b/man/local.mk @@ -78,7 +78,7 @@ man/dynamic-deps.mk: Makefile && mv $@-t $@ # Include the generated man dependencies. -@AMDEP_TRUE@@am__include@ man/dynamic-deps.mk +@am__include@ man/dynamic-deps.mk We could work nicely for all once off builds like, but require rebuilding all man pages for any change for devs with: diff --git a/man/local.mk b/man/local.mk index f2d1357..888ff10 100644 --- a/man/local.mk +++ b/man/local.mk @@ -41,7 +41,7 @@ distclean-local: test x$(srcdir) = x$(builddir) || rm -f $(ALL_MANS) # Dependencies common to all man pages. Updated below. -mandeps = +mandeps = $(bin_PROGRAMS) # Depend on this to get version number changes. mandeps += .version @@ -77,9 +77,6 @@ man/dynamic-deps.mk: Makefile done > $@-t \ && mv $@-t $@ -# Include the generated man dependencies. -@AMDEP_TRUE@@am__include@ man/dynamic-deps.mk It would be nice to rely on GNU make for dynamic rules or order-only prerequisites which would nicely handle things. However it's best to stick with portable make for now due to the low level nature of coreutils which might be required to build gnu make etc. for example. Instead the attached patch simplifies things by avoiding the dynamically generated makefile entirely. There are still a few foibles with parallel make syntax-check in --enable-single-binary mode, but I've a handle on that edge case which we can fix up later. thanks, Pádraig.
>From 1e235119d175a78ed54a910d7babe2165fff9483 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?= <p...@draigbrady.com> Date: Fri, 19 Sep 2014 16:49:26 +0100 Subject: [PATCH] build: fix dependency issues with man page generation * .gitignore: Remove reference to no longer generated make file. * configure.ac: Don't bother generating placeholder make file. * man/local.mk: Hardcode the man page deps list for normal builds to be compatible with all make implementations and configure options. Note in SINGLE_BINARY mode, all man pages will be generated on any change to the coreutils binary, but development will generally not be done in this mode, so this shouldn't be an issue. Fixes http://bugs.gnu.org/18055 --- .gitignore | 1 - configure.ac | 9 ---- man/local.mk | 139 ++++++++++++++++++++++++++++++++++++++++++++++----------- 3 files changed, 112 insertions(+), 37 deletions(-) diff --git a/.gitignore b/.gitignore index 02a61e8..885d309 100644 --- a/.gitignore +++ b/.gitignore @@ -134,7 +134,6 @@ /m4/xsize.m4 /maint.mk /man/*.1 -/man/dynamic-deps.mk /po/*.gmo /po/*.po /po/.gitignore diff --git a/configure.ac b/configure.ac index f45b06e..0744964 100644 --- a/configure.ac +++ b/configure.ac @@ -589,15 +589,6 @@ AM_GNU_GETTEXT_VERSION([0.18.1]) # For a test of uniq: it uses the $LOCALE_FR envvar. gt_LOCALE_FR -# If doing dynamic dependency checking, create man/dynamic-deps.mk so -# that 'make' doesn't complain about its being absent. Use an old -# time stamp, so that 'make' thinks it is older than 'Makefile'. -# Use time stamp 1, since some 'make' implementations treat 0 specially. -# Use 'touch -t', since older 'touch' implementations don't grok -d. -AC_CONFIG_COMMANDS([man/dynamic-deps.mk], - [test -n "$AMDEP_TRUE" || - TZ=UTC0 touch -t 197001010000.01 man/dynamic-deps.mk]) - AC_CONFIG_FILES( Makefile po/Makefile.in diff --git a/man/local.mk b/man/local.mk index f2d1357..aadb540 100644 --- a/man/local.mk +++ b/man/local.mk @@ -52,33 +52,118 @@ mandeps += $(top_srcdir)/src/system.h $(ALL_MANS): $(mandeps) -# Most prog.1 man pages depend on src/$prog, except when they are part of a -# single binary, in which case they depend on src/coreutils. The exceptions -# are handled by converting $name to $prog on the following code. -# $(ALL_MANS) includes the $(EXTRA_MANS) so even the programs that are not -# being installed will have the right dependency for the manpages. -DISTCLEANFILES += man/dynamic-deps.mk -man/dynamic-deps.mk: Makefile - $(AM_V_GEN)rm -f $@ $@-t - $(AM_V_at)for man in $(ALL_MANS); do \ - name=`echo "$$man"|sed 's|.*/||; s|\.1$$||'` || exit 1; \ - case $$name in \ - arch) prog='uname';; \ - install) prog='ginstall';; \ - test) prog='[';; \ - *) prog=$$name;; \ - esac; \ - case " $(single_binary_progs) " in \ - *" $$prog "*) \ - echo $$man: src/coreutils$(EXEEXT);; \ - *) \ - echo $$man: src/$$prog$(EXEEXT);; \ - esac \ - done > $@-t \ - && mv $@-t $@ - -# Include the generated man dependencies. -@AMDEP_TRUE@@am__include@ man/dynamic-deps.mk +if SINGLE_BINARY +mandeps += src/coreutils$(EXEEXT) +else +# Most prog.1 man pages depend on src/prog. List the exceptions: +# Note that dir and vdir are exceptions only if you consider the name +# of the .c file upon which they depend: ls.c. +man/arch.1: src/uname +man/dir.1: src/dir +man/install.1: src/ginstall +man/vdir.1: src/vdir + +man/base64.1: src/base64 +man/basename.1: src/basename +man/cat.1: src/cat +man/chcon.1: src/chcon +man/chgrp.1: src/chgrp +man/chmod.1: src/chmod +man/chown.1: src/chown +man/chroot.1: src/chroot +man/cksum.1: src/cksum +man/comm.1: src/comm +man/cp.1: src/cp +man/csplit.1: src/csplit +man/cut.1: src/cut +man/date.1: src/date +man/dd.1: src/dd +man/df.1: src/df +man/dircolors.1: src/dircolors +man/dirname.1: src/dirname +man/du.1: src/du +man/echo.1: src/echo +man/env.1: src/env +man/expand.1: src/expand +man/expr.1: src/expr +man/factor.1: src/factor +man/false.1: src/false +man/fmt.1: src/fmt +man/fold.1: src/fold +man/groups.1: src/groups +man/head.1: src/head +man/hostid.1: src/hostid +man/hostname.1: src/hostname +man/id.1: src/id +man/join.1: src/join +man/kill.1: src/kill +man/link.1: src/link +man/ln.1: src/ln +man/logname.1: src/logname +man/ls.1: src/ls +man/md5sum.1: src/md5sum +man/mkdir.1: src/mkdir +man/mkfifo.1: src/mkfifo +man/mknod.1: src/mknod +man/mktemp.1: src/mktemp +man/mv.1: src/mv +man/nice.1: src/nice +man/nl.1: src/nl +man/nohup.1: src/nohup +man/nproc.1: src/nproc +man/numfmt.1: src/numfmt +man/od.1: src/od +man/paste.1: src/paste +man/pathchk.1: src/pathchk +man/pinky.1: src/pinky +man/pr.1: src/pr +man/printenv.1: src/printenv +man/printf.1: src/printf +man/ptx.1: src/ptx +man/pwd.1: src/pwd +man/readlink.1: src/readlink +man/realpath.1: src/realpath +man/rm.1: src/rm +man/rmdir.1: src/rmdir +man/runcon.1: src/runcon +man/seq.1: src/seq +man/sha1sum.1: src/sha1sum +man/sha224sum.1: src/sha224sum +man/sha256sum.1: src/sha256sum +man/sha384sum.1: src/sha384sum +man/sha512sum.1: src/sha512sum +man/shred.1: src/shred +man/shuf.1: src/shuf +man/sleep.1: src/sleep +man/sort.1: src/sort +man/split.1: src/split +man/stat.1: src/stat +man/stdbuf.1: src/stdbuf +man/stty.1: src/stty +man/sum.1: src/sum +man/sync.1: src/sync +man/tac.1: src/tac +man/tail.1: src/tail +man/tee.1: src/tee +man/test.1: src/test +man/timeout.1: src/timeout +man/touch.1: src/touch +man/tr.1: src/tr +man/true.1: src/true +man/truncate.1: src/truncate +man/tsort.1: src/tsort +man/tty.1: src/tty +man/uname.1: src/uname +man/unexpand.1: src/unexpand +man/uniq.1: src/uniq +man/unlink.1: src/unlink +man/uptime.1: src/uptime +man/users.1: src/users +man/wc.1: src/wc +man/who.1: src/who +man/whoami.1: src/whoami +man/yes.1: src/yes +endif .x.1: $(AM_V_GEN)name=`echo $@ | sed 's|.*/||; s|\.1$$||'` || exit 1; \ -- 1.7.7.6