aboutsummaryrefslogtreecommitdiffstats
path: root/package/php/php-force-cross-compile.patch
blob: f14b477381e9f0a49a9251641795c07f72adb0ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
php: force cross-compilation

In its configure script, PHP detects whether we're cross-compiling or
not, by compiling and running a simple C program. Depending on whether
cross-compiling has been detected or not, then PHP enables or disables
the AC_TRY_RUN tests (which verify the availability of something by
*executing* a program, which, by definition, cannot work in
cross-compilation mode).

This works just fine when the target architecture is ARM or PowerPC
and the build machine is x86 or x86_64. Unfortunately, when the target
architecture is x86_64 and the build machine is also x86_64, the
cross-compilation mode detection concludes that we are not
cross-compiling, because it succeeds in running this small program.

However, while it succeeds in running this basic small program, some
other programs executed later through AC_TRY_RUN tests do not work,
because they have target library dependencies that are not available
on the build machine. For example, the libxml2 test fails to *run*
because libxml2 is not available on the build machine, only in the
target/staging directories. So trying to run a program linked against
libxml2, on the build machine, simply doesn't make sense.

We fix this problem by just forcing PHP to think that we're
cross-compiling (which is always the case with Buildroot, as we're at
the moment never building PHP for the host). Unfortunately, the
configure.in file dates back from the autoconf 2.13 era, so the
configure script does not understand the ac_cv_prog_cc_cross cache
variable, and we cannot easily regenerate the configure script using
our package autoconf version. The easiest solution is therefore to
simply patch the configure script to make the cross-compilation test
fail: we replace the execution of the program by a call to false,
which always fail, leading the configure script to understand that we
*are* cross-compiling.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

Index: b/configure
===================================================================
--- a/configure
+++ b/configure
@@ -2387,7 +2387,7 @@
 if { (eval echo configure:2388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
-  if (./conftest; exit) 2>/dev/null; then
+  if (false; exit) 2>/dev/null; then
     ac_cv_prog_cc_cross=no
   else
     ac_cv_prog_cc_cross=yes