Bug #66103 [Com]: Cross-compiling not supported

From: Date: Sun, 21 Aug 2016 17:54:10 +0000
Subject: Bug #66103 [Com]: Cross-compiling not supported
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-203457@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=66103&edit=1

 ID:                 66103
 Comment by:         alt dot f2-5ok1zywx at yopmail dot com
 Reported by:        rmarku at gmail dot com
 Summary:            Cross-compiling not supported
 Status:             Open
 Type:               Bug
 Package:            opcache
 Operating System:   Linux
 PHP Version:        5.5.6
 Block user comment: N
 Private report:     N

 New Comment:

all of these cross-compilation problems could easily be solved if php would use the cache variables
feature for these variables as well so user can easily override the test from the commandline.
example:

./configure ac_cv_crypt_SHA512=yes ac_cv_linux_lock=yes

however due to lack of it, you need to either patch the configure script, or the configure.ac and
rerun all the autoreconf stuff which is highly error prone due to all the involved m4 macros and
different tool versions.

note that the cache variable is used for the above SHA512 crypt check

$as_echo_n "checking for SHA512 crypt... " >&6; }
if ${ac_cv_crypt_sha512+:} false; then :
  $as_echo_n "(cached) " >&6                                                    
else

if test "$cross_compiling" = yes; then :                                        

  ac_cv_crypt_sha512=no

else
  cat confdefs.h - <<_ACEOF >conftest.$ac_ext                                   


but not for this check, the one for strcasestr and probably others.
for comparison:

  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strcasestr" >&5         
$as_echo_n "checking for strcasestr... " >&6; }                                 
  if test "$cross_compiling" = yes; then :                                      
  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5       
 
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}                                
 
as_fn_error $? "cannot run test program while cross compiling                   
See \`config.log' for more details" "$LINENO" 5; }                              
else                                                                            
  cat confdefs.h - <<_ACEOF >conftest.$ac_ext


Previous Comments:
------------------------------------------------------------------------
[2016-02-05 16:11:11] ttilley at sonusnet dot com

Fails with PHP 7.0.2/OpenWRT as well, and disabling opcache isn't an acceptable option as the
enhanced opcache performance is a major reason to want PHP 7.

Obviously the test program can't be run in a cross-compile - the configure script should be
modified to take flock_type as an input variable to support cross-compiling. If the input variable
is set then don't bother with the test program.

------------------------------------------------------------------------
[2014-12-21 18:22:42] avarsanov at yahoo dot com

"checking "whether flock struct is linux ordered"... "no"
checking "whether flock struct is BSD ordered"... "no"
configure: error: Don't know how to define struct flock on this system, set
--enable-opcache=no"

I had the same error, while compiling PHP (5.6.4, but that does not matter, because I tried als PHP
5.6.3 and was reproducable) on Debian GNU/Linux. I saw that problem when I forgot to set
LD_LIBRARY_PATH environment variable.

So doing it like that solved my problem:

$ export LD_LIBRARY_PATH=/usr/local/mysql/lib
$ ./configure --enable-fpm --with-mcrypt --with-zlib --with-curl --disable-debug --disable-rpath
--enable-inline-optimization --with-bz2 --enable-sockets --enable-zip --with-fpm-user=www-data
--with-fpm-group=www-data --with-mysql=/usr/local/mysql/
$ make
$ make test
# export LD_LIBRARY_PATH=/usr/local/mysql/lib
# make install

------------------------------------------------------------------------
[2014-08-09 23:09:19] bos at je-eigen-domein dot nl

Same problem.

In ZendAccelerator.h it looks for the presence of other defines such as __linux__ first to determine
flock order, in favor of the results of the test (HAVE_FLOCK_LINUX)
So why is not being able to run the test fatal?


==
# if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || (defined(__APPLE__) &&
defined(__MACH__)/* Darwin */) || defined(__OpenBSD__) || defined(__NetBSD__)
#  define FLOCK_STRUCTURE(name, type, whence, start, len) \
		struct flock name = {start, len, -1, type, whence}
# elif defined(__svr4__)
#  define FLOCK_STRUCTURE(name, type, whence, start, len) \
		struct flock name = {type, whence, start, len}
# elif defined(__linux__) || defined(__hpux) || defined(__GNU__)
#  define FLOCK_STRUCTURE(name, type, whence, start, len) \
		struct flock name = {type, whence, start, len, 0}
# elif defined(_AIX)
#  if defined(_LARGE_FILES) || defined(__64BIT__)
#   define FLOCK_STRUCTURE(name, type, whence, start, len) \
		struct flock name = {type, whence, 0, 0, 0, start, len }
#  else
#   define FLOCK_STRUCTURE(name, type, whence, start, len) \
		struct flock name = {type, whence, start, len}
#  endif
# elif defined(HAVE_FLOCK_BSD)
#  define FLOCK_STRUCTURE(name, type, whence, start, len) \
		struct flock name = {start, len, -1, type, whence}
# elif defined(HAVE_FLOCK_LINUX)
#  define FLOCK_STRUCTURE(name, type, whence, start, len) \
		struct flock name = {type, whence, start, len}
# else
#  error "Don't know how to define struct flock"
# endif
#endif
==

------------------------------------------------------------------------
[2013-12-09 15:38:31] hdboeve at boevewebdevelopment dot nl

Same error, on OS X Mavericks:

checking for sysvipc shared memory support... no
checking for mmap() using MAP_ANON shared memory support... no
checking for mmap() using /dev/zero shared memory support... no
checking for mmap() using shm_open() shared memory support... no
checking for mmap() using regular file shared memory support... no
checking "whether flock struct is linux ordered"... "no"
checking "whether flock struct is BSD ordered"... "no"
configure: error: Don't know how to define struct flock on this system, set --enable-opcache=no

------------------------------------------------------------------------
[2013-11-15 20:13:32] rmarku at gmail dot com

Description:
------------
Cross-compiling not supported

I'm trying to cross-compile PHP 5.5.6 with OpenWRT buildroot. If I disable OPcache, everything
goes well.
with OPcache enabled, configure hangs with this error.

...
checking for mcrypt_module_open in -lmcrypt... yes
checking for MSSQL support via FreeTDS... no
checking for MySQL support... yes, shared
checking for specified location of the MySQL UNIX socket... no
checking for mysql_close in -lmysqlclient... yes
checking for MySQL UNIX socket location... no
checking for MySQLi support... yes, shared
checking whether to enable embedded MySQLi support... no
checking for mysql_set_server_option in -lmysqlclient... yes
checking for mysql_set_character_set in -lmysqlclient... yes
checking for mysql_stmt_next_result in -lmysqlclient... no
checking for Oracle Database OCI8 support... no
checking whether to enable Zend OPcache support... yes
checking for mprotect... yes
checking for sysvipc shared memory support... no
checking for mmap() using MAP_ANON shared memory support... no
checking for mmap() using /dev/zero shared memory support... no
checking for mmap() using shm_open() shared memory support... no
checking for mmap() using regular file shared memory support... no
checking "whether flock struct is linux ordered"... configure: error: in
`/openwrt/trunk/build_dir/target-mips_34kc_uClibc-0.9.33.2/php-5.5.6':
configure: error: cannot run test program while cross compiling
See `config.log' for more details




------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=66103&edit=1


Thread (8 messages)

« previous php.bugs (#203457) next »