Subject: Re: bug#8564: 24.0.50; bootstrap on windows 7: `gl-stamp' target failed

From: Eli Zaretskii <[email-masked]>
Date: Wed, 27 Apr 2011 06:29:41 -0400

> From: William Xu <[email-masked]>
> Date: Wed, 27 Apr 2011 13:20:17 +0800
> 
> Here is the last build log: 
> 
>   mkdir "oo-spd"
>   mkdir "oo-spd/i386"
>   echo oo-spd/i386 > stamp_BLD
>   rm gl-tmp
>   "../lib-src/oo-spd/i386/make-docfile" -d . -g dosfns.o msdos.o xterm.o xfns.o xmenu.o xselect.o xrdb.o xsmfns.o dbusbind.o dosfns.o msdos.o xterm.o xfns.o xmenu.o xselect.o xrdb.o xsmfns.o fringe.o image.o fontset.o menu.o dbusbind.o w32.o w32console.o w32fns.o w32heap.o w32inevt.o w32menu.o w32proc.o w32reg.o w32select.o w32term.o w32xfns.o font.o w32font.o w32uniscribe.o dispnew.o frame.o scroll.o xdisp.o window.o bidi.o charset.o coding.o category.o ccl.o character.o chartab.o cm.o term.o terminal.o xfaces.o emacs.o keyboard.o macros.o keymap.o sysdep.o buffer.o filelock.o insdel.o marker.o minibuf.o fileio.o dired.o cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o alloc.o data.o doc.o editfns.o callint.o eval.o floatfns.o fns.o print.o lread.o syntax.o bytecode.o process.o callproc.o unexw32.o region-cache.o sound.o atimer.o doprnt.o intervals.o textprop.o composite.o > gl-tmp
>   cmd /c "fc /b gl-tmp globals.h >nul 2>&1 || cp -f gl-tmp globals.h"
>   Microsoft Windows [Version 6.1.7600]
>   Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
> 
>   l:\bin\emacs\src>

Is this something new?  Did you ever bootstrap on that machine, or on
Windows 7 in general?

After you bootstrap, does the same command work for a normal (i.e.,
non-bootstrap) build, or does it fail in the same way?

Finally, what version of Make did you use for that bootstrap?  What
does "make --version" display?  Also, did you use any kind of Unixy
shell (Make announces at the very beginning of the build process
whioch shell it uses)?

>   cp -f gl-tmp globals.h  # Wouldn't this be simpler & good enough? 

No, it's not good enough.  `cp' updates the time stamp of globals.h
each time you build, and therefore all the C files will be recompiled,
because they all include globals.h, even though the contents of
globals.h rarely changes.  That kinda makes Make redundant, since its
main goal is to avoid unnecessary compilations...  The command that
invokes `fc' only updates globals.h if the new version has different
contents.  IOW, this is the Windows way of saying move-if-change.