git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/5] msvc: Fix compilation errors caused by poll.h emulation

From
Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Date
May 9, 2013, 20:35 UTC
Message-ID
<518C0890.9050508@ramsay1.demon.co.uk>
In-Reply-To
<518AFEFC.8010904@cs-ware.de>
Sven Strickroth wrote:
Show 21 quoted lines
> Am 31.01.2013 19:28 schrieb Ramsay Jones:
>> Commit 0f77dea9 ("mingw: move poll out of sys-folder", 24-10-2011), along
>> with other commits in the 'ef/mingw-upload-archive' branch (see commit
>> 7406aa20), effectively reintroduced the same problem addressed by commit
>> 56fb3ddc ("msvc: Fix compilation errors in compat/win32/sys/poll.c",
>> 04-12-2010).
>>
>> In order to fix the compilation errors, we use the same solution adopted
>> in that earlier commit. In particular, we set _WIN32_WINNT to 0x0502
>> (which would target Windows Server 2003) prior to including the winsock2.h
>> header file.
> 
> This change causes problems compiling with MSVC2012 for me. If I don't
> define NO_SYS_POLL_H git-compat-util.h now tries to include <sys/poll.h>
> which does not exist for MSVC and if I define NO_SYS_POLL_H
> git-compat-util.h now tries to include <poll.h> which also doesn't exist
> for MSVC.
> 
> Including compat/poll into the includes path causes redefinition errors.
> 
> How have you tested this?

I used the Makefile, with the Visual C++ 2008 command line compiler on Windows XP (SP3), to build a vanilla git on MinGW. Viz:

    ramsay (pu) ms $ git checkout master
    Switched to branch 'master'
    ramsay (master) ms $ git rev-parse master
    423ecb0bb66e9d60b6667aebc2844e82205369a1
    ramsay (master) ms $ make clean >/dev/null 2>&1
    ramsay (master) ms $ make >ms-out1 2>&1
    ramsay (master) ms $ grep error ms-out1
    ramsay (master) ms $ ./git version
    git version 1.8.3.rc1.25.g423ecb0.MSVC
    ramsay (master) ms $
Also
    ramsay (tmp) ms $ rm git.o
    ramsay (tmp) ms $ make V=1 git.o
    compat/vcbuild/scripts/clink.pl -o git.o -c    -nologo -I. -I../zlib -Icompat/vc
    build -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_
    NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -GL -Os -MT -DNO_CURL -DNO_ST_BLOCKS_IN_
    STRUCT_STAT -DNO_NSEC -DNO_SYMLINK_HEAD -DNO_GETTEXT -DNO_SYS_POLL_H -DNO_THREAD
    _SAFE_PREAD -DNO_IPV6 -DNO_INET_NTOP -DNO_INET_PTON -DNO_ICONV -DNO_POSIX_GOODIE
    S  -DUNRELIABLE_FSTAT -DSHA1_HEADER='"block-sha1/sha1.h"' -D__USE_MINGW_ACCESS -
    DNOGDI -DHAVE_STRING_H -DHAVE_ALLOCA_H -Icompat -Icompat/regex -Icompat/win32 -D
    STRIP_EXTENSION=\".exe\" -DNO_LIBGEN_H -DSNPRINTF_RETURNS_BOGUS -DNO_POLL -Icomp
    at/poll -DNO_STRCASESTR -DNO_STRLCPY -DNO_STRTOUMAX -Icompat/fnmatch -DNO_FNMATC
    H -DNO_SETENV -DNO_MKDTEMP -DNO_MKSTEMPS -DNO_UNSETENV -DUSE_WIN32_MMAP -DOBJECT
    _CREATION_MODE=1 -DNO_PREAD -DNO_MEMMEM -DRUNTIME_PREFIX -Icompat/regex -DSHELL_
    PATH='"/bin/sh"' -DDEFAULT_HELP_FORMAT='"html"' '-DGIT_HTML_PATH="share/doc/git-
    doc"' '-DGIT_MAN_PATH="share/man"' '-DGIT_INFO_PATH="share/info"' git.c
    git.c
    git.c(204) : warning C4090: 'function' : different 'const' qualifiers
    git.c(218) : warning C4090: 'function' : different 'const' qualifiers
    git.c(221) : warning C4090: 'function' : different 'const' qualifiers
    ramsay (tmp) ms $

Note that '-Icompat/poll' is passed on the command-line (it is split at -Icomp above), which comes from:

    ramsay (tmp) ms $ git grep -n 'compat/poll'
    Makefile:647:LIB_H += compat/poll/poll.h
    Makefile:1235:  COMPAT_CFLAGS += -DNO_POLL -Icompat/poll
    Makefile:1236:  COMPAT_OBJS += compat/poll/poll.o
    ramsay (tmp) ms $

I have a patch which allows me to generate the preprocessed output file and, after running it on git.c (=> git.i), I can see that msvc reads the compat/poll/poll.h file. (from line 128 of git-compat-util.h).

Are you using a MSVC "project" file? If so, is it equivalent to the Makefile? Has the "#include" behaviour changed between MSVC 2008 -> MSVC 2012?

ATB, Ramsay Jones

Previous: Sven StrickrothNext: Sven Strickroth
Message 3 of 4 in “msvc: Fix compilation errors caused by poll.h emulation”
  1. 1/5 msvc: Fix compilation errors caused by poll.h emulationRamsay Jones, Jan 31, 2013
  2. Sven StrickrothMay 9, 2013
  3. Ramsay JonesMay 9, 2013
  4. Sven StrickrothMay 9, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.