Subject: bug#9960: Compiling Emacs trunk with MSVC

From: Christoph Scholtes <[email-masked]>
Date: Sat, 12 Nov 2011 10:10:34 -0700

On 11/10/2011 12:56 PM, Fabrice Popineau wrote:

> Status is :
> - completely functional 32 bits version with xpm, gif, jpeg, tiff. Able
> to boostrap itself.
> - the 64 bits version compiles and dumps, but fails to bootstrap (seems
> to be looping inside elisp code).

On a clean checkout or after make maintainer-clean `getopt.h' needs to 
be regenerated. In order for this to work with nmake I needed to make 
the following change:

=== modified file 'lib/makefile.w32-in'
--- lib/makefile.w32-in	2011-11-05 11:34:56 +0000
+++ lib/makefile.w32-in	2011-11-06 13:34:03 +0000
@@ -212,7 +212,7 @@

  HAVE_GETOPT_H = HAVE_GETOPT_H
  INCLUDE_NEXT = include_next
-PRAGMA_SYSTEM_HEADER = \#pragma GCC system_header
+PRAGMA_SYSTEM_HEADER = ^#pragma GCC system_header
  PRAGMA_COLUMNS =
  NEXT_GETOPT_H = <getopt.h>
  ARG_NONNULL_H = ../build-aux/snippet/arg-nonnull.h

This is not meant as a permanent fix, but just an example of what is 
necessary to make it work with nmake.

See:
http://msdn.microsoft.com/en-us/library/f8txf85h%28v=vs.80%29.aspx

Should we define an ESCAPE_SPECIAL_CHAR variable in 
nmake.defs/gmake.defs to handle this or is there a way to make the 
platform specific decision in the makefile.w32-in without too much 
duplication?