Bug #75412 [Com]: Build with Mingw-w64
| From: | svnpenn at gmail dot com | 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