If I instead apply the following patch to zend.h:
Index: zend.h
===================================================================
RCS file: /repository/ZendEngine2/zend.h,v
retrieving revision 1.293.2.11.2.9.2.9
diff -u -p -r1.293.2.11.2.9.2.9 zend.h
--- zend.h 2 Nov 2007 19:40:37 -0000 1.293.2.11.2.9.2.9
+++ zend.h 8 Nov 2007 09:00:25 -0000
@@ -331,6 +331,10 @@ struct _zval_struct {
#define always_inline inline
#endif
+static __attribute__((always_inline)) int example(void) {
+ return 0;
+}
+
static always_inline zend_uint zval_refcount_p(zval* pz) {
return pz->refcount__gc;
}
I get this error when compiling PHP:
/bin/sh /Users/wez/code/php/php5.3/libtool --silent --preserve-dup-
deps --mode=compile /opt/local/bin/ccache cc -Iext/standard/ -I/Users/
wez/code/php/php5.3/ext/standard/ -DPHP_ATOM_INC -I/Users/wez/code/php/
php5.3/include -I/Users/wez/code/php/php5.3/main -I/Users/wez/code/php/
php5.3 -I/Users/wez/code/php/php5.3/ext/ereg/regex -I/usr/include/
libxml2 -I/Users/wez/code/php/php5.3/ext/date/lib -I/Users/wez/code/
php/php5.3/TSRM -I/Users/wez/code/php/php5.3/Zend -no-cpp-precomp -I/
usr/include -g -O2 -c /Users/wez/code/php/php5.3/ext/standard/info.c -
o ext/standard/info.lo
In file included from /Users/wez/code/php/php5.3/main/php.h:35,
from /Users/wez/code/php/php5.3/ext/standard/info.c:
24:
/Users/wez/code/php/php5.3/Zend/zend.h:334: error: syntax error before
'__attribute__'
/Users/wez/code/php/php5.3/Zend/zend.h:334: error: syntax error before
')' token
make: *** [ext/standard/info.lo] Error 1
If I move the example function above the problematic define, the
compile error goes away. In other words, that define is breaking the
always_inline attribute by redefining it.
My compiler:
% gcc -v
Using built-in specs.
Target: i686-apple-darwin9
Configured with: /var/tmp/gcc/gcc-5465~16/src/configure --disable-
checking -enable-werror --prefix=/usr --mandir=/share/man --enable-
languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/
$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/
lib --build=i686-apple-darwin9 --with-arch=apple --with-tune=generic --
host=i686-apple-darwin9 --target=i686-apple-darwin9
Thread model: posix
gcc version 4.0.1 (Apple Inc. build 5465)
--Wez
On Nov 8, 2007, at 3:11 AM, Dmitry Stogov wrote:
Hi Wez,
Could you please give me more info about the issue.
What is your GCC version?
Does it related to GCC version?
What error do you have?
Is this problem described somewhere?
Thanks. Dmitry.
-----Original Message-----
From: Wez Furlong [mailto:[EMAIL PROTECTED]
Sent: Wednesday, November 07, 2007 6:00 PM
To: Dmitry Stogov
Cc: internals@lists.php.net
Subject: Re: [PHP-DEV] zend.h breaks system headers on OSX in PHP 5.3
This is not an OSX specific issue, it's a symbol leakage issue that
can break potentially any library that uses that feature of gcc. I
just happened to notice it on OSX.
Better to rename our symbols to avoid conflict.
--Wez.
On Nov 7, 2007, at 2:48 AM, Dmitry Stogov wrote:
May be it is better to just define always_inline as inline on OSX.
Something like:
#if defined(__GNUC__) && !defined(OSX)
...
Thanks. Dmitry.
-----Original Message-----
From: Wez Furlong [mailto:[EMAIL PROTECTED]
Sent: Wednesday, November 07, 2007 7:43 AM
To: internals@lists.php.net
Subject: [PHP-DEV] zend.h breaks system headers on OSX in PHP 5.3
The system headers on OSX use __attribute__((always_inline)) and
zend.h defines always_inline to something else, breaking the build
when the compiler tries to resolve that attribute name.
A solution is to prefix the defines used in the engine
with zend or
ZEND or other similar namespacing token, which I thought was our
standard practice, considering everything else in there
has a prefix.
If there have been other similar changes elsewhere, they
should also
be fixed
--Wez.
Index: zend.h
===================================================================
RCS file: /repository/ZendEngine2/zend.h,v
retrieving revision 1.293.2.11.2.9.2.9
diff -u -p -r1.293.2.11.2.9.2.9 zend.h
--- zend.h 2 Nov 2007 19:40:37 -0000 1.293.2.11.2.9.2.9
+++ zend.h 7 Nov 2007 04:36:01 -0000
@@ -324,42 +324,42 @@ struct _zval_struct {
#define Z_SET_ISREF_TO(z, isref) Z_SET_ISREF_TO_P(&(z), isref)
#if defined(__GNUC__)
-#define always_inline inline __attribute__((always_inline))
+#define zend_always_inline inline __attribute__((always_inline))
#elif defined(_MSC_VER)
-#define always_inline __forceinline
+#define zend_always_inline __forceinline
#else
-#define always_inline inline
+#define zend_always_inline inline
#endif
-static always_inline zend_uint zval_refcount_p(zval* pz) {
+static zend_always_inline zend_uint zval_refcount_p(zval* pz) {
return pz->refcount__gc;
}
-static always_inline zend_uint zval_set_refcount_p(zval* pz,
zend_uint rc) {
+static zend_always_inline zend_uint zval_set_refcount_p(zval* pz,
zend_uint rc) {
return pz->refcount__gc = rc;
}
-static always_inline zend_uint zval_addref_p(zval* pz) {
+static zend_always_inline zend_uint zval_addref_p(zval* pz) {
return ++pz->refcount__gc;
}
-static always_inline zend_uint zval_delref_p(zval* pz) {
+static zend_always_inline zend_uint zval_delref_p(zval* pz) {
return --pz->refcount__gc;
}
-static always_inline zend_bool zval_isref_p(zval* pz) {
+static zend_always_inline zend_bool zval_isref_p(zval* pz) {
return pz->is_ref__gc;
}
-static always_inline zend_bool zval_set_isref_p(zval* pz) {
+static zend_always_inline zend_bool zval_set_isref_p(zval* pz) {
return pz->is_ref__gc = 1;
}
-static always_inline zend_bool zval_unset_isref_p(zval* pz) {
+static zend_always_inline zend_bool zval_unset_isref_p(zval* pz) {
return pz->is_ref__gc = 0;
}
-static always_inline zend_bool zval_set_isref_to_p(zval* pz,
zend_bool isref) {
+static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz,
zend_bool isref) {
return pz->is_ref__gc = isref;
}
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php