Bug #75412 [Com]: Build with Mingw-w64

From: Date: Mon, 23 Oct 2017 01:04:47 +0000
Subject: Bug #75412 [Com]: Build with Mingw-w64
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-211843@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=75412&edit=1 ID: 75412 Comment by: svnpenn at gmail dot com Reported by: svnpenn at gmail dot com Summary: Build with Mingw-w64 Status: Analyzed Type: Bug Package: *General Issues Operating System: Windows PHP Version: 7.1.10 Block user comment: N Private report: N New Comment: After some closer looking, "u_char" is actually defined by Mingw-w64 "_bsd_types.h" [1]: typedef unsigned char u_char; which is in turn included by "winsock2.h" [2]: #include <_bsd_types.h> we know this to be true because PHP is already doing it [3]: #include <winsock2.h> /* Includes definition for u_char */ So we can bypass this particular error by including "winsock2.h" in the approriate place. However as said before this is not the only issue preventing Mingw-w64 build. Here is another example: ext/date/php_date.c:2615:66: error: unknown type name ‘suseconds_t’ this is caused by not defining "PHP_WIN32" [4]. However, even if you define it, it still fails: win32/time.h:20:8: error: redefinition of ‘struct timezone’ So in this case either "win32/time.h" need to be modified to support both Visual Studio and Mingw-w64, or perhaps a "mingw/time.h" needs to be introduced. Again, this is only one problem currently with trying a Mingw-w64 build. [1] http://github.com/mirror/mingw-w64/blob/8bcc708/mingw-w64-headers/crt/_bsd_types.h [2] http://github.com/mirror/mingw-w64/blob/8bcc708/mingw-w64-headers/include/winsock2.h [3] http://github.com/php/php-src/blob/e823770/main/mergesort.c#L66 [4] http://github.com/php/php-src/blob/e823770/ext/date/php_date.c#L33-L37 Previous Comments: ------------------------------------------------------------------------ [2017-10-21 19:17:52] svnpenn at gmail dot com @kalle it is not just u_char, several issues - but that is one ------------------------------------------------------------------------ [2017-10-21 18:30:09] kalle@php.net Hi @svnpenn I think the main reason for this not being supported is that no one on the development team have ever done a build like that or there have been any past requests for it. If its only u_char thats the issue, then perhaps the define can be moved to php.h (in php-src/main), where a lot of cross OS compatibility macros and types also are defined. ------------------------------------------------------------------------ [2017-10-21 15:28:21] svnpenn at gmail dot com Description: ------------ Currently you can build PHP with Linux, Cygwin and Visual Studio. However Mingw-w64 [1] is currently not supported. It would be invoked using: ./configure --host x86_64-w64-mingw32 or similar. You can tell for sure that is it not currently supported by looking at "u_char". Mingw-w64 does not define this, same as Visual Studio. PHP accounts for this with "win32/php_stdint.h" [2]: typedef unsigned __int8 u_char; However this same file cannot be used with Mingw-w64 [3]: #error "Use this header only with Microsoft Visual C++ compilers!" [1] http://mingw-w64.org [2] http://github.com/php/php-src/blob/f56ceb7/win32/php_stdint.h#L264 [3] http://github.com/php/php-src/blob/f56ceb7/win32/php_stdint.h#L33 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=75412&edit=1

« previous php.bugs (#211843) next »