php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #53348 building with apxs can fail when compiler doesn't match apr library
Submitted: 2010-11-19 00:25 UTC Modified: 2010-12-20 13:00 UTC
From: mike at harschsystems dot com Assigned:
Status: Not a bug Package: Compile Failure
PHP Version: trunk-SVN-2010-11-18 (SVN) OS: Solaris and others
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: mike at harschsystems dot com
New email:
PHP Version: OS:

 

 [2010-11-19 00:25 UTC] mike at harschsystems dot com
Description:
------------
The build system uses the apr-1-config command to retrieve flags from the apr 
library to use for building shared object targets (e.g. 
sapi/apache2handler/config.m4).  If however, the compiler used to build the apr 
library was different (and supports different flags) than your current compiler, 
you may end up with incompatible compiler flags in your Makefile for these 
targets.

This problem manifests itself in Solaris when trying to build php using gcc, 
while trying to use the binary version of apache shipped with your distribution 
(which was compiled with sun's forte compiler 'cc').  The first symptom from the 
user's perspective is the following compile failure:

mkdir sapi/apache2handler/.libs
 cc -DSSL_EXPERIMENTAL -DSSL_ENGINE -I/usr/apache2/2.2/include -DSOLARIS2=11 -
D_POSIX_PTHREAD_SEMANTICS -mt -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -
I/usr/apr/1.3/include -I/usr/apr-util/1.3/include -
I/wd/builds/sfw/proto/root_i386/usr/include -Isapi/apache2handler/ -
I/var/tmp/php-trunk/sapi/apache2handler/ -DPHP_ATOM_INC -I/var/tmp/php-
trunk/include -I/var/tmp/php-trunk/main -I/var/tmp/php-trunk -I/var/tmp/php-
trunk/ext/date/lib -I/var/tmp/php-trunk/ext/ereg/regex -I/usr/include/libxml2 -
I/usr/X11/include -I/usr/include/freetype2 -I/var/tmp/php-
trunk/ext/mbstring/oniguruma -I/var/tmp/php-trunk/ext/mbstring/libmbfl -
I/var/tmp/php-trunk/ext/mbstring/libmbfl/mbfl -I/var/tmp/php-
trunk/ext/sqlite3/libsqlite -I/usr/include/tidy -I/var/tmp/php-trunk/TSRM -
I/var/tmp/php-trunk/Zend -D_POSIX_PTHREAD_SEMANTICS -I/usr/include -g -O0 -Wall 
-c /var/tmp/php-trunk/sapi/apache2handler/mod_php5.c  -fPIC -DPIC -o 
sapi/apache2handler/.libs/mod_php5.o
cc1: error: invalid option `t'
make: *** [sapi/apache2handler/mod_php5.lo] Error 1

The error is coming from the "-mt" flag, which gcc doesn't understand.  It turns 
out, "-mt" is a valid sun forte 'cc' flag.  Where did this come from?  Looking 
at sapi/apache2handler/config.m4, we see the build system asking apr for cpp 
flags like this:

$ apxs -q APR_CONFIG
/usr/apr/1.3/bin/apr-1-config
$ apr-1-config --cppflags --includes
 -DSOLARIS2=11 -D_POSIX_PTHREAD_SEMANTICS -mt -D_LARGEFILE_SOURCE -
D_FILE_OFFSET_BITS=64 -I/usr/apr/1.3/include


Asking apr about compiler it's built with shows the problem (it's not gcc):

$ apr-1-config --cc
cc -m32

In this case, some googling revealed that "-mt" is equivalent to "-D_REENTRANT", 
so manually replacing these flags in the Makefile works around the problem.

It would be nice if the build system did a check to see if `APR_CONFIG --cc` 
matches the current compiler - and warns you if there is a mismatch.  Also, it 
would be nice to have an override switch to specify the flags to use manually, 
rather than deriving them from apr.


Test script:
---------------
This problem is reproducible on solaris when trying to compile php with gcc, and using --with-apxs2 pointing to an apache binary built with sun's cc rather than gcc (as is the case if using the ips packages available for opensolaris, etc).


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-11-23 22:23 UTC] srinatar@php.net
-Status: Open +Status: Feedback
 [2010-11-23 22:23 UTC] srinatar@php.net
this should be a bug within solaris and not within php because solaris build 
process should not expose the compiler flags within apxs. 

please raise a bug within solaris. right way place to do this would be 
defect.opensolaris.org

would recommend closing this bug as not a valid bug.
 [2010-12-20 13:00 UTC] jani@php.net
-Package: Tidy +Package: Compile Failure
 [2010-12-20 13:00 UTC] jani@php.net
-Status: Feedback +Status: Bogus
 [2010-12-20 13:00 UTC] jani@php.net
See above.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 07 09:01:27 2024 UTC