Message ID | 1351599635-21356-1-git-send-email-gustavo@zacarias.com.ar |
---|---|
State | Accepted |
Commit | 45072fc407e6d826f2bee56898e2139faf07b153 |
Headers | show |
Dear Gustavo Zacarias, On Tue, 30 Oct 2012 09:20:34 -0300, Gustavo Zacarias wrote: > Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> > --- > package/php/Config.in | 4 ++ > package/php/php-force-cross-compile.patch | 50 ----------------------------- So you are sure this patch is no longer needed? See the explanation below: the problem can only be triggered if the build machine has the same architecture as the target machine. > -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. Thanks, Thomas
On 10/30/12 10:01, Thomas Petazzoni wrote: > Dear Gustavo Zacarias, > > On Tue, 30 Oct 2012 09:20:34 -0300, Gustavo Zacarias wrote: >> Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> >> --- >> package/php/Config.in | 4 ++ >> package/php/php-force-cross-compile.patch | 50 ----------------------------- > > So you are sure this patch is no longer needed? See the explanation > below: the problem can only be triggered if the build machine has the > same architecture as the target machine. Oh yes, i've tested x86_64->x86_64 besides a "cross" target. They've dropped all of the cross macros, guess they switched everything to AC_TRY_LINK and other similar macros. It's kind of amazing they've fixed this upstream right? :) Regards.
>>>>> "Gustavo" == Gustavo Zacarias <gustavo@zacarias.com.ar> writes:
Gustavo> Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
Committed both, thanks.
On Tue, 30 Oct 2012 13:14:28 -0300, Gustavo Zacarias wrote: > Oh yes, i've tested x86_64->x86_64 besides a "cross" target. > They've dropped all of the cross macros, guess they switched everything > to AC_TRY_LINK and other similar macros. Great. > It's kind of amazing they've fixed this upstream right? :) Incredible, indeed :) Thanks, Thomas
diff --git a/package/php/Config.in b/package/php/Config.in index c8c100c..6d15da5 100644 --- a/package/php/Config.in +++ b/package/php/Config.in @@ -25,6 +25,8 @@ choice config BR2_PACKAGE_PHP_SAPI_CGI bool "CGI" + # CGI uses fork() + depends on BR2_USE_MMU select BR2_PACKAGE_PHP_CGI help Common Gateway Interface @@ -37,6 +39,8 @@ config BR2_PACKAGE_PHP_SAPI_CLI config BR2_PACKAGE_PHP_SAPI_CLI_CGI bool "CGI and CLI" + # CGI uses fork() + depends on BR2_USE_MMU select BR2_PACKAGE_PHP_CLI select BR2_PACKAGE_PHP_CGI help diff --git a/package/php/php-force-cross-compile.patch b/package/php/php-force-cross-compile.patch deleted file mode 100644 index f14b477..0000000 --- a/package/php/php-force-cross-compile.patch +++ /dev/null @@ -1,50 +0,0 @@ -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 diff --git a/package/php/php.mk b/package/php/php.mk index 2f8e99e..6ac9f29 100644 --- a/package/php/php.mk +++ b/package/php/php.mk @@ -4,7 +4,7 @@ # ############################################################# -PHP_VERSION = 5.3.16 +PHP_VERSION = 5.3.18 PHP_SOURCE = php-$(PHP_VERSION).tar.bz2 PHP_SITE = http://www.php.net/distributions PHP_INSTALL_STAGING = YES
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> --- package/php/Config.in | 4 ++ package/php/php-force-cross-compile.patch | 50 ----------------------------- package/php/php.mk | 2 +- 3 files changed, 5 insertions(+), 51 deletions(-) delete mode 100644 package/php/php-force-cross-compile.patch