ID: 40488 Updated by: [EMAIL PROTECTED] Reported By: phil dot lello at homecall dot co dot uk -Status: Open +Status: Closed Bug Type: Compile Failure Operating System: cygwin (WinXP) PHP Version: 5.2.1 New Comment:
Patch committed, thanks. Previous Comments: ------------------------------------------------------------------------ [2007-02-15 19:00:54] phil dot lello at homecall dot co dot uk Thanks for the correction to my patch. Using the default configuration (e.g. ./configure with no options), and this patch, php builds fine, and the functionality I've needed all seems to work correctly too, although I'm only using php-cli at the moment. Running make test shows that most tests pass, and I submitted the failures to QA. A quick scan of those indicates they are down to limitations in cygwin's POSIX emulation, and not actually php bugs. FYI, the failures were: Bug #39602 (Invalid session.save_handler crashes PHP) [Zend/tests/bug39602.phpt] strftime() and gmstrftime() tests [ext/date/tests/009.phpt] Bug #27780 (strtotime(+1 xxx) returns a wrong date/time) [ext/date/tests/bug27780.phpt] Bug #32555 (strtotime("tomorrow") can return false) [ext/date/tests/bug32555.phpt] Bug #33532 (Different output for strftime() and date()) [ext/date/tests/bug33532.phpt] date_default_timezone_get() function [1] [ext/date/tests/date_default_timezone_get-1.phpt] date_default_timezone_get() function [2] [ext/date/tests/date_default_timezone_get-2.phpt] date_default_timezone_set() function [1] [ext/date/tests/date_default_timezone_set-1.phpt] SPL: SplObjectStorage serialization [ext/spl/tests/observer_003.phpt] SPL: SplObjectStorage serialization & overloading [ext/spl/tests/observer_004.phpt] SPL: SplObjectStorage serialization & visibility [ext/spl/tests/observer_005.phpt] disk_total_space() and disk_free_space() tests [ext/standard/tests/file/disk.phpt] stream_socket_client() and invalid arguments [ext/standard/tests/file/stream_002.phpt] symlink() & friends [ext/standard/tests/file/symlink.phpt] Bug #25665 (var_dump () hangs on Nan and INF) [ext/standard/tests/math/bug25665.phpt] inet_ntop() & inet_pton() tests [ext/standard/tests/network/inet.phpt] Streams Based Unix Domain Loopback test [ext/standard/tests/network/unixloop.phpt] ------------------------------------------------------------------------ [2007-02-15 12:21:27] [EMAIL PROTECTED] Btw, the first part of the patch is incorrect. #ifndef __CYGWIN__ /* !cygwin has a very broad meaning, but this part is for win32 only */ # ifdef WIN32 # define TSRM_WIN32 # include "tsrm_config.w32.h" # endif #else # include <tsrm_config.h> #endif The correct ifdef would be: #if !defined(__CYGWIN__) && defined(WIN32) # define TSRM_WIN32 # include "tsrm_config.w32.h" #else # include <tsrm_config.h> #endif ------------------------------------------------------------------------ [2007-02-15 09:52:52] [EMAIL PROTECTED] Is this the only patch required to compile PHP on Cygwin? (I suspect there might be many more, since we never actually supported Cygwin) ------------------------------------------------------------------------ [2007-02-15 00:02:38] phil dot lello at homecall dot co dot uk The attached patches appear to resolve this issue, however I don't have CVS access so will leave this as open. --- TSRM.h 2007-01-01 09:35:45.000000000 +0000 +++ TSRM.h.new 2007-02-14 23:52:36.762615800 +0000 @@ -13,16 +13,15 @@ #ifndef TSRM_H #define TSRM_H -/* #ifndef WIN32 */ -#ifndef WIN32 +#ifndef __CYGWIN__ +# ifdef WIN32 +# define TSRM_WIN32 +# include "tsrm_config.w32.h" +# endif +#else # include <tsrm_config.h> #endif -#ifdef WIN32 -# define TSRM_WIN32 -# include "tsrm_config.w32.h" -#endif - #ifdef TSRM_WIN32 # ifdef TSRM_EXPORTS # define TSRM_API __declspec(dllexport) --- tsrm_config_common.h 2005-12-20 14:24:14.000000000 +0000 +++ tsrm_config_common.h.new 2007-02-14 23:52:36.782644600 +0000 @@ -1,8 +1,10 @@ #ifndef TSRM_CONFIG_COMMON_H #define TSRM_CONFIG_COMMON_H -#if WINNT|WIN32 -# define TSRM_WIN32 +#ifndef __CYGWIN__ +# if WINNT|WIN32 +# define TSRM_WIN32 +# endif #endif #ifdef TSRM_WIN32 ------------------------------------------------------------------------ [2007-02-14 23:15:37] phil dot lello at homecall dot co dot uk Description: ------------ Build fails under cygwin due to conflicting struct redefinitions. Note that I have verified 5.2.0 builds correctly from un-modified source. This issue appears to be due to changes to #ifdef's in TSRM under 5.2.1 Reproduce code: --------------- ./configure make Expected result: ---------------- php builds Actual result: -------------- php doesn't build: $ make /bin/sh /home/Administrator/src/php-5.2.1/libtool --silent --preserve-dup-deps --mode=compile gcc -I/home/Administrator/src/php-5.2.1/ext/pdo_sqlite/sqlite/src -DPDO_SQLITE_BUNDLED=1 -DSQLITE_OMIT_CURSOR -I/home/Administrator/src/php-5.2.1/ext -Iext/pdo_sqlite/ -I/home/Administrator/src/php-5.2.1/ext/pdo_sqlite/ -DPHP_ATOM_INC -I/home/Administrator/src/php-5.2.1/include -I/home/Administrator/src/php-5.2.1/main -I/home/Administrator/src/php-5.2.1 -I/usr/include/libxml2 -I/home/Administrator/src/php-5.2.1/ext/date/lib -I/home/Administrator/src/php-5.2.1/TSRM -I/home/Administrator/src/php-5.2.1/Zend -I/usr/include -g -O2 -c /home/Administrator/src/php-5.2.1/ext/pdo_sqlite/sqlite/src/date.c -o ext/pdo_sqlite/sqlite/src/date.lo In file included from /home/Administrator/src/php-5.2.1/Zend/../TSRM/TSRM.h:23, from /home/Administrator/src/php-5.2.1/Zend/zend_alloc.h:27, from /home/Administrator/src/php-5.2.1/Zend/zend.h:224, from /home/Administrator/src/php-5.2.1/main/php.h:34, from /home/Administrator/src/php-5.2.1/main/php_reentrancy.h:24, from /home/Administrator/src/php-5.2.1/ext/pdo_sqlite/sqlite/src/date.c:57: /home/Administrator/src/php-5.2.1/Zend/../TSRM/tsrm_config.w32.h:10:20: crtdbg.h: No such file or directory In file included from /home/Administrator/src/php-5.2.1/TSRM/tsrm_virtual_cwd.h:26, from /home/Administrator/src/php-5.2.1/main/php.h:409, from /home/Administrator/src/php-5.2.1/main/php_reentrancy.h:24, from /home/Administrator/src/php-5.2.1/ext/pdo_sqlite/sqlite/src/date.c:57: /home/Administrator/src/php-5.2.1/TSRM/tsrm_config_common.h:4:16: operator '|' has no right operand In file included from /home/Administrator/src/php-5.2.1/main/php.h:409, from /home/Administrator/src/php-5.2.1/main/php_reentrancy.h:24, from /home/Administrator/src/php-5.2.1/ext/pdo_sqlite/sqlite/src/date.c:57: /home/Administrator/src/php-5.2.1/TSRM/tsrm_virtual_cwd.h:47:20: direct.h: No such file or directory In file included from /home/Administrator/src/php-5.2.1/TSRM/tsrm_virtual_cwd.h:55, from /home/Administrator/src/php-5.2.1/main/php.h:409, from /home/Administrator/src/php-5.2.1/main/php_reentrancy.h:24, from /home/Administrator/src/php-5.2.1/ext/pdo_sqlite/sqlite/src/date.c:57: /home/Administrator/src/php-5.2.1/TSRM/readdir.h:10:1: warning: "_WIN32_WINNT" redefined In file included from /usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/windows.h:48, from /home/Administrator/src/php-5.2.1/ext/pdo_sqlite/sqlite/src/os.h:55, from /home/Administrator/src/php-5.2.1/ext/pdo_sqlite/sqlite/src/date.c:51: /usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/windef.h:20:1: warning: this is the location of the previous definition In file included from /home/Administrator/src/php-5.2.1/TSRM/tsrm_virtual_cwd.h:55, from /home/Administrator/src/php-5.2.1/main/php.h:409, from /home/Administrator/src/php-5.2.1/main/php_reentrancy.h:24, from /home/Administrator/src/php-5.2.1/ext/pdo_sqlite/sqlite/src/date.c:57: /home/Administrator/src/php-5.2.1/TSRM/readdir.h:26: error: `_MAX_FNAME' undeclared here (not in a function) In file included from /home/Administrator/src/php-5.2.1/main/php.h:409, from /home/Administrator/src/php-5.2.1/main/php_reentrancy.h:24, from /home/Administrator/src/php-5.2.1/ext/pdo_sqlite/sqlite/src/date.c:57: /home/Administrator/src/php-5.2.1/TSRM/tsrm_virtual_cwd.h:58: error: conflicting types for 'mode_t' /usr/include/cygwin/types.h:205: error: previous declaration of 'mode_t' was here In file included from /usr/include/dirent.h:6, from /home/Administrator/src/php-5.2.1/main/php_reentrancy.h:28, from /home/Administrator/src/php-5.2.1/ext/pdo_sqlite/sqlite/src/date.c:57: /usr/include/sys/dirent.h:21: error: redefinition of `struct dirent' /usr/include/sys/dirent.h:55: error: conflicting types for 'DIR' /home/Administrator/src/php-5.2.1/TSRM/readdir.h:38: error: previous declaration of 'DIR' was here /usr/include/sys/dirent.h:58: error: conflicting types for 'opendir' /home/Administrator/src/php-5.2.1/TSRM/readdir.h:41: error: previous declaration of 'opendir' was here /usr/include/sys/dirent.h:58: error: conflicting types for 'opendir' /home/Administrator/src/php-5.2.1/TSRM/readdir.h:41: error: previous declaration of 'opendir' was here /usr/include/sys/dirent.h:59: error: conflicting types for 'readdir' /home/Administrator/src/php-5.2.1/TSRM/readdir.h:42: error: previous declaration of 'readdir' was here /usr/include/sys/dirent.h:59: error: conflicting types for 'readdir' /home/Administrator/src/php-5.2.1/TSRM/readdir.h:42: error: previous declaration of 'readdir' was here /usr/include/sys/dirent.h:60: error: conflicting types for 'readdir_r' /home/Administrator/src/php-5.2.1/TSRM/readdir.h:43: error: previous declaration of 'readdir_r' was here /usr/include/sys/dirent.h:60: error: conflicting types for 'readdir_r' /home/Administrator/src/php-5.2.1/TSRM/readdir.h:43: error: previous declaration of 'readdir_r' was here /usr/include/sys/dirent.h:61: error: conflicting types for 'rewinddir' /home/Administrator/src/php-5.2.1/TSRM/readdir.h:45: error: previous declaration of 'rewinddir' was here /usr/include/sys/dirent.h:61: error: conflicting types for 'rewinddir' /home/Administrator/src/php-5.2.1/TSRM/readdir.h:45: error: previous declaration of 'rewinddir' was here /usr/include/sys/dirent.h:62: error: conflicting types for 'closedir' /home/Administrator/src/php-5.2.1/TSRM/readdir.h:44: error: previous declaration of 'closedir' was here /usr/include/sys/dirent.h:62: error: conflicting types for 'closedir' /home/Administrator/src/php-5.2.1/TSRM/readdir.h:44: error: previous declaration of 'closedir' was here make: *** [ext/pdo_sqlite/sqlite/src/date.lo] Error 1 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=40488&edit=1