Subject: bug#12878: 24.2; Compiling failed on Windows 7 with VC 11 Express: _WIN32_WINNT version too low

From: 李丁 <[email-masked]>
Date: Mon, 19 Nov 2012 13:59:54 +0800

Hi,
Thank you for fixing the bug.

I checked out the latest branch (r 110913), it seems that you miss a
semicolon at line 761 in w32term.h.

Previous problems are fixed, but I still can not compile the latest branch.
There are more problems:

1. I need `nmake bootstrap' but in 24.2 release I can compile directly with
`nmake'

2. In lisp.h it begins to define ARRAY_MARK_FLAG as PTRDIFF_MIN, however,
    definition of PTRDIFF_MIN is in stdint.h, which is not included. And
even if included, in nt/inc/stdint.h,
    various *_MIN (including PTRDIFF_MIN) are not defined

3. In w32.c DeviceIoControl, it uses a FSCTL_GET_REPARSE_POINT that is only
defined for _MSC_VER >= 0x0500

4. In xdisp.c, start_hourglass function, w32_note_current_window is
declared (as extern) and used in the middle of
    the function, causing an error message. Move the declaration to the
beginning of the function solved the problem.

After fixing the above problems, finally I can make a temacs.exe, but while
loading subr.el, temacs reported an
error message saying `Invalid funtion: "DEAD"'. I do not know where the
function `dead' comes from.

Maybe you can close the previous bug, but for the latest branch, more fixes
are needed.

2012/11/18 Eli Zaretskii <[email-masked]>

> > Date: Wed, 14 Nov 2012 09:14:45 +0800
> > From: 李丁 <[email-masked]>
> > Cc: [email-masked]
> >
> > Sure, adding a correct prototype is just like including the correct
> > header file if Windows 9X really supports this function. But you
> > should be careful checking compiler versions, in case that
> > redefinition error occur.
>
> I added the prototype of EnumSystemLocales to one of the w32 headers.
> Please try the latest emacs-24 branch (revision 110902 or later) and
> see if you still have problems building it.
>
> > Actually, I encountered several redefinition problems during compilation.
> > For example in w32term.c:
> >
> >     #ifndef GLYPHSET
> >     /* Pre Windows 2000, this was not available, but define it here so
> >        that Emacs compiled on such a platform will run on newer versions.
> >  */
> >     ...
> >     #endif
> >
> > VC 11.0 does not define GLYPHSET either (or not included), but it does
> have
> > the definitions,
> > and above code leads to redefinition error.
>
> This is no longer in the development sources of the emacs-24 branch.
> This code fragment is now guarded by "#if _WIN32_WINNT < 0x0500",
> which I think should work for you, as long as you don't define
> _WIN32_WINNT to a value higher than 0x0400.
>
> > And this in w32term.c too:
> >
> >     /* Reportedly, MSVC does not have this in its headers.  */
> >     #ifdef _MSC_VER
> >     DECLARE_HANDLE(HMONITOR);
> >     #endif
> >
> > VC 11.0 does have HMONITOR, and another redefinition error.
>
> This is now guarded by "#if defined (_MSC_VER) && _WIN32_WINNT < 0x0500"
> so again, I don't think that it should give you trouble with
> _WIN32_WINNT set at 0x0400.
>
> Please try the latest emacs-24 branch, and if it works for you, I will
> close the bug.
>