When the NO_MMAP build variable is set, which is the case by default on cygwin, the msvc linker complains: error LNK2001: unresolved external symbol _getpagesize The mingw build has a version of the getpagesize() function defined in the libgcc.a library. In addition, this function is replaced, if USE_WIN32_MMAP is defined, by a version more suitable for use with the native mmap. The msvc libraries do not define any getpagesize() function, so we move the mingw_getpagesize() implementation from the conditionally built win32mmap.c file to mingw.c, which will always be included in the MSVC build. Signed-off-by: Ramsay Jones <ramsay@xxxxxxxxxxxxxxxxxxx> --- This alone won't make the MSVC build work on cygwin; I have to $ make MSVC=1 NEEDS_LIBICONV= otherwise the linker complains about the absence of the iconv.lib. (I have downloaded the win32 version of the library, but I haven't got around to installing it! see http://gnuwin32.sourceforge.net/ packages/libiconv.htm) The real problem, of course, is that the cygwin and MSVC configuration sections are not mutually exclusive. (see patch 3/4) ATB, Ramsay Jones compat/mingw.c | 12 ++++++++++++ compat/mingw.h | 2 +- compat/win32mmap.c | 12 ------------ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/compat/mingw.c b/compat/mingw.c index 6b5b5b2..15fe33e 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -1000,6 +1000,18 @@ repeat: return -1; } +/* + * Note that this doesn't return the actual pagesize, but + * the allocation granularity. If future Windows specific git code + * needs the real getpagesize function, we need to find another solution. + */ +int mingw_getpagesize(void) +{ + SYSTEM_INFO si; + GetSystemInfo(&si); + return si.dwAllocationGranularity; +} + struct passwd *getpwuid(int uid) { static char user_name[100]; diff --git a/compat/mingw.h b/compat/mingw.h index 5b5258b..26c4027 100644 --- a/compat/mingw.h +++ b/compat/mingw.h @@ -166,7 +166,7 @@ int mingw_connect(int sockfd, struct sockaddr *sa, size_t sz); int mingw_rename(const char*, const char*); #define rename mingw_rename -#ifdef USE_WIN32_MMAP +#if defined(USE_WIN32_MMAP) || defined(_MSC_VER) int mingw_getpagesize(void); #define getpagesize mingw_getpagesize #endif diff --git a/compat/win32mmap.c b/compat/win32mmap.c index 779d796..1c5a149 100644 --- a/compat/win32mmap.c +++ b/compat/win32mmap.c @@ -1,17 +1,5 @@ #include "../git-compat-util.h" -/* - * Note that this doesn't return the actual pagesize, but - * the allocation granularity. If future Windows specific git code - * needs the real getpagesize function, we need to find another solution. - */ -int mingw_getpagesize(void) -{ - SYSTEM_INFO si; - GetSystemInfo(&si); - return si.dwAllocationGranularity; -} - void *git_mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset) { HANDLE hmap; -- 1.6.5 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html